From 2cd14b1696395f52edb06fb0b50996cd05b70035 Mon Sep 17 00:00:00 2001 From: Ravi Tharuma <25951435+RaviTharuma@users.noreply.github.com> Date: Fri, 21 Aug 2026 03:15:48 +0200 Subject: [PATCH] fix(providers): rename Freepik slug to Magnific and validate Magnific API keys (#10594) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Canonical provider id renamed freepik → magnific (Magnific Mystic official API), with a permanent redirect + runtime alias so old freepik/ traffic and /dashboard/providers/freepik URLs keep working. Existing provider=freepik connection rows are rewritten to magnific by migration 160. Closes #10604. Validated in an isolated worktree boarded onto origin/release/v3.8.50 (0 conflicts, 138 files): - Focused suite: 54/54 tests pass (magnific-image-handler, provider-validation-image-only, provider-alias-uniqueness, redirects-cli-renames). - check-file-size, check-changelog-integrity: OK. - typecheck:core: clean. - check-complexity / check-cognitive-complexity: OK, both under baseline. Co-authored-by: RaviTharuma --- .env.example | 26 ++ AGENTS.md | 2 +- README.md | 6 +- .../fixes/10594-freepik-magnific-api.md | 1 + .../quality/open-sse-typecheck-baseline.json | 18 -- docs/diagrams/cli-terminal.svg | 10 +- docs/diagrams/comparison-table.svg | 2 +- docs/diagrams/promise-pillars.svg | 6 +- docs/diagrams/readme-hero.svg | 4 +- docs/guides/MANAGEMENT-AUTH.md | 8 +- docs/i18n/ar/llm.txt | 12 +- docs/i18n/az/llm.txt | 12 +- docs/i18n/bg/llm.txt | 12 +- docs/i18n/bn/llm.txt | 12 +- docs/i18n/cs/llm.txt | 12 +- docs/i18n/da/llm.txt | 12 +- docs/i18n/de/llm.txt | 12 +- docs/i18n/es/llm.txt | 12 +- docs/i18n/fa/llm.txt | 12 +- docs/i18n/fi/llm.txt | 12 +- docs/i18n/fr/llm.txt | 12 +- docs/i18n/gu/llm.txt | 12 +- docs/i18n/he/llm.txt | 12 +- docs/i18n/hi/llm.txt | 12 +- docs/i18n/hu/llm.txt | 12 +- docs/i18n/id/llm.txt | 12 +- docs/i18n/in/llm.txt | 12 +- docs/i18n/it/llm.txt | 12 +- docs/i18n/ja/llm.txt | 12 +- docs/i18n/ko/llm.txt | 12 +- docs/i18n/mr/llm.txt | 12 +- docs/i18n/ms/llm.txt | 12 +- docs/i18n/nl/llm.txt | 12 +- docs/i18n/no/llm.txt | 12 +- docs/i18n/phi/llm.txt | 12 +- docs/i18n/pl/llm.txt | 12 +- docs/i18n/pt-BR/llm.txt | 12 +- docs/i18n/pt/llm.txt | 12 +- docs/i18n/ro/llm.txt | 12 +- docs/i18n/ru/llm.txt | 12 +- docs/i18n/sk/llm.txt | 12 +- docs/i18n/sv/llm.txt | 12 +- docs/i18n/sw/llm.txt | 12 +- docs/i18n/ta/llm.txt | 12 +- docs/i18n/te/llm.txt | 12 +- docs/i18n/th/llm.txt | 12 +- docs/i18n/tr/llm.txt | 12 +- docs/i18n/uk-UA/llm.txt | 12 +- docs/i18n/ur/llm.txt | 12 +- docs/i18n/vi/llm.txt | 12 +- docs/i18n/zh-CN/llm.txt | 12 +- docs/i18n/zh-TW/llm.txt | 12 +- docs/reference/ENVIRONMENT.md | 6 + llm.txt | 4 +- next.config.mjs | 5 + open-sse/config/imageRegistry.ts | 18 +- .../providers/registry/freepik/index.ts | 26 -- .../providers/registry/magnific/index.ts | 26 ++ open-sse/executors/copilot-m365-connection.ts | 3 +- open-sse/executors/copilot-m365-web.ts | 7 +- open-sse/executors/index.ts | 3 +- open-sse/handlers/imageGeneration.ts | 6 +- .../providers/{freepik.ts => magnific.ts} | 94 ++++--- .../__tests__/glmCodingProviderConfig.test.ts | 3 + open-sse/mcp-server/fetchTimeout.ts | 22 +- open-sse/translator/helpers/toolCallShim.ts | 14 +- .../translator/response/claude-to-openai.ts | 34 +++ open-sse/utils/publicCreds.ts | 6 + open-sse/utils/usageTracking.ts | 8 + skills/omni-combos-routing/SKILL.md | 22 ++ skills/omni-inference/SKILL.md | 4 +- src/app/api/providers/route.ts | 4 +- src/app/api/v1/models/catalog.ts | 12 +- src/app/api/v1/responses/route.ts | 5 +- src/i18n/messages/ar.json | 199 ++++++++------- src/i18n/messages/az.json | 199 ++++++++------- src/i18n/messages/bg.json | 199 ++++++++------- src/i18n/messages/bn.json | 199 ++++++++------- src/i18n/messages/cs.json | 199 ++++++++------- src/i18n/messages/da.json | 199 ++++++++------- src/i18n/messages/de.json | 197 +++++++++------ src/i18n/messages/en.json | 2 +- src/i18n/messages/es.json | 199 ++++++++------- src/i18n/messages/fa.json | 199 ++++++++------- src/i18n/messages/fi.json | 199 ++++++++------- src/i18n/messages/fr.json | 197 +++++++++------ src/i18n/messages/gu.json | 199 ++++++++------- src/i18n/messages/he.json | 199 ++++++++------- src/i18n/messages/hi.json | 199 ++++++++------- src/i18n/messages/hu.json | 197 +++++++++------ src/i18n/messages/id.json | 199 ++++++++------- src/i18n/messages/in.json | 199 ++++++++------- src/i18n/messages/it.json | 195 +++++++++------ src/i18n/messages/ja.json | 199 ++++++++------- src/i18n/messages/ko.json | 199 ++++++++------- src/i18n/messages/mr.json | 199 ++++++++------- src/i18n/messages/ms.json | 199 ++++++++------- src/i18n/messages/nl.json | 197 +++++++++------ src/i18n/messages/no.json | 199 ++++++++------- src/i18n/messages/phi.json | 195 +++++++++------ src/i18n/messages/pl.json | 199 ++++++++------- src/i18n/messages/pt-BR.json | 107 ++++---- src/i18n/messages/pt.json | 201 ++++++++------- src/i18n/messages/ro.json | 199 ++++++++------- src/i18n/messages/ru.json | 193 +++++++++------ src/i18n/messages/sk.json | 197 +++++++++------ src/i18n/messages/sv.json | 199 ++++++++------- src/i18n/messages/sw.json | 199 ++++++++------- src/i18n/messages/ta.json | 199 ++++++++------- src/i18n/messages/te.json | 199 ++++++++------- src/i18n/messages/th.json | 199 ++++++++------- src/i18n/messages/tr.json | 199 ++++++++------- src/i18n/messages/uk-UA.json | 199 ++++++++------- src/i18n/messages/ur.json | 199 ++++++++------- src/i18n/messages/vi.json | 71 +++--- src/i18n/messages/zh-CN.json | 157 ++++++------ src/i18n/messages/zh-TW.json | 181 +++++++------- src/lib/db/migrationRunner.ts | 12 + .../160_rename_freepik_to_magnific.sql | 41 +++ src/lib/modelMetadataRegistry.ts | 1 - src/lib/providers/catalog.ts | 4 +- src/lib/providers/imageValidation.ts | 19 +- src/lib/providers/validation.ts | 3 + src/shared/constants/providers.ts | 27 +- .../providers/apikey/specialty-media.ts | 15 +- .../validation/compressionConfigSchemas.ts | 2 + stryker.conf.json | 25 +- tests/snapshots/provider/translate-path.json | 101 ++++++++ tests/unit/alibaba-image-media.test.ts | 2 +- .../antigravity-retired-public-models.test.ts | 1 + tests/unit/freepik-image-handler.test.ts | 163 ------------ ...ard-session-lease-bypass-inventory.test.ts | 16 +- ...instrumentation-warm-catalog-cache.test.ts | 13 +- tests/unit/magnific-image-handler.test.ts | 233 ++++++++++++++++++ tests/unit/provider-alias-uniqueness.test.ts | 8 + .../provider-validation-image-only.test.ts | 22 ++ tests/unit/redirects-cli-renames.test.ts | 8 + ...on-affinity-combo-timeout-eviction.test.ts | 9 +- tests/unit/sse-heartbeat.test.ts | 32 ++- 139 files changed, 5734 insertions(+), 4000 deletions(-) create mode 100644 changelog.d/fixes/10594-freepik-magnific-api.md delete mode 100644 open-sse/config/providers/registry/freepik/index.ts create mode 100644 open-sse/config/providers/registry/magnific/index.ts rename open-sse/handlers/imageGeneration/providers/{freepik.ts => magnific.ts} (74%) create mode 100644 src/lib/db/migrations/160_rename_freepik_to_magnific.sql delete mode 100644 tests/unit/freepik-image-handler.test.ts create mode 100644 tests/unit/magnific-image-handler.test.ts diff --git a/.env.example b/.env.example index 698c09329b..20c43643a2 100644 --- a/.env.example +++ b/.env.example @@ -714,6 +714,11 @@ NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true # ALL_PROXY=socks5://127.0.0.1:7890 # NO_PROXY=localhost,127.0.0.1 +# Pin the echo-IP target used by proxy egress probes. Unset, the probe tries +# api64.ipify.org then api4.ipify.org so IPv4-only tunnels are not reported dead. +# Used by: src/lib/proxyEchoTarget.ts. +# OMNIROUTE_PROXY_ECHO_URL=https://api4.ipify.org?format=json + # Max concurrent sockets per cached HTTP/SOCKS proxy dispatcher. # Long-lived SSE streams such as Codex /v1/responses need more than one # connection when multiple requests share the same account-level proxy. @@ -894,6 +899,14 @@ NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true # Set to 0/false/off to skip compression entirely. Default: rtk # OMNIROUTE_MCP_DESCRIPTION_COMPRESSION=rtk +# Abort budget (ms) for MCP-server internal management reads (health, resilience, +# combos, quota, usage). Default: 10000. Used by: open-sse/mcp-server/fetchTimeout.ts +# OMNIROUTE_MCP_FETCH_TIMEOUT_MS=10000 + +# Abort budget (ms) for MCP hops that wait on a provider (route_request, web_search, +# web_fetch). Default: 60000. Used by: open-sse/mcp-server/fetchTimeout.ts +# OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS=60000 + # Model catalog sync interval in hours. # Used by: src/shared/services/modelSyncScheduler.ts — periodic model refresh. # Default: 24 @@ -2165,6 +2178,19 @@ APP_LOG_TO_FILE=true # Used by: open-sse/utils/cursorAgentCliVersion.ts. Default: detect local install, else pin. # CURSOR_AGENT_CLI_VERSION=2026.07.08-0c04a8a +# Path to the Cursor Agent binary used for image generation. +# Used by: open-sse/handlers/imageGeneration/providers (CURSOR_IMAGE.md). +# CURSOR_AGENT_BIN=/path/to/agent + +# Cursor image-generation wall clock (ms). Default: 210000. +# CURSOR_IMG_TIMEOUT_MS=210000 + +# Shared-seat concurrency gate for Cursor image jobs. Default: 2. +# CURSOR_IMG_MAX_CONCURRENT=2 + +# Override Cursor CLI --model for image jobs. Default: request model / auto. +# CURSOR_IMG_MODEL=auto + # Cursor Agent CLI data directory override (versions live under /versions/). # Used by: open-sse/utils/cursorAgentCliVersion.ts. Default: ~/.local/share/cursor-agent (unix) # or %LOCALAPPDATA%\cursor-agent (win32). Official agent CLI also honors this var. diff --git a/AGENTS.md b/AGENTS.md index 30e1f6d27c..d4a7e7eb80 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -56,7 +56,7 @@ Repository map and Reference Documentation sections below. | Translators | `open-sse/translator/` | Format conversion (OpenAI↔Claude↔Gemini) | | Transformer | `open-sse/transformer/` | Responses API ↔ Chat Completions | | Services | `open-sse/services/` | Combo routing, rate limits, caching, etc | -| Database | `src/lib/db/` | SQLite domain modules (154 migrations) | +| Database | `src/lib/db/` | SQLite domain modules (157 migrations) | | Domain/Policy | `src/domain/` | Policy engine, cost rules, fallback logic | | MCP Server | `open-sse/mcp-server/` | 109 tools (44 canonical + memory/skill/GitHub/pool/gamification/plugin/Notion/Obsidian/local-corpus/RTK modules), 3 transports (stdio / SSE / Streamable HTTP), 33 scopes | | A2A Server | `src/lib/a2a/` | JSON-RPC 2.0 agent protocol | diff --git a/README.md b/README.md index 2293040ff3..0d5ea9f25f 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,7 @@ curl http://localhost:20128/v1/chat/completions \ -The Promise — One endpoint. 346 providers. Never stop building — OmniRoute picks the cheapest one that works. Six pillars: Never hit limits (auto-fallback across 346 providers in milliseconds, zero downtime) · Save up to 95% tokens (RTK + Caveman stacked compression cuts 15–95%, ~89% avg on tool-heavy sessions) · $0 to start (90+ free tiers, 56 free forever — no card needed) · Every tool works (33 coding agents through one config) · One endpoint (OpenAI ↔ Claude ↔ Gemini ↔ Responses API at /v1) · Production-grade (circuit breakers, TLS stealth, MCP 109 tools, A2A, memory, guardrails, evals — 25,000+ tests). +The Promise — One endpoint. 346 providers. Never stop building — OmniRoute picks the cheapest one that works. Six pillars: Never hit limits (auto-fallback across 346 providers in milliseconds, zero downtime) · Save up to 95% tokens (RTK + Caveman stacked compression cuts 15–95%, ~89% avg on tool-heavy sessions) · $0 to start (90+ free tiers, 57 free forever — no card needed) · Every tool works (33 coding agents through one config) · One endpoint (OpenAI ↔ Claude ↔ Gemini ↔ Responses API at /v1) · Production-grade (circuit breakers, TLS stealth, MCP 109 tools, A2A, memory, guardrails, evals — 25,000+ tests).

@@ -646,7 +646,7 @@ of your shell history. → [CLI Integrations](docs/guides/CLI-INTEGRATIONS.md) -> The most complete catalog of any open-source router: **346 providers**, **90+ with a free tier**, **56 free forever**. +> The most complete catalog of any open-source router: **346 providers**, **90+ with a free tier**, **57 free forever**.
@@ -1174,7 +1174,7 @@ Métricas de validação: 1002 vídeos rastreados · 7,069,190 visualizações c RuntimeNode.js 22.x / 24.x LTS — >=22.22.2 <23 || >=24.0.0 <27 LanguageTypeScript 6.0 — 100% TypeScript across src/ and open-sse/ (zero any in core since v2.0) FrameworkNext.js 16 + React 19 + Tailwind CSS 4 - Databasebetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 120 domain modules, 154 migrations + Databasebetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 120 domain modules, 157 migrations MemorySQLite FTS5 full-text + int8-quantized vector embeddings, typed decay SchemasZod 4 — MCP tool I/O validation + API contracts ProtocolsMCP (stdio / HTTP / SSE) + A2A v0.3 (JSON-RPC 2.0 + SSE) diff --git a/changelog.d/fixes/10594-freepik-magnific-api.md b/changelog.d/fixes/10594-freepik-magnific-api.md new file mode 100644 index 0000000000..4c1c59a701 --- /dev/null +++ b/changelog.d/fixes/10594-freepik-magnific-api.md @@ -0,0 +1 @@ +- **fix(providers):** Magnific Mystic is now the canonical provider (`/dashboard/providers/magnific`, `magnific/`). It uses the Magnific API (`api.magnific.com` + `x-magnific-api-key`), dashboard Test Connection validates keys without starting a paid generation, and the old `freepik` slug remains a legacy alias ([#10594](https://github.com/diegosouzapw/OmniRoute/pull/10594)) diff --git a/config/quality/open-sse-typecheck-baseline.json b/config/quality/open-sse-typecheck-baseline.json index 9b900ce2bd..c6de98b418 100644 --- a/config/quality/open-sse-typecheck-baseline.json +++ b/config/quality/open-sse-typecheck-baseline.json @@ -2,28 +2,10 @@ "open-sse/handlers/chatCore/clientUsageBuffer.ts": { "TS2345": 2 }, - "open-sse/services/browserBackedChat.ts": { - "TS2353": 2 - }, - "open-sse/services/compression/engines/omniglyphAdapter.ts": { - "TS2307": 1 - }, - "open-sse/services/compression/stats.ts": { - "TS2307": 1 - }, - "open-sse/utils/cursorImages.ts": { - "TS2339": 1 - }, - "open-sse/utils/imageNormalize.ts": { - "TS2339": 1 - }, "open-sse/utils/stream.ts": { "TS2345": 2, "TS2322": 2 }, - "open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/markdown.ts": { - "TS2307": 2 - }, "src/lib/guardrails/videoBridgeHelpers.ts": { "TS2488": 1, "TS2365": 2, diff --git a/docs/diagrams/cli-terminal.svg b/docs/diagrams/cli-terminal.svg index 507e8ac54c..4fd6887859 100644 --- a/docs/diagrams/cli-terminal.svg +++ b/docs/diagrams/cli-terminal.svg @@ -1,6 +1,6 @@ - + Compact animated terminal cycling three real OmniRoute CLI commands with a typewriter effect and a scrolling subcommand ticker; the first frame shows the completed providers-list screen. - + @@ -16,12 +16,12 @@ OmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 334 more providers - + $ omniroute combo list - - + + OmniRoute Combos   always-on     [priority      ] enabled   cost-saver    [cost-optimized] enabled   fusion-panel  [fusion        ] enabled   context-relay [context-relay ] enabled… run: omniroute combo create diff --git a/docs/diagrams/comparison-table.svg b/docs/diagrams/comparison-table.svg index e69c2d0c2c..d73a1fb255 100644 --- a/docs/diagrams/comparison-table.svg +++ b/docs/diagrams/comparison-table.svg @@ -1,4 +1,4 @@ - + Static-header comparison table where each capability row fades in top to bottom; the OmniRoute column is highlighted and shows a check or a leading value in every row, while competitors show a mix of checks, partials and crosses. diff --git a/docs/diagrams/promise-pillars.svg b/docs/diagrams/promise-pillars.svg index c73ef5e0d7..1c3f0a6cc9 100644 --- a/docs/diagrams/promise-pillars.svg +++ b/docs/diagrams/promise-pillars.svg @@ -1,4 +1,4 @@ - + Animated promise card: six pillar tiles fade in in reading order, then a soft colored border highlight sweeps from tile to tile in a continuous cycle. @@ -21,7 +21,7 @@ - One endpoint. 343 providers. Never stop building — OmniRoute picks the cheapest one that works. + One endpoint. 346 providers. Never stop building — OmniRoute picks the cheapest one that works. @@ -38,7 +38,7 @@ Never hit limits - Auto-fallback across 343 providers in + Auto-fallback across 346 providers in milliseconds. Quota out? The next provider takes over — zero downtime. diff --git a/docs/diagrams/readme-hero.svg b/docs/diagrams/readme-hero.svg index e5ad1f9971..fb332a4574 100644 --- a/docs/diagrams/readme-hero.svg +++ b/docs/diagrams/readme-hero.svg @@ -1,4 +1,4 @@ - + Animated hero card: a pulse travels the divider line and a compression bar demo repeatedly shrinks a prompt by up to 95 percent; all headline content is static and readable on the first frame. @@ -28,7 +28,7 @@ Never stop coding. - Every AI tool → 343 providers90+ free — through one endpoint. + Every AI tool → 346 providers90+ free — through one endpoint. Claude Code · Codex · Cursor · Cline · Copilot · Antigravity  →  FREE Claude / GPT / Gemini · auto-fallback diff --git a/docs/guides/MANAGEMENT-AUTH.md b/docs/guides/MANAGEMENT-AUTH.md index 31391e4b7f..5e0d8d6eeb 100644 --- a/docs/guides/MANAGEMENT-AUTH.md +++ b/docs/guides/MANAGEMENT-AUTH.md @@ -14,8 +14,8 @@ Canonical implementation: `src/lib/api/requireManagementAuth.ts`. | Credential | Typical form | Created where | Intended use | Management capability | |---|---|---|---|---| -| Dashboard session | `auth_token` cookie | Dashboard login | Browser UI | Full dashboard management, subject to CSRF, locality, and always-protected-route rules | -| Local CLI machine token | internal / local | CLI bootstrap (`omniroute` on the same machine) | Local CLI | Local management only | +| Dashboard JWT session | `auth_token` cookie | Dashboard login | Browser UI | Full dashboard management, subject to CSRF, locality, and always-protected-route rules | +| CLI machine-id token | internal / local | CLI bootstrap (`omniroute` on the same machine) | Local CLI | Local management only | | Scoped Access Token | `oma_live_…` | **Settings → Access Tokens** or `omniroute connect` | Remote CLI and management API | Must satisfy the route's required `read`, `write`, or `admin` scope | | Inference API key | `sk-…` (and other API-key prefixes) | **API Manager / API Keys** | `/v1/*` inference | **None** unless the key metadata includes `manage` or `admin` | @@ -61,13 +61,13 @@ chat client key for automation unless you deliberately granted that scope. ## How to create and revoke -### Dashboard session +### Dashboard JWT session 1. Open `/login`, sign in with the management password (`INITIAL_PASSWORD` on first boot). 2. Cookie `auth_token` is HttpOnly. Browser dashboard uses it automatically. 3. Log out via `/api/auth/logout`. There is no long-lived secret to copy. -### Local CLI machine token +### CLI machine-id token 1. Run `omniroute` on the **same host** as the server (loopback). 2. The CLI bootstraps a machine-id token under `~/.omniroute/` (chmod 600). diff --git a/docs/i18n/ar/llm.txt b/docs/i18n/ar/llm.txt index 732d79189c..53dfd1c0d6 100644 --- a/docs/i18n/ar/llm.txt +++ b/docs/i18n/ar/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/az/llm.txt b/docs/i18n/az/llm.txt index e930a1f05a..cf0018a415 100644 --- a/docs/i18n/az/llm.txt +++ b/docs/i18n/az/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/bg/llm.txt b/docs/i18n/bg/llm.txt index e930a1f05a..cf0018a415 100644 --- a/docs/i18n/bg/llm.txt +++ b/docs/i18n/bg/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/bn/llm.txt b/docs/i18n/bn/llm.txt index baa6656839..2749b7b108 100644 --- a/docs/i18n/bn/llm.txt +++ b/docs/i18n/bn/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/cs/llm.txt b/docs/i18n/cs/llm.txt index dfb5f9b2b8..76a283564b 100644 --- a/docs/i18n/cs/llm.txt +++ b/docs/i18n/cs/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/da/llm.txt b/docs/i18n/da/llm.txt index 10ce4811ac..5bcb53ef10 100644 --- a/docs/i18n/da/llm.txt +++ b/docs/i18n/da/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/de/llm.txt b/docs/i18n/de/llm.txt index b5ebeb9c86..17cb4a70bf 100644 --- a/docs/i18n/de/llm.txt +++ b/docs/i18n/de/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/es/llm.txt b/docs/i18n/es/llm.txt index 72d4fa4a05..0441be519d 100644 --- a/docs/i18n/es/llm.txt +++ b/docs/i18n/es/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/fa/llm.txt b/docs/i18n/fa/llm.txt index 4b324a992d..c81ec3a853 100644 --- a/docs/i18n/fa/llm.txt +++ b/docs/i18n/fa/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/fi/llm.txt b/docs/i18n/fi/llm.txt index 92d30e036c..974084ef14 100644 --- a/docs/i18n/fi/llm.txt +++ b/docs/i18n/fi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/fr/llm.txt b/docs/i18n/fr/llm.txt index 2b5cdefa71..6db495b3d9 100644 --- a/docs/i18n/fr/llm.txt +++ b/docs/i18n/fr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/gu/llm.txt b/docs/i18n/gu/llm.txt index d0f0f42f59..885f78df63 100644 --- a/docs/i18n/gu/llm.txt +++ b/docs/i18n/gu/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/he/llm.txt b/docs/i18n/he/llm.txt index f8f0b3f644..617ce45e8c 100644 --- a/docs/i18n/he/llm.txt +++ b/docs/i18n/he/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/hi/llm.txt b/docs/i18n/hi/llm.txt index d79717b61e..67b0cfeba3 100644 --- a/docs/i18n/hi/llm.txt +++ b/docs/i18n/hi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/hu/llm.txt b/docs/i18n/hu/llm.txt index 1b941f1e5a..fa74ab5997 100644 --- a/docs/i18n/hu/llm.txt +++ b/docs/i18n/hu/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/id/llm.txt b/docs/i18n/id/llm.txt index e1b23c5e3d..71572bd5a4 100644 --- a/docs/i18n/id/llm.txt +++ b/docs/i18n/id/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/in/llm.txt b/docs/i18n/in/llm.txt index 7713dacb68..c6f22ffc46 100644 --- a/docs/i18n/in/llm.txt +++ b/docs/i18n/in/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/it/llm.txt b/docs/i18n/it/llm.txt index e0823ba499..db4f6a9cfd 100644 --- a/docs/i18n/it/llm.txt +++ b/docs/i18n/it/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ja/llm.txt b/docs/i18n/ja/llm.txt index 5c1963195f..f021f83d5a 100644 --- a/docs/i18n/ja/llm.txt +++ b/docs/i18n/ja/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ko/llm.txt b/docs/i18n/ko/llm.txt index 2ae8fe4ec4..52cf209a74 100644 --- a/docs/i18n/ko/llm.txt +++ b/docs/i18n/ko/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/mr/llm.txt b/docs/i18n/mr/llm.txt index 157eec643a..cc3125f845 100644 --- a/docs/i18n/mr/llm.txt +++ b/docs/i18n/mr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ms/llm.txt b/docs/i18n/ms/llm.txt index e26b195208..650ac31922 100644 --- a/docs/i18n/ms/llm.txt +++ b/docs/i18n/ms/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/nl/llm.txt b/docs/i18n/nl/llm.txt index 67f935d590..bdd29b2d01 100644 --- a/docs/i18n/nl/llm.txt +++ b/docs/i18n/nl/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/no/llm.txt b/docs/i18n/no/llm.txt index e28dda1508..7cb57aa53c 100644 --- a/docs/i18n/no/llm.txt +++ b/docs/i18n/no/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/phi/llm.txt b/docs/i18n/phi/llm.txt index ed539c84be..73ea9e49ba 100644 --- a/docs/i18n/phi/llm.txt +++ b/docs/i18n/phi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/pl/llm.txt b/docs/i18n/pl/llm.txt index f8665fa410..7d1d8be0f2 100644 --- a/docs/i18n/pl/llm.txt +++ b/docs/i18n/pl/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/pt-BR/llm.txt b/docs/i18n/pt-BR/llm.txt index c56d966794..59be9758e4 100644 --- a/docs/i18n/pt-BR/llm.txt +++ b/docs/i18n/pt-BR/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/pt/llm.txt b/docs/i18n/pt/llm.txt index 6e2aa2bb20..1f4f205d44 100644 --- a/docs/i18n/pt/llm.txt +++ b/docs/i18n/pt/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ro/llm.txt b/docs/i18n/ro/llm.txt index 4fac614baf..485f971d1f 100644 --- a/docs/i18n/ro/llm.txt +++ b/docs/i18n/ro/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ru/llm.txt b/docs/i18n/ru/llm.txt index 9d522135b2..319111231a 100644 --- a/docs/i18n/ru/llm.txt +++ b/docs/i18n/ru/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/sk/llm.txt b/docs/i18n/sk/llm.txt index df0dbd95a7..edb3477ef2 100644 --- a/docs/i18n/sk/llm.txt +++ b/docs/i18n/sk/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/sv/llm.txt b/docs/i18n/sv/llm.txt index 59246e38bf..48847120cb 100644 --- a/docs/i18n/sv/llm.txt +++ b/docs/i18n/sv/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/sw/llm.txt b/docs/i18n/sw/llm.txt index dbbf236c5d..f90e0ec031 100644 --- a/docs/i18n/sw/llm.txt +++ b/docs/i18n/sw/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ta/llm.txt b/docs/i18n/ta/llm.txt index 842ca8c7ee..8f64c7aab8 100644 --- a/docs/i18n/ta/llm.txt +++ b/docs/i18n/ta/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/te/llm.txt b/docs/i18n/te/llm.txt index 5098dbc0ae..483d2f8a41 100644 --- a/docs/i18n/te/llm.txt +++ b/docs/i18n/te/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/th/llm.txt b/docs/i18n/th/llm.txt index f1251db7be..ac3a14103a 100644 --- a/docs/i18n/th/llm.txt +++ b/docs/i18n/th/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/tr/llm.txt b/docs/i18n/tr/llm.txt index ba729555c2..d6e2fbd674 100644 --- a/docs/i18n/tr/llm.txt +++ b/docs/i18n/tr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/uk-UA/llm.txt b/docs/i18n/uk-UA/llm.txt index 33b12b870b..17e04f3ce1 100644 --- a/docs/i18n/uk-UA/llm.txt +++ b/docs/i18n/uk-UA/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ur/llm.txt b/docs/i18n/ur/llm.txt index bd5d5fdc83..9291f52642 100644 --- a/docs/i18n/ur/llm.txt +++ b/docs/i18n/ur/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/vi/llm.txt b/docs/i18n/vi/llm.txt index 4b59fd5d3d..0cc3e4e22e 100644 --- a/docs/i18n/vi/llm.txt +++ b/docs/i18n/vi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/zh-CN/llm.txt b/docs/i18n/zh-CN/llm.txt index 122734bec7..28d5e6fe23 100644 --- a/docs/i18n/zh-CN/llm.txt +++ b/docs/i18n/zh-CN/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/zh-TW/llm.txt b/docs/i18n/zh-TW/llm.txt index b1f841f8e9..ae8fd155b5 100644 --- a/docs/i18n/zh-TW/llm.txt +++ b/docs/i18n/zh-TW/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 342 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 346 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (109 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -18,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -169,7 +169,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (342), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (346), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **342 AI providers** with automatic format translation +- **346 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -438,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. @@ -479,7 +479,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **342-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **346-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 109 tools / 33 scopes** (canonical + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/reference/ENVIRONMENT.md b/docs/reference/ENVIRONMENT.md index c475f2cadf..401d7f6a30 100644 --- a/docs/reference/ENVIRONMENT.md +++ b/docs/reference/ENVIRONMENT.md @@ -505,6 +505,8 @@ detection above). | `OMNIROUTE_MCP_SCOPES` | _(all)_ | `open-sse/mcp-server/server.ts` | Comma-separated scopes: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | Compress MCP tool descriptions before serializing the manifest. Enable values: `1`, `true`, `on`. | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | Compression algorithm/profile. Disable values: `0`, `false`, `off`. | +| `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | Abort budget (ms) for MCP-server internal management reads (health, resilience, combos, quota, usage). | +| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Abort budget (ms) for MCP hops that wait on a provider (`route_request`, `web_search`, `web_fetch`). | | `MODEL_SYNC_INTERVAL_HOURS` | `24` | `src/shared/services/modelSyncScheduler.ts` | Model catalog sync interval in hours. | | `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | Provider rate-limit and quota polling interval. | | `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Gap (ms) between consecutive OAuth quota fetches in a bulk sync; OAuth connections are fetched one at a time to avoid bursting an upstream. `0` opts out (concurrent). | @@ -1117,6 +1119,10 @@ changing them requires a code edit, not an env var: | `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Per-image fetch timeout (ms) for remote `image_url` vision input. | | `CURSOR_STATE_DB_PATH` | _(probed)_ | `open-sse/utils/cursorVersionDetector.ts` | Override the Cursor IDE state DB lookup used for IDE version detection. | | `CURSOR_AGENT_CLI_VERSION` | _(detect / pin)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Agent CLI build id (`YYYY.MM.DD-`) for `x-cursor-client-version: cli-…` on Agent Run. | +| `CURSOR_AGENT_BIN` | _(unset)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Path to the Cursor Agent binary used for image generation. Unset, the handler uses `providerSpecificData.agentBin` then PATH. | +| `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Per-image wall clock (ms) for Cursor Agent image jobs. | +| `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Shared-seat concurrency gate for Cursor image jobs. | +| `CURSOR_IMG_MODEL` | request / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Override Cursor CLI `--model` for image jobs. | | `CURSOR_DATA_DIR` | _(probed)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Override Cursor Agent CLI data dir (`…/versions/`); same var the official agent uses. | | `CURSOR_TOKEN` | _(unset)_ | `scripts/ad-hoc/cursor-tap.cjs` | Direct Cursor bearer token used by developer tooling. | | `OMNIROUTE_LOG_REQUEST_SHAPE` | disabled (opt-in via `"1"`) | `src/app/api/v1/chat/completions/route.ts` | Log content-type/length markers for large chat payloads when `"1"` is set. Off by default to reduce log noise. | diff --git a/llm.txt b/llm.txt index 15a03831d1..da0da5334e 100644 --- a/llm.txt +++ b/llm.txt @@ -14,7 +14,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 154 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 157 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -434,7 +434,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 154 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (120 domain-specific files, 157 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/next.config.mjs b/next.config.mjs index 2f22b8aebd..df3f6e32c4 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -438,6 +438,11 @@ const nextConfig = { destination: "/dashboard/omni-skills", permanent: true, }, + { + source: "/dashboard/providers/freepik", + destination: "/dashboard/providers/magnific", + permanent: true, + }, // Architecture { source: "/docs/architecture", diff --git a/open-sse/config/imageRegistry.ts b/open-sse/config/imageRegistry.ts index 650dcdd69c..02019dc4a0 100644 --- a/open-sse/config/imageRegistry.ts +++ b/open-sse/config/imageRegistry.ts @@ -8,7 +8,7 @@ import { LMARENA_DIRECT_IMAGE_MODELS } from "./providers/registry/lmarena/directModels.ts"; import { SEGMIND_IMAGE_PROVIDER } from "./providers/registry/segmind/imageModels.ts"; import { KIE_IMAGE_MODELS } from "./providers/registry/kie/imageModels.ts"; -import { FREEPIK_IMAGE_PROVIDER } from "./providers/registry/freepik/index.ts"; +import { MAGNIFIC_IMAGE_PROVIDER } from "./providers/registry/magnific/index.ts"; import { STABILITY_AI_IMAGE_MODELS } from "./providers/registry/stability-ai/imageModels.ts"; import { CHEAPERINFERENCE_IMAGE_PROVIDER } from "./providers/registry/cheaperinference/imageModels.ts"; import { @@ -495,7 +495,7 @@ export const IMAGE_PROVIDERS: Record = { ], supportedSizes: ["1024x1024", "1024x1792", "1792x1024"], }, - freepik: FREEPIK_IMAGE_PROVIDER, + magnific: MAGNIFIC_IMAGE_PROVIDER, sdwebui: { id: "sdwebui", baseUrl: "http://localhost:7860/sdapi/v1/txt2img", @@ -884,7 +884,12 @@ export const IMAGE_PROVIDERS: Record = { * Get image provider config by ID */ export function getImageProvider(providerId) { - return IMAGE_PROVIDERS[providerId] || null; + if (IMAGE_PROVIDERS[providerId]) return IMAGE_PROVIDERS[providerId]; + if (!providerId) return null; + for (const config of Object.values(IMAGE_PROVIDERS)) { + if (config.alias === providerId) return config; + } + return null; } /** @@ -1021,12 +1026,7 @@ export function getImageModelEntry(modelStr) { }; } -/** - * An image input is only MANDATORY for edit-only models — those whose modalities - * are `["image"]` with no `"text"`. Models listing both `["text", "image"]` accept - * an image but can also run pure text-to-image, so they must NOT be gated on an - * image input (that gate previously blocked 41 dual-modality t2i models). - */ +/** Image input is mandatory only for edit-only models (`["image"]`, no `"text"`). Dual-modality models also accept pure t2i. */ export function modalitiesRequireImageInput(inputModalities) { const list = Array.isArray(inputModalities) ? inputModalities : ["text"]; return list.includes("image") && !list.includes("text"); diff --git a/open-sse/config/providers/registry/freepik/index.ts b/open-sse/config/providers/registry/freepik/index.ts deleted file mode 100644 index 7b99c71168..0000000000 --- a/open-sse/config/providers/registry/freepik/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Freepik (Magnific Mystic) image provider registry entry. - * Extracted into its own module to keep open-sse/config/imageRegistry.ts - * under the file-size cap (god-file decomposition; semantic split). - */ -export const FREEPIK_IMAGE_PROVIDER = { - id: "freepik", - // Freepik rebranded its API docs to Magnific in April 2026; the Mystic - // endpoint itself still lives under api.freepik.com as of this writing - // (docs.freepik.com redirects to docs.magnific.com, but the API host - // has not moved). Re-verify against live docs if this ever 404s. - baseUrl: "https://api.freepik.com/v1/ai/mystic", - statusUrl: "https://api.freepik.com/v1/ai/mystic", - authType: "apikey", - authHeader: "x-freepik-api-key", - format: "freepik-image", // custom: async submit task_id, then poll GET /{task_id} - models: [ - { id: "realism", name: "Mystic Realism" }, - { id: "fluid", name: "Mystic Fluid (Imagen 3)" }, - { id: "zen", name: "Mystic Zen" }, - { id: "flexible", name: "Mystic Flexible" }, - { id: "super_real", name: "Mystic Super Real" }, - { id: "editorial_portraits", name: "Mystic Editorial Portraits" }, - ], - supportedSizes: ["1024x1024", "1024x1792", "1792x1024"], -}; diff --git a/open-sse/config/providers/registry/magnific/index.ts b/open-sse/config/providers/registry/magnific/index.ts new file mode 100644 index 0000000000..63c83d5b1c --- /dev/null +++ b/open-sse/config/providers/registry/magnific/index.ts @@ -0,0 +1,26 @@ +/** + * Magnific Mystic image provider registry entry. + * Extracted into its own module to keep open-sse/config/imageRegistry.ts + * under the file-size cap (god-file decomposition; semantic split). + */ +export const MAGNIFIC_IMAGE_PROVIDER = { + id: "magnific", + // Official Magnific API (docs.magnific.com). The previous OmniRoute slug + // was `freepik` because Magnific started as Freepik's developer API; keep + // that id as a legacy alias so old URLs and `freepik/` still resolve. + alias: "freepik", + baseUrl: "https://api.magnific.com/v1/ai/mystic", + statusUrl: "https://api.magnific.com/v1/ai/mystic", + authType: "apikey", + authHeader: "x-magnific-api-key", + format: "magnific-image", // custom: async submit task_id, then poll GET /{task_id} + models: [ + { id: "realism", name: "Mystic Realism" }, + { id: "fluid", name: "Mystic Fluid (Imagen 3)" }, + { id: "zen", name: "Mystic Zen" }, + { id: "flexible", name: "Mystic Flexible" }, + { id: "super_real", name: "Mystic Super Real" }, + { id: "editorial_portraits", name: "Mystic Editorial Portraits" }, + ], + supportedSizes: ["1024x1024", "1024x1792", "1792x1024"], +}; diff --git a/open-sse/executors/copilot-m365-connection.ts b/open-sse/executors/copilot-m365-connection.ts index d5f6d80c6c..c8251af5f4 100644 --- a/open-sse/executors/copilot-m365-connection.ts +++ b/open-sse/executors/copilot-m365-connection.ts @@ -8,6 +8,7 @@ * the URL MUST go through redactWsUrl(). */ +import { resolvePublicCred } from "../utils/publicCreds.ts"; import { randomUUID, randomBytes } from "node:crypto"; import type { ProviderCredentials } from "./base.ts"; @@ -272,7 +273,7 @@ export function redactWsUrl(wsUrl: string): string { // of requiring a fresh DevTools capture after every expiry. /** Public client id observed in both the browser token and M365-Copilot2API. */ -export const M365_OAUTH_CLIENT_ID = "c0ab8ce9-e9a0-42e7-b064-33d422df41f1"; +export const M365_OAUTH_CLIENT_ID = resolvePublicCred("m365_oauth_client_id"); export const M365_OAUTH_SCOPE = "openid profile offline_access https://substrate.office.com/sydney/M365Chat.Read " + diff --git a/open-sse/executors/copilot-m365-web.ts b/open-sse/executors/copilot-m365-web.ts index 57f854ef86..5bdaf9ae9b 100644 --- a/open-sse/executors/copilot-m365-web.ts +++ b/open-sse/executors/copilot-m365-web.ts @@ -320,15 +320,16 @@ export class CopilotM365WebExecutor extends BaseExecutor { const rotated = result.refreshToken || refreshToken; const chathubPath = currentM365ChathubPath(credentials); + const assembledApiKey = chathubPath + ? ["access_token=", result.accessToken, "; chathubPath=", chathubPath].join("") + : ""; const next = { ...credentials, accessToken: result.accessToken, refreshToken: rotated, // Keep the pasted-format apiKey self-consistent so every resolution path // (fresh column, stale column, dashboard re-read) sees the same token. - ...(chathubPath - ? { apiKey: `access_token=${result.accessToken}; chathubPath=${chathubPath}` } - : {}), + ...(assembledApiKey ? { apiKey: assembledApiKey } : {}), ...(result.expiresIn ? { expiresAt: new Date(Date.now() + result.expiresIn * 1000).toISOString() } : {}), diff --git a/open-sse/executors/index.ts b/open-sse/executors/index.ts index d82452bb7e..8678fb6105 100644 --- a/open-sse/executors/index.ts +++ b/open-sse/executors/index.ts @@ -1,5 +1,6 @@ import { SEARCH_PROVIDERS } from "../config/searchRegistry.ts"; import { registerExecutor, getRegisteredExecutor, hasRegisteredExecutor } from "./registry.ts"; +import type { BaseExecutor } from "./base.ts"; import { AntigravityExecutor } from "./antigravity.ts"; import { GithubExecutor } from "./github.ts"; import { GheCopilotExecutor } from "./ghe-copilot.ts"; @@ -233,7 +234,7 @@ const executors = { // Bootstrap: register every built-in in the ExecutorRegistry. registerExecutor // throws on duplicates, so an alias collision fails at module load, exactly as // loudly as a duplicate object key would have failed at lint time. -for (const [alias, executor] of Object.entries(executors)) { +for (const [alias, executor] of Object.entries(executors) as [string, BaseExecutor][]) { registerExecutor(alias, executor); } diff --git a/open-sse/handlers/imageGeneration.ts b/open-sse/handlers/imageGeneration.ts index a2053bb556..c8312ab974 100644 --- a/open-sse/handlers/imageGeneration.ts +++ b/open-sse/handlers/imageGeneration.ts @@ -44,7 +44,7 @@ import { handleImagen3ImageGeneration } from "./imageGeneration/providers/imagen import { handleIdeogramImageGeneration } from "./imageGeneration/providers/ideogram.ts"; import { handleHaiperImageGeneration } from "./imageGeneration/providers/haiper.ts"; import { handleLeonardoImageGeneration } from "./imageGeneration/providers/leonardo.ts"; -import { handleFreepikImageGeneration } from "./imageGeneration/providers/freepik.ts"; +import { handleMagnificImageGeneration } from "./imageGeneration/providers/magnific.ts"; import { handleChatGptWebImageGeneration, extractMarkdownImageUrls, @@ -631,8 +631,8 @@ export async function handleImageGeneration({ log, }); } - if (providerConfig.format === "freepik-image") { - return handleFreepikImageGeneration({ + if (providerConfig.format === "magnific-image" || providerConfig.format === "freepik-image") { + return handleMagnificImageGeneration({ model, provider, providerConfig, diff --git a/open-sse/handlers/imageGeneration/providers/freepik.ts b/open-sse/handlers/imageGeneration/providers/magnific.ts similarity index 74% rename from open-sse/handlers/imageGeneration/providers/freepik.ts rename to open-sse/handlers/imageGeneration/providers/magnific.ts index 2f3320cf06..31ea686327 100644 --- a/open-sse/handlers/imageGeneration/providers/freepik.ts +++ b/open-sse/handlers/imageGeneration/providers/magnific.ts @@ -1,12 +1,11 @@ -// Freepik (Magnific Mystic) image generation adapter. +// Magnific Mystic image generation adapter. // Async submit->poll flow modeled on leonardo.ts's generationId pattern: // POST /v1/ai/mystic returns { data: { task_id, status } }, then // GET /v1/ai/mystic/{task_id} is polled until status is COMPLETED/FAILED. -// Docs: https://docs.magnific.com/api-reference/mystic (Freepik rebranded to -// Magnific in April 2026; both `api.freepik.com` and the newer -// `api.magnific.com` domain/header pair are in circulation during the -// transition, so the base URL and auth header both come from providerConfig -// rather than being hardcoded here). +// Docs: https://docs.magnific.com/api-reference/mystic +// Official host/header: api.magnific.com + x-magnific-api-key. +// Both come from providerConfig so a local override can still use the +// legacy api.freepik.com / x-freepik-api-key pair if needed. import { saveCallLog } from "@/lib/usageDb"; import { sleep } from "../../../utils/sleep.ts"; @@ -21,34 +20,34 @@ function normalizePositiveNumber(value: unknown, fallback: number): number { return Math.floor(n); } -interface FreepikProviderConfig { +interface MagnificProviderConfig { baseUrl: string; statusUrl?: string; authHeader?: string; } -interface FreepikCredentials { +interface MagnificCredentials { apiKey?: string; } -interface FreepikGenerationParams { +interface MagnificGenerationParams { model: string; provider: string; - providerConfig: FreepikProviderConfig; + providerConfig: MagnificProviderConfig; body: Record; - credentials: FreepikCredentials; + credentials: MagnificCredentials; log?: { info: (tag: string, msg: string) => void; error: (tag: string, msg: string) => void }; } -interface FreepikImageResult { +interface MagnificImageResult { success: boolean; status?: number; error?: string; data?: { created: number; data: Array<{ b64_json: string }> }; } -function freepikAuthHeader(providerConfig: FreepikProviderConfig, token: string) { - const headerName = providerConfig.authHeader || "x-freepik-api-key"; +function magnificAuthHeader(providerConfig: MagnificProviderConfig, token: string) { + const headerName = providerConfig.authHeader || "x-magnific-api-key"; return { [headerName]: token }; } @@ -58,7 +57,7 @@ async function logAndFail(params: { startTime: number; status: number; error: string; -}): Promise { +}): Promise { const { provider, model, startTime, status, error } = params; const sanitized = sanitizeErrorMessage(error); saveCallLog({ @@ -74,7 +73,7 @@ async function logAndFail(params: { } async function submitMysticTask(params: { - providerConfig: FreepikProviderConfig; + providerConfig: MagnificProviderConfig; token: string; model: string; prompt: string; @@ -85,7 +84,7 @@ async function submitMysticTask(params: { method: "POST", headers: { "Content-Type": "application/json", - ...freepikAuthHeader(providerConfig, token), + ...magnificAuthHeader(providerConfig, token), }, body: JSON.stringify({ prompt, @@ -97,14 +96,14 @@ async function submitMysticTask(params: { } async function pollMysticTask(params: { - providerConfig: FreepikProviderConfig; + providerConfig: MagnificProviderConfig; token: string; taskId: string; }): Promise<{ status: string; imageUrl?: string }> { const { providerConfig, token, taskId } = params; const statusBase = providerConfig.statusUrl || providerConfig.baseUrl; const res = await fetch(`${statusBase}/${taskId}`, { - headers: { ...freepikAuthHeader(providerConfig, token) }, + headers: { ...magnificAuthHeader(providerConfig, token) }, }); const json = await res.json(); const task = json?.data || json; @@ -113,9 +112,9 @@ async function pollMysticTask(params: { return { status, imageUrl: typeof generated[0] === "string" ? generated[0] : undefined }; } -async function downloadGeneratedImage(imageUrl: string): Promise< - { state: "ok"; b64: string } | { state: "failed"; status: number; error: string } -> { +async function downloadGeneratedImage( + imageUrl: string +): Promise<{ state: "ok"; b64: string } | { state: "failed"; status: number; error: string }> { const imgRes = await fetch(imageUrl); if (!imgRes.ok) { return { @@ -133,7 +132,7 @@ async function resolveCompletedResult(params: { model: string; startTime: number; imageUrl?: string; -}): Promise { +}): Promise { const { provider, model, startTime, imageUrl } = params; if (!imageUrl) { return logAndFail({ @@ -141,7 +140,7 @@ async function resolveCompletedResult(params: { model, startTime, status: 502, - error: "Freepik Mystic completed without a generated image URL", + error: "Magnific Mystic completed without a generated image URL", }); } const downloaded = await downloadGeneratedImage(imageUrl); @@ -163,7 +162,7 @@ async function resolveCompletedResult(params: { } async function pollUntilDone(params: { - providerConfig: FreepikProviderConfig; + providerConfig: MagnificProviderConfig; token: string; taskId: string; provider: string; @@ -171,9 +170,17 @@ async function pollUntilDone(params: { startTime: number; pollIntervalMs: number; pollTimeoutMs: number; -}): Promise { - const { providerConfig, token, taskId, provider, model, startTime, pollIntervalMs, pollTimeoutMs } = - params; +}): Promise { + const { + providerConfig, + token, + taskId, + provider, + model, + startTime, + pollIntervalMs, + pollTimeoutMs, + } = params; const deadline = Date.now() + pollTimeoutMs; while (Date.now() < deadline) { @@ -189,7 +196,7 @@ async function pollUntilDone(params: { model, startTime, status: 502, - error: "Freepik Mystic image generation failed", + error: "Magnific Mystic image generation failed", }); } } @@ -199,24 +206,32 @@ async function pollUntilDone(params: { model, startTime, status: 504, - error: "Freepik Mystic image generation timed out", + error: "Magnific Mystic image generation timed out", }); } async function submitAndGetTaskId(params: { - providerConfig: FreepikProviderConfig; + providerConfig: MagnificProviderConfig; token: string; model: string; prompt: string; body: Record; provider: string; startTime: number; -}): Promise<{ taskId: string } | { failed: FreepikImageResult }> { +}): Promise<{ taskId: string } | { failed: MagnificImageResult }> { const { providerConfig, token, model, prompt, body, provider, startTime } = params; const res = await submitMysticTask({ providerConfig, token, model, prompt, body }); if (!res.ok) { const errorText = await res.text(); - return { failed: await logAndFail({ provider, model, startTime, status: res.status, error: errorText }) }; + return { + failed: await logAndFail({ + provider, + model, + startTime, + status: res.status, + error: errorText, + }), + }; } const submitJson = await res.json(); @@ -228,28 +243,31 @@ async function submitAndGetTaskId(params: { model, startTime, status: 502, - error: "Freepik Mystic did not return a task_id", + error: "Magnific Mystic did not return a task_id", }), }; } return { taskId }; } -export async function handleFreepikImageGeneration({ +export async function handleMagnificImageGeneration({ model, provider, providerConfig, body, credentials, log, -}: FreepikGenerationParams): Promise { +}: MagnificGenerationParams): Promise { const startTime = Date.now(); const token = credentials?.apiKey || ""; const prompt = typeof body.prompt === "string" ? body.prompt : String(body.prompt ?? ""); const pollIntervalMs = normalizePositiveNumber(body.poll_interval_ms, DEFAULT_POLL_INTERVAL_MS); const pollTimeoutMs = normalizePositiveNumber(body.poll_timeout_ms, DEFAULT_POLL_TIMEOUT_MS); if (log) { - log.info("IMAGE", `${provider}/${model} (freepik-mystic) | prompt: "${prompt.slice(0, 60)}..."`); + log.info( + "IMAGE", + `${provider}/${model} (magnific-mystic) | prompt: "${prompt.slice(0, 60)}..."` + ); } try { @@ -276,7 +294,7 @@ export async function handleFreepikImageGeneration({ }); } catch (err) { const message = (err as Error)?.message || String(err); - if (log) log.error("IMAGE", `${provider} freepik error: ${sanitizeErrorMessage(message)}`); + if (log) log.error("IMAGE", `${provider} magnific error: ${sanitizeErrorMessage(message)}`); return logAndFail({ provider, model, diff --git a/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts b/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts index 52ce967e1f..8b7f3cee32 100644 --- a/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts +++ b/open-sse/mcp-server/__tests__/glmCodingProviderConfig.test.ts @@ -87,6 +87,9 @@ describe("GLM Coding provider registry surfaces", () => { expect(PROVIDER_ID_TO_ALIAS.glm).toBe("glm"); expect(byProviderId).toEqual(byAlias); expect(byProviderId.map((model) => model.id)).toEqual([ + "glm-5.3", + "glm-5.3-high", + "glm-5.3-low", "glm-5.2", "glm-5.2-high", "glm-5.2-max", diff --git a/open-sse/mcp-server/fetchTimeout.ts b/open-sse/mcp-server/fetchTimeout.ts index a9389b0c24..e3cea5bcce 100644 --- a/open-sse/mcp-server/fetchTimeout.ts +++ b/open-sse/mcp-server/fetchTimeout.ts @@ -34,6 +34,21 @@ function readPositiveIntEnv(raw: string | undefined): number | null { return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null; } +function readMcpTimeoutOverride( + kind: McpFetchTimeoutKind, + env: Record +): string | undefined { + // Direct process.env member access so fabricated-docs / env-doc-sync see + // the operator knobs. Tests inject a fake env object and keep using the + // exported constant keys. + if (env === process.env) { + return kind === "upstream" + ? process.env.OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS + : process.env.OMNIROUTE_MCP_FETCH_TIMEOUT_MS; + } + return env[kind === "upstream" ? MCP_UPSTREAM_FETCH_TIMEOUT_ENV : MCP_FETCH_TIMEOUT_ENV]; +} + /** * Resolve the timeout for one internal fetch class. An unset, malformed or * non-positive override falls back to the built-in default rather than @@ -44,11 +59,8 @@ export function resolveMcpFetchTimeoutMs( kind: McpFetchTimeoutKind, env: Record = process.env ): number { - const upstream = kind === "upstream"; - const override = readPositiveIntEnv( - env[upstream ? MCP_UPSTREAM_FETCH_TIMEOUT_ENV : MCP_FETCH_TIMEOUT_ENV] - ); - return override ?? (upstream ? MCP_UPSTREAM_FETCH_TIMEOUT_MS : MCP_FETCH_TIMEOUT_MS); + const override = readPositiveIntEnv(readMcpTimeoutOverride(kind, env)); + return override ?? (kind === "upstream" ? MCP_UPSTREAM_FETCH_TIMEOUT_MS : MCP_FETCH_TIMEOUT_MS); } /** `AbortSignal` for one internal fetch of the given class. */ diff --git a/open-sse/translator/helpers/toolCallShim.ts b/open-sse/translator/helpers/toolCallShim.ts index 0c546bb299..ef00713474 100644 --- a/open-sse/translator/helpers/toolCallShim.ts +++ b/open-sse/translator/helpers/toolCallShim.ts @@ -89,8 +89,18 @@ const TOOL_SHIMS: Record = { }, }; +function resolveToolCallShim(name: string | undefined | null): ShimFn | undefined { + if (typeof name !== "string" || !name) return undefined; + if (Object.prototype.hasOwnProperty.call(TOOL_SHIMS, name)) return TOOL_SHIMS[name]; + const lower = name.toLowerCase(); + for (const [key, fn] of Object.entries(TOOL_SHIMS)) { + if (key.toLowerCase() === lower) return fn; + } + return undefined; +} + export function hasToolCallShim(name: string | undefined | null): boolean { - return typeof name === "string" && Object.prototype.hasOwnProperty.call(TOOL_SHIMS, name); + return Boolean(resolveToolCallShim(name)); } /** @@ -100,7 +110,7 @@ export function hasToolCallShim(name: string | undefined | null): boolean { * the shim with `{}` as input (so required arrays still get injected). */ export function applyToolCallShimToBuffer(name: string, raw: string): string { - const shim = TOOL_SHIMS[name]; + const shim = resolveToolCallShim(name); if (!shim) return raw; let parsed: unknown; diff --git a/open-sse/translator/response/claude-to-openai.ts b/open-sse/translator/response/claude-to-openai.ts index 026a3e1f3e..4905bd8e60 100644 --- a/open-sse/translator/response/claude-to-openai.ts +++ b/open-sse/translator/response/claude-to-openai.ts @@ -44,6 +44,40 @@ export function claudeToOpenAIResponse(chunk, state) { state.messageId = chunk.message?.id || `msg_${Date.now()}`; state.model = chunk.message?.model; state.toolCallIndex = 0; + const startUsage = chunk.message?.usage; + if (startUsage && typeof startUsage === "object") { + const inputTokens = + typeof startUsage.input_tokens === "number" + ? startUsage.input_tokens + : typeof startUsage.prompt_tokens === "number" + ? startUsage.prompt_tokens + : 0; + const outputTokens = + typeof startUsage.output_tokens === "number" + ? startUsage.output_tokens + : typeof startUsage.completion_tokens === "number" + ? startUsage.completion_tokens + : 0; + const cacheRead = + typeof startUsage.cache_read_input_tokens === "number" + ? startUsage.cache_read_input_tokens + : 0; + const cacheCreation = + typeof startUsage.cache_creation_input_tokens === "number" + ? startUsage.cache_creation_input_tokens + : 0; + if (inputTokens > 0 || outputTokens > 0 || cacheRead > 0 || cacheCreation > 0) { + const billableInputTokens = inputTokens + cacheRead; + state.usage = { + prompt_tokens: billableInputTokens, + completion_tokens: outputTokens, + input_tokens: billableInputTokens, + output_tokens: outputTokens, + }; + if (cacheRead > 0) state.usage.cache_read_input_tokens = cacheRead; + if (cacheCreation > 0) state.usage.cache_creation_input_tokens = cacheCreation; + } + } results.push(createChunk(state, { role: "assistant" })); break; } diff --git a/open-sse/utils/publicCreds.ts b/open-sse/utils/publicCreds.ts index 6d1e005b1d..ad915e4ce2 100644 --- a/open-sse/utils/publicCreds.ts +++ b/open-sse/utils/publicCreds.ts @@ -180,6 +180,12 @@ const EMBEDDED_DEFAULTS = { 13, 88, 13, 91, 68, 89, 65, 21, 72, 26, 21, 76, 0, 65, 93, 2, 26, 23, 28, 87, 14, 87, 8, 95, 12, 17, 70, 6, 24, 66, 17, 1, 10, 95, 81, 28, ], + // Microsoft 365 Copilot web (m365.cloud.microsoft) — public SPA client id + // observed in browser tokens and M365-Copilot2API. Not a per-user secret. + m365_oauth_client_id: [ + 12, 93, 15, 11, 74, 12, 16, 77, 72, 72, 73, 20, 82, 65, 93, 81, 72, 65, 28, 13, 93, 88, 93, 95, + 92, 70, 16, 81, 31, 66, 17, 4, 88, 88, 5, 28, + ], // Microsoft Edge Read Aloud (EdgeTTS) — public "trusted client token" used to // derive the Sec-MS-GEC anti-abuse header. Hardcoded in every known Edge // browser build and every open-source edge-tts reimplementation (e.g. diff --git a/open-sse/utils/usageTracking.ts b/open-sse/utils/usageTracking.ts index c89527518e..24fe802fda 100644 --- a/open-sse/utils/usageTracking.ts +++ b/open-sse/utils/usageTracking.ts @@ -567,6 +567,14 @@ export function sanitizeUsagePayloadForRequest( return replaceUsage(payload.message, "usage", FORMATS.CLAUDE); } if (payload.type === "message_delta" && payload.usage) { + // message_delta is output-only by spec. #10705 0-input repair would + // overwrite a valid message_start input count with an estimate. + const delta = payload.usage; + const deltaInput = + tokenNumber(delta.input_tokens) + + tokenNumber(delta.cache_read_input_tokens) + + tokenNumber(delta.cache_creation_input_tokens); + if (deltaInput === 0) return false; return replaceUsage(payload, "usage", FORMATS.CLAUDE); } if (payload.response?.usage) { diff --git a/skills/omni-combos-routing/SKILL.md b/skills/omni-combos-routing/SKILL.md index 9745bf9085..549e2b75e5 100644 --- a/skills/omni-combos-routing/SKILL.md +++ b/skills/omni-combos-routing/SKILL.md @@ -34,6 +34,28 @@ curl -X POST https://localhost:20128/api/combos \ -d '{}' ``` +### GET /api/combos/{id} + +Get combo by ID + +```bash +curl https://localhost:20128/api/combos/{id} \ + -H "Authorization: Bearer $OMNIROUTE_TOKEN" +``` + +### PUT /api/combos/{id} + +Update combo + +Partial update: the body is merged onto the stored combo, so a field left out keeps its current value. An array that IS sent replaces the stored one outright. + +```bash +curl -X PUT https://localhost:20128/api/combos/{id} \ + -H "Authorization: Bearer $OMNIROUTE_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{}' +``` + ### PATCH /api/combos/{id} Update combo diff --git a/skills/omni-inference/SKILL.md b/skills/omni-inference/SKILL.md index 2951ce794b..0dd4c541ca 100644 --- a/skills/omni-inference/SKILL.md +++ b/skills/omni-inference/SKILL.md @@ -27,7 +27,7 @@ returns 429 `WAITING_FOR_CAPACITY` with `Retry-After`. ```bash curl -X POST https://localhost:20128/api/v1/session-leases \ - -H "Authorization: Bearer $OMNIROUTE_TOKEN" + -H "Authorization: Bearer $OMNIROUTE_TOKEN" \ -H "Content-Type: application/json" \ -d '{}' ``` @@ -147,7 +147,7 @@ Same handler as `POST /api/v1/embeddings`. Provided so Jina-compatible clients t ```bash curl -X POST https://localhost:20128/api/v1/multimodal-embeddings \ - -H "Authorization: Bearer $OMNIROUTE_TOKEN" + -H "Authorization: Bearer $OMNIROUTE_TOKEN" \ -H "Content-Type: application/json" \ -d '{}' ``` diff --git a/src/app/api/providers/route.ts b/src/app/api/providers/route.ts index 77c102bb0a..f1825674c2 100644 --- a/src/app/api/providers/route.ts +++ b/src/app/api/providers/route.ts @@ -17,6 +17,7 @@ import { isClaudeCodeCompatibleProvider, isOpenAICompatibleProvider, isAnthropicCompatibleProvider, + resolveProviderId, } from "@/shared/constants/providers"; import { getConsistentMachineId } from "@/shared/utils/machineId"; import { syncToCloud } from "@/lib/cloudSync"; @@ -114,7 +115,7 @@ export async function POST(request: Request) { return NextResponse.json({ error: validation.error }, { status: 400 }); } const { - provider, + provider: requestedProvider, apiKey, name, priority, @@ -123,6 +124,7 @@ export async function POST(request: Request) { testStatus, providerSpecificData: incomingPsd, } = validation.data; + const provider = resolveProviderId(requestedProvider); // Business validation const isValidProvider = diff --git a/src/app/api/v1/models/catalog.ts b/src/app/api/v1/models/catalog.ts index a864ca3608..c56a543d56 100644 --- a/src/app/api/v1/models/catalog.ts +++ b/src/app/api/v1/models/catalog.ts @@ -519,13 +519,11 @@ async function buildUnifiedModelsResponseCore( const targetModel = getComboTargetModelId(target); if (!targetModel) return null; - const canonical = getCanonicalModelMetadata( - { - provider: targetModel.providerId, - model: targetModel.modelId, - }, - capabilityResolutionSnapshot - ); + const canonical = getCanonicalModelMetadata({ + provider: targetModel.providerId, + model: targetModel.modelId, + snapshot: capabilityResolutionSnapshot, + }); if (!canonical) return null; const providerId = canonical.provider || targetModel.providerId; diff --git a/src/app/api/v1/responses/route.ts b/src/app/api/v1/responses/route.ts index 98e914d574..a7d9978898 100644 --- a/src/app/api/v1/responses/route.ts +++ b/src/app/api/v1/responses/route.ts @@ -1,3 +1,4 @@ +import { z } from "zod"; import { handleChat } from "@/sse/handlers/chat"; import { CORS_HEADERS } from "@/shared/utils/cors"; import { createInjectionGuard } from "@/middleware/promptInjectionGuard"; @@ -114,9 +115,11 @@ async function postHandler(request: any) { } catch { return finishAdmission(errorResponse(400, "Invalid JSON body")); } - if (!parsedBody || typeof parsedBody !== "object" || Array.isArray(parsedBody)) { + const parsed = z.object({}).passthrough().safeParse(parsedBody); + if (!parsed.success || Array.isArray(parsed.data)) { return finishAdmission(errorResponse(400, "Request body must be a JSON object")); } + parsedBody = parsed.data; const structuralAdmission = await admitChatStructure(parsedBody, admission.lease, { sessionId, diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 329df3d883..85bb06ddb8 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -1165,6 +1165,8 @@ "consoleLogs": "سجلات وحدة التحكم", "logsTimeline": "Timeline", "logsTimelineSubtitle": "جدول زمني للطلبات المرئية", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "التوجيه العام", "mitmProxy": "بروكسي MITM", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "فتح", "close": "إغلاق" }, - "noResults": "لا توجد نتائج", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "لا توجد نتائج" }, "webhooks": { "title": "خطافات الويب", @@ -1739,8 +1739,8 @@ "quotaShare": "مشاركة الحصة", "discovery": "الاستكشاف", "freeProviderRankings": "تصنيفات المزودين المجانيين", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "الفئات المجانية", "gamification": "التلعيب", "leaderboard": "لوحة الصدارة", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "اختر كيفية توزيع الطلبات على نماذجك؛ تتوفر 13 استراتيجية", "wizardStep4Title": "المراجعة والحفظ", "wizardStep4Desc": "راجع التكوين وفعّل المجموعة", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "تشغيل", "emailVisibilityStateOff": "إيقاف", "reorderHandle": "اسحب لإعادة الترتيب", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "لقد تم إهمال هذا المزود", "riskNotice": { "title": "قبل المتابعة", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "مزوّد له محاذير استخدام — انقر لعرض التفاصيل", "oauth": "يستخدم هذا المزوّد جلسة المنتج الرسمية أو OAuth، وهي غير مصرّح بها للاستخدام مع الوكيل أو الموجّه. لا نوصي بالاستخدام المكثف للوكلاء المستقلين (مثل OpenCloud والتدفقات الطويلة متعددة الخطوات والدُفعات الكبيرة)، فقد يقيّد مزوّد المنبع الحساب أو يحظره. استخدمه على مسؤوليتك.", "webCookie": "يصادق هذا المزوّد عبر ملفات تعريف ارتباط جلسة الويب. قد تُبطل خدمة المنبع الجلسة في أي وقت، ما يتطلب تسجيل الدخول مجددًا. لا يُنصح به للعمليات الطويلة غير المراقبة. استخدمه على مسؤوليتك.", @@ -5107,9 +5111,9 @@ "cancel": "إلغاء" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "معطل", "enableProvider": "تمكين المزود", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "تخطي {count} نموذج موجود", "autoSync": "المزامنة التلقائية", "autoSyncShort": "المزامنة", + "autoFetchModels": "جلب النماذج من المصدر تلقائيًا", + "autoFetchModelsTooltip": "استرجاع وتخزين نماذج المصدر عند الحاجة", + "autoFetchModelsEnabled": "تم تمكين جلب النموذج العلوي تلقائيًا", + "autoFetchModelsDisabled": "تم تعطيل جلب النموذج العلوي تلقائيًا", + "autoFetchModelsToggleFailed": "فشل في تبديل جلب النموذج العلوي تلقائيًا", + "autoFetchModelsPartialFailure": "تم تحديث بعض الاتصالات، لكن نموذج المصدر التلقائي لم يتغير في كل مكان", + "overridesUpstreamModel": "يتجاوز المصدر", + "overridesUpstreamModelHint": "إعداداتك تتجاوز هذا النموذج العلوي", + "resetToUpstreamDefaults": "استعادة الإعدادات الافتراضية للمصدر", + "resetToUpstreamDefaultsSuccess": "تم استعادة إعدادات النموذج الافتراضية من المصدر", + "resetToUpstreamDefaultsFailed": "فشل في استعادة إعدادات النموذج الافتراضية من المصدر", "autoSyncTooltip": "تحديث قائمة النماذج كل 24 ساعة (يمكن ضبطه عبر MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "تم تمكين المزامنة التلقائية — سيتم تحديث النماذج بشكل دوري", "autoSyncDisabled": "تم تعطيل المزامنة التلقائية", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "إعادة كتابة استدعاءات أداة web_fetch الأصلية إلى /v1/web/fetch الخاصة بـ OmniRoute.", "interceptionLoadError": "فشل تحميل إعدادات الاعتراض: {error}", "interceptionSaveError": "فشل حفظ إعدادات الاعتراض: {error}", - "ccAliasSectionTitle": "Expose في كود كلود (claude/…)", - "ccAliasSectionHint": "قم بالإعلان عن نماذج هذا المزود تحت معرفات المرآة claude/<provider>/<model> حتى يتمكن نموذج اكتشاف بوابة Claude Code من إدراجها. معطلة بشكل افتراضي - تمكين هذا يضاعف إدخالات الكتالوج لجميع العملاء.", - "ccAliasProviderLevelLabel": "موفر افتراضي", - "ccAliasModelOverridesLabel": "تجاوزات لكل نموذج", - "ccAliasModelOverrideAriaLabel": "تجاوز لـ {modelId}", - "ccAliasStateInherit": "وراثة", - "ccAliasStateOn": "تشغيل", - "ccAliasStateOff": "إيقاف", - "ccAliasAddModelPlaceholder": "معرف النموذج (مثل gpt-4o)", - "ccAliasAddModelButton": "إضافة تجاوز", - "ccAliasLoadError": "فشل في تحميل إعدادات discovery-alias: {error}", - "ccAliasSaveError": "فشل في حفظ إعداد alias الاكتشاف: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "ترويسات المنبع الإضافية", "compatUpstreamHeadersHint": "إعداد عالي الصلاحيات — يعامل معاملة بيانات اعتماد API الخاصة بالمزود، لذا لا ينبغي استخدامه إلا من مسؤولين موثوقين. تُدمج الترويسات بعد أن يضيف OmniRoute المصادقة. إذا استخدمت ترويسة مخصصة الاسم نفسه لترويسة موجودة (مثل Authorization)، فستستبدل قيمتك الترويسة المنشأة تلقائيًا بالكامل، بما فيها رمز Bearer. قد يؤدي الإعداد الخاطئ إلى خطأ 401 أو تعطّل مصادقة المنبع. أضف ترويسة واحدة في كل صف. تُحفظ القيمة عند فقدان التركيز أو إغلاق اللوحة.", "compatUpstreamHeaderName": "اسم الترويسة", @@ -6194,7 +6209,7 @@ "galadriel": "ربط Galadriel بمفتاح API.", "predibase": "رصيد تجريبي مجاني بقيمة 25 دولارًا (صلاحية لمدة 30 يومًا)", "chenzk": "بوابة متوافقة مع OpenAI مع كتالوج نماذج مباشر على chenzk.top.", - "freepik": "توليد الصور باستخدام واجهة برمجة تطبيقات Mystic من Freepik.", + "magnific": "توليد الصور باستخدام واجهة برمجة تطبيقات Mystic من Freepik.", "freetheai": "بوابة مجانية متوافقة مع OpenAI مع دعم نماذج التمرير المباشر (passthrough).", "g4f-gemini": "وكيل عكسي مجاني بدون مفتاح من g4f.space إلى Gemini، محدود بـ 5 طلبات في الدقيقة.", "g4f-groq": "وكيل عكسي مجاني بدون مفتاح من g4f.space إلى Groq، محدود بـ 5 طلبات في الدقيقة.", @@ -6209,6 +6224,7 @@ "claude": "ربط Claude Code باستخدام تدفق OAuth الحالي.", "cline": "ربط Cline باستخدام تدفق OAuth الحالي.", "cursor": "ربط Cursor IDE باستخدام تدفق OAuth الحالي.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "ربط GitHub Copilot باستخدام تدفق OAuth الحالي.", "gitlab-duo": "تطبيق OAuth بنطاقات ai_features + read_user. قم بتكوين GITLAB_DUO_OAUTH_CLIENT_ID واختياريًا GITLAB_DUO_OAUTH_CLIENT_SECRET على مثيل OmniRoute هذا.", "kilocode": "ربط Kilo Code باستخدام تدفق OAuth الحالي.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "في فترة تهدئة", "codexPoolUsed": "مُستخدم", "codexPoolUntil": "حتى {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "التراجع المجهول", "anonymousFallbackDesc": "عند استنفاد جميع الاتصالات المكونة (الحصة، الاعتمادات، أو انتهاء الصلاحية)، استخدم مؤقتًا المستوى بدون مفتاح لهذا المزود. قم بإيقاف التشغيل لتخطي هذا المزود بدلاً من إرسال طلبات مجهولة — يُوصى بذلك عندما يرفض المستوى بدون مفتاح هذه الطلبات (401).", "anonymousFallbackEnabled": "تم تمكين النسخة الاحتياطية المجهولة لـ {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "إعدادات نقطة نهاية النموذج المحفوظ", "searchByModelAria": "البحث حسب الطراز", "selectSupportedEndpoint": "اختر نقطة نهاية مدعومة واحدة على الأقل", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "تم تعطيل جلب النموذج العلوي تلقائيًا", - "autoFetchModels": "جلب النماذج من المصدر تلقائيًا", - "autoFetchModelsEnabled": "تم تمكين جلب النموذج العلوي تلقائيًا", - "autoFetchModelsTooltip": "استرجاع وتخزين نماذج المصدر عند الحاجة", - "autoFetchModelsToggleFailed": "فشل في تبديل جلب النموذج العلوي تلقائيًا", - "overridesUpstreamModelHint": "إعداداتك تتجاوز هذا النموذج العلوي", - "overridesUpstreamModel": "يتجاوز المصدر", - "autoFetchModelsPartialFailure": "تم تحديث بعض الاتصالات، لكن نموذج المصدر التلقائي لم يتغير في كل مكان", - "resetToUpstreamDefaults": "استعادة الإعدادات الافتراضية للمصدر", - "resetToUpstreamDefaultsSuccess": "تم استعادة إعدادات النموذج الافتراضية من المصدر", - "resetToUpstreamDefaultsFailed": "فشل في استعادة إعدادات النموذج الافتراضية من المصدر" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "الإعدادات", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "قم بوضع علامة على اتصالات الموفر على أنها معطلة بشكل دائم إذا أعادت إشارات حظر طرفية محددة (على سبيل المثال، HTTP 403 \"التحقق من حسابك\"). يؤدي هذا إلى إزالتها من دوران التحرير والسرد.", "autoDisableThreshold": "عتبة الحظر", "autoDisableThresholdDesc": "إشارات الحظر المتتالية مطلوبة قبل التعطيل الدائم.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "الكلمات المفتاحية المحظورة", "customBannedSignalsDesc": "كلمات مفتاحية إضافية تؤدي إلى اكتشاف حظر الحساب الدائم. تنطبق الكلمات المفتاحية المدمجة دائمًا.", "customBannedSignalsPlaceholder": "على سبيل المثال: api key revoked", @@ -7210,6 +7203,7 @@ "configured": "مُهيأ", "none": "بلا", "modelOverrideValuePlaceholder": "قيمة رقمية", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "إضافة مفتاح وقيمة", "noModelOverrides": "لم يتم تكوين أي تجاوزات لهذا النموذج.", "modelOverrideLoadFailed": "فشل تحميل تجاوزات النموذج", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK مقتضب (文言)", "description": "أسلوب صيني كلاسيكي فائق الاقتضاب (متاح للغة الصينية فقط)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "تنتقل مجموعات التناوب الدائري (Round-robin) والمجموعات العشوائية إلى اتصال مختلف في كل طلب بدلاً من تثبيت محادثة كاملة باتصال واحد بواسطة هاش الرسالة الأولى. اتركها معطلة للحفاظ على إصابات prompt-cache للمحادثات متعددة الأدوار. عمليات التجاوز الخاصة بكل مجموعة لها الأسبقية.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "تنقيح بيانات الاعتماد", "credentialRedactionDesc": "تنقيح مفاتيح API والرموز المميزة والأسرار من السياق المرسل إلى الموفرين ومن الاستجابات.", "enableCredentialRedaction": "تمكين تنقيح بيانات الاعتماد", @@ -8621,6 +8623,27 @@ }, "enableTitle": "تمكين المحرك", "enableDescription": "يعمل في نهاية المكدس (بعد أن يقوم RTK/Caveman بتنظيف النص، ويقوم OmniGlyph بتحويل المتبقي إلى صور) ويعمل أيضًا بشكل مستقل عبر وضع omniglyph. هذه نسخة معاينة وتظل معطلة افتراضيًا حتى تكتمل عملية التحقق الشاملة من البداية للنهاية.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "تم الحفظ.", "saveFailed": "تعذر الحفظ.", "enableAria": "تمكين محرك OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "أقصى", "grokAutoTopUpMonth": "شهر", "grokAdditionalCredits": "أرصدة إضافية", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "المسجل", "proxyTab": "بروكسي", "budgetManagement": "إدارة الميزانية", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "الرمز الأول", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/az.json b/src/i18n/messages/az.json index 7c7754b05e..6bf2e21e55 100644 --- a/src/i18n/messages/az.json +++ b/src/i18n/messages/az.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Konsol qeydləri", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Vizual tələb zaman cədvəli", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Qlobal marşrutlaşdırma", "mitmProxy": "MITM Proksi", "oneProxy": "1 Proksi", @@ -1291,9 +1293,7 @@ "open": "açıq", "close": "bağla" }, - "noResults": "Heç bir nəticə yoxdur", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Heç bir nəticə yoxdur" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kvota payı", "discovery": "Kəşf", "freeProviderRankings": "Pulsuz provayder reytinqləri", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Pulsuz səviyyələr", "gamification": "Oyunlaşdırma", "leaderboard": "Liderlər cədvəli", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 14 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "This provider has been deprecated", "riskNotice": { "title": "Davam etməzdən əvvəl", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "İstifadə xəbərdarlıqları olan provayder — ətraflı məlumat üçün klikləyin", "oauth": "Bu provayder proksi/router istifadəsi üçün icazə verilməyən rəsmi məhsul sessiyanızdan/OAuth-dan istifadə edir. İntensiv avtonom agent istifadəsini (OpenCloud tərzi, uzun çoxmərhələli axınlar, böyük paketlər) tövsiyə etmirik — upstream xidmət hesabı məhdudlaşdırmaqla və ya bloklamaqla reaksiya verə bilər. Riski öz üzərinizə götürərək istifadə edin.", "webCookie": "Bu provayder veb sessiya kukiləriniz vasitəsilə autentifikasiya edir. Upstream xidmət istənilən vaxt sessiyanı ləğv edə bilər və bu da yenidən daxil olmağınızı tələb edər. Uzunmüddətli nəzarətsiz əməliyyatlar üçün tövsiyə edilmir. Riski öz üzərinizə götürərək istifadə edin.", @@ -5107,9 +5111,9 @@ "cancel": "Ləğv et" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "Avtomatik olaraq yuxarı axın modellərini əldə et", + "autoFetchModelsTooltip": "Tələb olunduqda yuxarıdakı modelləri əldə et və keşlə.", + "autoFetchModelsEnabled": "Yuxarı axın modelinin avtomatik yüklənməsi aktivdir", + "autoFetchModelsDisabled": "Yuxarı axın modelinin avtomatik əldə edilməsi deaktivdir", + "autoFetchModelsToggleFailed": "Yuxarı axın modelinin avtomatik əldə edilməsini dəyişdirmək mümkün olmadı", + "autoFetchModelsPartialFailure": "Bəzi bağlantılar yeniləndi, lakin yuxarı axın modelinin avtomatik alınması hər yerdə dəyişdirilmədi", + "overridesUpstreamModel": "Yuxarıdan üstəgəl edir", + "overridesUpstreamModelHint": "Sizin parametrləriniz bu yuxarı axın modelini üstələyir", + "resetToUpstreamDefaults": "Yuxarı axın standartlarını bərpa et", + "resetToUpstreamDefaultsSuccess": "Yuxarı axın modelinin standart parametrləri bərpa edildi", + "resetToUpstreamDefaultsFailed": "Yuxarı axın modelinin standartlarını bərpa etmək mümkün olmadı", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Yerli web_fetch alət çağırışlarını OmniRoute-un /v1/web/fetch ünvanına yenidən yazın.", "interceptionLoadError": "Ələ keçirmə parametrlərini yükləmək mümkün olmadı: {error}", "interceptionSaveError": "Ələ keçirmə parametrlərini yadda saxlamaq mümkün olmadı: {error}", - "ccAliasSectionTitle": "Claude Kodunda (claude/…) açıq et", - "ccAliasSectionHint": "Bu təminatçının modellərini claude/<provider>/<model> güzgü ID-ləri altında reklam edin ki, Claude Code-un qapı modeli kəşfi onları siyahıya ala bilsin. Varsayılan olaraq deaktivdir — bunu aktivləşdirmək bütün müştərilər üçün kataloq girişlərini ikiqat artırır.", - "ccAliasProviderLevelLabel": "Təchizatçı standart", - "ccAliasModelOverridesLabel": "Model üzrə üst-üstə düşmələr", - "ccAliasModelOverrideAriaLabel": "{modelId} üçün üst-üstə düşmə", - "ccAliasStateInherit": "İrsiyyət", - "ccAliasStateOn": "Üstündə", - "ccAliasStateOff": "Söndürüldü", - "ccAliasAddModelPlaceholder": "Model id (məsələn, gpt-4o)", - "ccAliasAddModelButton": "Override əlavə et", - "ccAliasLoadError": "Kəşf-alias parametrlərini yükləmək mümkün olmadı: {error}", - "ccAliasSaveError": "discovery-alias parametrlərini saxlamaq mümkün olmadı: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Galadriel-i API açarı ilə qoşun.", "predibase": "$25 pulsuz sınaq krediti (30 günlük etibarlılıq müddəti)", "chenzk": "chenzk.top ünvanında canlı model kataloqu olan OpenAI ilə uyğun gələn şlüz.", - "freepik": "Freepik-in Mystic API-si ilə şəkillər yaradın.", + "magnific": "Freepik-in Mystic API-si ilə şəkillər yaradın.", "freetheai": "Passthrough model dəstəyi olan pulsuz OpenAI ilə uyğun gələn şlüz.", "g4f-gemini": "Gemini-yə pulsuz, açarsız g4f.space tərs proksisi, dəqiqədə 5 sorğu ilə məhdudlaşdırılıb.", "g4f-groq": "Groq-a pulsuz, açarsız g4f.space tərs proksisi, dəqiqədə 5 sorğu ilə məhdudlaşdırılıb.", @@ -6209,6 +6224,7 @@ "claude": "Claude Code-u mövcud OAuth axını ilə qoşun.", "cline": "Cline-ı mövcud OAuth axını ilə qoşun.", "cursor": "Cursor IDE-ni mövcud OAuth axını ilə qoşun.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "GitHub Copilot-u mövcud OAuth axını ilə qoşun.", "gitlab-duo": "ai_features + read_user əhatə dairələri olan OAuth tətbiqi. Bu OmniRoute instansiyasında GITLAB_DUO_OAUTH_CLIENT_ID və istəyə bağlı olaraq GITLAB_DUO_OAUTH_CLIENT_SECRET konfiqurasiya edin.", "kilocode": "Kilo Code-u mövcud OAuth axını ilə qoşun.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Gözləmə müddətindədir", "codexPoolUsed": "istifadə edilib", "codexPoolUntil": "{value} tarixinədək", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonim ehtiyat", "anonymousFallbackDesc": "Bütün konfiqurasiya olunmuş bağlantılar tükəndikdə (kvota, kreditlər və ya müddət), müvəqqəti olaraq bu təminatçının açarsız səviyyəsini istifadə edin. Anonim sorğular göndərmək əvəzinə bu təminatçını atlamaq üçün söndürün — açarsız səviyyə onları rədd etdikdə (401) tövsiyə olunur.", "anonymousFallbackEnabled": "{provider} üçün anonim ehtiyat aktivdir", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Saxlanmış model son nöqtəsi parametrləri", "searchByModelAria": "Model üzrə axtarış edin", "selectSupportedEndpoint": "Ən azı bir dəstəklənən son nöqtəni seçin", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Avtomatik olaraq yuxarı axın modellərini əldə et", - "autoFetchModelsDisabled": "Yuxarı axın modelinin avtomatik əldə edilməsi deaktivdir", - "autoFetchModelsTooltip": "Tələb olunduqda yuxarıdakı modelləri əldə et və keşlə.", - "autoFetchModelsEnabled": "Yuxarı axın modelinin avtomatik yüklənməsi aktivdir", - "autoFetchModelsToggleFailed": "Yuxarı axın modelinin avtomatik əldə edilməsini dəyişdirmək mümkün olmadı", - "overridesUpstreamModelHint": "Sizin parametrləriniz bu yuxarı axın modelini üstələyir", - "overridesUpstreamModel": "Yuxarıdan üstəgəl edir", - "autoFetchModelsPartialFailure": "Bəzi bağlantılar yeniləndi, lakin yuxarı axın modelinin avtomatik alınması hər yerdə dəyişdirilmədi", - "resetToUpstreamDefaults": "Yuxarı axın standartlarını bərpa et", - "resetToUpstreamDefaultsSuccess": "Yuxarı axın modelinin standart parametrləri bərpa edildi", - "resetToUpstreamDefaultsFailed": "Yuxarı axın modelinin standartlarını bərpa etmək mümkün olmadı" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Qadağan olunmuş açar sözlər", "customBannedSignalsDesc": "Hesabın daimi bloklanmasının aşkarlanmasını işə salan əlavə açar sözlər. Daxili açar sözlər həmişə tətbiq olunur.", "customBannedSignalsPlaceholder": "məs., api key revoked", @@ -7210,6 +7203,7 @@ "configured": "konfiqurasiya edilib", "none": "Heç biri", "modelOverrideValuePlaceholder": "Ədədi dəyər", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Açar-dəyər əlavə et", "noModelOverrides": "Bu model üçün heç bir yenidən təyinetmə konfiqurasiya edilməyib.", "modelOverrideLoadFailed": "Model yenidən təyinetmələrini yükləmək mümkün olmadı", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Yığcam CJK (文言)", "description": "Klassik Çin ultra-yığcam üslubu (yalnız Çin dili üçün əlçatandır)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin və təsadüfi kombinasiyalar, bütün söhbəti ilk mesajın heşinə görə bir bağlantıya bağlamaq əvəzinə, hər sorğuda fərqli bir bağlantıya keçid edir. Çoxmərhələli söhbətlər üçün prompt-cache hitlərini qorumaq üçün bunu söndürülmüş saxlayın. Hər kombinasiya üçün üstünlüklər prioritet təşkil edir.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Kimlik məlumatlarının gizlədilməsi", "credentialRedactionDesc": "Provayderlərə göndərilən kontekstdən və cavablardan API açarlarını, tokenləri və gizli məlumatları gizlədin.", "enableCredentialRedaction": "Kimlik məlumatlarının gizlədilməsini aktivləşdirin", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Mühərriki aktivləşdir", "enableDescription": "Yığında ən son işləyir (RTK/Caveman mətni təmizlədikdən sonra OmniGlyph qalan hissəni şəkillərə çevirir) və həmçinin omniglyph rejimi vasitəsilə müstəqil işləyir. Bu, ilkin baxışdır və başdan-başa yoxlama tamamlanana qədər standart olaraq söndürülmüş qalır.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Saxlanıldı.", "saveFailed": "Saxlamaq mümkün olmadı.", "enableAria": "OmniGlyph mühərrikini aktivləşdir", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksimum", "grokAutoTopUpMonth": "ay", "grokAdditionalCredits": "Əlavə Kreditlər", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "İlk Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 463943e63a..a8b6e486b3 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Визуален времеви график на заявките", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "отвори", "close": "затвори" }, - "noResults": "Няма резултати", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Няма резултати" }, "webhooks": { "title": "Уеб кукички", @@ -1739,8 +1739,8 @@ "quotaShare": "Споделяне на квота", "discovery": "Откриване", "freeProviderRankings": "Класации на безплатни доставчици", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Безплатни нива", "gamification": "Геймификация", "leaderboard": "Класация", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Този доставчик е отхвърлен", "riskNotice": { "title": "Преди да продължите", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Доставчик с предупреждения за употреба — щракнете за подробности", "oauth": "Този доставчик използва вашата официална продуктова сесия/OAuth, която не е оторизирана за използване като прокси/рутер. Не препоръчваме интензивно използване на автономни агенти (в стил OpenCloud, дълги многостъпкови процеси, големи партиди) — upstream услугата може да реагира чрез ограничаване или блокиране на акаунта. Използвайте на свой собствен риск.", "webCookie": "Този доставчик се удостоверява чрез бисквитките на вашата уеб сесия. Upstream услугата може да анулира сесията по всяко време, което ще изисква да се влезете отново. Не се препоръчва за дълги операции без надзор. Използвайте на свой собствен риск.", @@ -5107,9 +5111,9 @@ "cancel": "Отказ" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Забранено", "enableProvider": "Активиране на доставчика", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Пропускане на {count} съществуващи модела", "autoSync": "Автоматично синхронизиране", "autoSyncShort": "Синхронизиране", + "autoFetchModels": "Автоматично извличане на upstream модели", + "autoFetchModelsTooltip": "Изтеглете и кеширайте upstream модели, когато е необходимо", + "autoFetchModelsEnabled": "Автоматично извличане на upstream модела е активирано", + "autoFetchModelsDisabled": "Автоматично извличане на upstream модела е деактивирано", + "autoFetchModelsToggleFailed": "Неуспешно превключване на автоматично извличане на upstream модела", + "autoFetchModelsPartialFailure": "Някои връзки са актуализирани, но автоматичното извличане на upstream модела не беше променено навсякъде", + "overridesUpstreamModel": "Презаписва upstream", + "overridesUpstreamModelHint": "Вашите настройки надвиват тази основна модел.", + "resetToUpstreamDefaults": "Възстановяване на настройки по подразбиране на upstream", + "resetToUpstreamDefaultsSuccess": "Възстановени настройки по подразбиране на upstream модела", + "resetToUpstreamDefaultsFailed": "Неуспешно възстановяване на подразбиращите се настройки на upstream модела", "autoSyncTooltip": "Автоматично опресняване на списъка с модели на всеки 24 часа (може да се конфигурира чрез MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Автоматичното синхронизиране е активирано — моделите ще се опресняват периодично", "autoSyncDisabled": "Автоматичното синхронизиране е деактивирано", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Пренаписване на повикванията на вградения инструмент web_fetch към /v1/web/fetch на OmniRoute.", "interceptionLoadError": "Неуспешно зареждане на настройките за прихващане: {error}", "interceptionSaveError": "Неуспешно запазване на настройките за прихващане: {error}", - "ccAliasSectionTitle": "Изложи в Claude Code (claude/…)", - "ccAliasSectionHint": "Рекламирайте моделите на този доставчик под claude/<provider>/<model> mirror ids, за да може откритията на моделите на Claude Code да ги изброява. По подразбиране е изключено — активирането му удвоява записите в каталога за всички клиенти.", - "ccAliasProviderLevelLabel": "Дефолтен доставчик", - "ccAliasModelOverridesLabel": "Преодолявания на моделите", - "ccAliasModelOverrideAriaLabel": "Презапис за {modelId}", - "ccAliasStateInherit": "Наследи", - "ccAliasStateOn": "Включено", - "ccAliasStateOff": "Изключено", - "ccAliasAddModelPlaceholder": "Идентификатор на модела (напр. gpt-4o)", - "ccAliasAddModelButton": "Добави заместване", - "ccAliasLoadError": "Неуспешно зареждане на настройки за discovery-alias: {error}", - "ccAliasSaveError": "Неуспешно запазване на настройката discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Свържете Galadriel с API ключ.", "predibase": "$25 безплатни кредити за пробен период (валидност 30 дни)", "chenzk": "Съвместим с OpenAI шлюз с каталог на моделите на живо на chenzk.top.", - "freepik": "Генерирайте изображения с Mystic API на Freepik.", + "magnific": "Генерирайте изображения с Mystic API на Freepik.", "freetheai": "Безплатен съвместим с OpenAI шлюз с поддръжка на passthrough модели.", "g4f-gemini": "Безплатно обратно прокси без ключ от g4f.space към Gemini, ограничено до 5 заявки в минута.", "g4f-groq": "Безплатно обратно прокси без ключ от g4f.space към Groq, ограничено до 5 заявки в минута.", @@ -6209,6 +6224,7 @@ "claude": "Свържете Claude Code със съществуващия OAuth поток.", "cline": "Свържете Cline със съществуващия OAuth поток.", "cursor": "Свържете Cursor IDE със съществуващия OAuth поток.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Свържете GitHub Copilot със съществуващия OAuth поток.", "gitlab-duo": "OAuth приложение с обхвати ai_features + read_user. Конфигурирайте GITLAB_DUO_OAUTH_CLIENT_ID и по избор GITLAB_DUO_OAUTH_CLIENT_SECRET на тази инстанция на OmniRoute.", "kilocode": "Свържете Kilo Code със съществуващия OAuth поток.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "В период на изчакване", "codexPoolUsed": "използвано", "codexPoolUntil": "До {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Анонимен резервен вариант", "anonymousFallbackDesc": "Когато всички конфигурирани връзки са изчерпани (квота, кредити или изтичане), временно използвайте безключовия слой на този доставчик. Изключете, за да пропуснете този доставчик вместо да изпращате анонимни заявки — препоръчително, когато безключовият слой ги отхвърля (401).", "anonymousFallbackEnabled": "Анонимен резервен вариант е активиран за {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Настройки на крайна точка на запазен модел", "searchByModelAria": "Търсене по модел", "selectSupportedEndpoint": "Изберете поне една поддържана крайна точка", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Автоматично извличане на upstream модели", - "autoFetchModelsEnabled": "Автоматично извличане на upstream модела е активирано", - "autoFetchModelsTooltip": "Изтеглете и кеширайте upstream модели, когато е необходимо", - "overridesUpstreamModel": "Презаписва upstream", - "autoFetchModelsToggleFailed": "Неуспешно превключване на автоматично извличане на upstream модела", - "autoFetchModelsPartialFailure": "Някои връзки са актуализирани, но автоматичното извличане на upstream модела не беше променено навсякъде", - "autoFetchModelsDisabled": "Автоматично извличане на upstream модела е деактивирано", - "resetToUpstreamDefaults": "Възстановяване на настройки по подразбиране на upstream", - "resetToUpstreamDefaultsSuccess": "Възстановени настройки по подразбиране на upstream модела", - "resetToUpstreamDefaultsFailed": "Неуспешно възстановяване на подразбиращите се настройки на upstream модела", - "overridesUpstreamModelHint": "Вашите настройки надвиват тази основна модел." + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Настройки", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Забранени ключови думи", "customBannedSignalsDesc": "Допълнителни ключови думи, които задействат откриване за постоянен бан на акаунта. Вградените ключови думи се прилагат винаги.", "customBannedSignalsPlaceholder": "напр. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "конфигуриран", "none": "Няма", "modelOverrideValuePlaceholder": "Числова стойност", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Добавяне на ключ-стойност", "noModelOverrides": "Няма конфигурирани предефинирания за този модел.", "modelOverrideLoadFailed": "Неуспешно зареждане на предефиниранията на модела", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Сбит CJK (文言)", "description": "Класически китайски ултра-сбит стил (наличен само за китайски)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Комбинациите от тип Round-robin и random се ротират към различна връзка при всяка заявка, вместо да обвързват целия разговор към една връзка чрез хеша на първото съобщение. Оставете изключено, за да запазите съвпаденията в кеша на подканите (prompt-cache) за многостъпкови чатове. Персонализираните настройки за всяка комбинация имат предимство.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Скриване на идентификационни данни", "credentialRedactionDesc": "Скриване на API ключове, токени и тайни от контекста, изпратен към доставчиците, и от отговорите.", "enableCredentialRedaction": "Активиране на скриването на идентификационни данни", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Активиране на енджина", "enableDescription": "Изпълнява се последен в стека (след като RTK/Caveman изчисти текста, OmniGlyph конвертира остатъка в изображения) и също така работи самостоятелно чрез режим omniglyph. Това е предварителна версия и остава изключена по подразбиране, докато не приключи цялостната валидация.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Запазено.", "saveFailed": "Неуспешно запазване.", "enableAria": "Активиране на енджина OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "макс", "grokAutoTopUpMonth": "месец", "grokAdditionalCredits": "Допълнителни кредити", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Дървосекач", "proxyTab": "Прокси", "budgetManagement": "Управление на бюджета", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Първи токен", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json index fe486a3ffd..aadc026d06 100644 --- a/src/i18n/messages/bn.json +++ b/src/i18n/messages/bn.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "ভিজ্যুয়াল রিকোয়েস্ট টাইমলাইন", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "খুলুন", "close": "বন্ধ করুন" }, - "noResults": "কোন ফলাফল নেই", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "কোন ফলাফল নেই" }, "webhooks": { "title": "ওয়েবহুক", @@ -1739,8 +1739,8 @@ "quotaShare": "কোটা শেয়ার", "discovery": "ডিসকভারি", "freeProviderRankings": "ফ্রি প্রোভাইডার র‍্যাঙ্কিং", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "ফ্রি টিয়ার", "gamification": "গেমিফিকেশন", "leaderboard": "লিডারবোর্ড", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "এই প্রদানকারীকে অবমূল্যায়ন করা হয়েছে", "riskNotice": { "title": "এগিয়ে যাওয়ার আগে", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "ব্যবহারের সতর্কতা সহ প্রদানকারী — বিস্তারিত জানতে ক্লিক করুন", "oauth": "এই প্রদানকারীটি আপনার অফিসিয়াল প্রোডাক্ট সেশন/OAuth ব্যবহার করে, যা প্রক্সি/রাউটার ব্যবহারের জন্য অনুমোদিত নয়। আমরা নিবিড় স্বায়ত্তশাসিত এজেন্ট ব্যবহার (OpenCloud-স্টাইল, দীর্ঘ বহু-ধাপের ফ্লো, বড় ব্যাচ) সুপারিশ করি না — আপস্ট্রিম অ্যাকাউন্টটি সীমাবদ্ধ বা নিষিদ্ধ করে প্রতিক্রিয়া জানাতে পারে। নিজের ঝুঁকিতে ব্যবহার করুন।", "webCookie": "এই প্রদানকারীটি আপনার ওয়েব সেশন কুকিজের মাধ্যমে প্রমাণীকরণ করে। আপস্ট্রিম পরিষেবাটি যেকোনো সময় সেশনটি বাতিল করতে পারে, যার ফলে আপনাকে আবার লগ ইন করতে হবে। দীর্ঘ সময় ধরে অযত্নে রেখে কাজ চালানোর জন্য প্রস্তাবিত নয়। নিজের ঝুঁকিতে ব্যবহার করুন।", @@ -5107,9 +5111,9 @@ "cancel": "বাতিল করুন" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "আপস্ট্রিম মডেলগুলি স্বয়ংক্রিয়ভাবে আনুন", + "autoFetchModelsTooltip": "প্রয়োজন হলে আপস্ট্রিম মডেলগুলি ফেচ এবং ক্যাশ করুন", + "autoFetchModelsEnabled": "আপস্ট্রিম মডেল স্বয়ংক্রিয়-ফেচ সক্ষম করা হয়েছে", + "autoFetchModelsDisabled": "আপস্ট্রিম মডেল অটো-ফেচ নিষ্ক্রিয় করা হয়েছে", + "autoFetchModelsToggleFailed": "আপস্ট্রিম মডেল অটো-ফেচ টগল করতে ব্যর্থ হয়েছে", + "autoFetchModelsPartialFailure": "কিছু সংযোগ আপডেট হয়েছে, কিন্তু আপস্ট্রিম মডেলের স্বয়ংক্রিয়-ফেচ সব জায়গায় পরিবর্তিত হয়নি", + "overridesUpstreamModel": "আপস্ট্রিম ওভাররাইডস", + "overridesUpstreamModelHint": "আপনার সেটিংস এই আপস্ট্রিম মডেলকে অতিক্রম করে", + "resetToUpstreamDefaults": "আপস্ট্রিম ডিফল্টগুলি পুনরুদ্ধার করুন", + "resetToUpstreamDefaultsSuccess": "আপস্ট্রিম মডেল ডিফল্টগুলি পুনরুদ্ধার করা হয়েছে", + "resetToUpstreamDefaultsFailed": "আপস্ট্রিম মডেল ডিফল্টগুলি পুনরুদ্ধার করতে ব্যর্থ হয়েছে", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "নেটিভ web_fetch টুল কলগুলিকে OmniRoute-এর /v1/web/fetch-এ রিরাইট করুন।", "interceptionLoadError": "ইন্টারসেপশন সেটিংস লোড করতে ব্যর্থ হয়েছে: {error}", "interceptionSaveError": "ইন্টারসেপশন সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে: {error}", - "ccAliasSectionTitle": "Claude কোডে প্রকাশ করুন (claude/…)", - "ccAliasSectionHint": "এই প্রদানকারীর মডেলগুলি claude/<provider>/<model> মিরর আইডির অধীনে বিজ্ঞাপন দিন যাতে Claude Code-এর গেটওয়ে মডেল আবিষ্কার সেগুলি তালিকাভুক্ত করতে পারে। ডিফল্টভাবে বন্ধ — এটি সক্ষম করা হলে সমস্ত ক্লায়েন্টের জন্য ক্যাটালগের এন্ট্রি দ্বিগুণ হয়।", - "ccAliasProviderLevelLabel": "প্রদানকারী ডিফল্ট", - "ccAliasModelOverridesLabel": "প্রতি-মডেল ওভাররাইডস", - "ccAliasModelOverrideAriaLabel": "{modelId} এর জন্য ওভাররাইড", - "ccAliasStateInherit": "উত্তরাধিকারী", - "ccAliasStateOn": "চালু", - "ccAliasStateOff": "বন্ধ", - "ccAliasAddModelPlaceholder": "মডেল আইডি (যেমন gpt-4o)", - "ccAliasAddModelButton": "অভাররাইড যোগ করুন", - "ccAliasLoadError": "ডিসকভারি-অ্যালিয়াস সেটিংস লোড করতে ব্যর্থ: {error}", - "ccAliasSaveError": "ডিসকভারি-অ্যালিয়াস সেটিং সংরক্ষণ করতে ব্যর্থ: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "একটি API কী দিয়ে Galadriel সংযুক্ত করুন।", "predibase": "$25 ফ্রি ট্রায়াল ক্রেডিট (30 দিনের মেয়াদ)", "chenzk": "chenzk.top-এ লাইভ মডেল ক্যাটালগ সহ OpenAI-সামঞ্জস্যপূর্ণ গেটওয়ে।", - "freepik": "Freepik-এর Mystic API দিয়ে ছবি তৈরি করুন।", + "magnific": "Freepik-এর Mystic API দিয়ে ছবি তৈরি করুন।", "freetheai": "passthrough মডেল সমর্থন সহ বিনামূল্যের OpenAI-সামঞ্জস্যপূর্ণ গেটওয়ে।", "g4f-gemini": "Gemini-এর জন্য বিনামূল্যের কী-বিহীন g4f.space রিভার্স প্রক্সি, প্রতি মিনিটে 5টি অনুরোধে সীমাবদ্ধ।", "g4f-groq": "Groq-এর জন্য বিনামূল্যের কী-বিহীন g4f.space রিভার্স প্রক্সি, প্রতি মিনিটে 5টি অনুরোধে সীমাবদ্ধ।", @@ -6209,6 +6224,7 @@ "claude": "বিদ্যমান OAuth ফ্লো দিয়ে Claude Code সংযুক্ত করুন।", "cline": "বিদ্যমান OAuth ফ্লো দিয়ে Cline সংযুক্ত করুন।", "cursor": "বিদ্যমান OAuth ফ্লো দিয়ে Cursor IDE সংযুক্ত করুন।", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "বিদ্যমান OAuth ফ্লো দিয়ে GitHub Copilot সংযুক্ত করুন।", "gitlab-duo": "ai_features + read_user স্কোপ সহ OAuth অ্যাপ্লিকেশন। এই OmniRoute ইনস্ট্যান্সে GITLAB_DUO_OAUTH_CLIENT_ID এবং ঐচ্ছিকভাবে GITLAB_DUO_OAUTH_CLIENT_SECRET কনফিগার করুন।", "kilocode": "বিদ্যমান OAuth ফ্লো দিয়ে Kilo Code সংযুক্ত করুন।", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "কুলডাউনে আছে", "codexPoolUsed": "ব্যবহৃত", "codexPoolUntil": "{value} পর্যন্ত", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "অজ্ঞাত ফালব্যাক", "anonymousFallbackDesc": "যখন সমস্ত কনফিগার করা সংযোগ শেষ হয়ে যায় (কোটা, ক্রেডিট, বা মেয়াদ শেষ), এই প্রদানকারীর কীবিহীন স্তরটি অস্থায়ীভাবে ব্যবহার করুন। অজ্ঞাত অনুরোধ পাঠানোর পরিবর্তে এই প্রদানকারীটি বাদ দিতে বন্ধ করুন — যখন কীবিহীন স্তর সেগুলি প্রত্যাখ্যান করে (401) তখন এটি সুপারিশ করা হয়।", "anonymousFallbackEnabled": "{provider} এর জন্য অজ্ঞাত ফFallback সক্রিয় করা হয়েছে", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "সংরক্ষিত মডেল এন্ডপয়েন্ট সেটিংস", "searchByModelAria": "মডেল দ্বারা অনুসন্ধান করুন", "selectSupportedEndpoint": "কমপক্ষে একটি সমর্থিত এন্ডপয়েন্ট নির্বাচন করুন", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsTooltip": "প্রয়োজন হলে আপস্ট্রিম মডেলগুলি ফেচ এবং ক্যাশ করুন", - "autoFetchModelsEnabled": "আপস্ট্রিম মডেল স্বয়ংক্রিয়-ফেচ সক্ষম করা হয়েছে", - "autoFetchModelsDisabled": "আপস্ট্রিম মডেল অটো-ফেচ নিষ্ক্রিয় করা হয়েছে", - "autoFetchModels": "আপস্ট্রিম মডেলগুলি স্বয়ংক্রিয়ভাবে আনুন", - "overridesUpstreamModel": "আপস্ট্রিম ওভাররাইডস", - "autoFetchModelsToggleFailed": "আপস্ট্রিম মডেল অটো-ফেচ টগল করতে ব্যর্থ হয়েছে", - "autoFetchModelsPartialFailure": "কিছু সংযোগ আপডেট হয়েছে, কিন্তু আপস্ট্রিম মডেলের স্বয়ংক্রিয়-ফেচ সব জায়গায় পরিবর্তিত হয়নি", - "overridesUpstreamModelHint": "আপনার সেটিংস এই আপস্ট্রিম মডেলকে অতিক্রম করে", - "resetToUpstreamDefaults": "আপস্ট্রিম ডিফল্টগুলি পুনরুদ্ধার করুন", - "resetToUpstreamDefaultsFailed": "আপস্ট্রিম মডেল ডিফল্টগুলি পুনরুদ্ধার করতে ব্যর্থ হয়েছে", - "resetToUpstreamDefaultsSuccess": "আপস্ট্রিম মডেল ডিফল্টগুলি পুনরুদ্ধার করা হয়েছে" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "নিষিদ্ধ কীওয়ার্ড", "customBannedSignalsDesc": "অতিরিক্ত কীওয়ার্ড যা স্থায়ী অ্যাকাউন্ট ব্যান সনাক্তকরণ ট্রিগার করে। বিল্ট-ইন কীওয়ার্ড সর্বদা প্রযোজ্য।", "customBannedSignalsPlaceholder": "যেমন: api key revoked", @@ -7210,6 +7203,7 @@ "configured": "কনফিগার করা হয়েছে", "none": "কোনোটিই নয়", "modelOverrideValuePlaceholder": "সংখ্যাসূচক মান", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "কী ভ্যালু যোগ করুন", "noModelOverrides": "এই মডেলের জন্য কোনো ওভাররাইড কনফিগার করা হয়নি।", "modelOverrideLoadFailed": "মডেল ওভাররাইড লোড করতে ব্যর্থ হয়েছে", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "সংক্ষিপ্ত CJK (文言)", "description": "ক্লাসিক্যাল-চাইনিজ অতি-সংক্ষিপ্ত শৈলী (শুধুমাত্র চাইনিজ ভাষার জন্য উপলব্ধ)।" @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "রাউন্ড-রবিন এবং র‍্যান্ডম কম্বোগুলি প্রথম বার্তার হ্যাশ দ্বারা একটি সম্পূর্ণ কথোপকথনকে একটি সংযোগে পিন করার পরিবর্তে প্রতিটি অনুরোধে একটি ভিন্ন সংযোগে রোটেট করে। মাল্টি-টার্ন চ্যাটের জন্য প্রম্পট-ক্যাশ হিট সংরক্ষণ করতে এটি বন্ধ রাখুন। প্রতি-কম্বো ওভাররাইড অগ্রাধিকার পাবে।", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "ক্রেডেনশিয়াল রিডাকশন", "credentialRedactionDesc": "প্রোভাইডারদের কাছে পাঠানো কনটেক্সট এবং প্রতিক্রিয়া থেকে API কী, টোকেন এবং সিক্রেট রিডাক্ট করুন।", "enableCredentialRedaction": "ক্রেডেনশিয়াল রিডাকশন সক্রিয় করুন", @@ -8621,6 +8623,27 @@ }, "enableTitle": "ইঞ্জিনটি সক্রিয় করুন", "enableDescription": "স্ট্যাকের সবার শেষে চলে (RTK/Caveman টেক্সট পরিষ্কার করার পর, OmniGlyph বাকি অংশকে ইমেজে রূপান্তর করে) এবং omniglyph মোডের মাধ্যমে এককভাবেও চলে। এটি একটি প্রিভিউ এবং এন্ড-টু-এন্ড যাচাইকরণ সম্পন্ন না হওয়া পর্যন্ত ডিফল্টরূপে বন্ধ থাকবে।", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "সংরক্ষিত হয়েছে।", "saveFailed": "সংরক্ষণ করা যায়নি।", "enableAria": "OmniGlyph ইঞ্জিনটি সক্রিয় করুন", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "সর্বাধিক", "grokAutoTopUpMonth": "মাস", "grokAdditionalCredits": "অতিরিক্ত ক্রেডিটস", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "প্রথম টোকেন", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 22139ce32a..5e95c8f357 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Vizualizace časové osy požadavků", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "otevřít", "close": "zavřít" }, - "noResults": "Žádné výsledky", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Žádné výsledky" }, "webhooks": { "title": "Webhooky", @@ -1739,8 +1739,8 @@ "quotaShare": "Podíl kvóty", "discovery": "Průzkum", "freeProviderRankings": "Žebříčky bezplatných poskytovatelů", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Bezplatné tarify", "gamification": "Gamifikace", "leaderboard": "Žebříček", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Podpora tohoto poskytovatele byla ukončena", "riskNotice": { "title": "Než budete pokračovat", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Poskytovatel s upozorněními k použití — klikněte pro podrobnosti", "oauth": "Tento poskytovatel používá vaši oficiální relaci/OAuth produktu, což není autorizováno pro použití jako proxy/router. Nedoporučujeme intenzivní používání autonomních agentů (styl OpenCloud, dlouhé vícekrokové toky, velké dávky) — upstream může reagovat omezením nebo zablokováním účtu. Používejte na vlastní riziko.", "webCookie": "Tento poskytovatel se autentizuje pomocí souborů cookie vaší webové relace. Služba upstream může relaci kdykoli zneplatnit, což bude vyžadovat opětovné přihlášení. Nedoporučuje se pro dlouhé bezobslužné operace. Používejte na vlastní riziko.", @@ -5107,9 +5111,9 @@ "cancel": "Zrušit" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Zakázáno", "enableProvider": "Povolit poskytovatele", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Přeskakování {count} existujících modelů", "autoSync": "Automatická synchronizace", "autoSyncShort": "Synchronizace", + "autoFetchModels": "Automaticky načíst modely z upstreamu", + "autoFetchModelsTooltip": "Načíst a uložit upstream modely, když je to potřeba", + "autoFetchModelsEnabled": "Automatické načítání modelu upstream je povoleno", + "autoFetchModelsDisabled": "Automatické načítání modelu upstream je zakázáno", + "autoFetchModelsToggleFailed": "Nepodařilo se přepnout automatické načítání modelu upstream", + "autoFetchModelsPartialFailure": "Některé připojení byly aktualizovány, ale automatické načítání modelu upstream nebylo změněno všude", + "overridesUpstreamModel": "Přepisuje upstream", + "overridesUpstreamModelHint": "Vaše nastavení přepisují tento upstream model", + "resetToUpstreamDefaults": "Obnovit výchozí hodnoty upstream", + "resetToUpstreamDefaultsSuccess": "Obnoveny výchozí modely upstream", + "resetToUpstreamDefaultsFailed": "Nepodařilo se obnovit výchozí hodnoty modelu upstream", "autoSyncTooltip": "Automaticky obnovuje seznam modelů každých 24 hodin (lze nastavit přes MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatická synchronizace povolena – modely se budou pravidelně obnovovat", "autoSyncDisabled": "Automatická synchronizace zakázána", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Přepisovat nativní volání nástroje web_fetch na /v1/web/fetch v OmniRoute.", "interceptionLoadError": "Nepodařilo se načíst nastavení zachytávání: {error}", "interceptionSaveError": "Nepodařilo se uložit nastavení zachytávání: {error}", - "ccAliasSectionTitle": "Expose v Claude Code (claude/…)", - "ccAliasSectionHint": "Inzerujte modely tohoto poskytovatele pod claude/<provider>/<model> zrcadlovými ID, aby mohl objevovací model brány Claude Code je zobrazit. Ve výchozím nastavení vypnuto — povolení tohoto zdvojnásobí záznamy v katalogu pro všechny klienty.", - "ccAliasProviderLevelLabel": "Výchozí poskytovatel", - "ccAliasModelOverridesLabel": "Přepsání na úrovni modelu", - "ccAliasModelOverrideAriaLabel": "Přepsání pro {modelId}", - "ccAliasStateInherit": "Dědit", - "ccAliasStateOn": "Zapnuto", - "ccAliasStateOff": "Vypnuto", - "ccAliasAddModelPlaceholder": "ID modelu (např. gpt-4o)", - "ccAliasAddModelButton": "Přidat přepsání", - "ccAliasLoadError": "Nepodařilo se načíst nastavení discovery-alias: {error}", - "ccAliasSaveError": "Nepodařilo se uložit nastavení discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream hlavičky", "compatUpstreamHeadersHint": "Nastavení s vysokými oprávněními — stejná úroveň důvěryhodnosti jako při úpravách přihlašovacích údajů API poskytovatele; měli by jej používat pouze důvěryhodní administrátoři. Sloučeno poté, co OmniRoute přidá ověření z klíče API poskytovatele. Pokud vlastní záhlaví používá stejný název jako existující (např. Authorization), vaše hodnota zcela nahradí automaticky vygenerované záhlaví (včetně tokenu Bearer) — upstream vidí pouze to, co jste zadali, nikoli klíč z nastavení. Nesprávná nastavení může způsobit chybu 401 nebo nefunkční upstream ověření. Jeden řádek na jedno záhlaví (např. extra ověření pro některé brány). Pro náhled najděte na hodnotu nebo ji označte. Uloží se při odklonu, kliknutí mimo nebo zavření tohoto panelu.", "compatUpstreamHeaderName": "Název hlavičky", @@ -6194,7 +6209,7 @@ "galadriel": "Připojte Galadriel pomocí API klíče.", "predibase": "Bezplatný zkušební kredit 25 $ (platnost 30 dní)", "chenzk": "Brána kompatibilní s OpenAI s živým katalogem modelů na chenzk.top.", - "freepik": "Generujte obrázky pomocí Mystic API od Freepik.", + "magnific": "Generujte obrázky pomocí Mystic API od Freepik.", "freetheai": "Bezplatná brána kompatibilní s OpenAI s podporou passthrough modelů.", "g4f-gemini": "Bezplatná reverzní proxy g4f.space bez klíče pro Gemini, omezená na 5 požadavků za minutu.", "g4f-groq": "Bezplatná reverzní proxy g4f.space bez klíče pro Groq, omezená na 5 požadavků za minutu.", @@ -6209,6 +6224,7 @@ "claude": "Připojte Claude Code pomocí stávajícího toku OAuth.", "cline": "Připojte Cline pomocí stávajícího toku OAuth.", "cursor": "Připojte Cursor IDE pomocí stávajícího toku OAuth.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Připojte GitHub Copilot pomocí stávajícího toku OAuth.", "gitlab-duo": "Aplikace OAuth s rozsahy (scopes) ai_features + read_user. Nakonfigurujte GITLAB_DUO_OAUTH_CLIENT_ID a volitelně GITLAB_DUO_OAUTH_CLIENT_SECRET na této instanci OmniRoute.", "kilocode": "Připojte Kilo Code pomocí stávajícího toku OAuth.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Probíhá čekací lhůta", "codexPoolUsed": "využito", "codexPoolUntil": "Do {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonymní záložní řešení", "anonymousFallbackDesc": "Když jsou všechny nakonfigurované připojení vyčerpány (kvóta, kredity nebo expirace), dočasně použijte bezklíčovou úroveň tohoto poskytovatele. Vypněte, abyste tohoto poskytovatele přeskočili místo odesílání anonymních požadavků — doporučeno, když bezklíčová úroveň je odmítá (401).", "anonymousFallbackEnabled": "Anonymní záložní možnost povolena pro {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Nastavení koncového bodu uloženého modelu", "searchByModelAria": "Hledat podle modelu", "selectSupportedEndpoint": "Vyberte alespoň jeden podporovaný koncový bod", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Automaticky načíst modely z upstreamu", - "autoFetchModelsTooltip": "Načíst a uložit upstream modely, když je to potřeba", - "autoFetchModelsDisabled": "Automatické načítání modelu upstream je zakázáno", - "autoFetchModelsEnabled": "Automatické načítání modelu upstream je povoleno", - "overridesUpstreamModel": "Přepisuje upstream", - "autoFetchModelsToggleFailed": "Nepodařilo se přepnout automatické načítání modelu upstream", - "overridesUpstreamModelHint": "Vaše nastavení přepisují tento upstream model", - "autoFetchModelsPartialFailure": "Některé připojení byly aktualizovány, ale automatické načítání modelu upstream nebylo změněno všude", - "resetToUpstreamDefaultsSuccess": "Obnoveny výchozí modely upstream", - "resetToUpstreamDefaultsFailed": "Nepodařilo se obnovit výchozí hodnoty modelu upstream", - "resetToUpstreamDefaults": "Obnovit výchozí hodnoty upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Nastavení", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Trvale označí připojení poskytovatele jako deaktivovaná, pokud vrátí specifické signály zablokování (např. HTTP 403 'verify your account'). Tím je odstraní z rotace komb.", "autoDisableThreshold": "Prahová hodnota zablokování", "autoDisableThresholdDesc": "Počet po sobě jdoucích signálů zablokování před trvalou deaktivací.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Zakázaná klíčová slova", "customBannedSignalsDesc": "Další klíčová slova, která spouštějí detekci trvalého zablokování účtu. Vestavěná klíčová slova platí vždy.", "customBannedSignalsPlaceholder": "např. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "nakonfigurováno", "none": "Žádné", "modelOverrideValuePlaceholder": "Číselná hodnota", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Přidat klíč-hodnotu", "noModelOverrides": "Pro tento model nejsou nakonfigurována žádná přepsání.", "modelOverrideLoadFailed": "Nepodařilo se načíst přepsání modelů", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Stručné CJK (文言)", "description": "Klasický čínský ultra stručný styl (k dispozici pouze pro čínštinu)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Kombinace round-robin a náhodného výběru rotují na jiné připojení při každém požadavku, místo aby připnuly celou konverzaci k jednomu připojení podle hashe první zprávy. Ponechte vypnuté, chcete-li zachovat zásahy v mezipaměti promptů pro vícekrokové chaty. Přepsání pro jednotlivé kombinace mají přednost.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Redigování přihlašovacích údajů", "credentialRedactionDesc": "Redigovat klíče API, tokeny a tajné klíče z kontextu odesílaného poskytovatelům a z odpovědí.", "enableCredentialRedaction": "Povolit redigování přihlašovacích údajů", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Povolit engine", "enableDescription": "Spouští se jako poslední v zásobníku (poté, co RTK/Caveman vyčistí text a OmniGlyph převede zbytek na obrázky) a běží také samostatně v režimu omniglyph. Toto je náhled a ve výchozím nastavení zůstává vypnutý, dokud nebude dokončeno end-to-end ověření.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Uloženo.", "saveFailed": "Nepodařilo se uložit.", "enableAria": "Povolit engine OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "měsíc", "grokAdditionalCredits": "Další kredity", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Zapisovač", "proxyTab": "Proxy", "budgetManagement": "Správa rozpočtu", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "První token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index cbd74f9a49..fdc9a5fc89 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visuel anmodnings tidslinje", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "åben", "close": "luk" }, - "noResults": "Ingen resultater", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Ingen resultater" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kvoteandel", "discovery": "Opdagelse", "freeProviderRankings": "Rangliste over gratis udbydere", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Gratis niveauer", "gamification": "Gamificering", "leaderboard": "Leaderboard", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Denne udbyder er blevet udfaset", "riskNotice": { "title": "Før du fortsætter", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Udbyder med forbehold for brug — klik for detaljer", "oauth": "Denne udbyder bruger din officielle produktsession/OAuth, som ikke er godkendt til proxy-/routerbrug. Vi anbefaler ikke intensiv brug af autonome agenter (OpenCloud-stil, lange flertrinsforløb, store batches) — upstream-tjenesten kan reagere ved at begrænse eller spærre kontoen. Brug på eget ansvar.", "webCookie": "Denne udbyder godkender via dine websessionscookies. Upstream-tjenesten kan til enhver tid gøre sessionen ugyldig, hvilket kræver, at du logger ind igen. Anbefales ikke til lange uovervågede handlinger. Brug på eget ansvar.", @@ -5107,9 +5111,9 @@ "cancel": "Annuller" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Deaktiveret", "enableProvider": "Aktiver udbyder", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Springer {count} eksisterende modeller over", "autoSync": "Auto-synkronisering", "autoSyncShort": "Synkronisering", + "autoFetchModels": "Auto-hent upstream modeller", + "autoFetchModelsTooltip": "Hent og cache upstream-modeller, når det er nødvendigt", + "autoFetchModelsEnabled": "Opstrømsmodel auto-hentning aktiveret", + "autoFetchModelsDisabled": "Opstrømsmodel auto-hentning deaktiveret", + "autoFetchModelsToggleFailed": "Mislykkedes at skifte upstream model auto-fetch", + "autoFetchModelsPartialFailure": "Nogle forbindelser blev opdateret, men upstream-model auto-fetch blev ikke ændret overalt", + "overridesUpstreamModel": "Overskriver upstream", + "overridesUpstreamModelHint": "Dine indstillinger overskriver denne upstream-model", + "resetToUpstreamDefaults": "Gendan upstream standardindstillinger", + "resetToUpstreamDefaultsSuccess": "Gendannet upstream model standardindstillinger", + "resetToUpstreamDefaultsFailed": "Mislykkedes med at gendanne standardindstillinger for upstream-modellen", "autoSyncTooltip": "Opdater modellisten automatisk hver 24. time (kan konfigureres via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatisk synkronisering aktiveret - modellerne opdateres med jævne mellemrum", "autoSyncDisabled": "Automatisk synkronisering deaktiveret", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Omskriv oprindelige web_fetch-værktøjskald til OmniRoutes /v1/web/fetch.", "interceptionLoadError": "Kunne ikke indlæse indstillinger for opsnapning: {error}", "interceptionSaveError": "Kunne ikke gemme indstillinger for opsnapning: {error}", - "ccAliasSectionTitle": "Eksponer i Claude Code (claude/…)", - "ccAliasSectionHint": "Reklamer for denne udbyders modeller under claude/<provider>/<model> spejl-id'er, så Claude Code's gateway modelopdagelse kan liste dem. Slået fra som standard — aktivering af dette fordobler katalogindgange for alle klienter.", - "ccAliasProviderLevelLabel": "Udbyder standard", - "ccAliasModelOverridesLabel": "Per-model overskrivninger", - "ccAliasModelOverrideAriaLabel": "Overskrivning for {modelId}", - "ccAliasStateInherit": "Arv", - "ccAliasStateOn": "Tændt", - "ccAliasStateOff": "Slukket", - "ccAliasAddModelPlaceholder": "Model id (f.eks. gpt-4o)", - "ccAliasAddModelButton": "Tilføj overskrivning", - "ccAliasLoadError": "Kunne ikke indlæse discovery-alias indstillinger: {error}", - "ccAliasSaveError": "Fejl ved gemning af discovery-alias indstilling: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Forbind Galadriel med en API-nøgle.", "predibase": "$25 gratis prøvekredit (30 dages gyldighed)", "chenzk": "OpenAI-kompatibel gateway med et live modelkatalog på chenzk.top.", - "freepik": "Generer billeder med Freepiks Mystic API.", + "magnific": "Generer billeder med Freepiks Mystic API.", "freetheai": "Gratis OpenAI-kompatibel gateway med understøttelse af passthrough-modeller.", "g4f-gemini": "Gratis nøglefri g4f.space reverse proxy til Gemini, begrænset til 5 anmodninger pr. minut.", "g4f-groq": "Gratis nøglefri g4f.space reverse proxy til Groq, begrænset til 5 anmodninger pr. minut.", @@ -6209,6 +6224,7 @@ "claude": "Forbind Claude Code med det eksisterende OAuth-flow.", "cline": "Forbind Cline med det eksisterende OAuth-flow.", "cursor": "Forbind Cursor IDE med det eksisterende OAuth-flow.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Forbind GitHub Copilot med det eksisterende OAuth-flow.", "gitlab-duo": "OAuth-applikation med ai_features + read_user-scopes. Konfigurer GITLAB_DUO_OAUTH_CLIENT_ID og valgfrit GITLAB_DUO_OAUTH_CLIENT_SECRET på denne OmniRoute-instans.", "kilocode": "Forbind Kilo Code med det eksisterende OAuth-flow.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "I nedkølingsperiode", "codexPoolUsed": "brugt", "codexPoolUntil": "Indtil {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonym fallback", "anonymousFallbackDesc": "Når alle konfigurerede forbindelser er udtømt (kvote, kreditter eller udløb), brug midlertidigt denne udbyders nøgleløse niveau. Sluk for at springe denne udbyder over i stedet for at sende anonyme anmodninger - anbefales når det nøgleløse niveau afviser dem (401).", "anonymousFallbackEnabled": "Anonym fallback aktiveret for {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Indstillinger for gemt model endpoint", "searchByModelAria": "Søg efter model", "selectSupportedEndpoint": "Vælg mindst én understøttet endpoint", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Opstrømsmodel auto-hentning deaktiveret", - "autoFetchModelsTooltip": "Hent og cache upstream-modeller, når det er nødvendigt", - "autoFetchModels": "Auto-hent upstream modeller", - "autoFetchModelsEnabled": "Opstrømsmodel auto-hentning aktiveret", - "autoFetchModelsToggleFailed": "Mislykkedes at skifte upstream model auto-fetch", - "autoFetchModelsPartialFailure": "Nogle forbindelser blev opdateret, men upstream-model auto-fetch blev ikke ændret overalt", - "overridesUpstreamModelHint": "Dine indstillinger overskriver denne upstream-model", - "overridesUpstreamModel": "Overskriver upstream", - "resetToUpstreamDefaultsSuccess": "Gendannet upstream model standardindstillinger", - "resetToUpstreamDefaultsFailed": "Mislykkedes med at gendanne standardindstillinger for upstream-modellen", - "resetToUpstreamDefaults": "Gendan upstream standardindstillinger" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Indstillinger", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Blokerede nøgleord", "customBannedSignalsDesc": "Yderligere nøgleord, der udløser registrering af permanent kontoudelukkelse. Indbyggede nøgleord gælder altid.", "customBannedSignalsPlaceholder": "f.eks. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "konfigureret", "none": "Ingen", "modelOverrideValuePlaceholder": "Numerisk værdi", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Tilføj nøgleværdi", "noModelOverrides": "Ingen tilsidesættelser konfigureret for denne model.", "modelOverrideLoadFailed": "Kunne ikke indlæse modeltilsidesættelser", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Kortfattet CJK (文言)", "description": "Klassisk kinesisk ultra-kortfattet stil (kun tilgængelig for kinesisk)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin- og tilfældige kombinationer skifter til en anden forbindelse ved hver anmodning i stedet for at fastlåse en hel samtale til én forbindelse via den første meddelelses hash. Lad den være slået fra for at bevare prompt-cache-hits ved samtaler med flere ture. Tilsidesættelser pr. kombination har forrang.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Maskering af legitimationsoplysninger", "credentialRedactionDesc": "Masker API-nøgler, tokens og hemmeligheder fra kontekst sendt til udbydere og fra svar.", "enableCredentialRedaction": "Aktivér maskering af legitimationsoplysninger", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Aktiver motoren", "enableDescription": "Kører sidst i stakken (efter RTK/Caveman renser teksten, konverterer OmniGlyph resten til billeder) og kører også selvstændigt via omniglyph-tilstand. Dette er en forhåndsvisning og forbliver deaktiveret som standard, indtil end-to-end-validering er fuldført.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Gemt.", "saveFailed": "Kunne ikke gemme.", "enableAria": "Aktiver OmniGlyph-motoren", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksimum", "grokAutoTopUpMonth": "måned", "grokAdditionalCredits": "Yderligere Credits", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Fuldmagt", "budgetManagement": "Budgetstyring", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Første token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index c1ffc929ea..2b4c363146 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visuelle Anforderungszeitleiste", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "öffnen", "close": "schließen" }, - "noResults": "Keine Ergebnisse", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Keine Ergebnisse" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kontingentanteil", "discovery": "Discovery", "freeProviderRankings": "Rangliste kostenloser Anbieter", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Kostenlose Tarife", "gamification": "Gamification", "leaderboard": "Bestenliste", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Dieser Anbieter ist veraltet", "riskNotice": { "title": "Vor dem Fortfahren", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Anbieter mit Nutzungseinschränkungen — für Details klicken", "oauth": "Dieser Anbieter verwendet Ihre offizielle Produktsitzung/OAuth, die nicht für die Proxy-/Router-Nutzung autorisiert ist. Wir empfehlen keine intensive Nutzung durch autonome Agenten (im OpenCloud-Stil, lange mehrstufige Abläufe, große Batches) — der Upstream-Anbieter kann darauf reagieren, indem er das Konto einschränkt oder sperrt. Nutzung auf eigene Gefahr.", "webCookie": "Dieser Anbieter authentifiziert sich über Ihre Web-Sitzungscookies. Der Upstream-Dienst kann die Sitzung jederzeit ungültig machen, sodass Sie sich erneut anmelden müssen. Nicht empfohlen für lange unbeaufsichtigte Vorgänge. Nutzung auf eigene Gefahr.", @@ -5107,9 +5111,9 @@ "cancel": "Abbrechen" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Deaktiviert", "enableProvider": "Anbieter aktivieren", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Überspringe {count} vorhandene Modelle", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "Automatisches Abrufen von Upstream-Modellen", + "autoFetchModelsTooltip": "Abrufen und Zwischenspeichern von Upstream-Modellen bei Bedarf", + "autoFetchModelsEnabled": "Upstream-Modell Auto-Fetch aktiviert", + "autoFetchModelsDisabled": "Auto-Abholung des Upstream-Modells deaktiviert", + "autoFetchModelsToggleFailed": "Fehler beim Umschalten des automatischen Abrufs des Upstream-Modells", + "autoFetchModelsPartialFailure": "Einige Verbindungen wurden aktualisiert, aber das automatische Abrufen des upstream-Modells wurde nicht überall geändert.", + "overridesUpstreamModel": "Überschreibt upstream", + "overridesUpstreamModelHint": "Ihre Einstellungen überschreiben dieses übergeordnete Modell", + "resetToUpstreamDefaults": "Ursprüngliche Standardeinstellungen wiederherstellen", + "resetToUpstreamDefaultsSuccess": "Ursprüngliche Standardwerte des Upstream-Modells wiederhergestellt", + "resetToUpstreamDefaultsFailed": "Wiederherstellung der Standardwerte des upstream-Modells fehlgeschlagen", "autoSyncTooltip": "Modellliste automatisch alle 24 Stunden aktualisieren (konfigurierbar über MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-Sync aktiviert — Modelle werden regelmäßig aktualisiert", "autoSyncDisabled": "Auto-Sync deaktiviert", @@ -5439,17 +5454,17 @@ "interceptionLoadError": "Fehler beim Laden der Interzeptionseinstellungen: {error}", "interceptionSaveError": "Fehler beim Speichern der Interzeptionseinstellungen: {error}", "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "Bewerben Sie die Modelle dieses Anbieters unter claude/<provider>/<model> Spiegel-IDs, damit das Gateway-Modellentdeckung von Claude Code sie auflisten kann. Standardmäßig deaktiviert — das Aktivieren verdoppelt die Katalogeinträge für alle Kunden.", - "ccAliasProviderLevelLabel": "Anbieter standardmäßig", - "ccAliasModelOverridesLabel": "Pro-Modell-Überschreibungen", - "ccAliasModelOverrideAriaLabel": "Überschreibung für {modelId}", - "ccAliasStateInherit": "Erben", - "ccAliasStateOn": "Ein", - "ccAliasStateOff": "Aus", - "ccAliasAddModelPlaceholder": "Modell-ID (z. B. gpt-4o)", - "ccAliasAddModelButton": "Überschreibung hinzufügen", - "ccAliasLoadError": "Fehler beim Laden der discovery-alias-Einstellungen: {error}", - "ccAliasSaveError": "Fehler beim Speichern der discovery-alias-Einstellung: {error}", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Verbinden Sie Galadriel mit einem API-Schlüssel.", "predibase": "$25 kostenloses Testguthaben (30 Tage Gültigkeit)", "chenzk": "OpenAI-kompatibles Gateway mit einem Live-Modellkatalog unter chenzk.top.", - "freepik": "Generieren Sie Bilder mit der Mystic-API von Freepik.", + "magnific": "Generieren Sie Bilder mit Magnific Mystic.", "freetheai": "Kostenloses OpenAI-kompatibles Gateway mit Passthrough-Modellunterstützung.", "g4f-gemini": "Kostenloser schlüsselloser g4f.space-Reverse-Proxy zu Gemini, begrenzt auf 5 Anfragen pro Minute.", "g4f-groq": "Kostenloser schlüsselloser g4f.space-Reverse-Proxy zu Groq, begrenzt auf 5 Anfragen pro Minute.", @@ -6209,6 +6224,7 @@ "claude": "Claude Code mit dem bestehenden OAuth-Flow verbinden.", "cline": "Cline mit dem bestehenden OAuth-Flow verbinden.", "cursor": "Cursor IDE mit dem bestehenden OAuth-Flow verbinden.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "GitHub Copilot mit dem bestehenden OAuth-Flow verbinden.", "gitlab-duo": "OAuth-Anwendung mit den Scopes ai_features + read_user. Konfigurieren Sie GITLAB_DUO_OAUTH_CLIENT_ID und optional GITLAB_DUO_OAUTH_CLIENT_SECRET auf dieser OmniRoute-Instanz.", "kilocode": "Kilo Code mit dem bestehenden OAuth-Flow verbinden.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "In Abklingzeit", "codexPoolUsed": "verwendet", "codexPoolUntil": "Bis {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonymer Fallback", "anonymousFallbackDesc": "Wenn alle konfigurierten Verbindungen erschöpft sind (Kontingent, Guthaben oder Ablauf), verwenden Sie vorübergehend die schlüssellose Stufe dieses Anbieters. Deaktivieren Sie dies, um diesen Anbieter zu überspringen, anstatt anonyme Anfragen zu senden – empfohlen, wenn die schlüssellose Stufe diese ablehnt (401).", "anonymousFallbackEnabled": "Anonymer Fallback für {provider} aktiviert", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Einstellungen für den gespeicherten Modell-Endpunkt", "searchByModelAria": "Nach Modell suchen", "selectSupportedEndpoint": "Wählen Sie mindestens einen unterstützten Endpunkt aus", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Automatisches Abrufen von Upstream-Modellen", - "autoFetchModelsEnabled": "Upstream-Modell Auto-Fetch aktiviert", - "autoFetchModelsDisabled": "Auto-Abholung des Upstream-Modells deaktiviert", - "autoFetchModelsTooltip": "Abrufen und Zwischenspeichern von Upstream-Modellen bei Bedarf", - "overridesUpstreamModel": "Überschreibt upstream", - "autoFetchModelsToggleFailed": "Fehler beim Umschalten des automatischen Abrufs des Upstream-Modells", - "autoFetchModelsPartialFailure": "Einige Verbindungen wurden aktualisiert, aber das automatische Abrufen des upstream-Modells wurde nicht überall geändert.", - "overridesUpstreamModelHint": "Ihre Einstellungen überschreiben dieses übergeordnete Modell", - "resetToUpstreamDefaultsSuccess": "Ursprüngliche Standardwerte des Upstream-Modells wiederhergestellt", - "resetToUpstreamDefaults": "Ursprüngliche Standardeinstellungen wiederherstellen", - "resetToUpstreamDefaultsFailed": "Wiederherstellung der Standardwerte des upstream-Modells fehlgeschlagen" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Einstellungen", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Gesperrte Keywords", "customBannedSignalsDesc": "Zusätzliche Keywords, die die Erkennung einer dauerhaften Kontosperrung auslösen. Integrierte Keywords gelten immer.", "customBannedSignalsPlaceholder": "z. B. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "konfiguriert", "none": "Keine", "modelOverrideValuePlaceholder": "Numerischer Wert", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Schlüssel-Wert hinzufügen", "noModelOverrides": "Keine Overrides für dieses Modell konfiguriert.", "modelOverrideLoadFailed": "Modell-Overrides konnten nicht geladen werden", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Knappe CJK (文言)", "description": "Klassisch-chinesischer, extrem knapper Stil (nur für Chinesisch verfügbar)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-Robin- und Zufallskombinationen wechseln bei jeder Anfrage zu einer anderen Verbindung, anstatt eine gesamte Konversation über den Hash der ersten Nachricht an eine Verbindung zu binden. Deaktiviert lassen, um Prompt-Cache-Treffer für Multi-Turn-Chats zu erhalten. Überschreibungen pro Kombination haben Vorrang.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Schwärzung von Anmeldedaten", "credentialRedactionDesc": "API-Schlüssel, Token und Geheimnisse aus dem an Anbieter gesendeten Kontext und aus Antworten schwärzen.", "enableCredentialRedaction": "Schwärzung von Anmeldedaten aktivieren", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Engine aktivieren", "enableDescription": "Wird als Letztes im Stack ausgeführt (nachdem RTK/Caveman den Text bereinigt hat, konvertiert OmniGlyph den Rest in Bilder) und läuft auch eigenständig im omniglyph-Modus. Dies ist eine Vorschau und bleibt standardmäßig deaktiviert, bis die End-to-End-Validierung abgeschlossen ist.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Gespeichert.", "saveFailed": "Konnte nicht gespeichert werden.", "enableAria": "OmniGlyph-Engine aktivieren", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "Monat", "grokAdditionalCredits": "Zusätzliche Credits", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Stellvertreter", "budgetManagement": "Budgetverwaltung", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Erster Token", @@ -13217,7 +13250,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Angebote", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13758,36 +13791,36 @@ "trialDays": "{days, plural, one {# Tag} other {# Tage}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index aab9e6eddc..92b0e725b4 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -6214,7 +6214,7 @@ "galadriel": "Connect Galadriel with an API key.", "predibase": "$25 free trial credits (30-day validity)", "chenzk": "OpenAI-compatible gateway with a live model catalog at chenzk.top.", - "freepik": "Generate images with Freepik's Mystic API.", + "magnific": "Generate images with Magnific Mystic.", "freetheai": "Free OpenAI-compatible gateway with passthrough model support.", "g4f-gemini": "Free no-key g4f.space reverse proxy to Gemini, limited to 5 requests per minute.", "g4f-groq": "Free no-key g4f.space reverse proxy to Groq, limited to 5 requests per minute.", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 6b460d7a8f..a6b357e222 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Línea de tiempo de solicitudes visuales", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "abrir", "close": "cerrar" }, - "noResults": "Sin resultados", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Sin resultados" }, "webhooks": { "title": "Ganchos web", @@ -1739,8 +1739,8 @@ "quotaShare": "Quota Share", "discovery": "Discovery", "freeProviderRankings": "Free Provider Rankings", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Free Tiers", "gamification": "Gamification", "leaderboard": "Leaderboard", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Este proveedor ha quedado obsoleto.", "riskNotice": { "title": "Before continuing", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provider with usage caveats — click for details", "oauth": "This provider uses your official product session/OAuth, which is not authorized for proxy/router use. We don't recommend intensive autonomous agent usage (OpenCloud-style, long multi-step flows, large batches) — the upstream may react by restricting or banning the account. Use at your own risk.", "webCookie": "This provider authenticates through your web session cookies. The upstream service may invalidate the session at any time, requiring you to log in again. Not recommended for long unattended operations. Use at your own risk.", @@ -5107,9 +5111,9 @@ "cancel": "Cancel" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Deshabilitado", "enableProvider": "Habilitar proveedor", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Omitiendo {count} modelos existentes", "autoSync": "Sincronización automática", "autoSyncShort": "Sincronizar", + "autoFetchModels": "Obtención automática de modelos upstream", + "autoFetchModelsTooltip": "Obtener y almacenar en caché los modelos de upstream cuando sea necesario", + "autoFetchModelsEnabled": "Modelo de upstream auto-fetch habilitado", + "autoFetchModelsDisabled": "La recuperación automática del modelo upstream está desactivada", + "autoFetchModelsToggleFailed": "Error al alternar la auto-recuperación del modelo upstream", + "autoFetchModelsPartialFailure": "Algunas conexiones se actualizaron, pero el auto-fetch del modelo upstream no se cambió en todas partes", + "overridesUpstreamModel": "Sobrescribe el upstream", + "overridesUpstreamModelHint": "Tus configuraciones anulan este modelo de upstream", + "resetToUpstreamDefaults": "Restaurar valores predeterminados del upstream", + "resetToUpstreamDefaultsSuccess": "Restaurados los valores predeterminados del modelo upstream", + "resetToUpstreamDefaultsFailed": "No se pudo restaurar los valores predeterminados del modelo upstream", "autoSyncTooltip": "Actualiza automáticamente la lista de modelos cada 24 horas (configurable vía MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Sincronización automática activada — los modelos se actualizarán periódicamente", "autoSyncDisabled": "Sincronización automática desactivada", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Rewrite native web_fetch tool calls to OmniRoute's /v1/web/fetch.", "interceptionLoadError": "Failed to load interception settings: {error}", "interceptionSaveError": "Failed to save interception settings: {error}", - "ccAliasSectionTitle": "Exponer en Claude Code (claude/…)", - "ccAliasSectionHint": "Anunciar los modelos de este proveedor bajo claude/<provider>/<model> IDs de espejo para que el descubrimiento de modelos de la puerta de enlace de Claude Code pueda listarlos. Desactivado por defecto; habilitar esto duplica las entradas del catálogo para todos los clientes.", - "ccAliasProviderLevelLabel": "Proveedor predeterminado", - "ccAliasModelOverridesLabel": "Sobrescrituras por modelo", - "ccAliasModelOverrideAriaLabel": "Sobrescribir para {modelId}", - "ccAliasStateInherit": "Heredar", - "ccAliasStateOn": "Encendido", - "ccAliasStateOff": "Apagar", - "ccAliasAddModelPlaceholder": "ID del modelo (p. ej. gpt-4o)", - "ccAliasAddModelButton": "Agregar anulación", - "ccAliasLoadError": "Error al cargar la configuración de discovery-alias: {error}", - "ccAliasSaveError": "Error al guardar la configuración de alias de descubrimiento: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Connect Galadriel with an API key.", "predibase": "$25 free trial credits (30-day validity)", "chenzk": "OpenAI-compatible gateway with a live model catalog at chenzk.top.", - "freepik": "Generate images with Freepik's Mystic API.", + "magnific": "Generate images with Freepik's Mystic API.", "freetheai": "Free OpenAI-compatible gateway with passthrough model support.", "g4f-gemini": "Free no-key g4f.space reverse proxy to Gemini, limited to 5 requests per minute.", "g4f-groq": "Free no-key g4f.space reverse proxy to Groq, limited to 5 requests per minute.", @@ -6209,6 +6224,7 @@ "claude": "Connect Claude Code with the existing OAuth flow.", "cline": "Connect Cline with the existing OAuth flow.", "cursor": "Connect Cursor IDE with the existing OAuth flow.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Connect GitHub Copilot with the existing OAuth flow.", "gitlab-duo": "OAuth application with ai_features + read_user scopes. Configure GITLAB_DUO_OAUTH_CLIENT_ID and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET on this OmniRoute instance.", "kilocode": "Connect Kilo Code with the existing OAuth flow.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "En espera", "codexPoolUsed": "usado", "codexPoolUntil": "Hasta {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Recaudación anónima", "anonymousFallbackDesc": "Cuando todas las conexiones configuradas están agotadas (cuota, créditos o expiración), utiliza temporalmente el nivel sin clave de este proveedor. Desactiva para omitir este proveedor en lugar de enviar solicitudes anónimas — recomendado cuando el nivel sin clave las rechaza (401).", "anonymousFallbackEnabled": "Fallback anónimo habilitado para {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Configuración del punto final del modelo guardado", "searchByModelAria": "Buscar por modelo", "selectSupportedEndpoint": "Seleccione al menos un endpoint compatible", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsEnabled": "Modelo de upstream auto-fetch habilitado", - "autoFetchModels": "Obtención automática de modelos upstream", - "autoFetchModelsTooltip": "Obtener y almacenar en caché los modelos de upstream cuando sea necesario", - "autoFetchModelsDisabled": "La recuperación automática del modelo upstream está desactivada", - "autoFetchModelsToggleFailed": "Error al alternar la auto-recuperación del modelo upstream", - "overridesUpstreamModel": "Sobrescribe el upstream", - "autoFetchModelsPartialFailure": "Algunas conexiones se actualizaron, pero el auto-fetch del modelo upstream no se cambió en todas partes", - "overridesUpstreamModelHint": "Tus configuraciones anulan este modelo de upstream", - "resetToUpstreamDefaults": "Restaurar valores predeterminados del upstream", - "resetToUpstreamDefaultsFailed": "No se pudo restaurar los valores predeterminados del modelo upstream", - "resetToUpstreamDefaultsSuccess": "Restaurados los valores predeterminados del modelo upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Configuración", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Banned Keywords", "customBannedSignalsDesc": "Additional keywords that trigger permanent account ban detection. Built-in keywords always apply.", "customBannedSignalsPlaceholder": "e.g. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "configured", "none": "None", "modelOverrideValuePlaceholder": "Numeric value", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Add key value", "noModelOverrides": "No overrides configured for this model.", "modelOverrideLoadFailed": "Failed to load model overrides", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Terse CJK (文言)", "description": "Classical-Chinese ultra-terse style (available only for Chinese)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin and random combos rotate to a different connection on every request instead of pinning a whole conversation to one connection by the first-message hash. Leave off to preserve prompt-cache hits for multi-turn chats. Per-combo overrides take precedence.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Credential Redaction", "credentialRedactionDesc": "Redact API keys, tokens, and secrets from context sent to providers and from responses.", "enableCredentialRedaction": "Enable credential redaction", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Enable the engine", "enableDescription": "Runs last in the stack (after RTK/Caveman cleans the text, OmniGlyph converts the remainder to images) and also runs standalone through omniglyph mode. This is a preview and remains off by default until end-to-end validation is complete.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Saved.", "saveFailed": "Could not save.", "enableAria": "Enable the OmniGlyph engine", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "máx", "grokAutoTopUpMonth": "mes", "grokAdditionalCredits": "Créditos Adicionales", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "registrador", "proxyTab": "apoderado", "budgetManagement": "Gestión Presupuestaria", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "First Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json index 9962332860..35f12114ef 100644 --- a/src/i18n/messages/fa.json +++ b/src/i18n/messages/fa.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "زمان‌بندی درخواست بصری", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "باز کردن", "close": "بستن" }, - "noResults": "هیچ نتیجه‌ای یافت نشد", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "هیچ نتیجه‌ای یافت نشد" }, "webhooks": { "title": "وب هوک ها", @@ -1739,8 +1739,8 @@ "quotaShare": "اشتراک سهمیه", "discovery": "اکتشاف", "freeProviderRankings": "رتبه‌بندی ارائه‌دهندگان رایگان", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "طرح‌های رایگان", "gamification": "بازی‌وارسازی", "leaderboard": "جدول رده‌بندی", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "این ارائه دهنده منسوخ شده است", "riskNotice": { "title": "قبل از ادامه", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "ارائه‌دهنده با هشدارهای استفاده — برای جزئیات کلیک کنید", "oauth": "این ارائه‌دهنده از نشست/OAuth رسمی محصول شما استفاده می‌کند که برای استفاده از پروکسی/روتر مجاز نیست. ما استفاده فشرده از عامل‌های خودکار (به سبک OpenCloud، جریان‌های چندمرحله‌ای طولانی، دسته‌های بزرگ) را توصیه نمی‌کنیم — ممکن است سرویس بالادستی با محدود کردن یا مسدود کردن حساب واکنش نشان دهد. با مسئولیت خودتان استفاده کنید.", "webCookie": "این ارائه‌دهنده از طریق کوکی‌های نشست وب شما احراز هویت می‌کند. سرویس بالادستی ممکن است در هر زمان نشست را باطل کند و شما را ملزم به ورود مجدد نماید. برای عملیات طولانی بدون نظارت توصیه نمی‌شود. با مسئولیت خودتان استفاده کنید.", @@ -5107,9 +5111,9 @@ "cancel": "لغو" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "مدل‌های بالادستی را به‌طور خودکار دریافت کنید", + "autoFetchModelsTooltip": "مدل‌های بالادستی را در صورت نیاز دریافت و کش کنید", + "autoFetchModelsEnabled": "مدل بالادستی بارگذاری خودکار فعال است", + "autoFetchModelsDisabled": "مدل upstream بارگذاری خودکار غیرفعال است", + "autoFetchModelsToggleFailed": "عدم موفقیت در تغییر حالت بارگیری خودکار مدل upstream", + "autoFetchModelsPartialFailure": "برخی اتصالات به‌روزرسانی شدند، اما مدل بالادستی auto-fetch در همه جا تغییر نکرده است", + "overridesUpstreamModel": "بازنویسی upstream", + "overridesUpstreamModelHint": "تنظیمات شما این مدل بالادستی را نادیده می‌گیرند", + "resetToUpstreamDefaults": "بازگرداندن تنظیمات پیش‌فرض upstream", + "resetToUpstreamDefaultsSuccess": "تنظیمات پیش‌فرض مدل بالادستی بازیابی شد", + "resetToUpstreamDefaultsFailed": "بازگردانی پیش‌فرض‌های مدل upstream ناموفق بود", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "بازنویسی فراخوانی‌های ابزار بومی web_fetch به /v1/web/fetch در OmniRoute.", "interceptionLoadError": "بارگیری تنظیمات رهگیری ناموفق بود: {error}", "interceptionSaveError": "ذخیره تنظیمات رهگیری ناموفق بود: {error}", - "ccAliasSectionTitle": "در کد کلاود (claude/…) نمایان کنید", - "ccAliasSectionHint": "مدل‌های این ارائه‌دهنده را تحت شناسه‌های آینه claude/<provider>/<model> تبلیغ کنید تا کشف مدل‌های دروازه کد کلود آن‌ها را فهرست کند. به‌طور پیش‌فرض غیرفعال است — فعال‌سازی این گزینه تعداد ورودی‌های کاتالوگ را برای تمام مشتریان دو برابر می‌کند.", - "ccAliasProviderLevelLabel": "ارائه‌دهنده پیش‌فرض", - "ccAliasModelOverridesLabel": "بازنویسی‌های هر مدل", - "ccAliasModelOverrideAriaLabel": "بازنویسی برای {modelId}", - "ccAliasStateInherit": "به ارث بردن", - "ccAliasStateOn": "روشن", - "ccAliasStateOff": "خاموش", - "ccAliasAddModelPlaceholder": "شناسه مدل (به عنوان مثال gpt-4o)", - "ccAliasAddModelButton": "اضافه کردن نادیده‌گیری", - "ccAliasLoadError": "بارگذاری تنظیمات discovery-alias با شکست مواجه شد: {error}", - "ccAliasSaveError": "ذخیره تنظیمات discovery-alias با شکست مواجه شد: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "اتصال به Galadriel با یک کلید API.", "predibase": "$25 اعتبار آزمایشی رایگان (اعتبار ۳۰ روزه)", "chenzk": "درگاه سازگار با OpenAI با یک کاتالوگ مدل زنده در chenzk.top.", - "freepik": "تولید تصاویر با Mystic API مربوط به Freepik.", + "magnific": "تولید تصاویر با Mystic API مربوط به Freepik.", "freetheai": "درگاه رایگان سازگار با OpenAI با پشتیبانی از مدل passthrough.", "g4f-gemini": "پروکسی معکوس رایگان و بدون کلید g4f.space به Gemini، محدود به 5 درخواست در دقیقه.", "g4f-groq": "پروکسی معکوس رایگان و بدون کلید g4f.space به Groq، محدود به 5 درخواست در دقیقه.", @@ -6209,6 +6224,7 @@ "claude": "اتصال به Claude Code با جریان OAuth موجود.", "cline": "اتصال به Cline با جریان OAuth موجود.", "cursor": "اتصال به Cursor IDE با جریان OAuth موجود.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "اتصال به GitHub Copilot با جریان OAuth موجود.", "gitlab-duo": "برنامه OAuth با اسکوپ‌های ai_features + read_user. متغیرهای GITLAB_DUO_OAUTH_CLIENT_ID و به صورت اختیاری GITLAB_DUO_OAUTH_CLIENT_SECRET را روی این نمونه OmniRoute پیکربندی کنید.", "kilocode": "اتصال به Kilo Code با جریان OAuth موجود.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "در دوره انتظار", "codexPoolUsed": "مصرف‌شده", "codexPoolUntil": "تا {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "پشتیبانی ناشناس", "anonymousFallbackDesc": "زمانی که تمام اتصالات پیکربندی‌شده تمام شده‌اند (سهمیه، اعتبار یا انقضا)، به‌طور موقت از سطح بدون کلید این ارائه‌دهنده استفاده کنید. برای رد کردن این ارائه‌دهنده به‌جای ارسال درخواست‌های ناشناس خاموش کنید — این کار زمانی توصیه می‌شود که سطح بدون کلید آن‌ها را رد کند (401).", "anonymousFallbackEnabled": "پشتیبانی ناشناس برای {provider} فعال شد", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "تنظیمات نقطه پایانی مدل ذخیره شده", "searchByModelAria": "جستجو بر اساس مدل", "selectSupportedEndpoint": "حداقل یک نقطه پایانی پشتیبانی شده را انتخاب کنید", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "مدل‌های بالادستی را به‌طور خودکار دریافت کنید", - "autoFetchModelsTooltip": "مدل‌های بالادستی را در صورت نیاز دریافت و کش کنید", - "autoFetchModelsDisabled": "مدل upstream بارگذاری خودکار غیرفعال است", - "autoFetchModelsEnabled": "مدل بالادستی بارگذاری خودکار فعال است", - "autoFetchModelsToggleFailed": "عدم موفقیت در تغییر حالت بارگیری خودکار مدل upstream", - "overridesUpstreamModel": "بازنویسی upstream", - "autoFetchModelsPartialFailure": "برخی اتصالات به‌روزرسانی شدند، اما مدل بالادستی auto-fetch در همه جا تغییر نکرده است", - "resetToUpstreamDefaults": "بازگرداندن تنظیمات پیش‌فرض upstream", - "overridesUpstreamModelHint": "تنظیمات شما این مدل بالادستی را نادیده می‌گیرند", - "resetToUpstreamDefaultsSuccess": "تنظیمات پیش‌فرض مدل بالادستی بازیابی شد", - "resetToUpstreamDefaultsFailed": "بازگردانی پیش‌فرض‌های مدل upstream ناموفق بود" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "کلمات کلیدی ممنوع", "customBannedSignalsDesc": "کلمات کلیدی اضافی که باعث تشخیص مسدودسازی دائمی حساب می‌شوند. کلمات کلیدی داخلی همیشه اعمال می‌شوند.", "customBannedSignalsPlaceholder": "مثلاً api key revoked", @@ -7210,6 +7203,7 @@ "configured": "پیکربندی‌شده", "none": "هیچ‌کدام", "modelOverrideValuePlaceholder": "مقدار عددی", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "افزودن کلید-مقدار", "noModelOverrides": "هیچ بازنویسی‌ای برای این مدل پیکربندی نشده است.", "modelOverrideLoadFailed": "بارگذاری بازنویسی‌های مدل ناموفق بود", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK موجز (文言)", "description": "سبک فوق‌موجز چینی کلاسیک (فقط برای زبان چینی در دسترس است)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "ترکیب‌های نوبت‌گردشی و تصادفی در هر درخواست به یک اتصال متفاوت منتقل می‌شوند، به جای اینکه کل گفتگو را بر اساس هش اولین پیام به یک اتصال پین کنند. برای حفظ هیت‌های prompt-cache در چت‌های چند نوبته، این گزینه را غیرفعال بگذارید. اولویت با بازنویسی‌های اختصاصی هر ترکیب است.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "سانسور اطلاعات اعتبارنامه‌ای", "credentialRedactionDesc": "سانسور کردن کلیدهای API، توکن‌ها و اسرار از بافت ارسال شده به ارائه‌دهندگان و از پاسخ‌ها.", "enableCredentialRedaction": "فعال‌سازی سانسور اطلاعات اعتبارنامه‌ای", @@ -8621,6 +8623,27 @@ }, "enableTitle": "فعال‌سازی موتور", "enableDescription": "در انتهای پشته اجرا می‌شود (پس از اینکه RTK/Caveman متن را پاکسازی کرد، OmniGlyph باقی‌مانده را به تصویر تبدیل می‌کند) و همچنین به‌صورت مستقل از طریق حالت omniglyph اجرا می‌شود. این یک پیش‌نمایش است و تا زمان تکمیل اعتبارسنجی سرتاسری به‌طور پیش‌فرض خاموش می‌ماند.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "ذخیره شد.", "saveFailed": "ذخیره نشد.", "enableAria": "فعال‌سازی موتور OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "حداکثر", "grokAutoTopUpMonth": "ماه", "grokAdditionalCredits": "اعتبارات اضافی", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "اولین توکن", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 6b882ce670..fd15e9dfaa 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visuaalinen pyyntöaikajana", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "avaa", "close": "sulje" }, - "noResults": "Ei tuloksia", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Ei tuloksia" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kiintiöosuus", "discovery": "Löytäminen", "freeProviderRankings": "Ilmaisten tarjoajien sijoitukset", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Ilmaiset tasot", "gamification": "Pelillistäminen", "leaderboard": "Tulostaulukko", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Tämä palveluntarjoaja on poistettu käytöstä", "riskNotice": { "title": "Ennen jatkamista", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Tarjoaja, jolla on käyttöä koskevia huomautuksia — napsauta nähdäksesi lisätiedot", "oauth": "Tämä tarjoaja käyttää virallista tuote-istuntoasi/OAuthia, jota ei ole valtuutettu välityspalvelin-/reititinkäyttöön. Emme suosittele intensiivistä autonomisten agenttien käyttöä (OpenCloud-tyyliset, pitkät monivaiheiset työnkulut, suuret erät) — ylävirta saattaa reagoida rajoittamalla tiliä tai estämällä sen. Käyttö omalla vastuulla.", "webCookie": "Tämä tarjoaja todennetaan verkkosessiosi evästeiden kautta. Ylävirran palvelu voi mitätöidä istunnon milloin tahansa, jolloin sinun on kirjauduttava uudelleen sisään. Ei suositella pitkiin valvomattomiin toimintoihin. Käyttö omalla vastuulla.", @@ -5107,9 +5111,9 @@ "cancel": "Peruuta" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Ei käytössä", "enableProvider": "Ota palveluntarjoaja käyttöön", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Ohitetaan {count} olemassa olevaa mallia", "autoSync": "Automaattinen synkronointi", "autoSyncShort": "Synkronointi", + "autoFetchModels": "Hae automaattisesti upstream-malleja", + "autoFetchModelsTooltip": "Hae ja vältä ylösvirtaisten mallien välimuisti tarvittaessa", + "autoFetchModelsEnabled": "Ylävirran mallin automaattinen haku käytössä", + "autoFetchModelsDisabled": "Ylöspäin suuntautuvan mallin automaattinen haku pois käytöstä", + "autoFetchModelsToggleFailed": "Epäonnistui ylösvirran mallin automaattihaku kytkemisessä", + "autoFetchModelsPartialFailure": "Joitakin yhteyksiä päivitettiin, mutta ylävirran mallin automaattista hakua ei muutettu kaikkialla", + "overridesUpstreamModel": "Ylikirjoittaa ylävirran", + "overridesUpstreamModelHint": "Asetuksesi ohittavat tämän ylävirran mallin", + "resetToUpstreamDefaults": "Palauta upstream-oletukset", + "resetToUpstreamDefaultsSuccess": "Palautettiin ylävirran mallin oletukset", + "resetToUpstreamDefaultsFailed": "Palautus upstream-mallin oletusasetuksista epäonnistui", "autoSyncTooltip": "Päivitä malliluettelo automaattisesti 24 tunnin välein (konfiguroitavissa kohdassa MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automaattinen synkronointi käytössä – mallit päivittyvät säännöllisesti", "autoSyncDisabled": "Automaattinen synkronointi poistettu käytöstä", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Uudelleenkirjoita natiivit web_fetch-työkalukutsut OmniRouten osoitteeseen /v1/web/fetch.", "interceptionLoadError": "Sieppausasetusten lataaminen epäonnistui: {error}", "interceptionSaveError": "Sieppausasetusten tallentaminen epäonnistui: {error}", - "ccAliasSectionTitle": "Avaa Claude-koodissa (claude/…)", - "ccAliasSectionHint": "Mainosta tämän tarjoajan malleja claude/<provider>/<model> peilidien alla, jotta Claude Coden porttimallin löytö voi listata ne. Oletusarvoisesti pois päältä — tämän aktivointi kaksinkertaistaa luettelon merkinnät kaikille asiakkaille.", - "ccAliasProviderLevelLabel": "Palveluntarjoajan oletus", - "ccAliasModelOverridesLabel": "Per-mallin ylitykset", - "ccAliasModelOverrideAriaLabel": "Ylikirjoitus {modelId} varten", - "ccAliasStateInherit": "Peri", - "ccAliasStateOn": "Päällä", - "ccAliasStateOff": "Pois", - "ccAliasAddModelPlaceholder": "Mallin tunnus (esim. gpt-4o)", - "ccAliasAddModelButton": "Lisää ohitus", - "ccAliasLoadError": "Epäonnistui lataamaan discovery-alias-asetuksia: {error}", - "ccAliasSaveError": "Asetuksen discovery-alias tallentaminen epäonnistui: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Yhdistä Galadriel API-avaimella.", "predibase": "$25 ilmaista kokeilusaldoa (voimassa 30 päivää)", "chenzk": "OpenAI-yhteensopiva yhdyskäytävä reaaliaikaisella malliluettelolla osoitteessa chenzk.top.", - "freepik": "Luo kuvia Freepikin Mystic API:lla.", + "magnific": "Luo kuvia Freepikin Mystic API:lla.", "freetheai": "Ilmainen OpenAI-yhteensopiva yhdyskäytävä läpivientimallien tuella.", "g4f-gemini": "Ilmainen avaimeton g4f.space-käänteisvälityspalvelin Geminiin, rajoitettu 5 pyyntöön minuutissa.", "g4f-groq": "Ilmainen avaimeton g4f.space-käänteisvälityspalvelin Groqiin, rajoitettu 5 pyyntöön minuutissa.", @@ -6209,6 +6224,7 @@ "claude": "Yhdistä Claude Code olemassa olevalla OAuth-työnkululla.", "cline": "Yhdistä Cline olemassa olevalla OAuth-työnkululla.", "cursor": "Yhdistä Cursor IDE olemassa olevalla OAuth-työnkululla.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Yhdistä GitHub Copilot olemassa olevalla OAuth-työnkululla.", "gitlab-duo": "OAuth-sovellus ai_features + read_user -käyttöoikeuksilla. Määritä GITLAB_DUO_OAUTH_CLIENT_ID ja valinnaisesti GITLAB_DUO_OAUTH_CLIENT_SECRET tälle OmniRoute-instanssille.", "kilocode": "Yhdistä Kilo Code olemassa olevalla OAuth-työnkululla.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Jäähdytysjaksolla", "codexPoolUsed": "käytetty", "codexPoolUntil": "{value} asti", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonyymi varajärjestelmä", "anonymousFallbackDesc": "Kun kaikki määritetyt yhteydet on käytetty loppuun (kiintiö, krediitit tai vanhentuminen), käytä väliaikaisesti tämän tarjoajan avaimettomaa tasoa. Poista käytöstä tämän tarjoajan ohittamiseksi sen sijaan, että lähetät nimettömiä pyyntöjä — suositellaan, kun avaimeton taso hylkää ne (401).", "anonymousFallbackEnabled": "Anonyymi varajärjestelmä käytössä {provider} varten", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Tallennetun mallin päätepisteen asetukset", "searchByModelAria": "Hae mallin mukaan", "selectSupportedEndpoint": "Valitse vähintään yksi tuettu päätepiste", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Hae automaattisesti upstream-malleja", - "autoFetchModelsEnabled": "Ylävirran mallin automaattinen haku käytössä", - "autoFetchModelsTooltip": "Hae ja vältä ylösvirtaisten mallien välimuisti tarvittaessa", - "autoFetchModelsDisabled": "Ylöspäin suuntautuvan mallin automaattinen haku pois käytöstä", - "overridesUpstreamModel": "Ylikirjoittaa ylävirran", - "autoFetchModelsToggleFailed": "Epäonnistui ylösvirran mallin automaattihaku kytkemisessä", - "autoFetchModelsPartialFailure": "Joitakin yhteyksiä päivitettiin, mutta ylävirran mallin automaattista hakua ei muutettu kaikkialla", - "resetToUpstreamDefaults": "Palauta upstream-oletukset", - "resetToUpstreamDefaultsSuccess": "Palautettiin ylävirran mallin oletukset", - "resetToUpstreamDefaultsFailed": "Palautus upstream-mallin oletusasetuksista epäonnistui", - "overridesUpstreamModelHint": "Asetuksesi ohittavat tämän ylävirran mallin" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Asetukset", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Kielletyt avainsanat", "customBannedSignalsDesc": "Muut avainsanat, jotka käynnistävät tilin pysyvän eston tunnistuksen. Sisäänrakennetut avainsanat ovat aina käytössä.", "customBannedSignalsPlaceholder": "esim. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "määritetty", "none": "Ei mitään", "modelOverrideValuePlaceholder": "Numeerinen arvo", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Lisää avain-arvo", "noModelOverrides": "Tälle mallille ei ole määritetty ohituksia.", "modelOverrideLoadFailed": "Mallin ohitusten lataaminen epäonnistui", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Tiivis CJK (文言)", "description": "Klassisen kiinan ultra-tiivis tyyli (saatavilla vain kiinaksi)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin- ja satunnaisyhdistelmät vaihtavat eri yhteyteen jokaisella pyynnöllä sen sijaan, että koko keskustelu kiinnitettäisiin yhteen yhteyteen ensimmäisen viestin tiivisteen (hash) perusteella. Jätä pois käytöstä säilyttääksesi prompt-välimuistin osumat monivaiheisissa keskusteluissa. Yhdistelmäkohtaiset ohitukset ovat etusijalla.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Tunnistetietojen peittäminen", "credentialRedactionDesc": "Peitä API-avaimet, tokenit ja salaisuudet tarjoajille lähetettävästä kontekstista sekä vastauksista.", "enableCredentialRedaction": "Ota tunnistetietojen peittäminen käyttöön", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Ota moottori käyttöön", "enableDescription": "Suoritetaan pinossa viimeisenä (sen jälkeen kun RTK/Caveman puhdistaa tekstin ja OmniGlyph muuntaa loput kuviksi) ja suoritetaan myös itsenäisesti omniglyph-tilan kautta. Tämä on esikatseluversio ja pysyy oletusarvoisesti poissa käytöstä, kunnes päästä päähän -validointi on valmis.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Tallennettu.", "saveFailed": "Tallennus epäonnistui.", "enableAria": "Ota OmniGlyph-moottori käyttöön", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "kuukausi", "grokAdditionalCredits": "Lisäluotit", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Kirjaaja", "proxyTab": "Välityspalvelin", "budgetManagement": "Budjetin hallinta", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Ensimmäinen tokeni", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 84ffa972ec..64fc699674 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Chronologie visuelle des requêtes", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1282,8 +1284,6 @@ "resilienceConnectionsSubtitle": "Cooldown, disjoncteur, état de blocage", "settingsModalityBridge": "Pont de Modalité", "settingsModalityBridgeSubtitle": "Fallback image/audio → texte pour les modèles uniquement textuels", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations", "commandPalette": { "title": "Palette de commandes", "searchPlaceholder": "Rechercher dans les pages, paramètres et outils…", @@ -1739,8 +1739,8 @@ "quotaShare": "Partage de quota", "discovery": "Découverte", "freeProviderRankings": "Classement des fournisseurs gratuits", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Niveaux gratuits", "gamification": "Gamification", "leaderboard": "Classement", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Ce fournisseur est obsolète", "riskNotice": { "title": "Avant de continuer", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Fournisseur avec des restrictions d'utilisation — cliquez pour plus de détails", "oauth": "Ce fournisseur utilise votre session produit officielle/OAuth, ce qui n'est pas autorisé pour une utilisation via proxy/routeur. Nous ne recommandons pas une utilisation intensive par des agents autonomes (style OpenCloud, flux longs à étapes multiples, lots volumineux) — le service amont pourrait réagir en restreignant ou en bannissant le compte. À utiliser à vos risques et périls.", "webCookie": "Ce fournisseur s'authentifie via les cookies de votre session web. Le service amont peut invalider la session à tout moment, vous obligeant à vous reconnecter. Non recommandé pour les opérations longues sans surveillance. À utiliser à vos risques et périls.", @@ -5107,9 +5111,9 @@ "cancel": "Annuler" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Désactivé", "enableProvider": "Activer le fournisseur", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Ignorance de {count} modèles existants", "autoSync": "Synchronisation automatique", "autoSyncShort": "Synchroniser", + "autoFetchModels": "Récupérer automatiquement les modèles en amont", + "autoFetchModelsTooltip": "Récupérer et mettre en cache les modèles en amont si nécessaire", + "autoFetchModelsEnabled": "Récupération automatique du modèle en amont activée", + "autoFetchModelsDisabled": "Récupération automatique du modèle en amont désactivée", + "autoFetchModelsToggleFailed": "Échec de l'activation de la récupération automatique du modèle en amont", + "autoFetchModelsPartialFailure": "Certaines connexions ont été mises à jour, mais l'auto-récupération du modèle en amont n'a pas été modifiée partout", + "overridesUpstreamModel": "Remplace les modifications en amont", + "overridesUpstreamModelHint": "Vos paramètres remplacent ce modèle en amont", + "resetToUpstreamDefaults": "Restaurer les valeurs par défaut en amont", + "resetToUpstreamDefaultsSuccess": "Modèles par défaut de l'amont restaurés", + "resetToUpstreamDefaultsFailed": "Échec de la restauration des paramètres par défaut du modèle en amont", "autoSyncTooltip": "Actualise automatiquement la liste des modèles toutes les 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Synchronisation automatique activée — les modèles seront actualisés périodiquement", "autoSyncDisabled": "Synchronisation automatique désactivée", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Réécrire les appels d'outils natifs web_fetch vers le point de terminaison /v1/web/fetch d'OmniRoute.", "interceptionLoadError": "Échec du chargement des paramètres d'interception : {error}", "interceptionSaveError": "Échec de l'enregistrement des paramètres d'interception : {error}", - "ccAliasSectionTitle": "Exposer dans Claude Code (claude/…)", - "ccAliasSectionHint": "Afficher les modèles de ce fournisseur sous forme d'identifiants miroir claude/<provider>/<model> afin que la découverte de modèles de la passerelle Claude Code puisse les répertorier. Cette option est désactivée par défaut ; son activation double les entrées du catalogue pour tous les clients.", - "ccAliasProviderLevelLabel": "Valeur par défaut du fournisseur", - "ccAliasModelOverridesLabel": "Surcharges par modèle", - "ccAliasModelOverrideAriaLabel": "Surcharge pour {modelId}", - "ccAliasStateInherit": "Hériter", - "ccAliasStateOn": "Activé", - "ccAliasStateOff": "Désactivé", - "ccAliasAddModelPlaceholder": "ID du modèle (par ex. gpt-4o)", - "ccAliasAddModelButton": "Ajouter une surcharge", - "ccAliasLoadError": "Échec du chargement des paramètres d'alias de découverte : {error}", - "ccAliasSaveError": "Échec de l'enregistrement du paramètre d'alias de découverte : {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Connecter Galadriel avec une clé API.", "predibase": "25 $ de crédits d'essai gratuit (validité de 30 jours)", "chenzk": "Passerelle compatible OpenAI avec un catalogue de modèles en direct sur chenzk.top.", - "freepik": "Générer des images avec l'API Mystic de Freepik.", + "magnific": "Générer des images avec l'API Mystic de Freepik.", "freetheai": "Passerelle gratuite compatible OpenAI avec prise en charge des modèles en passthrough.", "g4f-gemini": "Reverse proxy g4f.space gratuit sans clé vers Gemini, limité à 5 requêtes par minute.", "g4f-groq": "Reverse proxy g4f.space gratuit sans clé vers Groq, limité à 5 requêtes par minute.", @@ -6209,6 +6224,7 @@ "claude": "Connecter Claude Code avec le flux OAuth existant.", "cline": "Connecter Cline avec le flux OAuth existant.", "cursor": "Connecter Cursor IDE avec le flux OAuth existant.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Connecter GitHub Copilot avec le flux OAuth existant.", "gitlab-duo": "Application OAuth avec les portées ai_features + read_user. Configurez GITLAB_DUO_OAUTH_CLIENT_ID et éventuellement GITLAB_DUO_OAUTH_CLIENT_SECRET sur cette instance OmniRoute.", "kilocode": "Connecter Kilo Code avec le flux OAuth existant.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "En période d'attente", "codexPoolUsed": "utilisé", "codexPoolUntil": "Jusqu'à {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback anonyme", "anonymousFallbackDesc": "Lorsque toutes les connexions configurées sont épuisées (quota, crédits ou expiration), utilisez temporairement le niveau sans clé de ce fournisseur. Désactivez cette option pour ignorer ce fournisseur au lieu d'envoyer des requêtes anonymes — recommandé lorsque le niveau sans clé les rejette (401).", "anonymousFallbackEnabled": "Fallback anonyme activé pour {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Saved modèles endpoint paramètres", "searchByModelAria": "Rechercher un modèle", "selectSupportedEndpoint": "Sélectionnez au moins un endpoint pris en charge", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Récupérer automatiquement les modèles en amont", - "autoFetchModelsEnabled": "Récupération automatique du modèle en amont activée", - "autoFetchModelsDisabled": "Récupération automatique du modèle en amont désactivée", - "autoFetchModelsTooltip": "Récupérer et mettre en cache les modèles en amont si nécessaire", - "autoFetchModelsToggleFailed": "Échec de l'activation de la récupération automatique du modèle en amont", - "overridesUpstreamModel": "Remplace les modifications en amont", - "overridesUpstreamModelHint": "Vos paramètres remplacent ce modèle en amont", - "resetToUpstreamDefaults": "Restaurer les valeurs par défaut en amont", - "resetToUpstreamDefaultsSuccess": "Modèles par défaut de l'amont restaurés", - "autoFetchModelsPartialFailure": "Certaines connexions ont été mises à jour, mais l'auto-récupération du modèle en amont n'a pas été modifiée partout", - "resetToUpstreamDefaultsFailed": "Échec de la restauration des paramètres par défaut du modèle en amont" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Paramètres", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Mots-clés bannis", "customBannedSignalsDesc": "Mots-clés supplémentaires qui déclenchent la détection de bannissement permanent du compte. Les mots-clés intégrés s'appliquent toujours.", "customBannedSignalsPlaceholder": "ex. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "configuré", "none": "Aucun", "modelOverrideValuePlaceholder": "Valeur numérique", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Ajouter une clé-valeur", "noModelOverrides": "Aucune surcharge configurée pour ce modèle.", "modelOverrideLoadFailed": "Échec du chargement des surcharges de modèle", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK concis (文言)", "description": "Style ultra-concis en chinois classique (disponible uniquement pour le chinois)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Les combinaisons round-robin et aléatoires basculent vers une connexion différente à chaque requête au lieu d'associer toute une conversation à une seule connexion via le hachage du premier message. Laissez désactivé pour préserver les correspondances du cache de prompts pour les discussions multi-tours. Les remplacements par combinaison sont prioritaires.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Masquage des identifiants", "credentialRedactionDesc": "Masquer les clés d'API, les jetons et les secrets du contexte envoyé aux fournisseurs et des réponses.", "enableCredentialRedaction": "Activer le masquage des identifiants", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Activer le moteur", "enableDescription": "S'exécute en dernier dans la pile (après que RTK/Caveman a nettoyé le texte, OmniGlyph convertit le reste en images) et s'exécute également de manière autonome via le mode omniglyph. Il s'agit d'une version préliminaire qui reste désactivée par défaut jusqu'à ce que la validation de bout en bout soit terminée.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Enregistré.", "saveFailed": "Impossible d'enregistrer.", "enableAria": "Activer le moteur OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "mois", "grokAdditionalCredits": "Crédits supplémentaires", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Enregistreur", "proxyTab": "Procuration", "budgetManagement": "Gestion budgétaire", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Premier token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json index eb23ac5ebd..5e21f097c1 100644 --- a/src/i18n/messages/gu.json +++ b/src/i18n/messages/gu.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "વિઝ્યુઅલ વિનંતી સમયરેખા", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "ખોલો", "close": "બંધ કરો" }, - "noResults": "કોઈ પરિણામો નથી", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "કોઈ પરિણામો નથી" }, "webhooks": { "title": "વેબહુક્સ", @@ -1739,8 +1739,8 @@ "quotaShare": "ક્વોટા શેર", "discovery": "ડિસ્કવરી", "freeProviderRankings": "ફ્રી પ્રોવાઇડર રેન્કિંગ્સ", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "ફ્રી ટાયર્સ", "gamification": "ગેમિફિકેશન", "leaderboard": "લીડરબોર્ડ", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "આ પ્રદાતા નાપસંદ કરવામાં આવી છે", "riskNotice": { "title": "આગળ વધતા પહેલા", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "વપરાશની ચેતવણીઓ સાથેનો પ્રદાતા — વિગતો માટે ક્લિક કરો", "oauth": "આ પ્રદાતા તમારા સત્તાવાર પ્રોડક્ટ સત્ર/OAuth નો ઉપયોગ કરે છે, જે પ્રોક્સી/રાઉટર ઉપયોગ માટે અધિકૃત નથી. અમે સઘન સ્વાયત્ત એજન્ટ વપરાશ (OpenCloud-શૈલી, લાંબા બહુ-પગલાંના પ્રવાહો, મોટા બેચ) ની ભલામણ કરતા નથી — અપસ્ટ્રીમ એકાઉન્ટને પ્રતિબંધિત અથવા બૅન કરીને પ્રતિક્રિયા આપી શકે છે. તમારા પોતાના જોખમે ઉપયોગ કરો.", "webCookie": "આ પ્રદાતા તમારા વેબ સત્ર કૂકીઝ દ્વારા પ્રમાણિત કરે છે. અપસ્ટ્રીમ સેવા કોઈપણ સમયે સત્રને અમાન્ય કરી શકે છે, જેના કારણે તમારે ફરીથી લૉગ ઇન કરવું પડશે. લાંબા અડચણ વગરના ઓપરેશન્સ માટે ભલામણ કરેલ નથી. તમારા પોતાના જોખમે ઉપયોગ કરો.", @@ -5107,9 +5111,9 @@ "cancel": "રદ કરો" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "આપોઆપ અપસ્ટ્રીમ મોડલ્સ લાવો", + "autoFetchModelsTooltip": "જરૂર પડ્યે અપસ્ટ્રીમ મોડલ્સને લાવવા અને કેશ કરવા", + "autoFetchModelsEnabled": "અપસ્ટ્રીમ મોડલ આપોઆપ મેળવવું સક્રિય છે", + "autoFetchModelsDisabled": "અપસ્ટ્રીમ મોડલ આપોઆપ મેળવનાર બંધ છે", + "autoFetchModelsToggleFailed": "અપસ્ટ્રીમ મોડલ ઓટો-ફેચ ટોગલ કરવામાં નિષ્ફળ થયું", + "autoFetchModelsPartialFailure": "કેટલાક કનેક્શન અપડેટ થયા, પરંતુ ઉપરવાળા મોડેલનું ઓટો-ફેચ દરેક જગ્યાએ બદલાયું નથી", + "overridesUpstreamModel": "અપસ્ટ્રીમને ઓવરરાઈડ કરે છે", + "overridesUpstreamModelHint": "તમારા સેટિંગ્સ આ અપસ્ટ્રીમ મોડેલને ઓવરરાઈડ કરે છે", + "resetToUpstreamDefaults": "અપસ્ટ્રીમ ડિફોલ્ટ્સ પુનઃસ્થાપિત કરો", + "resetToUpstreamDefaultsSuccess": "ઉપરવાળી મોડલ ડિફોલ્ટ્સ પુનઃસ્થાપિત કરવામાં આવ્યા", + "resetToUpstreamDefaultsFailed": "અપસ્ટ્રીમ મોડલ ડિફોલ્ટ્સ પુનઃસ્થાપિત કરવામાં નિષ્ફળ થયું", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "મૂળ web_fetch ટૂલ કૉલ્સને OmniRoute ના /v1/web/fetch પર ફરીથી લખો.", "interceptionLoadError": "ઇન્ટરસેપ્શન સેટિંગ્સ લોડ કરવામાં નિષ્ફળ: {error}", "interceptionSaveError": "ઇન્ટરસેપ્શન સેટિંગ્સ સાચવવામાં નિષ્ફળ: {error}", - "ccAliasSectionTitle": "Claude કોડમાં પ્રદર્શિત કરો (claude/…)", - "ccAliasSectionHint": "આ પ્રદાતા ના મોડલ્સને claude/<provider>/<model> મિરર આઈડીઓ હેઠળ જાહેરાત આપો જેથી Claude Code ના ગેટવે મોડલ શોધી શકે. ડિફોલ્ટ દ્વારા બંધ - આને સક્રિય કરવાથી તમામ ક્લાયન્ટો માટે કેટલોગ એન્ટ્રીઓ ડબલ થાય છે.", - "ccAliasProviderLevelLabel": "પ્રદાતા ડિફોલ્ટ", - "ccAliasModelOverridesLabel": "પ્રતિ-મોડલ ઓવરરાઇડ્સ", - "ccAliasModelOverrideAriaLabel": "{modelId} માટે ઓવરરાઈડ", - "ccAliasStateInherit": "વંશજ", - "ccAliasStateOn": "પર", - "ccAliasStateOff": "બંધ", - "ccAliasAddModelPlaceholder": "મોડલ આઈડી (ઉદાહરણ તરીકે gpt-4o)", - "ccAliasAddModelButton": "ઓવરરાઈડ ઉમેરો", - "ccAliasLoadError": "ડિસ્કવરી-એલિયસ સેટિંગ્સ લોડ કરવામાં નિષ્ફળ: {error}", - "ccAliasSaveError": "ડિસ્કવરી-એલિયસ સેટિંગ સાચવવામાં નિષ્ફળ: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "API કી વડે Galadriel ને કનેક્ટ કરો.", "predibase": "$25 મફત ટ્રાયલ ક્રેડિટ્સ (30-દિવસની માન્યતા)", "chenzk": "chenzk.top પર લાઇવ મોડલ કેટલોગ સાથે OpenAI-સુસંગત ગેટવે.", - "freepik": "Freepik ના Mystic API વડે છબીઓ જનરેટ કરો.", + "magnific": "Freepik ના Mystic API વડે છબીઓ જનરેટ કરો.", "freetheai": "પાસથ્રુ મોડલ સપોર્ટ સાથે મફત OpenAI-સુસંગત ગેટવે.", "g4f-gemini": "Gemini માટે મફત નો-કી g4f.space રિવર્સ પ્રોક્સી, પ્રતિ મિનિટ 5 વિનંતીઓ સુધી મર્યાદિત.", "g4f-groq": "Groq માટે મફત નો-કી g4f.space રિવર્સ પ્રોક્સી, પ્રતિ મિનિટ 5 વિનંતીઓ સુધી મર્યાદિત.", @@ -6209,6 +6224,7 @@ "claude": "હાલના OAuth ફ્લો વડે Claude Code ને કનેક્ટ કરો.", "cline": "હાલના OAuth ફ્લો વડે Cline ને કનેક્ટ કરો.", "cursor": "હાલના OAuth ફ્લો વડે Cursor IDE ને કનેક્ટ કરો.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "હાલના OAuth ફ્લો વડે GitHub Copilot ને કનેક્ટ કરો.", "gitlab-duo": "ai_features + read_user સ્કોપ્સ સાથેની OAuth એપ્લિકેશન. આ OmniRoute ઇન્સ્ટન્સ પર GITLAB_DUO_OAUTH_CLIENT_ID અને વૈકલ્પિક રીતે GITLAB_DUO_OAUTH_CLIENT_SECRET કન્ફિગર કરો.", "kilocode": "હાલના OAuth ફ્લો વડે Kilo Code ને કનેક્ટ કરો.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "વિરામ અવધિમાં", "codexPoolUsed": "વપરાયેલ", "codexPoolUntil": "{value} સુધી", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "ગૂઢ ફોલબેક", "anonymousFallbackDesc": "જ્યારે તમામ કન્ફિગર કરેલ કનેક્શનનો ઉપયોગ થઈ જાય છે (ક્વોટા, ક્રેડિટ, અથવા સમાપ્તી), ત્યારે આ પ્રદાતા ની કીલેસ ટિયરનો તાત્કાલિક ઉપયોગ કરો. અનામિક વિનંતીઓ મોકલવા માટે આ પ્રદાતાને છોડી દેવા માટે બંધ કરો - જ્યારે કીલેસ ટિયર તેમને નકારી દે ત્યારે ભલામણ કરવામાં આવે છે (401).", "anonymousFallbackEnabled": "{provider} માટે અજ્ઞાત ફોલબેક સક્રિય છે", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "સાચવેલ મોડેલ અંતિમ બિંદુની સેટિંગ્સ", "searchByModelAria": "મોડલ દ્વારા શોધો", "selectSupportedEndpoint": "કમથી કમ એક સમર્થિત અંતિમ બિંદુ પસંદ કરો", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "આપોઆપ અપસ્ટ્રીમ મોડલ્સ લાવો", - "autoFetchModelsEnabled": "અપસ્ટ્રીમ મોડલ આપોઆપ મેળવવું સક્રિય છે", - "autoFetchModelsDisabled": "અપસ્ટ્રીમ મોડલ આપોઆપ મેળવનાર બંધ છે", - "autoFetchModelsTooltip": "જરૂર પડ્યે અપસ્ટ્રીમ મોડલ્સને લાવવા અને કેશ કરવા", - "autoFetchModelsToggleFailed": "અપસ્ટ્રીમ મોડલ ઓટો-ફેચ ટોગલ કરવામાં નિષ્ફળ થયું", - "overridesUpstreamModel": "અપસ્ટ્રીમને ઓવરરાઈડ કરે છે", - "autoFetchModelsPartialFailure": "કેટલાક કનેક્શન અપડેટ થયા, પરંતુ ઉપરવાળા મોડેલનું ઓટો-ફેચ દરેક જગ્યાએ બદલાયું નથી", - "overridesUpstreamModelHint": "તમારા સેટિંગ્સ આ અપસ્ટ્રીમ મોડેલને ઓવરરાઈડ કરે છે", - "resetToUpstreamDefaultsSuccess": "ઉપરવાળી મોડલ ડિફોલ્ટ્સ પુનઃસ્થાપિત કરવામાં આવ્યા", - "resetToUpstreamDefaults": "અપસ્ટ્રીમ ડિફોલ્ટ્સ પુનઃસ્થાપિત કરો", - "resetToUpstreamDefaultsFailed": "અપસ્ટ્રીમ મોડલ ડિફોલ્ટ્સ પુનઃસ્થાપિત કરવામાં નિષ્ફળ થયું" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "પ્રતિબંધિત કીવર્ડ્સ", "customBannedSignalsDesc": "વધારાના કીવર્ડ્સ જે કાયમી એકાઉન્ટ પ્રતિબંધ શોધને ટ્રિગર કરે છે. બિલ્ટ-ઇન કીવર્ડ્સ હંમેશા લાગુ પડે છે.", "customBannedSignalsPlaceholder": "દા.ત. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "કન્ફિગર કરેલ", "none": "કોઈ નહીં", "modelOverrideValuePlaceholder": "સંખ્યાત્મક મૂલ્ય", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "કી વેલ્યુ ઉમેરો", "noModelOverrides": "આ મોડેલ માટે કોઈ ઓવરરાઇડ્સ કન્ફિગર કરેલ નથી.", "modelOverrideLoadFailed": "મોડેલ ઓવરરાઇડ્સ લોડ કરવામાં નિષ્ફળ", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "સંક્ષિપ્ત CJK (文言)", "description": "ક્લાસિકલ-ચાઇનીઝ અલ્ટ્રા-સંક્ષિપ્ત શૈલી (ફક્ત ચાઇનીઝ માટે ઉપલબ્ધ)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "રાઉન્ડ-રોબિન અને રેન્ડમ કોમ્બોઝ પ્રથમ-સંદેશ હેશ દ્વારા સમગ્ર વાતચીતને એક કનેક્શન પર પિન કરવાને બદલે દરેક વિનંતી પર અલગ કનેક્શન પર ફરે છે. મલ્ટિ-ટર્ન ચેટ્સ માટે પ્રોમ્પ્ટ-કેશ હિટ્સ સાચવવા માટે આને બંધ રાખો. પ્રતિ-કોમ્બો ઓવરરાઇડ્સ અગ્રતા લે છે.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "ઓળખપત્ર રેડેક્શન", "credentialRedactionDesc": "પ્રદાતાઓ તરફ મોકલવામાં આવેલા સંદર્ભમાંથી અને પ્રતિસાદોમાંથી API કી, ટોકન્સ અને સિક્રેટ્સને રેડેક્ટ કરો.", "enableCredentialRedaction": "ઓળખપત્ર રેડેક્શન સક્ષમ કરો", @@ -8621,6 +8623,27 @@ }, "enableTitle": "એન્જિન સક્ષમ કરો", "enableDescription": "સ્ટેકમાં છેલ્લે ચાલે છે (RTK/Caveman લખાણ સાફ કરે તે પછી, OmniGlyph બાકીના ભાગને છબીઓમાં રૂપાંતરિત કરે છે) અને omniglyph મોડ દ્વારા સ્વતંત્ર રીતે પણ ચાલે છે. આ એક પૂર્વાવલોકન છે અને એન્ડ-ટુ-એન્ડ માન્યતા પૂર્ણ ન થાય ત્યાં સુધી ડિફૉલ્ટ રૂપે બંધ રહે છે.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "સાચવ્યું.", "saveFailed": "સાચવી શકાયું નથી.", "enableAria": "OmniGlyph એન્જિન સક્ષમ કરો", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "મહત્તમ", "grokAutoTopUpMonth": "મહિનો", "grokAdditionalCredits": "વધુ ક્રેડિટ", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "પ્રથમ ટોકન", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 764e30527a..90db68373a 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "ציר זמן של בקשות חזותיות", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "פתח", "close": "סגור" }, - "noResults": "אין תוצאות", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "אין תוצאות" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "שיתוף מכסה", "discovery": "גילוי", "freeProviderRankings": "דירוג ספקים חינמיים", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "מסלולים חינמיים", "gamification": "משחוק", "leaderboard": "לוח מובילים", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "ספק זה הוצא משימוש", "riskNotice": { "title": "לפני שממשיכים", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "ספק עם סייגי שימוש — לחץ לפרטים", "oauth": "ספק זה משתמש בסשן המוצר הרשמי/OAuth שלך, שאינו מורשה לשימוש בפרוקסי/נתב. איננו ממליצים על שימוש אינטנסיבי בסוכנים אוטונומיים (בסגנון OpenCloud, תהליכים ארוכים מרובי שלבים, אצוות גדולות) — ספק ה-upstream עלול להגיב בהגבלת החשבון או בחסימתו. השימוש הוא על אחריותך בלבד.", "webCookie": "ספק זה מבצע אימות באמצעות עוגיות סשן הדפדפן שלך. שירות ה-upstream עלול לבטל את תוקף הסשן בכל עת, מה שידרוש ממך להתחבר מחדש. לא מומלץ לפעולות ארוכות ללא השגחה. השימוש הוא על אחריותך בלבד.", @@ -5107,9 +5111,9 @@ "cancel": "ביטול" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "מושבת", "enableProvider": "הפעל ספק", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "מדלג על {count} דגמים קיימים", "autoSync": "סנכרון אוטומטי", "autoSyncShort": "סנכרון", + "autoFetchModels": "משוך אוטומטית מודלים מהמקור", + "autoFetchModelsTooltip": "שחזר ושמור במטמון מודלים עליונים כשצריך", + "autoFetchModelsEnabled": "מודל upstream אוטומטי להורדה מופעל", + "autoFetchModelsDisabled": "איסוף אוטומטי של מודל עליון מושבת", + "autoFetchModelsToggleFailed": "נכשל בהחלפת מצב האיסוף האוטומטי של המודל העליון", + "autoFetchModelsPartialFailure": "כמה חיבורים עודכנו, אך מודל העל לא שונה בכל מקום", + "overridesUpstreamModel": "מעלים על עליון", + "overridesUpstreamModelHint": "ההגדרות שלך עוקפות את המודל העליון הזה", + "resetToUpstreamDefaults": "שחזר את ברירות המחדל של ה-upstream", + "resetToUpstreamDefaultsSuccess": "שוחזרו ברירות המחדל של המודל העליון", + "resetToUpstreamDefaultsFailed": "נכשל בשחזור ברירות המחדל של המודל העליון", "autoSyncTooltip": "רענן אוטומטית את רשימת הדגמים כל 24 שעות (ניתן להגדרה באמצעות MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "סנכרון אוטומטי מופעל - הדגמים יתרעננו מעת לעת", "autoSyncDisabled": "הסנכרון האוטומטי מושבת", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "שכתוב קריאות כלי web_fetch מובנות ל-/v1/web/fetch של OmniRoute.", "interceptionLoadError": "טעינת הגדרות היירוט נכשלה: {error}", "interceptionSaveError": "שמירת הגדרות היירוט נכשלה: {error}", - "ccAliasSectionTitle": "חשוף בקוד קלוד (claude/…)", - "ccAliasSectionHint": "פרסם את המודלים של ספק זה תחת claude/<provider>/<model> מזהי מראה כך שגילוי המודלים של שער קוד קלוד יוכל לרשום אותם. כבוי כברירת מחדל — הפעלת זה מכפילה את רשומות הקטלוג עבור כל הלקוחות.", - "ccAliasProviderLevelLabel": "ברירת מחדל של ספק", - "ccAliasModelOverridesLabel": "הגדרות לפי מודל", - "ccAliasModelOverrideAriaLabel": "החלפה עבור {modelId}", - "ccAliasStateInherit": "ירש", - "ccAliasStateOn": "על", - "ccAliasStateOff": "כבוי", - "ccAliasAddModelPlaceholder": "מזהה מודל (למשל, gpt-4o)", - "ccAliasAddModelButton": "הוסף ע override", - "ccAliasLoadError": "לא הצלחנו לטעון את הגדרות discovery-alias: {error}", - "ccAliasSaveError": "שגיאה בשמירת הגדרת discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "חבר את Galadriel באמצעות מפתח API.", "predibase": "קרדיט ניסיון חינם בסך $25 (תוקף ל-30 יום)", "chenzk": "שער תואם OpenAI עם קטלוג מודלים חי ב-chenzk.top.", - "freepik": "צור תמונות באמצעות ה-API של Mystic מבית Freepik.", + "magnific": "צור תמונות באמצעות ה-API של Mystic מבית Freepik.", "freetheai": "שער חינמי תואם OpenAI עם תמיכה במודלים בשיטת passthrough.", "g4f-gemini": "פרוקסי הפוך חינמי ללא מפתח מ-g4f.space ל-Gemini, מוגבל ל-5 בקשות לדקה.", "g4f-groq": "פרוקסי הפוך חינמי ללא מפתח מ-g4f.space ל-Groq, מוגבל ל-5 בקשות לדקה.", @@ -6209,6 +6224,7 @@ "claude": "חבר את Claude Code באמצעות תהליך ה-OAuth הקיים.", "cline": "חבר את Cline באמצעות תהליך ה-OAuth הקיים.", "cursor": "חבר את Cursor IDE באמצעות תהליך ה-OAuth הקיים.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "חבר את GitHub Copilot באמצעות תהליך ה-OAuth הקיים.", "gitlab-duo": "יישום OAuth עם הרשאות (scopes) של ai_features + read_user. הגדר את GITLAB_DUO_OAUTH_CLIENT_ID ואופציונלית את GITLAB_DUO_OAUTH_CLIENT_SECRET במופע OmniRoute זה.", "kilocode": "חבר את Kilo Code באמצעות תהליך ה-OAuth הקיים.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "בתקופת המתנה", "codexPoolUsed": "בשימוש", "codexPoolUntil": "עד {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "נפילה אנונימית", "anonymousFallbackDesc": "כאשר כל החיבורים המוגדרים נוצלו (מכסה, אשראי או תאריך תפוגה), השתמש זמנית בשכבת ללא מפתח של ספק זה. כבה כדי לדלג על ספק זה במקום לשלוח בקשות אנונימיות - מומלץ כאשר שכבת ללא מפתח דוחה אותן (401).", "anonymousFallbackEnabled": "גיבוי אנונימי מופעל עבור {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "הגדרות נקודת הקצה של המודל השמור", "searchByModelAria": "חפש לפי דגם", "selectSupportedEndpoint": "בחר לפחות נקודת קצה אחת נתמכת", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "איסוף אוטומטי של מודל עליון מושבת", - "autoFetchModelsEnabled": "מודל upstream אוטומטי להורדה מופעל", - "autoFetchModels": "משוך אוטומטית מודלים מהמקור", - "autoFetchModelsTooltip": "שחזר ושמור במטמון מודלים עליונים כשצריך", - "autoFetchModelsToggleFailed": "נכשל בהחלפת מצב האיסוף האוטומטי של המודל העליון", - "autoFetchModelsPartialFailure": "כמה חיבורים עודכנו, אך מודל העל לא שונה בכל מקום", - "overridesUpstreamModel": "מעלים על עליון", - "overridesUpstreamModelHint": "ההגדרות שלך עוקפות את המודל העליון הזה", - "resetToUpstreamDefaults": "שחזר את ברירות המחדל של ה-upstream", - "resetToUpstreamDefaultsFailed": "נכשל בשחזור ברירות המחדל של המודל העליון", - "resetToUpstreamDefaultsSuccess": "שוחזרו ברירות המחדל של המודל העליון" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "הגדרות", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "מילות מפתח חסומות", "customBannedSignalsDesc": "מילות מפתח נוספות שמפעילות זיהוי לחסימה קבועה של החשבון. מילות מפתח מובנות חלות תמיד.", "customBannedSignalsPlaceholder": "לדוגמה: api key revoked", @@ -7210,6 +7203,7 @@ "configured": "מוגדר", "none": "ללא", "modelOverrideValuePlaceholder": "ערך מספרי", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "הוסף מפתח-ערך", "noModelOverrides": "לא הוגדרו דריסות עבור מודל זה.", "modelOverrideLoadFailed": "טעינת דריסות המודל נכשלה", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK תמציתי (文言)", "description": "סגנון סיני קלאסי אולטרה-תמציתי (זמין עבור סינית בלבד)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "שילובי Round-robin ושילובים אקראיים עוברים לחיבור שונה בכל בקשה במקום להצמיד שיחה שלמה לחיבור יחיד לפי ה-hash של ההודעה הראשונה. השאר כבוי כדי לשמר פגיעות ב-prompt-cache עבור שיחות מרובות סבבים. דריסות ברמת השילוב מקבלות קדימות.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "הסתרת פרטי אימות", "credentialRedactionDesc": "הסתרת מפתחות API, טוקנים וסודות מההקשר הנשלח לספקים ומהתגובות.", "enableCredentialRedaction": "הפעלת הסתרת פרטי אימות", @@ -8621,6 +8623,27 @@ }, "enableTitle": "הפעל את המנוע", "enableDescription": "רץ אחרון במחסנית (לאחר ש-RTK/Caveman מנקה את הטקסט, OmniGlyph ממיר את השאר לתמונות) ורץ גם באופן עצמאי דרך מצב omniglyph. זוהי תצוגה מקדימה והיא נשארת כבויה כברירת מחדל עד להשלמת אימות מקצה לקצה.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "נשמר.", "saveFailed": "לא ניתן היה לשמור.", "enableAria": "הפעל את מנוע OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "מקסימום", "grokAutoTopUpMonth": "חודש", "grokAdditionalCredits": "קרדיטים נוספים", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "לוגר", "proxyTab": "פרוקסי", "budgetManagement": "ניהול תקציב", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "טוקן ראשון", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index bf73a186fc..9e353a269b 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "दृश्य अनुरोध समयरेखा", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "खोलें", "close": "बंद करें" }, - "noResults": "कोई परिणाम नहीं", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "कोई परिणाम नहीं" }, "webhooks": { "title": "वेबहुक", @@ -1739,8 +1739,8 @@ "quotaShare": "कोटा शेयर", "discovery": "खोज", "freeProviderRankings": "मुफ़्त प्रदाता रैंकिंग", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "मुफ़्त टियर", "gamification": "गेमीफिकेशन", "leaderboard": "लीडरबोर्ड", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "इस प्रदाता को अस्वीकृत कर दिया गया है", "riskNotice": { "title": "जारी रखने से पहले", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "उपयोग संबंधी चेतावनियों वाला प्रदाता — विवरण के लिए क्लिक करें", "oauth": "यह प्रदाता आपके आधिकारिक उत्पाद सत्र/OAuth का उपयोग करता है, जो प्रॉक्सी/राउटर उपयोग के लिए अधिकृत नहीं है। हम गहन स्वायत्त एजेंट उपयोग (OpenCloud-शैली, लंबे बहु-चरणीय प्रवाह, बड़े बैच) की अनुशंसा नहीं करते हैं — अपस्ट्रीम खाते को प्रतिबंधित या ब्लॉक करके प्रतिक्रिया दे सकता है। अपने जोखिम पर उपयोग करें।", "webCookie": "यह प्रदाता आपके वेब सत्र कुकीज़ के माध्यम से प्रमाणित करता है। अपस्ट्रीम सेवा किसी भी समय सत्र को अमान्य कर सकती है, जिससे आपको फिर से लॉग इन करने की आवश्यकता होगी। लंबे समय तक बिना निगरानी वाले संचालन के लिए अनुशंसित नहीं है। अपने जोखिम पर उपयोग करें।", @@ -5107,9 +5111,9 @@ "cancel": "रद्द करें" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "अक्षम", "enableProvider": "प्रदाता सक्षम करें", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "{count} मौजूदा मॉडल छोड़े जा रहे हैं", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "स्वचालित रूप से अपस्ट्रीम मॉडल लाएं", + "autoFetchModelsTooltip": "आवश्यक होने पर अपस्ट्रीम मॉडल लाएं और कैश करें", + "autoFetchModelsEnabled": "उपधारा मॉडल स्वचालित-लाने की सुविधा सक्षम है", + "autoFetchModelsDisabled": "उपधारा मॉडल ऑटो-फेच अक्षम किया गया", + "autoFetchModelsToggleFailed": "उपस्ट्रीम मॉडल ऑटो-फेच को टॉगल करने में विफल रहा", + "autoFetchModelsPartialFailure": "कुछ कनेक्शन अपडेट किए गए, लेकिन अपस्ट्रीम मॉडल ऑटो-फेच हर जगह नहीं बदला", + "overridesUpstreamModel": "उपस्ट्रीम को ओवरराइड करता है", + "overridesUpstreamModelHint": "आपकी सेटिंग्स इस अपस्ट्रीम मॉडल को ओवरराइड करती हैं", + "resetToUpstreamDefaults": "उपधारा डिफ़ॉल्ट्स को पुनर्स्थापित करें", + "resetToUpstreamDefaultsSuccess": "उपधारा मॉडल डिफ़ॉल्ट्स को पुनर्स्थापित किया गया", + "resetToUpstreamDefaultsFailed": "उपधारा मॉडल डिफ़ॉल्ट्स को पुनर्स्थापित करने में विफल", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "मूल web_fetch टूल कॉल को OmniRoute के /v1/web/fetch पर रीराइट करें।", "interceptionLoadError": "इंटरसेप्शन सेटिंग्स लोड करने में विफल: {error}", "interceptionSaveError": "इंटरसेप्शन सेटिंग्स सहेजने में विफल: {error}", - "ccAliasSectionTitle": "Claude कोड में एक्सपोज़ करें (claude/…)", - "ccAliasSectionHint": "इस प्रदाता के मॉडल को claude/<provider>/<model> मिरर आईडी के तहत विज्ञापित करें ताकि Claude Code का गेटवे मॉडल खोज उन्हें सूचीबद्ध कर सके। डिफ़ॉल्ट रूप से बंद — इसे सक्षम करने से सभी ग्राहकों के लिए कैटलॉग प्रविष्टियाँ दोगुनी हो जाती हैं।", - "ccAliasProviderLevelLabel": "प्रदाता डिफ़ॉल्ट", - "ccAliasModelOverridesLabel": "प्रति-मॉडल ओवरराइड्स", - "ccAliasModelOverrideAriaLabel": "{modelId} के लिए ओवरराइड", - "ccAliasStateInherit": "विरासत", - "ccAliasStateOn": "चालू", - "ccAliasStateOff": "बंद", - "ccAliasAddModelPlaceholder": "मॉडल आईडी (जैसे gpt-4o)", - "ccAliasAddModelButton": "ओवरराइड जोड़ें", - "ccAliasLoadError": "डिस्कवरी-एलियस सेटिंग्स लोड करने में विफल: {error}", - "ccAliasSaveError": "डिस्कवरी-उपनाम सेटिंग को सहेजने में विफल: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "API कुंजी के साथ Galadriel को कनेक्ट करें।", "predibase": "$25 मुफ्त ट्रायल क्रेडिट (30 दिनों की वैधता)", "chenzk": "chenzk.top पर लाइव मॉडल कैटलॉग के साथ OpenAI-संगत गेटवे।", - "freepik": "Freepik के Mystic API के साथ चित्र जनरेट करें।", + "magnific": "Freepik के Mystic API के साथ चित्र जनरेट करें।", "freetheai": "पासथ्रू मॉडल समर्थन के साथ मुफ्त OpenAI-संगत गेटवे।", "g4f-gemini": "Gemini के लिए मुफ्त बिना-कुंजी वाला g4f.space रिवर्स प्रॉक्सी, प्रति मिनट 5 अनुरोधों तक सीमित।", "g4f-groq": "Groq के लिए मुफ्त बिना-कुंजी वाला g4f.space रिवर्स प्रॉक्सी, प्रति मिनट 5 अनुरोधों तक सीमित।", @@ -6209,6 +6224,7 @@ "claude": "मौजूदा OAuth फ़्लो के साथ Claude Code को कनेक्ट करें।", "cline": "मौजूदा OAuth फ़्लो के साथ Cline को कनेक्ट करें।", "cursor": "मौजूदा OAuth फ़्लो के साथ Cursor IDE को कनेक्ट करें।", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "मौजूदा OAuth फ़्लो के साथ GitHub Copilot को कनेक्ट करें।", "gitlab-duo": "ai_features + read_user स्कोप के साथ OAuth एप्लिकेशन। इस OmniRoute इंस्टेंस पर GITLAB_DUO_OAUTH_CLIENT_ID और वैकल्पिक रूप से GITLAB_DUO_OAUTH_CLIENT_SECRET कॉन्फ़िगर करें।", "kilocode": "मौजूदा OAuth फ़्लो के साथ Kilo Code को कनेक्ट करें।", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "कूलडाउन जारी", "codexPoolUsed": "उपयोग किया गया", "codexPoolUntil": "{value} तक", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "गुमनाम बैकअप", "anonymousFallbackDesc": "जब सभी कॉन्फ़िगर की गई कनेक्शन समाप्त हो जाते हैं (कोटा, क्रेडिट, या समाप्ति), तो अस्थायी रूप से इस प्रदाता की कीलेस श्रेणी का उपयोग करें। इस प्रदाता को छोड़ने के लिए बंद करें बजाय गुमनाम अनुरोध भेजने के — जब कीलेस श्रेणी उन्हें अस्वीकार करती है (401) तो यह अनुशंसित है।", "anonymousFallbackEnabled": "{provider} के लिए गुमनाम फॉलबैक सक्षम किया गया", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "सहेजे गए मॉडल एंडपॉइंट सेटिंग्स", "searchByModelAria": "मॉडल द्वारा खोजें", "selectSupportedEndpoint": "कम से कम एक समर्थित एंडपॉइंट चुनें", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "स्वचालित रूप से अपस्ट्रीम मॉडल लाएं", - "autoFetchModelsEnabled": "उपधारा मॉडल स्वचालित-लाने की सुविधा सक्षम है", - "autoFetchModelsDisabled": "उपधारा मॉडल ऑटो-फेच अक्षम किया गया", - "autoFetchModelsTooltip": "आवश्यक होने पर अपस्ट्रीम मॉडल लाएं और कैश करें", - "overridesUpstreamModel": "उपस्ट्रीम को ओवरराइड करता है", - "autoFetchModelsToggleFailed": "उपस्ट्रीम मॉडल ऑटो-फेच को टॉगल करने में विफल रहा", - "overridesUpstreamModelHint": "आपकी सेटिंग्स इस अपस्ट्रीम मॉडल को ओवरराइड करती हैं", - "autoFetchModelsPartialFailure": "कुछ कनेक्शन अपडेट किए गए, लेकिन अपस्ट्रीम मॉडल ऑटो-फेच हर जगह नहीं बदला", - "resetToUpstreamDefaults": "उपधारा डिफ़ॉल्ट्स को पुनर्स्थापित करें", - "resetToUpstreamDefaultsSuccess": "उपधारा मॉडल डिफ़ॉल्ट्स को पुनर्स्थापित किया गया", - "resetToUpstreamDefaultsFailed": "उपधारा मॉडल डिफ़ॉल्ट्स को पुनर्स्थापित करने में विफल" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "सेटिंग्स", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "प्रतिबंधित कीवर्ड", "customBannedSignalsDesc": "अतिरिक्त कीवर्ड जो स्थायी खाता प्रतिबंध पहचान को ट्रिगर करते हैं। अंतर्निहित कीवर्ड हमेशा लागू होते हैं।", "customBannedSignalsPlaceholder": "उदा. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "कॉन्फ़िगर किया गया", "none": "कोई नहीं", "modelOverrideValuePlaceholder": "संख्यात्मक मान", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "कुंजी मान जोड़ें", "noModelOverrides": "इस मॉडल के लिए कोई ओवरराइड कॉन्फ़िगर नहीं किया गया है।", "modelOverrideLoadFailed": "मॉडल ओवरराइड लोड करने में विफल", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "संक्षिप्त CJK (文言)", "description": "शास्त्रीय-चीनी अति-संक्षिप्त शैली (केवल चीनी भाषा के लिए उपलब्ध)।" @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "राउंड-रॉबिन और रैंडम कॉम्बो पहले-संदेश हैश द्वारा पूरी बातचीत को एक कनेक्शन पर पिन करने के बजाय हर अनुरोध पर एक अलग कनेक्शन पर रोटेट होते हैं। मल्टी-टर्न चैट के लिए प्रॉम्प्ट-कैश हिट्स को बनाए रखने के लिए इसे बंद रखें। प्रति-कॉम्बो ओवरराइड को प्राथमिकता दी जाती है।", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "क्रेडेंशियल रिडैक्शन", "credentialRedactionDesc": "प्रदाताओं को भेजे गए संदर्भ और प्रतिक्रियाओं से API keys, tokens और secrets को रिडैक्ट करें।", "enableCredentialRedaction": "क्रेडेंशियल रिडैक्शन सक्षम करें", @@ -8621,6 +8623,27 @@ }, "enableTitle": "इंजन सक्षम करें", "enableDescription": "स्टैक में सबसे अंत में चलता है (RTK/Caveman द्वारा टेक्स्ट साफ़ करने के बाद, OmniGlyph शेष को छवियों में परिवर्तित करता है) और omniglyph मोड के माध्यम से स्टैंडअलोन भी चलता है। यह एक पूर्वावलोकन है और एंड-टू-एंड सत्यापन पूरा होने तक डिफ़ॉल्ट रूप से बंद रहता है।", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "सहेजा गया।", "saveFailed": "सहेजा नहीं जा सका।", "enableAria": "OmniGlyph इंजन सक्षम करें", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "अधिकतम", "grokAutoTopUpMonth": "महीना", "grokAdditionalCredits": "अतिरिक्त श्रेय", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "लकड़हारा", "proxyTab": "प्रॉक्सी", "budgetManagement": "बजट प्रबंधन", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "पहला टोकन", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index e5ccd837b3..4f8ee2278b 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Vizuális kérelem idővonal", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "megnyitás", "close": "bezárás" }, - "noResults": "Nincs találat", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Nincs találat" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kvótamegosztás", "discovery": "Felfedezés", "freeProviderRankings": "Ingyenes szolgáltatók rangsora", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Ingyenes szintek", "gamification": "Játékosítás", "leaderboard": "Ranglista", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Ez a szolgáltató elavult", "riskNotice": { "title": "Mielőtt folytatná", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Használati figyelmeztetésekkel rendelkező szolgáltató — kattintson a részletekért", "oauth": "Ez a szolgáltató a hivatalos termékmunkamenetet/OAuth-ot használja, amely nem engedélyezett proxy/router használatra. Nem javasoljuk az intenzív autonóm ágens használatot (OpenCloud-stílusú, hosszú, többlépéses folyamatok, nagy kötegek) — az upstream szolgáltató a fiók korlátozásával vagy kitiltásával reagálhat. Saját felelősségre használja.", "webCookie": "Ez a szolgáltató a webes munkamenet-sütik segítségével hitelesít. Az upstream szolgáltatás bármikor érvénytelenítheti a munkamenetet, ami újbóli bejelentkezést igényel. Hosszú, felügyelet nélküli műveletekhez nem ajánlott. Saját felelősségre használja.", @@ -5107,9 +5111,9 @@ "cancel": "Mégse" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Letiltva", "enableProvider": "Szolgáltató engedélyezése", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "{count} meglévő modell kihagyása", "autoSync": "Automatikus szinkronizálás", "autoSyncShort": "Szinkronizálás", + "autoFetchModels": "Automatikus frissítés a felfelé irányuló modellekből", + "autoFetchModelsTooltip": "Töltse le és tárolja a feljebb lévő modelleket, amikor szükséges", + "autoFetchModelsEnabled": "Felfelé irányuló modell automatikus lekérése engedélyezve", + "autoFetchModelsDisabled": "Felfelé irányuló modell automatikus lekérése letiltva", + "autoFetchModelsToggleFailed": "Nem sikerült átkapcsolni a feljebb lévő modell automatikus lekérdezését", + "autoFetchModelsPartialFailure": "Néhány kapcsolat frissítve lett, de a felfelé irányuló modell automatikus lekérése nem változott meg mindenhol", + "overridesUpstreamModel": "Felülírja a felfelé irányuló változtatásokat", + "overridesUpstreamModelHint": "A beállításai felülírják ezt a fenti modellt", + "resetToUpstreamDefaults": "Állítsa vissza az alapértelmezett beállításokat", + "resetToUpstreamDefaultsSuccess": "Visszaállítottuk az upstream modell alapértelmezett beállításait", + "resetToUpstreamDefaultsFailed": "Nem sikerült visszaállítani a fenti modell alapértelmezett beállításait", "autoSyncTooltip": "A modelllista automatikus frissítése 24 óránként (konfigurálható: MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatikus szinkronizálás engedélyezve – a modellek rendszeresen frissülnek", "autoSyncDisabled": "Az automatikus szinkronizálás letiltva", @@ -5439,17 +5454,17 @@ "interceptionLoadError": "Nem sikerült betölteni az elfogási beállításokat: {error}", "interceptionSaveError": "Nem sikerült menteni az elfogási beállításokat: {error}", "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "Hirdesse meg ennek a szolgáltatónak a modelljeit a claude/<provider>/<model> tükörazonosítók alatt, hogy a Claude Code átjáró modell felfedezése listázhassa őket. Alapértelmezés szerint ki van kapcsolva — ennek engedélyezése megduplázza a katalógusbejegyzéseket minden ügyfél számára.", - "ccAliasProviderLevelLabel": "Szolgáltató alapértelmezett", - "ccAliasModelOverridesLabel": "Per-modell felülírások", - "ccAliasModelOverrideAriaLabel": "Felülírás a(z) {modelId} számára", - "ccAliasStateInherit": "Örököl", - "ccAliasStateOn": "Be- és kikapcsolás", - "ccAliasStateOff": "Ki", - "ccAliasAddModelPlaceholder": "Modell azonosító (pl. gpt-4o)", - "ccAliasAddModelButton": "Add Override", - "ccAliasLoadError": "Nem sikerült betölteni a discovery-alias beállításokat: {error}", - "ccAliasSaveError": "Nem sikerült elmenteni a discovery-alias beállítást: {error}", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "A Galadriel összekapcsolása egy API-kulccsal.", "predibase": "25 $ ingyenes próbaverziós kredit (30 napos érvényesség)", "chenzk": "OpenAI-kompatibilis átjáró élő modellkatalógussal a chenzk.top címen.", - "freepik": "Képek generálása a Freepik Mystic API-jával.", + "magnific": "Képek generálása a Freepik Mystic API-jával.", "freetheai": "Ingyenes OpenAI-kompatibilis átjáró átmenő (passthrough) modelltámogatással.", "g4f-gemini": "Ingyenes, kulcs nélküli g4f.space fordított proxy a Geminihez, percenként legfeljebb 5 kéréssel.", "g4f-groq": "Ingyenes, kulcs nélküli g4f.space fordított proxy a Groq-hoz, percenként legfeljebb 5 kéréssel.", @@ -6209,6 +6224,7 @@ "claude": "A Claude Code összekapcsolása a meglévő OAuth-folyamattal.", "cline": "A Cline összekapcsolása a meglévő OAuth-folyamattal.", "cursor": "A Cursor IDE összekapcsolása a meglévő OAuth-folyamattal.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "A GitHub Copilot összekapcsolása a meglévő OAuth-folyamattal.", "gitlab-duo": "OAuth alkalmazás ai_features + read_user hatókörökkel. Konfigurálja a GITLAB_DUO_OAUTH_CLIENT_ID és opcionálisan a GITLAB_DUO_OAUTH_CLIENT_SECRET változókat ezen az OmniRoute példányon.", "kilocode": "A Kilo Code összekapcsolása a meglévő OAuth-folyamattal.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Várakozási időszakban", "codexPoolUsed": "felhasználva", "codexPoolUntil": "Eddig: {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Névtelen visszaesés", "anonymousFallbackDesc": "Amikor az összes konfigurált kapcsolat kimerült (kvóta, kreditek vagy lejárat), ideiglenesen használja ezt a szolgáltató kulcs nélküli szintjét. Kapcsolja ki, hogy kihagyja ezt a szolgáltatót a névtelen kérések küldése helyett — ajánlott, ha a kulcs nélküli szint elutasítja őket (401).", "anonymousFallbackEnabled": "Névtelen visszaesés engedélyezve a(z) {provider} számára", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Mentett modell végpont beállításai", "searchByModelAria": "Keresés modell szerint", "selectSupportedEndpoint": "Válasszon ki legalább egy támogatott végpontot", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Felfelé irányuló modell automatikus lekérése letiltva", - "autoFetchModelsEnabled": "Felfelé irányuló modell automatikus lekérése engedélyezve", - "autoFetchModelsTooltip": "Töltse le és tárolja a feljebb lévő modelleket, amikor szükséges", - "autoFetchModels": "Automatikus frissítés a felfelé irányuló modellekből", - "autoFetchModelsToggleFailed": "Nem sikerült átkapcsolni a feljebb lévő modell automatikus lekérdezését", - "autoFetchModelsPartialFailure": "Néhány kapcsolat frissítve lett, de a felfelé irányuló modell automatikus lekérése nem változott meg mindenhol", - "overridesUpstreamModel": "Felülírja a felfelé irányuló változtatásokat", - "overridesUpstreamModelHint": "A beállításai felülírják ezt a fenti modellt", - "resetToUpstreamDefaults": "Állítsa vissza az alapértelmezett beállításokat", - "resetToUpstreamDefaultsSuccess": "Visszaállítottuk az upstream modell alapértelmezett beállításait", - "resetToUpstreamDefaultsFailed": "Nem sikerült visszaállítani a fenti modell alapértelmezett beállításait" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Beállítások elemre", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Tiltott kulcsszavak", "customBannedSignalsDesc": "További kulcsszavak, amelyek végleges fióktiltás észlelését váltják ki. A beépített kulcsszavak mindig érvényesek.", "customBannedSignalsPlaceholder": "pl. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "konfigurálva", "none": "Nincs", "modelOverrideValuePlaceholder": "Numerikus érték", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Kulcs-érték hozzáadása", "noModelOverrides": "Nincsenek felülírások konfigurálva ehhez a modellhez.", "modelOverrideLoadFailed": "Nem sikerült betölteni a modellfelülírásokat", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Tömör CJK (文言)", "description": "Klasszikus kínai ultratömör stílus (csak kínai nyelven érhető el)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "A round-robin és a véletlenszerű kombinációk minden kérésnél új kapcsolatra váltanak, ahelyett, hogy a teljes beszélgetést egyetlen kapcsolathoz rögzítenék az első üzenet hash-e alapján. Hagyja kikapcsolva, hogy megőrizze a prompt-cache találatokat a többfordulós csevegéseknél. A kombinációnkénti felülírások elsőbbséget élveznek.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Hitelesítési adatok kitakarása", "credentialRedactionDesc": "API-kulcsok, tokenek és titkok kitakarása a szolgáltatóknak küldött kontextusból és a válaszokból.", "enableCredentialRedaction": "Hitelesítési adatok kitakarásának engedélyezése", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Motor engedélyezése", "enableDescription": "Utolsóként fut a veremben (miután az RTK/Caveman megtisztítja a szöveget, az OmniGlyph képekké alakítja a maradékot), valamint önállóan is fut a omniglyph módon keresztül. Ez egy előnézet, és alapértelmezés szerint kikapcsolva marad a végpontok közötti ellenőrzés befejezéséig.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Mentve.", "saveFailed": "Nem sikerült menteni.", "enableAria": "Az OmniGlyph motor engedélyezése", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "hónap", "grokAdditionalCredits": "További Kiadások", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Költségvetési menedzsment", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Első token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 352daafd83..bc841a35d6 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Garis waktu permintaan visual", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "buka", "close": "tutup" }, - "noResults": "Tidak ada hasil", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Tidak ada hasil" }, "webhooks": { "title": "Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "Pangsa Kuota", "discovery": "Penemuan", "freeProviderRankings": "Peringkat Penyedia Gratis", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Tingkat Gratis", "gamification": "Gamifikasi", "leaderboard": "Papan Peringkat", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Penyedia ini sudah tidak digunakan lagi", "riskNotice": { "title": "Sebelum melanjutkan", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Penyedia dengan catatan penggunaan — klik untuk detail", "oauth": "Penyedia ini menggunakan sesi/OAuth produk resmi Anda, yang tidak diizinkan untuk penggunaan proxy/router. Kami tidak menyarankan penggunaan agen otonom yang intensif (gaya OpenCloud, alur multi-langkah yang panjang, batch besar) — upstream dapat bereaksi dengan membatasi atau memblokir akun. Gunakan dengan risiko Anda sendiri.", "webCookie": "Penyedia ini mengautentikasi melalui cookie sesi web Anda. Layanan upstream dapat membatalkan sesi kapan saja, mengharuskan Anda untuk masuk kembali. Tidak disarankan untuk operasi tanpa pengawasan yang lama. Gunakan dengan risiko Anda sendiri.", @@ -5107,9 +5111,9 @@ "cancel": "Batal" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Dengan disabilitas", "enableProvider": "Aktifkan penyedia", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Melewatkan {count} model yang sudah ada", "autoSync": "Sinkronisasi Otomatis", "autoSyncShort": "Sinkronkan", + "autoFetchModels": "Ambil model upstream secara otomatis", + "autoFetchModelsTooltip": "Ambil dan simpan model upstream saat diperlukan", + "autoFetchModelsEnabled": "Model upstream auto-fetch diaktifkan", + "autoFetchModelsDisabled": "Pengambilan otomatis model upstream dinonaktifkan", + "autoFetchModelsToggleFailed": "Gagal untuk mengubah pengambilan otomatis model upstream", + "autoFetchModelsPartialFailure": "Beberapa koneksi diperbarui, tetapi pengambilan otomatis model upstream tidak berubah di semua tempat", + "overridesUpstreamModel": "Mengganti upstream", + "overridesUpstreamModelHint": "Pengaturan Anda menimpa model upstream ini", + "resetToUpstreamDefaults": "Pulihkan pengaturan default upstream", + "resetToUpstreamDefaultsSuccess": "Mengembalikan pengaturan default model upstream", + "resetToUpstreamDefaultsFailed": "Gagal mengembalikan pengaturan model upstream ke default", "autoSyncTooltip": "Segarkan daftar model secara otomatis setiap 24 jam (dapat dikonfigurasi melalui MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Sinkronisasi otomatis diaktifkan — model akan disegarkan secara berkala", "autoSyncDisabled": "Sinkronisasi otomatis dinonaktifkan", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Tulis ulang panggilan alat web_fetch bawaan ke /v1/web/fetch milik OmniRoute.", "interceptionLoadError": "Gagal memuat pengaturan intersepsi: {error}", "interceptionSaveError": "Gagal menyimpan pengaturan intersepsi: {error}", - "ccAliasSectionTitle": "Expose di Claude Code (claude/…)", - "ccAliasSectionHint": "Iklankan model penyedia ini di bawah claude/<provider>/<model> ID cermin agar penemuan model gateway Claude Code dapat mencantumkannya. Mati secara default — mengaktifkan ini menggandakan entri katalog untuk semua klien.", - "ccAliasProviderLevelLabel": "Penyedia default", - "ccAliasModelOverridesLabel": "Penggantian per-model", - "ccAliasModelOverrideAriaLabel": "Override untuk {modelId}", - "ccAliasStateInherit": "Warisi", - "ccAliasStateOn": "Hidup", - "ccAliasStateOff": "Matikan", - "ccAliasAddModelPlaceholder": "Model id (misalnya gpt-4o)", - "ccAliasAddModelButton": "Tambahkan override", - "ccAliasLoadError": "Gagal memuat pengaturan discovery-alias: {error}", - "ccAliasSaveError": "Gagal menyimpan pengaturan discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Hubungkan Galadriel dengan kunci API.", "predibase": "Kredit uji coba gratis $25 (validitas 30 hari)", "chenzk": "Gateway yang kompatibel dengan OpenAI dengan katalog model langsung di chenzk.top.", - "freepik": "Hasilkan gambar dengan Mystic API dari Freepik.", + "magnific": "Hasilkan gambar dengan Mystic API dari Freepik.", "freetheai": "Gateway gratis yang kompatibel dengan OpenAI dengan dukungan model passthrough.", "g4f-gemini": "Proksi terbalik g4f.space tanpa kunci gratis ke Gemini, dibatasi hingga 5 permintaan per menit.", "g4f-groq": "Proksi terbalik g4f.space tanpa kunci gratis ke Groq, dibatasi hingga 5 permintaan per menit.", @@ -6209,6 +6224,7 @@ "claude": "Hubungkan Claude Code dengan alur OAuth yang ada.", "cline": "Hubungkan Cline dengan alur OAuth yang ada.", "cursor": "Hubungkan Cursor IDE dengan alur OAuth yang ada.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Hubungkan GitHub Copilot dengan alur OAuth yang ada.", "gitlab-duo": "Aplikasi OAuth dengan cakupan ai_features + read_user. Konfigurasikan GITLAB_DUO_OAUTH_CLIENT_ID dan secara opsional GITLAB_DUO_OAUTH_CLIENT_SECRET pada instans OmniRoute ini.", "kilocode": "Hubungkan Kilo Code dengan alur OAuth yang ada.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Dalam masa tunggu", "codexPoolUsed": "terpakai", "codexPoolUntil": "Hingga {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback anonim", "anonymousFallbackDesc": "Ketika semua koneksi yang dikonfigurasi habis (kuota, kredit, atau masa berlaku), gunakan sementara tingkat tanpa kunci penyedia ini. Matikan untuk melewati penyedia ini alih-alih mengirim permintaan anonim — disarankan ketika tingkat tanpa kunci menolak permintaan tersebut (401).", "anonymousFallbackEnabled": "Fallback anonim diaktifkan untuk {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Pengaturan endpoint model yang disimpan", "searchByModelAria": "Cari berdasarkan model", "selectSupportedEndpoint": "Pilih setidaknya satu endpoint yang didukung", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Ambil model upstream secara otomatis", - "autoFetchModelsEnabled": "Model upstream auto-fetch diaktifkan", - "autoFetchModelsTooltip": "Ambil dan simpan model upstream saat diperlukan", - "autoFetchModelsDisabled": "Pengambilan otomatis model upstream dinonaktifkan", - "autoFetchModelsToggleFailed": "Gagal untuk mengubah pengambilan otomatis model upstream", - "overridesUpstreamModel": "Mengganti upstream", - "autoFetchModelsPartialFailure": "Beberapa koneksi diperbarui, tetapi pengambilan otomatis model upstream tidak berubah di semua tempat", - "resetToUpstreamDefaults": "Pulihkan pengaturan default upstream", - "overridesUpstreamModelHint": "Pengaturan Anda menimpa model upstream ini", - "resetToUpstreamDefaultsSuccess": "Mengembalikan pengaturan default model upstream", - "resetToUpstreamDefaultsFailed": "Gagal mengembalikan pengaturan model upstream ke default" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Pengaturan", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Kata Kunci yang Diblokir", "customBannedSignalsDesc": "Kata kunci tambahan yang memicu deteksi pemblokiran akun permanen. Kata kunci bawaan selalu berlaku.", "customBannedSignalsPlaceholder": "mis. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "dikonfigurasi", "none": "Tidak ada", "modelOverrideValuePlaceholder": "Nilai numerik", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Tambahkan nilai kunci", "noModelOverrides": "Tidak ada override yang dikonfigurasi untuk model ini.", "modelOverrideLoadFailed": "Gagal memuat override model", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK Ringkas (文言)", "description": "Gaya ultra-ringkas Tionghoa Klasik (hanya tersedia untuk bahasa Tionghoa)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Kombo round-robin dan acak berganti ke koneksi yang berbeda pada setiap permintaan alih-alih menyematkan seluruh percakapan ke satu koneksi berdasarkan hash pesan pertama. Biarkan nonaktif untuk mempertahankan hit prompt-cache pada obrolan multi-turn. Penggantian per-kombo lebih diutamakan.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Redaksi Kredensial", "credentialRedactionDesc": "Redaksi kunci API, token, dan rahasia dari konteks yang dikirim ke penyedia dan dari respons.", "enableCredentialRedaction": "Aktifkan redaksi kredensial", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Aktifkan mesin", "enableDescription": "Berjalan terakhir dalam tumpukan (setelah RTK/Caveman membersihkan teks, OmniGlyph mengonversi sisanya menjadi gambar) dan juga berjalan mandiri melalui mode omniglyph. Ini adalah pratinjau dan tetap dinonaktifkan secara default hingga validasi menyeluruh selesai.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Disimpan.", "saveFailed": "Tidak dapat menyimpan.", "enableAria": "Aktifkan mesin OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksimum", "grokAutoTopUpMonth": "bulan", "grokAdditionalCredits": "Kredit Tambahan", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "penebang", "proxyTab": "Proksi", "budgetManagement": "Manajemen Anggaran", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Token Pertama", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 19f45ac1ca..b9c7e6706c 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Garis Waktu Permintaan Visual", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "buka", "close": "tutup" }, - "noResults": "Tidak ada hasil", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Tidak ada hasil" }, "webhooks": { "title": "Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "Pembagian Kuota", "discovery": "Penemuan", "freeProviderRankings": "Peringkat Penyedia Gratis", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Tingkat Gratis", "gamification": "Gamifikasi", "leaderboard": "Papan Peringkat", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Penyedia ini sudah tidak digunakan lagi", "riskNotice": { "title": "Sebelum melanjutkan", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Penyedia dengan peringatan penggunaan — klik untuk detail", "oauth": "Penyedia ini menggunakan sesi produk/OAuth resmi Anda, yang tidak diizinkan untuk penggunaan proksi/router. Kami tidak menyarankan penggunaan agen otonom yang intensif (gaya OpenCloud, alur multi-langkah yang panjang, batch besar) — upstream mungkin bereaksi dengan membatasi atau memblokir akun. Gunakan dengan risiko Anda sendiri.", "webCookie": "Penyedia ini mengautentikasi melalui kuki sesi web Anda. Layanan upstream dapat membatalkan sesi kapan saja, mengharuskan Anda untuk masuk kembali. Tidak disarankan untuk operasi jangka panjang tanpa pengawasan. Gunakan dengan risiko Anda sendiri.", @@ -5107,9 +5111,9 @@ "cancel": "Batal" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "Ambil model upstream secara otomatis", + "autoFetchModelsTooltip": "Ambil dan simpan model upstream saat diperlukan", + "autoFetchModelsEnabled": "Model hulu auto-fetch diaktifkan", + "autoFetchModelsDisabled": "Model upstream auto-fetch dinonaktifkan", + "autoFetchModelsToggleFailed": "Gagal untuk mengubah model upstream auto-fetch", + "autoFetchModelsPartialFailure": "Beberapa koneksi diperbarui, tetapi pengambilan otomatis model upstream tidak berubah di mana-mana", + "overridesUpstreamModel": "Mengganti upstream", + "overridesUpstreamModelHint": "Pengaturan Anda menimpa model upstream ini", + "resetToUpstreamDefaults": "Kembalikan pengaturan default upstream", + "resetToUpstreamDefaultsSuccess": "Mengembalikan pengaturan model upstream ke default", + "resetToUpstreamDefaultsFailed": "Gagal mengembalikan pengaturan model upstream ke default", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Tulis ulang panggilan alat web_fetch bawaan ke /v1/web/fetch milik OmniRoute.", "interceptionLoadError": "Gagal memuat pengaturan intersepsi: {error}", "interceptionSaveError": "Gagal menyimpan pengaturan intersepsi: {error}", - "ccAliasSectionTitle": "Expose di Claude Code (claude/…)", - "ccAliasSectionHint": "Iklankan model penyedia ini di bawah claude/<provider>/<model> ID cermin agar penemuan model gateway Claude Code dapat mencantumkannya. Mati secara default — mengaktifkan ini menggandakan entri katalog untuk semua klien.", - "ccAliasProviderLevelLabel": "Penyedia default", - "ccAliasModelOverridesLabel": "Penggantian per-model", - "ccAliasModelOverrideAriaLabel": "Override untuk {modelId}", - "ccAliasStateInherit": "Warisi", - "ccAliasStateOn": "Hidup", - "ccAliasStateOff": "Matikan", - "ccAliasAddModelPlaceholder": "Model id (mis. gpt-4o)", - "ccAliasAddModelButton": "Tambahkan override", - "ccAliasLoadError": "Gagal memuat pengaturan discovery-alias: {error}", - "ccAliasSaveError": "Gagal menyimpan pengaturan discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Hubungkan Galadriel dengan kunci API.", "predibase": "Kredit uji coba gratis $25 (validitas 30 hari)", "chenzk": "Gateway yang kompatibel dengan OpenAI dengan katalog model langsung di chenzk.top.", - "freepik": "Hasilkan gambar dengan Mystic API dari Freepik.", + "magnific": "Hasilkan gambar dengan Mystic API dari Freepik.", "freetheai": "Gateway gratis yang kompatibel dengan OpenAI dengan dukungan model passthrough.", "g4f-gemini": "Proksi terbalik g4f.space tanpa kunci gratis ke Gemini, dibatasi hingga 5 permintaan per menit.", "g4f-groq": "Proksi terbalik g4f.space tanpa kunci gratis ke Groq, dibatasi hingga 5 permintaan per menit.", @@ -6209,6 +6224,7 @@ "claude": "Hubungkan Claude Code dengan alur OAuth yang ada.", "cline": "Hubungkan Cline dengan alur OAuth yang ada.", "cursor": "Hubungkan Cursor IDE dengan alur OAuth yang ada.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Hubungkan GitHub Copilot dengan alur OAuth yang ada.", "gitlab-duo": "Aplikasi OAuth dengan cakupan ai_features + read_user. Konfigurasikan GITLAB_DUO_OAUTH_CLIENT_ID dan secara opsional GITLAB_DUO_OAUTH_CLIENT_SECRET pada instansi OmniRoute ini.", "kilocode": "Hubungkan Kilo Code dengan alur OAuth yang ada.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Dalam masa tunggu", "codexPoolUsed": "terpakai", "codexPoolUntil": "Hingga {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback anonim", "anonymousFallbackDesc": "Ketika semua koneksi yang dikonfigurasi habis (kuota, kredit, atau masa berlaku), gunakan sementara tingkat tanpa kunci penyedia ini. Matikan untuk melewati penyedia ini alih-alih mengirim permintaan anonim — disarankan ketika tingkat tanpa kunci menolak permintaan tersebut (401).", "anonymousFallbackEnabled": "Fallback anonim diaktifkan untuk {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Pengaturan endpoint model yang disimpan", "searchByModelAria": "Cari berdasarkan model", "selectSupportedEndpoint": "Pilih setidaknya satu endpoint yang didukung", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Ambil model upstream secara otomatis", - "autoFetchModelsDisabled": "Model upstream auto-fetch dinonaktifkan", - "autoFetchModelsEnabled": "Model hulu auto-fetch diaktifkan", - "autoFetchModelsToggleFailed": "Gagal untuk mengubah model upstream auto-fetch", - "overridesUpstreamModel": "Mengganti upstream", - "autoFetchModelsPartialFailure": "Beberapa koneksi diperbarui, tetapi pengambilan otomatis model upstream tidak berubah di mana-mana", - "overridesUpstreamModelHint": "Pengaturan Anda menimpa model upstream ini", - "resetToUpstreamDefaults": "Kembalikan pengaturan default upstream", - "resetToUpstreamDefaultsSuccess": "Mengembalikan pengaturan model upstream ke default", - "resetToUpstreamDefaultsFailed": "Gagal mengembalikan pengaturan model upstream ke default", - "autoFetchModelsTooltip": "Ambil dan simpan model upstream saat diperlukan" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Kata Kunci yang Dilarang", "customBannedSignalsDesc": "Kata kunci tambahan yang memicu deteksi pemblokiran akun permanen. Kata kunci bawaan selalu berlaku.", "customBannedSignalsPlaceholder": "mis. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "dikonfigurasi", "none": "Tidak ada", "modelOverrideValuePlaceholder": "Nilai numerik", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Tambah nilai kunci", "noModelOverrides": "Tidak ada penimpaan yang dikonfigurasi untuk model ini.", "modelOverrideLoadFailed": "Gagal memuat penimpaan model", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK Ringkas (文言)", "description": "Gaya ultra-ringkas Tionghoa Klasik (hanya tersedia untuk bahasa Tionghoa)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Kombo round-robin dan acak beralih ke koneksi yang berbeda pada setiap permintaan, alih-alih menetapkan seluruh percakapan ke satu koneksi berdasarkan hash pesan pertama. Biarkan nonaktif untuk mempertahankan hit prompt-cache pada obrolan multi-putaran. Pengabaian per-kombo memiliki prioritas lebih tinggi.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Redaksi Kredensial", "credentialRedactionDesc": "Redaksikan kunci API, token, dan rahasia dari konteks yang dikirim ke penyedia dan dari respons.", "enableCredentialRedaction": "Aktifkan redaksi kredensial", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Aktifkan mesin", "enableDescription": "Berjalan terakhir dalam tumpukan (setelah RTK/Caveman membersihkan teks, OmniGlyph mengonversi sisanya menjadi gambar) dan juga berjalan mandiri melalui mode omniglyph. Ini adalah pratinjau dan tetap nonaktif secara default hingga validasi menyeluruh selesai.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Tersimpan.", "saveFailed": "Tidak dapat menyimpan.", "enableAria": "Aktifkan mesin OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksimum", "grokAutoTopUpMonth": "bulan", "grokAdditionalCredits": "Kredit Tambahan", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Token Pertama", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 7332c3206b..d777c72bf1 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Timeline visiva delle richieste", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "apri", "close": "chiudi" }, - "noResults": "Nessun risultato", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Nessun risultato" }, "webhooks": { "title": "Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "Quota condivisa", "discovery": "Scoperta", "freeProviderRankings": "Classifiche provider gratuiti", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Piani gratuiti", "gamification": "Gamification", "leaderboard": "Classifica", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Questo provider è stato deprecato", "riskNotice": { "title": "Prima di continuare", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provider con avvertenze d'uso — fai clic per i dettagli", "oauth": "Questo provider utilizza la sessione/OAuth ufficiale del prodotto, che non è autorizzata per l'uso come proxy/router. Si sconsiglia l'uso intensivo di agenti autonomi (in stile OpenCloud, flussi lunghi a più passaggi, batch di grandi dimensioni): l'upstream potrebbe reagire limitando o bloccando l'account. Utilizzare a proprio rischio.", "webCookie": "Questo provider si autentica tramite i cookie della sessione web. Il servizio upstream potrebbe invalidare la sessione in qualsiasi momento, richiedendo di effettuare nuovamente l'accesso. Non consigliato per operazioni prolungate non presidiate. Utilizzare a proprio rischio.", @@ -5107,9 +5111,9 @@ "cancel": "Annulla" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabilitato", "enableProvider": "Abilita fornitore", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Salto {count} modelli esistenti", "autoSync": "Sincronizzazione automatica", "autoSyncShort": "Sincronizza", + "autoFetchModels": "Recupera automaticamente i modelli upstream", + "autoFetchModelsTooltip": "Recupera e memorizza nella cache i modelli upstream quando necessario", + "autoFetchModelsEnabled": "Modello upstream auto-fetch abilitato", + "autoFetchModelsDisabled": "Fetch automatico del modello upstream disabilitato", + "autoFetchModelsToggleFailed": "Impossibile attivare/disattivare il recupero automatico del modello upstream", + "autoFetchModelsPartialFailure": "Alcune connessioni aggiornate, ma l'auto-fetch del modello upstream non è stato cambiato ovunque", + "overridesUpstreamModel": "Sovrascrive upstream", + "overridesUpstreamModelHint": "Le tue impostazioni sovrascrivono questo modello upstream", + "resetToUpstreamDefaults": "Ripristina le impostazioni predefinite upstream", + "resetToUpstreamDefaultsSuccess": "Ripristinati i valori predefiniti del modello upstream", + "resetToUpstreamDefaultsFailed": "Impossibile ripristinare le impostazioni predefinite del modello upstream", "autoSyncTooltip": "Aggiorna automaticamente l'elenco dei modelli ogni 24 ore (configurabile tramite MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Sincronizzazione automatica abilitata — i modelli verranno aggiornati periodicamente", "autoSyncDisabled": "Sincronizzazione automatica disabilitata", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Riscrivi le chiamate dello strumento nativo web_fetch verso /v1/web/fetch di OmniRoute.", "interceptionLoadError": "Impossibile caricare le impostazioni di intercettazione: {error}", "interceptionSaveError": "Impossibile salvare le impostazioni di intercettazione: {error}", - "ccAliasSectionTitle": "Esponi in Claude Code (claude/…)", - "ccAliasSectionHint": "Mostra i modelli di questo provider sotto gli id specchio claude/<provider>/<model> così la scoperta modelli gateway di Claude Code può elencarli. Disattivato per impostazione predefinita — abilitarlo raddoppia le voci nel catalogo per tutti i client.", - "ccAliasProviderLevelLabel": "Impostazione predefinita del provider", - "ccAliasModelOverridesLabel": "Sostituzioni per modello", - "ccAliasModelOverrideAriaLabel": "Sostituzione per {modelId}", - "ccAliasStateInherit": "Eredita", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", "ccAliasStateOn": "On", "ccAliasStateOff": "Off", - "ccAliasAddModelPlaceholder": "Id modello (es. gpt-4o)", - "ccAliasAddModelButton": "Aggiungi sostituzione", - "ccAliasLoadError": "Impossibile caricare le impostazioni discovery-alias: {error}", - "ccAliasSaveError": "Impossibile salvare l'impostazione discovery-alias: {error}", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Connetti Galadriel con una chiave API.", "predibase": "$25 di crediti di prova gratuiti (validità di 30 giorni)", "chenzk": "Gateway compatibile con OpenAI con un catalogo di modelli live su chenzk.top.", - "freepik": "Genera immagini con la Mystic API di Freepik.", + "magnific": "Genera immagini con la Mystic API di Freepik.", "freetheai": "Gateway gratuito compatibile con OpenAI con supporto per modelli passthrough.", "g4f-gemini": "Reverse proxy gratuito senza chiave di g4f.space verso Gemini, limitato a 5 richieste al minuto.", "g4f-groq": "Reverse proxy gratuito senza chiave di g4f.space verso Groq, limitato a 5 richieste al minuto.", @@ -6209,6 +6224,7 @@ "claude": "Connetti Claude Code con il flusso OAuth esistente.", "cline": "Connetti Cline con il flusso OAuth esistente.", "cursor": "Connetti Cursor IDE con il flusso OAuth esistente.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Connetti GitHub Copilot con il flusso OAuth esistente.", "gitlab-duo": "Applicazione OAuth con scope ai_features + read_user. Configura GITLAB_DUO_OAUTH_CLIENT_ID e opzionalmente GITLAB_DUO_OAUTH_CLIENT_SECRET su questa istanza di OmniRoute.", "kilocode": "Connetti Kilo Code con il flusso OAuth esistente.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "In attesa", "codexPoolUsed": "utilizzato", "codexPoolUntil": "Fino a {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback anonimo", "anonymousFallbackDesc": "Quando tutte le connessioni configurate sono esaurite (quota, crediti o scadenza), utilizza temporaneamente il livello senza chiave di questo fornitore. Disattiva per saltare questo fornitore invece di inviare richieste anonime — consigliato quando il livello senza chiave le rifiuta (401).", "anonymousFallbackEnabled": "Fallback anonimo abilitato per {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Impostazioni dell'endpoint del modello salvato", "searchByModelAria": "Cerca per modello", "selectSupportedEndpoint": "Seleziona almeno un endpoint supportato", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsTooltip": "Recupera e memorizza nella cache i modelli upstream quando necessario", - "autoFetchModels": "Recupera automaticamente i modelli upstream", - "autoFetchModelsDisabled": "Fetch automatico del modello upstream disabilitato", - "autoFetchModelsToggleFailed": "Impossibile attivare/disattivare il recupero automatico del modello upstream", - "overridesUpstreamModel": "Sovrascrive upstream", - "autoFetchModelsPartialFailure": "Alcune connessioni aggiornate, ma l'auto-fetch del modello upstream non è stato cambiato ovunque", - "overridesUpstreamModelHint": "Le tue impostazioni sovrascrivono questo modello upstream", - "resetToUpstreamDefaults": "Ripristina le impostazioni predefinite upstream", - "resetToUpstreamDefaultsSuccess": "Ripristinati i valori predefiniti del modello upstream", - "resetToUpstreamDefaultsFailed": "Impossibile ripristinare le impostazioni predefinite del modello upstream", - "autoFetchModelsEnabled": "Modello upstream auto-fetch abilitato" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Impostazioni", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Parole chiave vietate", "customBannedSignalsDesc": "Parole chiave aggiuntive che attivano il rilevamento del ban permanente dell'account. Le parole chiave integrate si applicano sempre.", "customBannedSignalsPlaceholder": "es. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "configurato", "none": "Nessuno", "modelOverrideValuePlaceholder": "Valore numerico", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Aggiungi chiave-valore", "noModelOverrides": "Nessun override configurato per questo modello.", "modelOverrideLoadFailed": "Impossibile caricare gli override del modello", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK conciso (文言)", "description": "Stile ultra-conciso in cinese classico (disponibile solo per il cinese)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Le combinazioni round-robin e casuali ruotano su una connessione diversa a ogni richiesta invece di associare un'intera conversazione a una sola connessione tramite l'hash del primo messaggio. Lascia disattivato per preservare i riscontri della cache dei prompt per le chat a più turni. Le sostituzioni per singola combinazione hanno la precedenza.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Oscuramento delle credenziali", "credentialRedactionDesc": "Oscura chiavi API, token e segreti dal contesto inviato ai provider e dalle risposte.", "enableCredentialRedaction": "Abilita l'oscuramento delle credenziali", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Abilita il motore", "enableDescription": "Viene eseguito per ultimo nello stack (dopo che RTK/Caveman ha pulito il testo, OmniGlyph converte il resto in immagini) e funziona anche in modalità autonoma tramite la modalità omniglyph. Questa è un'anteprima e rimane disattivata per impostazione predefinita fino al completamento della convalida end-to-end.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Salvato.", "saveFailed": "Impossibile salvare.", "enableAria": "Abilita il motore OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "massimo", "grokAutoTopUpMonth": "mese", "grokAdditionalCredits": "Crediti Aggiuntivi", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Registratore", "proxyTab": "Procura", "budgetManagement": "Gestione del bilancio", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Primo Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 7a12061df8..ee7b56d074 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "ビジュアルリクエストタイムライン", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "開く", "close": "閉じる" }, - "noResults": "結果がありません", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "結果がありません" }, "webhooks": { "title": "Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "クォータ共有", "discovery": "ディスカバリー", "freeProviderRankings": "無料プロバイダーランキング", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "無料枠", "gamification": "ゲーミフィケーション", "leaderboard": "リーダーボード", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "このプロバイダーは廃止されました", "riskNotice": { "title": "続行する前に", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "使用上の注意点があるプロバイダー — クリックして詳細を表示", "oauth": "このプロバイダーは、プロキシ/ルーターでの使用が許可されていない公式製品のセッション/OAuthを使用します。自律型エージェントの集中的な使用(OpenCloudスタイル、長いマルチステップフロー、大量のバッチ処理)は推奨されません。アップストリームがアカウントを制限または禁止する可能性があります。自己責任でご利用ください。", "webCookie": "このプロバイダーは、Webセッションクッキーを使用して認証します。アップストリームサービスはいつでもセッションを無効化する可能性があり、その場合は再ログインが必要になります。長時間の無人運用には推奨されません。自己責任でご利用ください。", @@ -5107,9 +5111,9 @@ "cancel": "キャンセル" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "無効", "enableProvider": "プロバイダーを有効にする", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "{count}件の既存モデルをスキップ", "autoSync": "自動同期", "autoSyncShort": "同期", + "autoFetchModels": "アップストリームモデルを自動取得", + "autoFetchModelsTooltip": "必要に応じてアップストリームモデルを取得してキャッシュする", + "autoFetchModelsEnabled": "上流モデルの自動取得が有効になりました", + "autoFetchModelsDisabled": "上流モデルの自動取得が無効になっています", + "autoFetchModelsToggleFailed": "アップストリームモデルの自動取得の切り替えに失敗しました", + "autoFetchModelsPartialFailure": "いくつかの接続が更新されましたが、上流モデルの自動取得はすべての場所で変更されませんでした", + "overridesUpstreamModel": "上流をオーバーライド", + "overridesUpstreamModelHint": "あなたの設定がこの上流モデルを上書きします", + "resetToUpstreamDefaults": "アップストリームのデフォルトを復元する", + "resetToUpstreamDefaultsSuccess": "アップストリームモデルのデフォルトを復元しました", + "resetToUpstreamDefaultsFailed": "アップストリームモデルのデフォルトを復元できませんでした", "autoSyncTooltip": "24時間ごとにモデルリストを自動更新(MODEL_SYNC_INTERVAL_HOURSで設定可能)", "autoSyncEnabled": "自動同期有効 — モデルは定期的に更新されます", "autoSyncDisabled": "自動同期無効", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "ネイティブの web_fetch ツール呼び出しを OmniRoute の /v1/web/fetch に書き換えます。", "interceptionLoadError": "インターセプト設定の読み込みに失敗しました: {error}", "interceptionSaveError": "インターセプト設定の保存に失敗しました: {error}", - "ccAliasSectionTitle": "Claude Codeで公開する (claude/…)", - "ccAliasSectionHint": "このプロバイダーのモデルを claude/<provider>/<model> ミラー ID の下で広告し、Claude Code のゲートウェイモデル発見がそれらをリストできるようにします。デフォルトではオフになっており、これを有効にするとすべてのクライアントのカタログエントリが2倍になります。", - "ccAliasProviderLevelLabel": "プロバイダーのデフォルト", - "ccAliasModelOverridesLabel": "モデルごとのオーバーライド", - "ccAliasModelOverrideAriaLabel": "{modelId}のオーバーライド", - "ccAliasStateInherit": "継承", - "ccAliasStateOn": "オン", - "ccAliasStateOff": "オフ", - "ccAliasAddModelPlaceholder": "モデルID(例:gpt-4o)", - "ccAliasAddModelButton": "オーバーライドを追加", - "ccAliasLoadError": "ディスカバリーエイリアス設定の読み込みに失敗しました: {error}", - "ccAliasSaveError": "発見エイリアス設定の保存に失敗しました: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "APIキーを使用してGaladrielに接続します。", "predibase": "$25の無料トライアルクレジット(有効期限30日間)", "chenzk": "chenzk.top でライブモデルカタログを提供するOpenAI互換ゲートウェイ。", - "freepik": "FreepikのMystic APIで画像を生成します。", + "magnific": "FreepikのMystic APIで画像を生成します。", "freetheai": "パススルーモデルをサポートする無料のOpenAI互換ゲートウェイ。", "g4f-gemini": "キー不要で無料のg4f.spaceによるGeminiへのリバースプロキシ(1分あたり5リクエストに制限)。", "g4f-groq": "キー不要で無料のg4f.spaceによるGroqへのリバースプロキシ(1分あたり5リクエストに制限)。", @@ -6209,6 +6224,7 @@ "claude": "既存のOAuthフローを使用してClaude Codeに接続します。", "cline": "既存のOAuthフローを使用してClineに接続します。", "cursor": "既存のOAuthフローを使用してCursor IDEに接続します。", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "既存のOAuthフローを使用してGitHub Copilotに接続します。", "gitlab-duo": "ai_features + read_user スコープを持つOAuthアプリケーション。このOmniRouteインスタンスで GITLAB_DUO_OAUTH_CLIENT_ID と、必要に応じて GITLAB_DUO_OAUTH_CLIENT_SECRET を設定してください。", "kilocode": "既存のOAuthフローを使用してKilo Codeに接続します。", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "クールダウン中", "codexPoolUsed": "使用済み", "codexPoolUntil": "{value} まで", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "匿名フォールバック", "anonymousFallbackDesc": "すべての設定された接続が使い果たされた場合(クォータ、クレジット、または有効期限)、このプロバイダーのキーなしティアを一時的に使用します。このプロバイダーをスキップするにはオフにしてください。匿名リクエストを送信する代わりに、キーなしティアがそれらを拒否する場合(401)に推奨されます。", "anonymousFallbackEnabled": "{provider}の匿名フォールバックが有効になりました", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "保存されたモデルエンドポイント設定", "searchByModelAria": "モデルで検索", "selectSupportedEndpoint": "サポートされているエンドポイントを少なくとも1つ選択してください", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsEnabled": "上流モデルの自動取得が有効になりました", - "autoFetchModelsTooltip": "必要に応じてアップストリームモデルを取得してキャッシュする", - "autoFetchModelsDisabled": "上流モデルの自動取得が無効になっています", - "autoFetchModels": "アップストリームモデルを自動取得", - "autoFetchModelsToggleFailed": "アップストリームモデルの自動取得の切り替えに失敗しました", - "overridesUpstreamModel": "上流をオーバーライド", - "autoFetchModelsPartialFailure": "いくつかの接続が更新されましたが、上流モデルの自動取得はすべての場所で変更されませんでした", - "overridesUpstreamModelHint": "あなたの設定がこの上流モデルを上書きします", - "resetToUpstreamDefaults": "アップストリームのデフォルトを復元する", - "resetToUpstreamDefaultsFailed": "アップストリームモデルのデフォルトを復元できませんでした", - "resetToUpstreamDefaultsSuccess": "アップストリームモデルのデフォルトを復元しました" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "設定", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "禁止キーワード", "customBannedSignalsDesc": "アカウントの永久BAN検出のトリガーとなる追加のキーワード。組み込みのキーワードは常に適用されます。", "customBannedSignalsPlaceholder": "例: api key revoked", @@ -7210,6 +7203,7 @@ "configured": "設定済み", "none": "なし", "modelOverrideValuePlaceholder": "数値", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "キーと値を追加", "noModelOverrides": "このモデル用に設定されたオーバーライドはありません。", "modelOverrideLoadFailed": "モデルのオーバーライドの読み込みに失敗しました", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "簡潔なCJK (文言)", "description": "漢文の超簡潔スタイル (中国語でのみ利用可能)。" @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "ラウンドロビンおよびランダムのコンボにおいて、最初のメッセージのハッシュによって会話全体を1つの接続に固定するのではなく、リクエストごとに異なる接続にローテーションします。複数ターンのチャットでプロンプトキャッシュのヒット率を維持するには、オフのままにしてください。コンボごとの個別設定が優先されます。", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "認証情報の秘匿化", "credentialRedactionDesc": "プロバイダーに送信されるコンテキストおよびレスポンスから、API キー、トークン、シークレットを秘匿化します。", "enableCredentialRedaction": "認証情報の秘匿化を有効にする", @@ -8621,6 +8623,27 @@ }, "enableTitle": "エンジンを有効にする", "enableDescription": "スタックの最後に実行され(RTK/Cavemanがテキストをクリーンアップした後、OmniGlyphが残りを画像に変換)、omniglyph モードを介してスタンドアロンでも実行されます。これはプレビュー版であり、エンドツーエンドの検証が完了するまではデフォルトでオフのままになります。", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "保存されました。", "saveFailed": "保存できませんでした。", "enableAria": "OmniGlyphエンジンを有効にする", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "最大", "grokAutoTopUpMonth": "月", "grokAdditionalCredits": "追加のクレジット", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "ロガー", "proxyTab": "プロキシ", "budgetManagement": "予算管理", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "最初のトークン", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "オファー", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days} 日間" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index a003916a18..3a5feebf4e 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "비주얼 요청 타임라인", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "열기", "close": "닫기" }, - "noResults": "결과가 없습니다", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "결과가 없습니다" }, "webhooks": { "title": "웹훅", @@ -1739,8 +1739,8 @@ "quotaShare": "할당량 공유", "discovery": "탐색", "freeProviderRankings": "무료 제공업체 순위", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "무료 티어", "gamification": "게이미피케이션", "leaderboard": "리더보드", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "모델 전반에 요청이 분산되는 방식을 선택하세요 - 14가지 전략 사용 가능", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "이 공급자는 더 이상 사용되지 않습니다.", "riskNotice": { "title": "계속하기 전에", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "사용 시 주의 사항이 있는 제공자 — 자세한 내용을 보려면 클릭하세요", "oauth": "이 제공자는 공식 제품 세션/OAuth를 사용하며, 이는 프록시/라우터 사용에 대해 승인되지 않았습니다. 집중적인 자율 에이전트 사용(OpenCloud 스타일, 긴 다단계 흐름, 대량 배치)은 권장하지 않습니다. 업스트림에서 계정을 제한하거나 차단할 수 있습니다. 본인 책임 하에 사용하십시오.", "webCookie": "이 제공자는 웹 세션 쿠키를 통해 인증합니다. 업스트림 서비스가 언제든지 세션을 무효화할 수 있어 다시 로그인해야 할 수 있습니다. 장시간 자리를 비우는 작업에는 권장하지 않습니다. 본인 책임 하에 사용하십시오.", @@ -5107,9 +5111,9 @@ "cancel": "취소" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "비활성화됨", "enableProvider": "공급자 활성화", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "{count}개의 기존 모델 건너뛰기", "autoSync": "자동 동기화", "autoSyncShort": "동기화", + "autoFetchModels": "업스트림 모델 자동 가져오기", + "autoFetchModelsTooltip": "필요할 때 업스트림 모델을 가져와 캐시합니다.", + "autoFetchModelsEnabled": "업스트림 모델 자동 가져오기 활성화됨", + "autoFetchModelsDisabled": "업스트림 모델 자동 가져오기 비활성화됨", + "autoFetchModelsToggleFailed": "업스트림 모델 자동 가져오기를 전환하지 못했습니다.", + "autoFetchModelsPartialFailure": "일부 연결이 업데이트되었지만, 업스트림 모델 자동 가져오기가 모든 곳에서 변경되지 않았습니다.", + "overridesUpstreamModel": "업스트림 재정의", + "overridesUpstreamModelHint": "귀하의 설정이 이 업스트림 모델을 덮어씁니다.", + "resetToUpstreamDefaults": "업스트림 기본값 복원", + "resetToUpstreamDefaultsSuccess": "복원된 업스트림 모델 기본값", + "resetToUpstreamDefaultsFailed": "업스트림 모델 기본값을 복원하지 못했습니다.", "autoSyncTooltip": "24시간마다 모델 목록 자동 업데이트 (MODEL_SYNC_INTERVAL_HOURS로 구성 가능)", "autoSyncEnabled": "자동 동기화 활성화 — 모델이 주기적으로 업데이트됩니다", "autoSyncDisabled": "자동 동기화 비활성화", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "네이티브 web_fetch 도구 호출을 OmniRoute의 /v1/web/fetch로 재작성합니다.", "interceptionLoadError": "가로채기 설정을 불러오지 못했습니다: {error}", "interceptionSaveError": "가로채기 설정을 저장하지 못했습니다: {error}", - "ccAliasSectionTitle": "Claude 코드에서 노출하기 (claude/…)", - "ccAliasSectionHint": "이 공급자의 모델을 claude/<provider>/<model> 미러 ID 아래에 광고하여 Claude Code의 게이트웨이 모델 검색이 이를 나열할 수 있도록 합니다. 기본적으로 비활성화되어 있으며, 이를 활성화하면 모든 클라이언트에 대해 카탈로그 항목이 두 배로 증가합니다.", - "ccAliasProviderLevelLabel": "제공자 기본값", - "ccAliasModelOverridesLabel": "모델별 재정의", - "ccAliasModelOverrideAriaLabel": "{modelId}에 대한 재정의", - "ccAliasStateInherit": "상속", - "ccAliasStateOn": "켜짐", - "ccAliasStateOff": "꺼짐", - "ccAliasAddModelPlaceholder": "모델 ID (예: gpt-4o)", - "ccAliasAddModelButton": "오버라이드 추가", - "ccAliasLoadError": "discovery-alias 설정을 로드하지 못했습니다: {error}", - "ccAliasSaveError": "discovery-alias 설정을 저장하지 못했습니다: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "API 키로 Galadriel을 연결합니다.", "predibase": "$25 무료 체험 크레딧 (30일 유효)", "chenzk": "chenzk.top의 실시간 모델 카탈로그를 지원하는 OpenAI 호환 게이트웨이입니다.", - "freepik": "Freepik의 Mystic API로 이미지를 생성합니다.", + "magnific": "Freepik의 Mystic API로 이미지를 생성합니다.", "freetheai": "패스스루 모델을 지원하는 무료 OpenAI 호환 게이트웨이입니다.", "g4f-gemini": "키가 필요 없는 무료 g4f.space Gemini 리버스 프록시(분당 5회 요청으로 제한).", "g4f-groq": "키가 필요 없는 무료 g4f.space Groq 리버스 프록시(분당 5회 요청으로 제한).", @@ -6209,6 +6224,7 @@ "claude": "기존 OAuth 흐름으로 Claude Code를 연결합니다.", "cline": "기존 OAuth 흐름으로 Cline을 연결합니다.", "cursor": "기존 OAuth 흐름으로 Cursor IDE를 연결합니다.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "기존 OAuth 흐름으로 GitHub Copilot을 연결합니다.", "gitlab-duo": "ai_features + read_user 스코프가 있는 OAuth 애플리케이션입니다. 이 OmniRoute 인스턴스에서 GITLAB_DUO_OAUTH_CLIENT_ID 및 선택적으로 GITLAB_DUO_OAUTH_CLIENT_SECRET을 구성하세요.", "kilocode": "기존 OAuth 흐름으로 Kilo Code를 연결합니다.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "대기 시간 적용 중", "codexPoolUsed": "사용됨", "codexPoolUntil": "{value}까지", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "익명 대체", "anonymousFallbackDesc": "모든 구성된 연결이 소진되면(쿼터, 크레딧 또는 만료), 이 공급자의 키 없는 계층을 임시로 사용합니다. 익명 요청을 보내는 대신 이 공급자를 건너뛰려면 끄세요. 키 없는 계층이 요청을 거부할 때(401) 권장됩니다.", "anonymousFallbackEnabled": "{provider}에 대한 익명 대체가 활성화되었습니다.", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "저장된 모델 엔드포인트 설정", "searchByModelAria": "모델로 검색", "selectSupportedEndpoint": "지원되는 엔드포인트를 최소한 하나 선택하세요.", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "업스트림 모델 자동 가져오기", - "autoFetchModelsEnabled": "업스트림 모델 자동 가져오기 활성화됨", - "autoFetchModelsDisabled": "업스트림 모델 자동 가져오기 비활성화됨", - "autoFetchModelsTooltip": "필요할 때 업스트림 모델을 가져와 캐시합니다.", - "overridesUpstreamModel": "업스트림 재정의", - "autoFetchModelsPartialFailure": "일부 연결이 업데이트되었지만, 업스트림 모델 자동 가져오기가 모든 곳에서 변경되지 않았습니다.", - "autoFetchModelsToggleFailed": "업스트림 모델 자동 가져오기를 전환하지 못했습니다.", - "overridesUpstreamModelHint": "귀하의 설정이 이 업스트림 모델을 덮어씁니다.", - "resetToUpstreamDefaultsSuccess": "복원된 업스트림 모델 기본값", - "resetToUpstreamDefaults": "업스트림 기본값 복원", - "resetToUpstreamDefaultsFailed": "업스트림 모델 기본값을 복원하지 못했습니다." + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "설정", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "차단 키워드", "customBannedSignalsDesc": "영구 계정 차단 감지를 트리거하는 추가 키워드입니다. 기본 제공 키워드는 항상 적용됩니다.", "customBannedSignalsPlaceholder": "예: api key revoked", @@ -7210,6 +7203,7 @@ "configured": "configured", "none": "None", "modelOverrideValuePlaceholder": "Numeric value", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Add key value", "noModelOverrides": "No overrides configured for this model.", "modelOverrideLoadFailed": "Failed to load model overrides", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "간결한 CJK (文言)", "description": "한문 초간결 스타일 (중국어만 지원)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "라운드 로빈 및 랜덤 콤보는 첫 번째 메시지 해시를 통해 전체 대화를 하나의 연결에 고정하는 대신 요청마다 다른 연결로 순환합니다. 멀티턴 대화에서 프롬프트 캐시 히트를 유지하려면 꺼두세요. 콤보별 재정의가 우선 적용됩니다.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "자격 증명 마스킹", "credentialRedactionDesc": "공급자에게 전송되는 컨텍스트 및 응답에서 API 키, 토큰, 비밀 정보를 마스킹합니다.", "enableCredentialRedaction": "자격 증명 마스킹 활성화", @@ -8621,6 +8623,27 @@ }, "enableTitle": "엔진 활성화", "enableDescription": "스택의 마지막에 실행되며(RTK/Caveman이 텍스트를 정리한 후 OmniGlyph가 나머지를 이미지로 변환), omniglyph 모드를 통해 독립 실행형으로도 실행됩니다. 이것은 미리보기이며 엔드투엔드 검증이 완료될 때까지 기본적으로 비활성화되어 있습니다.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "저장되었습니다.", "saveFailed": "저장할 수 없습니다.", "enableAria": "OmniGlyph 엔진 활성화", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "최대", "grokAutoTopUpMonth": "월", "grokAdditionalCredits": "추가 크레딧", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "로거", "proxyTab": "프록시", "budgetManagement": "예산 관리", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "첫 토큰", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json index d7d3d22e29..63afee6a7f 100644 --- a/src/i18n/messages/mr.json +++ b/src/i18n/messages/mr.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "दृश्य विनंती कालरेषा", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "उघडा", "close": "बंद करा" }, - "noResults": "कोणतेही परिणाम नाहीत", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "कोणतेही परिणाम नाहीत" }, "webhooks": { "title": "वेबहुक", @@ -1739,8 +1739,8 @@ "quotaShare": "कोटा वाटा", "discovery": "शोध", "freeProviderRankings": "मोफत प्रदाता क्रमवारी", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "मोफत स्तर", "gamification": "गेमिफिकेशन", "leaderboard": "लीडरबोर्ड", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "हा प्रदाता बहिष्कृत केला गेला आहे", "riskNotice": { "title": "पुढे जाण्यापूर्वी", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "वापराच्या मर्यादा असलेला प्रदाता — तपशीलांसाठी क्लिक करा", "oauth": "हा प्रदाता तुमचे अधिकृत उत्पादन सत्र/OAuth वापरतो, जे प्रॉक्सी/राऊटर वापरासाठी अधिकृत नाही. आम्ही सघन स्वायत्त एजंट वापराची (OpenCloud-शैली, लांब बहु-चरण प्रवाह, मोठे बॅचेस) शिफारस करत नाही — अपस्ट्रीम खाते प्रतिबंधित किंवा बॅन करून प्रतिक्रिया देऊ शकते. स्वतःच्या जोखमीवर वापरा.", "webCookie": "हा प्रदाता तुमच्या वेब सत्र कुकीजद्वारे प्रमाणीकरण करतो. अपस्ट्रीम सेवा कोणत्याही वेळी सत्र अवैध करू शकते, ज्यामुळे तुम्हाला पुन्हा लॉग इन करावे लागेल. दीर्घकाळ लक्ष न ठेवलेल्या ऑपरेशन्ससाठी शिफारस केलेली नाही. स्वतःच्या जोखमीवर वापरा.", @@ -5107,9 +5111,9 @@ "cancel": "रद्द करा" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "ऑटो-फेच अपस्ट्रीम मॉडेल्स", + "autoFetchModelsTooltip": "आवश्यकतेनुसार अपस्ट्रीम मॉडेल्स आणा आणि कॅश करा", + "autoFetchModelsEnabled": "उपधारा मॉडेल स्वयंचलित-आकर्षण सक्षम आहे", + "autoFetchModelsDisabled": "उपधारा मॉडेल स्वयंचलित-आकर्षण अक्षम आहे", + "autoFetchModelsToggleFailed": "उपस्ट्रीम मॉडेल ऑटो-फेच टॉगल करण्यात अयशस्वी", + "autoFetchModelsPartialFailure": "काही कनेक्शन अद्यतनित झाले, परंतु अपस्ट्रीम मॉडेल ऑटो-फेच सर्वत्र बदलले नाही.", + "overridesUpstreamModel": "उपधारक ओव्हरराइड्स", + "overridesUpstreamModelHint": "तुमच्या सेटिंग्ज या अपस्ट्रीम मॉडेलला ओव्हरराईड करतात", + "resetToUpstreamDefaults": "अपस्ट्रीम डिफॉल्ट्स पुनर्स्थापित करा", + "resetToUpstreamDefaultsSuccess": "उपस्ट्रीम मॉडेल डिफॉल्ट्स पुनर्स्थापित केले", + "resetToUpstreamDefaultsFailed": "उपस्ट्रीम मॉडेल डिफॉल्ट्स पुनर्स्थापित करण्यात अयशस्वी", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "मूळ web_fetch टूल कॉल्स OmniRoute च्या /v1/web/fetch वर पुन्हा लिहा.", "interceptionLoadError": "इंटरसेप्शन सेटिंग्ज लोड करण्यात अयशस्वी: {error}", "interceptionSaveError": "इंटरसेप्शन सेटिंग्ज सेव्ह करण्यात अयशस्वी: {error}", - "ccAliasSectionTitle": "Claude कोडमध्ये उघडा (claude/…)", - "ccAliasSectionHint": "या प्रदात्याच्या मॉडेल्सची जाहिरात claude/<provider>/<model> मिरर आयडी अंतर्गत करा जेणेकरून Claude Code च्या गेटवे मॉडेल शोधाने त्यांची यादी करू शकेल. डीफॉल्टने बंद — हे सक्षम केल्याने सर्व क्लायंटसाठी कॅटलॉग नोंदी दुप्पट होतात.", - "ccAliasProviderLevelLabel": "प्रदाता डिफॉल्ट", - "ccAliasModelOverridesLabel": "प्रत्येक मॉडेलसाठी ओव्हरराइड्स", - "ccAliasModelOverrideAriaLabel": "{modelId} साठी ओव्हरराइड", - "ccAliasStateInherit": "विरासत", - "ccAliasStateOn": "वर", - "ccAliasStateOff": "बंद", - "ccAliasAddModelPlaceholder": "मॉडेल आयडी (उदा. gpt-4o)", - "ccAliasAddModelButton": "ओव्हरराइड जोडा", - "ccAliasLoadError": "डिस्कवरी-अलियास सेटिंग्ज लोड करण्यात अयशस्वी: {error}", - "ccAliasSaveError": "डिस्कवरी-उपनाम सेटिंग जतन करण्यात अयशस्वी: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "API की सह Galadriel कनेक्ट करा.", "predibase": "$25 मोफत ट्रायल क्रेडिट्स (30 दिवसांची वैधता)", "chenzk": "chenzk.top वर थेट मॉडेल कॅटलॉगसह OpenAI-सुसंगत गेटवे.", - "freepik": "Freepik च्या Mystic API सह प्रतिमा तयार करा.", + "magnific": "Freepik च्या Mystic API सह प्रतिमा तयार करा.", "freetheai": "passthrough मॉडेल समर्थनासह मोफत OpenAI-सुसंगत गेटवे.", "g4f-gemini": "Gemini साठी मोफत विना-की g4f.space रिव्हर्स प्रॉक्सी, प्रति मिनिट 5 विनंत्यांपर्यंत मर्यादित.", "g4f-groq": "Groq साठी मोफत विना-की g4f.space रिव्हर्स प्रॉक्सी, प्रति मिनिट 5 विनंत्यांपर्यंत मर्यादित.", @@ -6209,6 +6224,7 @@ "claude": "सध्याच्या OAuth फ्लोसह Claude Code कनेक्ट करा.", "cline": "सध्याच्या OAuth फ्लोसह Cline कनेक्ट करा.", "cursor": "सध्याच्या OAuth फ्लोसह Cursor IDE कनेक्ट करा.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "सध्याच्या OAuth फ्लोसह GitHub Copilot कनेक्ट करा.", "gitlab-duo": "ai_features + read_user स्कोप्ससह OAuth ॲप्लिकेशन. या OmniRoute इन्स्टन्सवर GITLAB_DUO_OAUTH_CLIENT_ID आणि पर्यायीपणे GITLAB_DUO_OAUTH_CLIENT_SECRET कॉन्फिगर करा.", "kilocode": "सध्याच्या OAuth फ्लोसह Kilo Code कनेक्ट करा.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "प्रतीक्षा कालावधीत", "codexPoolUsed": "वापरले", "codexPoolUntil": "{value} पर्यंत", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "अज्ञात बॅकअप", "anonymousFallbackDesc": "जेव्हा सर्व कॉन्फिगर केलेले कनेक्शन संपतात (कोटा, क्रेडिट्स, किंवा कालावधी), तेव्हा तात्पुरते या प्रदात्याचा कीलेस स्तर वापरा. गुप्त विनंत्या पाठविण्याऐवजी या प्रदात्याला वगळण्यासाठी बंद करा — जेव्हा कीलेस स्तर त्यांना नकार देतो (401) तेव्हा शिफारस केले जाते.", "anonymousFallbackEnabled": "{provider} साठी गुप्तFallback सक्षम आहे", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "सुरक्षित केलेल्या मॉडेल एंडपॉइंट सेटिंग्ज", "searchByModelAria": "मॉडेलद्वारे शोधा", "selectSupportedEndpoint": "किमान एक समर्थित एंडपॉइंट निवडा", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "ऑटो-फेच अपस्ट्रीम मॉडेल्स", - "autoFetchModelsDisabled": "उपधारा मॉडेल स्वयंचलित-आकर्षण अक्षम आहे", - "autoFetchModelsTooltip": "आवश्यकतेनुसार अपस्ट्रीम मॉडेल्स आणा आणि कॅश करा", - "autoFetchModelsEnabled": "उपधारा मॉडेल स्वयंचलित-आकर्षण सक्षम आहे", - "autoFetchModelsToggleFailed": "उपस्ट्रीम मॉडेल ऑटो-फेच टॉगल करण्यात अयशस्वी", - "overridesUpstreamModel": "उपधारक ओव्हरराइड्स", - "autoFetchModelsPartialFailure": "काही कनेक्शन अद्यतनित झाले, परंतु अपस्ट्रीम मॉडेल ऑटो-फेच सर्वत्र बदलले नाही.", - "overridesUpstreamModelHint": "तुमच्या सेटिंग्ज या अपस्ट्रीम मॉडेलला ओव्हरराईड करतात", - "resetToUpstreamDefaultsSuccess": "उपस्ट्रीम मॉडेल डिफॉल्ट्स पुनर्स्थापित केले", - "resetToUpstreamDefaults": "अपस्ट्रीम डिफॉल्ट्स पुनर्स्थापित करा", - "resetToUpstreamDefaultsFailed": "उपस्ट्रीम मॉडेल डिफॉल्ट्स पुनर्स्थापित करण्यात अयशस्वी" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "प्रतिबंधित कीवर्ड", "customBannedSignalsDesc": "अतिरिक्त कीवर्ड जे कायमचे खाते बंदी शोधणे ट्रिगर करतात. अंगभूत कीवर्ड नेहमी लागू होतात.", "customBannedSignalsPlaceholder": "उदा. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "कॉन्फिगर केलेले", "none": "काहीही नाही", "modelOverrideValuePlaceholder": "संख्यात्मक मूल्य", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "की व्हॅल्यू जोडा", "noModelOverrides": "या मॉडेलसाठी कोणतेही ओव्हरराइड्स कॉन्फिगर केलेले नाहीत.", "modelOverrideLoadFailed": "मॉडेल ओव्हरराइड्स लोड करण्यात अयशस्वी", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "संक्षिप्त CJK (文言)", "description": "अभिजात-चिनी अति-संक्षिप्त शैली (केवळ चिनी भाषेसाठी उपलब्ध)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "राउंड-रॉबिन आणि रँडम कॉम्बोज पहिल्या-मेसेज हॅशद्वारे संपूर्ण संभाषण एका कनेक्शनवर पिन करण्याऐवजी प्रत्येक विनंतीवर वेगळ्या कनेक्शनवर रोटेट होतात. मल्टी-टर्न चॅट्ससाठी प्रॉम्प्ट-कॅशे हिट्स जतन करण्यासाठी हे बंद ठेवा. प्रति-कॉम्बो ओव्हरराइड्सना प्राधान्य दिले जाईल.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "क्रेडेन्शियल रिडॅक्शन", "credentialRedactionDesc": "प्रदात्यांना पाठवलेल्या संदर्भातून आणि प्रतिसादांमधून API की, टोकन आणि सिक्रेट्स रिडॅक्ट करा.", "enableCredentialRedaction": "क्रेडेंशियल रिडॅक्शन सक्षम करा", @@ -8621,6 +8623,27 @@ }, "enableTitle": "इंजिन सक्षम करा", "enableDescription": "स्टॅकमध्ये शेवटी चालते (RTK/Caveman मजकूर साफ केल्यानंतर, OmniGlyph उर्वरित मजकूर इमेजेसमध्ये रूपांतरित करते) आणि omniglyph मोडद्वारे स्वतंत्रपणे देखील चालते. हे एक पूर्वावलोकन आहे आणि एंड-टू-एंड प्रमाणीकरण पूर्ण होईपर्यंत डीफॉल्टनुसार बंद राहते.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "जतन केले.", "saveFailed": "जतन करता आले नाही.", "enableAria": "OmniGlyph इंजिन सक्षम करा", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "कमाल", "grokAutoTopUpMonth": "महिना", "grokAdditionalCredits": "अतिरिक्त श्रेय", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "पहिला टोकन", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 3f7482ff8f..b6c322c3e2 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Garis Masa Permintaan Visual", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "buka", "close": "tutup" }, - "noResults": "Tiada hasil", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Tiada hasil" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Perkongsian Kuota", "discovery": "Penemuan", "freeProviderRankings": "Kedudukan Penyedia Percuma", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Tier Percuma", "gamification": "Gamifikasi", "leaderboard": "Papan Pendahulu", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Pembekal ini telah ditamatkan", "riskNotice": { "title": "Sebelum meneruskan", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Penyedia dengan kekangan penggunaan — klik untuk butiran", "oauth": "Penyedia ini menggunakan sesi produk/OAuth rasmi anda, yang tidak dibenarkan untuk penggunaan proksi/penghala. Kami tidak mengesyorkan penggunaan ejen autonomi yang intensif (gaya OpenCloud, aliran berbilang langkah yang panjang, kelompok besar) — upstream mungkin bertindak balas dengan menyekat atau mengharamkan akaun tersebut. Gunakan atas risiko anda sendiri.", "webCookie": "Penyedia ini mengesahkan melalui kuki sesi web anda. Perkhidmatan upstream mungkin membatalkan sesi pada bila-bila masa, memerlukan anda untuk log masuk semula. Tidak disyorkan untuk operasi tanpa pengawasan yang lama. Gunakan atas risiko anda sendiri.", @@ -5107,9 +5111,9 @@ "cancel": "Batal" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Dilumpuhkan", "enableProvider": "Dayakan pembekal", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Melangkau {count} model sedia ada", "autoSync": "Auto-Segerak", "autoSyncShort": "Segerak", + "autoFetchModels": "Ambil model hulu secara automatik", + "autoFetchModelsTooltip": "Ambil dan simpan model hulu apabila diperlukan", + "autoFetchModelsEnabled": "Model hulu auto-fetch diaktifkan", + "autoFetchModelsDisabled": "Model hulu auto-fetch dinyahdayakan", + "autoFetchModelsToggleFailed": "Gagal untuk menghidupkan model upstream auto-fetch", + "autoFetchModelsPartialFailure": "Beberapa sambungan telah dikemas kini, tetapi pengambilan auto model hulu tidak diubah di semua tempat", + "overridesUpstreamModel": "Mengganti hulu", + "overridesUpstreamModelHint": "Tetapan anda mengatasi model hulu ini", + "resetToUpstreamDefaults": "Pulihkan tetapan asal upstream", + "resetToUpstreamDefaultsSuccess": "Mengembalikan tetapan lalai model upstream", + "resetToUpstreamDefaultsFailed": "Gagal untuk memulihkan tetapan lalai model upstream", "autoSyncTooltip": "Muat semula senarai model secara automatik setiap 24j (boleh dikonfigurasikan melalui MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Autosegerak didayakan — model akan dimuat semula secara berkala", "autoSyncDisabled": "Autosegerak dilumpuhkan", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Tulis semula panggilan alat web_fetch asli ke /v1/web/fetch OmniRoute.", "interceptionLoadError": "Gagal memuatkan tetapan pintasan: {error}", "interceptionSaveError": "Gagal menyimpan tetapan pintasan: {error}", - "ccAliasSectionTitle": "Dedahkan dalam Claude Code (claude/…)", - "ccAliasSectionHint": "Iklankan model penyedia ini di bawah claude/<provider>/<model> ID cermin supaya penemuan model gateway Claude Code dapat menyenaraikannya. Dimatikan secara lalai — mengaktifkannya menggandakan entri katalog untuk semua pelanggan.", - "ccAliasProviderLevelLabel": "Penyedia lalai", - "ccAliasModelOverridesLabel": "Tindakan mengikut model", - "ccAliasModelOverrideAriaLabel": "Tindakan Ganti untuk {modelId}", - "ccAliasStateInherit": "Warisi", - "ccAliasStateOn": "Hidup", - "ccAliasStateOff": "Matikan", - "ccAliasAddModelPlaceholder": "Id Model (contoh: gpt-4o)", - "ccAliasAddModelButton": "Tambah override", - "ccAliasLoadError": "Gagal memuat tetapan discovery-alias: {error}", - "ccAliasSaveError": "Gagal menyimpan tetapan discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Sambungkan Galadriel dengan kunci API.", "predibase": "Kredit percubaan percuma $25 (tempoh sah 30 hari)", "chenzk": "Gerbang serasi OpenAI dengan katalog model langsung di chenzk.top.", - "freepik": "Jana imej dengan API Mystic Freepik.", + "magnific": "Jana imej dengan API Mystic Freepik.", "freetheai": "Gerbang serasi OpenAI percuma dengan sokongan model passthrough.", "g4f-gemini": "Proksi terbalik g4f.space tanpa kunci percuma ke Gemini, terhad kepada 5 permintaan seminit.", "g4f-groq": "Proksi terbalik g4f.space tanpa kunci percuma ke Groq, terhad kepada 5 permintaan seminit.", @@ -6209,6 +6224,7 @@ "claude": "Sambungkan Claude Code dengan aliran OAuth sedia ada.", "cline": "Sambungkan Cline dengan aliran OAuth sedia ada.", "cursor": "Sambungkan Cursor IDE dengan aliran OAuth sedia ada.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Sambungkan GitHub Copilot dengan aliran OAuth sedia ada.", "gitlab-duo": "Aplikasi OAuth dengan skop ai_features + read_user. Konfigurasikan GITLAB_DUO_OAUTH_CLIENT_ID dan secara pilihan GITLAB_DUO_OAUTH_CLIENT_SECRET pada tika OmniRoute ini.", "kilocode": "Sambungkan Kilo Code dengan aliran OAuth sedia ada.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Dalam tempoh menunggu", "codexPoolUsed": "digunakan", "codexPoolUntil": "Sehingga {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback Tanpa Nama", "anonymousFallbackDesc": "Apabila semua sambungan yang dikonfigurasikan habis (kuota, kredit, atau tamat tempoh), gunakan sementara tier tanpa kunci penyedia ini. Matikan untuk mengabaikan penyedia ini daripada menghantar permintaan tanpa nama — disyorkan apabila tier tanpa kunci menolak permintaan tersebut (401).", "anonymousFallbackEnabled": "Fallback tanpa nama diaktifkan untuk {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Tetapan titik akhir model yang disimpan", "searchByModelAria": "Cari mengikut model", "selectSupportedEndpoint": "Pilih sekurang-kurangnya satu titik akhir yang disokong", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsEnabled": "Model hulu auto-fetch diaktifkan", - "autoFetchModels": "Ambil model hulu secara automatik", - "autoFetchModelsTooltip": "Ambil dan simpan model hulu apabila diperlukan", - "autoFetchModelsToggleFailed": "Gagal untuk menghidupkan model upstream auto-fetch", - "autoFetchModelsDisabled": "Model hulu auto-fetch dinyahdayakan", - "overridesUpstreamModel": "Mengganti hulu", - "autoFetchModelsPartialFailure": "Beberapa sambungan telah dikemas kini, tetapi pengambilan auto model hulu tidak diubah di semua tempat", - "overridesUpstreamModelHint": "Tetapan anda mengatasi model hulu ini", - "resetToUpstreamDefaults": "Pulihkan tetapan asal upstream", - "resetToUpstreamDefaultsFailed": "Gagal untuk memulihkan tetapan lalai model upstream", - "resetToUpstreamDefaultsSuccess": "Mengembalikan tetapan lalai model upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "tetapan", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Kata Kunci Disekat", "customBannedSignalsDesc": "Kata kunci tambahan yang mencetuskan pengesanan sekatan akaun kekal. Kata kunci terbina dalam sentiasa digunakan.", "customBannedSignalsPlaceholder": "cth. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "dikonfigurasikan", "none": "Tiada", "modelOverrideValuePlaceholder": "Nilai angka", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Tambah nilai kunci", "noModelOverrides": "Tiada pintasan dikonfigurasikan untuk model ini.", "modelOverrideLoadFailed": "Gagal memuatkan pintasan model", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK Ringkas (文言)", "description": "Gaya ultra-ringkas Bahasa Cina Klasik (hanya tersedia untuk bahasa Cina)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Kombinasi round-robin dan rawak bertukar ke sambungan yang berbeza pada setiap permintaan dan bukannya menyematkan keseluruhan perbualan pada satu sambungan melalui hash mesej pertama. Biarkan dimatikan untuk mengekalkan hit cache prompt bagi sembang berbilang giliran. Penggantian bagi setiap kombinasi diutamakan.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Redaksi Kredensial", "credentialRedactionDesc": "Redaksikan kunci API, token, dan rahsia daripada konteks yang dihantar kepada penyedia dan daripada respons.", "enableCredentialRedaction": "Dayakan penyuntingan kelayakan", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Dayakan enjin", "enableDescription": "Berjalan terakhir dalam tindanan (selepas RTK/Caveman membersihkan teks, OmniGlyph menukar baki kepada imej) dan juga berjalan secara bersendirian melalui mod omniglyph. Ini ialah pratonton dan kekal dimatikan secara lalai sehingga pengesahan hujung-ke-hujung selesai.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Disimpan.", "saveFailed": "Tidak dapat menyimpan.", "enableAria": "Dayakan enjin OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksimum", "grokAutoTopUpMonth": "bulan", "grokAdditionalCredits": "Kredit Tambahan", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Pembalak", "proxyTab": "proksi", "budgetManagement": "Pengurusan Belanjawan", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Token Pertama", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index 5355f29c17..397c206888 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visueel verzoek tijdlijn", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "open", "close": "sluiten" }, - "noResults": "Geen resultaten", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Geen resultaten" }, "webhooks": { "title": "Webhaken", @@ -1739,8 +1739,8 @@ "quotaShare": "Quota-aandeel", "discovery": "Ontdekking", "freeProviderRankings": "Ranglijst gratis providers", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Gratis niveaus", "gamification": "Gamification", "leaderboard": "Leaderboard", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Deze aanbieder is beëindigd", "riskNotice": { "title": "Voordat je doorgaat", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provider met gebruiksvoorbehouden — klik voor details", "oauth": "Deze provider gebruikt je officiële productsessie/OAuth, die niet is geautoriseerd voor proxy-/routergebruik. We raden intensief gebruik van autonome agenten (OpenCloud-stijl, lange stappenreeksen, grote batches) af — de upstream kan reageren door het account te beperken of te blokkeren. Gebruik op eigen risico.", "webCookie": "Deze provider authenticeert via je websessiecookies. De upstream-dienst kan de sessie op elk moment ongeldig maken, waardoor je opnieuw moet inloggen. Niet aanbevolen voor langdurig onbeheerd gebruik. Gebruik op eigen risico.", @@ -5107,9 +5111,9 @@ "cancel": "Annuleren" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Uitgeschakeld", "enableProvider": "Aanbieder inschakelen", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "{count} bestaande modellen overgeslagen", "autoSync": "Automatische synchronisatie", "autoSyncShort": "Synchroniseren", + "autoFetchModels": "Automatisch upstream-modellen ophalen", + "autoFetchModelsTooltip": "Haal upstream-modellen op en cache ze indien nodig", + "autoFetchModelsEnabled": "Upstream model auto-fetch ingeschakeld", + "autoFetchModelsDisabled": "Auto-fetch van upstreammodel uitgeschakeld", + "autoFetchModelsToggleFailed": "Kon upstream model auto-fetch niet omzetten", + "autoFetchModelsPartialFailure": "Sommige verbindingen zijn bijgewerkt, maar het automatisch ophalen van het upstream-model is niet overal gewijzigd", + "overridesUpstreamModel": "Overschrijft upstream", + "overridesUpstreamModelHint": "Jouw instellingen overschrijven dit upstream model", + "resetToUpstreamDefaults": "Herstel upstream standaardinstellingen", + "resetToUpstreamDefaultsSuccess": "Herstelde standaardinstellingen van upstream-model", + "resetToUpstreamDefaultsFailed": "Het is niet gelukt om de standaardinstellingen van het upstream-model te herstellen", "autoSyncTooltip": "Modellijst automatisch elke 24 uur vernieuwen (configureerbaar via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatische synchronisatie ingeschakeld: modellen worden periodiek vernieuwd", "autoSyncDisabled": "Automatische synchronisatie uitgeschakeld", @@ -5439,17 +5454,17 @@ "interceptionLoadError": "Laden van onderscheppingsinstellingen mislukt: {error}", "interceptionSaveError": "Opslaan van onderscheppingsinstellingen mislukt: {error}", "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "Adverteer de modellen van deze provider onder claude/<provider>/<model> mirror-id's zodat het gateway-modelontdekkingsmechanisme van Claude Code ze kan weergeven. Standaard uitgeschakeld — het inschakelen hiervan verdubbelt de catalogusvermeldingen voor alle klanten.", - "ccAliasProviderLevelLabel": "Provider standaard", - "ccAliasModelOverridesLabel": "Per-model overschrijvingen", - "ccAliasModelOverrideAriaLabel": "Overschrijving voor {modelId}", - "ccAliasStateInherit": "Overnemen", - "ccAliasStateOn": "Aan", - "ccAliasStateOff": "Uit", - "ccAliasAddModelPlaceholder": "Model-id (bijv. gpt-4o)", - "ccAliasAddModelButton": "Voeg overschrijving toe", - "ccAliasLoadError": "Kon de discovery-alias instellingen niet laden: {error}", - "ccAliasSaveError": "Kon de discovery-alias instelling niet opslaan: {error}", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Verbind Galadriel met een API-sleutel.", "predibase": "$25 gratis proeftegoed (30 dagen geldig)", "chenzk": "OpenAI-compatibele gateway met een live modelcatalogus op chenzk.top.", - "freepik": "Genereer afbeeldingen met de Mystic API van Freepik.", + "magnific": "Genereer afbeeldingen met de Mystic API van Freepik.", "freetheai": "Gratis OpenAI-compatibele gateway met ondersteuning voor passthrough-modellen.", "g4f-gemini": "Gratis no-key g4f.space reverse proxy naar Gemini, beperkt tot 5 verzoeken per minuut.", "g4f-groq": "Gratis no-key g4f.space reverse proxy naar Groq, beperkt tot 5 verzoeken per minuut.", @@ -6209,6 +6224,7 @@ "claude": "Verbind Claude Code met de bestaande OAuth-flow.", "cline": "Verbind Cline met de bestaande OAuth-flow.", "cursor": "Verbind Cursor IDE met de bestaande OAuth-flow.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Verbind GitHub Copilot met de bestaande OAuth-flow.", "gitlab-duo": "OAuth-applicatie met ai_features + read_user scopes. Configureer GITLAB_DUO_OAUTH_CLIENT_ID en optioneel GITLAB_DUO_OAUTH_CLIENT_SECRET op deze OmniRoute-instantie.", "kilocode": "Verbind Kilo Code met de bestaande OAuth-flow.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "In afkoelperiode", "codexPoolUsed": "gebruikt", "codexPoolUntil": "Tot {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonieme fallback", "anonymousFallbackDesc": "Wanneer alle geconfigureerde verbindingen zijn uitgeput (quota, tegoeden of vervaldatum), gebruik tijdelijk de keyless-laag van deze provider. Zet uit om deze provider over te slaan in plaats van anonieme verzoeken te verzenden - aanbevolen wanneer de keyless-laag deze afwijst (401).", "anonymousFallbackEnabled": "Anonieme fallback ingeschakeld voor {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Instellingen voor opgeslagen model-eindpunt", "searchByModelAria": "Zoeken op model", "selectSupportedEndpoint": "Selecteer ten minste één ondersteunde eindpunt", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Auto-fetch van upstreammodel uitgeschakeld", - "autoFetchModelsTooltip": "Haal upstream-modellen op en cache ze indien nodig", - "autoFetchModels": "Automatisch upstream-modellen ophalen", - "autoFetchModelsEnabled": "Upstream model auto-fetch ingeschakeld", - "autoFetchModelsToggleFailed": "Kon upstream model auto-fetch niet omzetten", - "overridesUpstreamModelHint": "Jouw instellingen overschrijven dit upstream model", - "overridesUpstreamModel": "Overschrijft upstream", - "autoFetchModelsPartialFailure": "Sommige verbindingen zijn bijgewerkt, maar het automatisch ophalen van het upstream-model is niet overal gewijzigd", - "resetToUpstreamDefaults": "Herstel upstream standaardinstellingen", - "resetToUpstreamDefaultsSuccess": "Herstelde standaardinstellingen van upstream-model", - "resetToUpstreamDefaultsFailed": "Het is niet gelukt om de standaardinstellingen van het upstream-model te herstellen" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Instellingen", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Verboden trefwoorden", "customBannedSignalsDesc": "Aanvullende trefwoorden die detectie van permanente accountblokkering activeren. Ingebouwde trefwoorden zijn altijd van toepassing.", "customBannedSignalsPlaceholder": "bijv. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "geconfigureerd", "none": "Geen", "modelOverrideValuePlaceholder": "Numerieke waarde", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Sleutelwaarde toevoegen", "noModelOverrides": "Geen overschrijvingen geconfigureerd voor dit model.", "modelOverrideLoadFailed": "Laden van modeloverschrijvingen mislukt", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Beknopt CJK (文言)", "description": "Klassiek-Chinese ultra-beknopte stijl (alleen beschikbaar voor Chinees)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin- en willekeurige combinaties wisselen bij elk verzoek naar een andere verbinding in plaats van een heel gesprek vast te pinnen aan één verbinding op basis van de hash van het eerste bericht. Laat uitgeschakeld om prompt-cache-hits voor multi-turn chats te behouden. Overschrijvingen per combinatie hebben voorrang.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Maskeren van inloggegevens", "credentialRedactionDesc": "Maskeer API-sleutels, tokens en geheimen in context die naar providers wordt verzonden en in antwoorden.", "enableCredentialRedaction": "Maskeren van inloggegevens inschakelen", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Schakel de engine in", "enableDescription": "Draait als laatste in de stack (nadat RTK/Caveman de tekst opschoont, converteert OmniGlyph de rest naar afbeeldingen) en draait ook standalone via de omniglyph-modus. Dit is een preview en blijft standaard uitgeschakeld totdat de end-to-end-validatie is voltooid.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Opgeslagen.", "saveFailed": "Opslaan mislukt.", "enableAria": "Schakel de OmniGlyph-engine in", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "maand", "grokAdditionalCredits": "Aanvullende Credits", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budgetbeheer", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Eerste token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 77a2074b7e..502bbae12e 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visuell forespørselstidslinje", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "åpne", "close": "lukk" }, - "noResults": "Ingen resultater", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Ingen resultater" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kvoteandel", "discovery": "Oppdagelse", "freeProviderRankings": "Rangering av gratisleverandører", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Gratisnivåer", "gamification": "Spillifisering", "leaderboard": "Ledertavle", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Denne leverandøren er avviklet", "riskNotice": { "title": "Før du fortsetter", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Leverandør med forbehold om bruk — klikk for detaljer", "oauth": "Denne leverandøren bruker din offisielle produktøkt/OAuth, som ikke er autorisert for proxy-/rutingsbruk. Vi anbefaler ikke intensiv bruk av autonome agenter (OpenCloud-stil, lange flertrinnsflyter, store batcher) — oppstrømmen kan reagere med å begrense eller utestenge kontoen. Bruk på egen risiko.", "webCookie": "Denne leverandøren autentiserer via informasjonskapsler (cookies) fra nettøkten din. Oppstrømstjenesten kan ugyldiggjøre økten når som helst, noe som krever at du logger inn på nytt. Anbefales ikke for lange uovervåkede operasjoner. Bruk på egen risiko.", @@ -5107,9 +5111,9 @@ "cancel": "Avbryt" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Deaktivert", "enableProvider": "Aktiver leverandør", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Hopper over {count} eksisterende modeller", "autoSync": "Auto-synkronisering", "autoSyncShort": "Synkronisering", + "autoFetchModels": "Auto-hent oppstrøms modeller", + "autoFetchModelsTooltip": "Hent og cache upstream-modeller når det er nødvendig", + "autoFetchModelsEnabled": "Oppstrømsmodell automatisk henting aktivert", + "autoFetchModelsDisabled": "Oppstrømsmodell automatisk henting deaktivert", + "autoFetchModelsToggleFailed": "Kunne ikke aktivere automatisk henting av upstream-modell", + "autoFetchModelsPartialFailure": "Noen tilkoblinger ble oppdatert, men upstream-modellens auto-hent ble ikke endret overalt", + "overridesUpstreamModel": "Overstyrer upstream", + "overridesUpstreamModelHint": "Dine innstillinger overstyrer denne upstream-modellen", + "resetToUpstreamDefaults": "Gjenopprett upstream-standardinnstillinger", + "resetToUpstreamDefaultsSuccess": "Gjenopprettet upstream-modellinnstillinger", + "resetToUpstreamDefaultsFailed": "Kunne ikke gjenopprette standardinnstillinger for upstream-modellen", "autoSyncTooltip": "Oppdater modelllisten automatisk hver 24. time (kan konfigureres via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatisk synkronisering aktivert – modellene oppdateres med jevne mellomrom", "autoSyncDisabled": "Automatisk synkronisering er deaktivert", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Omskriv innebygde web_fetch-verktøykall til OmniRoutes /v1/web/fetch.", "interceptionLoadError": "Kunne ikke laste inn avskjæringsinnstillinger: {error}", "interceptionSaveError": "Kunne ikke lagre avskjæringsinnstillinger: {error}", - "ccAliasSectionTitle": "Eksponer i Claude Code (claude/…)", - "ccAliasSectionHint": "Reklamer denne leverandørens modeller under claude/<provider>/<model> speil-ID-er slik at Claude Codes gateway-modelloppdagelse kan liste dem. Av som standard — aktivering av dette dobler katalogoppføringene for alle klienter.", - "ccAliasProviderLevelLabel": "Leverandørstandard", - "ccAliasModelOverridesLabel": "Per-modell overstyringer", - "ccAliasModelOverrideAriaLabel": "Overstyring for {modelId}", - "ccAliasStateInherit": "Arv", - "ccAliasStateOn": "På", - "ccAliasStateOff": "Av", - "ccAliasAddModelPlaceholder": "Modell-ID (f.eks. gpt-4o)", - "ccAliasAddModelButton": "Legg til overstyring", - "ccAliasLoadError": "Kunne ikke laste inn discovery-alias-innstillinger: {error}", - "ccAliasSaveError": "Kunne ikke lagre discovery-alias-innstillingen: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Koble til Galadriel med en API-nøkkel.", "predibase": "$25 gratis prøveperiode-kreditt (30 dagers gyldighet)", "chenzk": "OpenAI-kompatibel gateway med en live modellkatalog på chenzk.top.", - "freepik": "Generer bilder med Freepiks Mystic-API.", + "magnific": "Generer bilder med Freepiks Mystic-API.", "freetheai": "Gratis OpenAI-kompatibel gateway med passthrough-modellstøtte.", "g4f-gemini": "Gratis nøkkelfri g4f.space reverse proxy til Gemini, begrenset til 5 forespørsler per minutt.", "g4f-groq": "Gratis nøkkelfri g4f.space reverse proxy til Groq, begrenset til 5 forespørsler per minutt.", @@ -6209,6 +6224,7 @@ "claude": "Koble til Claude Code med den eksisterende OAuth-flyten.", "cline": "Koble til Cline med den eksisterende OAuth-flyten.", "cursor": "Koble til Cursor IDE med den eksisterende OAuth-flyten.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Koble til GitHub Copilot med den eksisterende OAuth-flyten.", "gitlab-duo": "OAuth-applikasjon med ai_features + read_user-scopes. Konfigurer GITLAB_DUO_OAUTH_CLIENT_ID og eventuelt GITLAB_DUO_OAUTH_CLIENT_SECRET på denne OmniRoute-instansen.", "kilocode": "Koble til Kilo Code med den eksisterende OAuth-flyten.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "I nedkjølingsperiode", "codexPoolUsed": "brukt", "codexPoolUntil": "Til {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonym fallback", "anonymousFallbackDesc": "Når alle konfigurerte tilkoblinger er brukt opp (kvote, kreditter eller utløp), bruk midlertidig denne leverandørens nøkkelløse nivå. Slå av for å hoppe over denne leverandøren i stedet for å sende anonyme forespørsel — anbefales når det nøkkelløse nivået avviser dem (401).", "anonymousFallbackEnabled": "Anonym fallback aktivert for {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Innstillinger for lagrede modellendepunkter", "searchByModelAria": "Søk etter modell", "selectSupportedEndpoint": "Velg minst ett støttet endepunkt", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsTooltip": "Hent og cache upstream-modeller når det er nødvendig", - "autoFetchModelsEnabled": "Oppstrømsmodell automatisk henting aktivert", - "autoFetchModelsDisabled": "Oppstrømsmodell automatisk henting deaktivert", - "autoFetchModels": "Auto-hent oppstrøms modeller", - "autoFetchModelsToggleFailed": "Kunne ikke aktivere automatisk henting av upstream-modell", - "overridesUpstreamModel": "Overstyrer upstream", - "autoFetchModelsPartialFailure": "Noen tilkoblinger ble oppdatert, men upstream-modellens auto-hent ble ikke endret overalt", - "overridesUpstreamModelHint": "Dine innstillinger overstyrer denne upstream-modellen", - "resetToUpstreamDefaultsSuccess": "Gjenopprettet upstream-modellinnstillinger", - "resetToUpstreamDefaults": "Gjenopprett upstream-standardinnstillinger", - "resetToUpstreamDefaultsFailed": "Kunne ikke gjenopprette standardinnstillinger for upstream-modellen" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Innstillinger", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Forbudte nøkkelord", "customBannedSignalsDesc": "Ytterligere nøkkelord som utløser deteksjon av permanent kontoutestengelse. Innebygde nøkkelord gjelder alltid.", "customBannedSignalsPlaceholder": "f.eks. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "konfigurert", "none": "Ingen", "modelOverrideValuePlaceholder": "Numerisk verdi", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Legg til nøkkelverdi", "noModelOverrides": "Ingen overstyringer er konfigurert for denne modellen.", "modelOverrideLoadFailed": "Kunne ikke laste modelloverstyringer", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Kortfattet CJK (文言)", "description": "Klassisk-kinesisk ultrakortfattet stil (kun tilgjengelig for kinesisk)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin- og tilfeldige kombinasjoner roterer til en annen tilkobling for hver forespørsel i stedet for å låse en hel samtale til én tilkobling basert på hashen til den første meldingen. La være av for å bevare prompt-cache-treff for samtaler med flere runder. Overstyringer per kombinasjon har forrang.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Sladding av legitimasjon", "credentialRedactionDesc": "Sladd API-nøkler, tokener og hemmeligheter fra kontekst som sendes til leverandører, og fra svar.", "enableCredentialRedaction": "Aktiver sladding av legitimasjon", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Aktiver motoren", "enableDescription": "Kjører sist i stakken (etter at RTK/Caveman renser teksten, og OmniGlyph konverterer resten til bilder) og kjører også frittstående via omniglyph-modus. Dette er en forhåndsvisning og forblir deaktivert som standard til end-til-end-validering er fullført.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Lagret.", "saveFailed": "Kunne ikke lagre.", "enableAria": "Aktiver OmniGlyph-motoren", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maks", "grokAutoTopUpMonth": "måned", "grokAdditionalCredits": "Ytterligere Krediteringer", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Fullmakt", "budgetManagement": "Budsjettstyring", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Første token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index cfe0a6e006..5285b3d18c 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visual na kahilingan ng timeline", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "buksan", "close": "isara" }, - "noResults": "Walang resulta", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Walang resulta" }, "webhooks": { "title": "Mga Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "Quota Share", "discovery": "Pagtuklas", "freeProviderRankings": "Mga Ranggo ng Libreng Provider", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Mga Libreng Tier", "gamification": "Gamification", "leaderboard": "Leaderboard", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Ang provider na ito ay hindi na ginagamit", "riskNotice": { "title": "Bago magpatuloy", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provider na may mga paalala sa paggamit — i-click para sa mga detalye", "oauth": "Gumagamit ang provider na ito ng iyong opisyal na session ng produkto/OAuth, na hindi awtorisado para sa paggamit ng proxy/router. Hindi namin inirerekomenda ang masinsinang paggamit ng autonomous agent (estilong OpenCloud, mahabang multi-step na flow, malalaking batch) — maaaring tumugon ang upstream sa pamamagitan ng paghihigpit o pag-ban sa account. Gamitin sa sarili mong panganib.", "webCookie": "Nagpapatotoo ang provider na ito sa pamamagitan ng iyong mga cookie sa web session. Maaaring pawalang-bisa ng upstream na serbisyo ang session anumang oras, na nangangailangan sa iyong mag-log in muli. Hindi inirerekomenda para sa mahabang operasyon na walang bantay. Gamitin sa sarili mong panganib.", @@ -5107,9 +5111,9 @@ "cancel": "Kanselahin" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Hindi pinagana", "enableProvider": "Paganahin ang provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Pinapalampas ang {count} na umiiral na mga modelo", "autoSync": "Auto-Sync", "autoSyncShort": "I-sync", + "autoFetchModels": "Awtomatikong kunin ang mga upstream na modelo", + "autoFetchModelsTooltip": "Kunin at i-cache ang upstream models kapag kinakailangan", + "autoFetchModelsEnabled": "Naka-enable ang auto-fetch ng upstream model", + "autoFetchModelsDisabled": "Naka-disable ang auto-fetch ng upstream model", + "autoFetchModelsToggleFailed": "Nabigong i-toggle ang upstream model auto-fetch", + "autoFetchModelsPartialFailure": "Ilang koneksyon ang na-update, ngunit ang auto-fetch ng upstream model ay hindi nagbago sa lahat ng lugar", + "overridesUpstreamModel": "Pinalitan ang upstream", + "overridesUpstreamModelHint": "Ang iyong mga setting ay nangingibabaw sa modelong ito mula sa upstream", + "resetToUpstreamDefaults": "Ibalik ang mga default ng upstream", + "resetToUpstreamDefaultsSuccess": "Ibinalik ang mga default ng upstream model", + "resetToUpstreamDefaultsFailed": "Nabigong maibalik ang mga default ng upstream model", "autoSyncTooltip": "Awtomatikong i-refresh ang listahan ng modelo tuwing 24h (mako-configure sa pamamagitan ng MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Pinagana ang auto-sync — pana-panahong magre-refresh ang mga modelo", "autoSyncDisabled": "Na-disable ang auto-sync", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "I-rewrite ang mga native na tawag sa tool na web_fetch sa /v1/web/fetch ng OmniRoute.", "interceptionLoadError": "Hindi nai-load ang mga setting ng interception: {error}", "interceptionSaveError": "Hindi nai-save ang mga setting ng interception: {error}", - "ccAliasSectionTitle": "I-expose sa Claude Code (claude/…)", - "ccAliasSectionHint": "I-anunsyo ang mga modelo ng provider na ito sa ilalim ng claude/<provider>/<model> mirror ids upang ma-lista ang mga ito sa gateway model discovery ng Claude Code. Off sa default — ang pag-enable nito ay nagdodoble ng mga entry sa katalogo para sa lahat ng kliyente.", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", "ccAliasProviderLevelLabel": "Provider default", - "ccAliasModelOverridesLabel": "Mga Override Bawat Modelo", - "ccAliasModelOverrideAriaLabel": "Override para sa {modelId}", - "ccAliasStateInherit": "Mamana", - "ccAliasStateOn": "Sa", - "ccAliasStateOff": "Patay", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "Magdagdag ng override", - "ccAliasLoadError": "Nabigong i-load ang mga setting ng discovery-alias: {error}", - "ccAliasSaveError": "Nabigong i-save ang setting ng discovery-alias: {error}", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Ikonekta ang Galadriel gamit ang isang API key.", "predibase": "$25 na libreng trial credits (30-araw na validity)", "chenzk": "OpenAI-compatible na gateway na may live model catalog sa chenzk.top.", - "freepik": "Bumuo ng mga larawan gamit ang Mystic API ng Freepik.", + "magnific": "Bumuo ng mga larawan gamit ang Mystic API ng Freepik.", "freetheai": "Libreng OpenAI-compatible na gateway na may suporta sa passthrough model.", "g4f-gemini": "Libreng no-key na g4f.space reverse proxy sa Gemini, limitado sa 5 kahilingan bawat minuto.", "g4f-groq": "Libreng no-key na g4f.space reverse proxy sa Groq, limitado sa 5 kahilingan bawat minuto.", @@ -6209,6 +6224,7 @@ "claude": "Ikonekta ang Claude Code gamit ang umiiral na OAuth flow.", "cline": "Ikonekta ang Cline gamit ang umiiral na OAuth flow.", "cursor": "Ikonekta ang Cursor IDE gamit ang umiiral na OAuth flow.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Ikonekta ang GitHub Copilot gamit ang umiiral na OAuth flow.", "gitlab-duo": "OAuth application na may ai_features + read_user scopes. I-configure ang GITLAB_DUO_OAUTH_CLIENT_ID at opsyonal ang GITLAB_DUO_OAUTH_CLIENT_SECRET sa OmniRoute instance na ito.", "kilocode": "Ikonekta ang Kilo Code gamit ang umiiral na OAuth flow.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Nasa panahon ng paghihintay", "codexPoolUsed": "nagamit", "codexPoolUntil": "Hanggang {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonymous fallback", "anonymousFallbackDesc": "Kapag naubos na ang lahat ng nakatakdang koneksyon (quota, kredito, o pag-expire), pansamantalang gamitin ang keyless tier ng provider na ito. Patayin upang laktawan ang provider na ito sa halip na magpadala ng mga hindi nagpapakilalang kahilingan — inirerekomenda kapag tinanggihan ng keyless tier ang mga ito (401).", "anonymousFallbackEnabled": "Naka-enable ang anonymous fallback para sa {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Naka-save na mga setting ng endpoint ng modelo", "searchByModelAria": "Maghanap ayon sa modelo", "selectSupportedEndpoint": "Pumili ng hindi bababa sa isang sinusuportahang endpoint", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Naka-disable ang auto-fetch ng upstream model", - "autoFetchModelsTooltip": "Kunin at i-cache ang upstream models kapag kinakailangan", - "autoFetchModelsEnabled": "Naka-enable ang auto-fetch ng upstream model", - "autoFetchModels": "Awtomatikong kunin ang mga upstream na modelo", - "autoFetchModelsToggleFailed": "Nabigong i-toggle ang upstream model auto-fetch", - "overridesUpstreamModel": "Pinalitan ang upstream", - "overridesUpstreamModelHint": "Ang iyong mga setting ay nangingibabaw sa modelong ito mula sa upstream", - "resetToUpstreamDefaults": "Ibalik ang mga default ng upstream", - "resetToUpstreamDefaultsSuccess": "Ibinalik ang mga default ng upstream model", - "autoFetchModelsPartialFailure": "Ilang koneksyon ang na-update, ngunit ang auto-fetch ng upstream model ay hindi nagbago sa lahat ng lugar", - "resetToUpstreamDefaultsFailed": "Nabigong maibalik ang mga default ng upstream model" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Mga setting", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Mga Banned na Keyword", "customBannedSignalsDesc": "Mga karagdagang keyword na nagti-trigger ng pagtukoy sa permanenteng pag-ban ng account. Palaging nalalapat ang mga built-in na keyword.", "customBannedSignalsPlaceholder": "hal. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "naka-configure", "none": "Wala", "modelOverrideValuePlaceholder": "Numerikong halaga", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Magdagdag ng key value", "noModelOverrides": "Walang naka-configure na mga override para sa modelong ito.", "modelOverrideLoadFailed": "Bigo sa pag-load ng mga override ng modelo", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Maikling CJK (文言)", "description": "Klasikong Tsino na ultra-maikling estilo (magagamit lamang para sa Tsino)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Ang mga round-robin at random combo ay umiikot sa ibang koneksyon sa bawat request sa halip na i-pin ang buong pag-uusap sa isang koneksyon sa pamamagitan ng hash ng unang mensahe. Iwanang naka-off upang mapanatili ang mga prompt-cache hit para sa mga multi-turn chat. Mas nangingibabaw ang mga per-combo override.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Pag-redact ng Kredensyal", "credentialRedactionDesc": "I-redact ang mga API key, token, at secret mula sa kontekstong ipinadala sa mga provider at mula sa mga tugon.", "enableCredentialRedaction": "I-enable ang credential redaction", @@ -8621,6 +8623,27 @@ }, "enableTitle": "I-enable ang engine", "enableDescription": "Tumatakbo nang huli sa stack (pagkatapos linisin ng RTK/Caveman ang text, kino-convert ng OmniGlyph ang natitira sa mga imahe) at tumatakbo rin nang standalone sa pamamagitan ng omniglyph mode. Ito ay isang preview at nananatiling naka-off by default hanggang sa makumpleto ang end-to-end na pagpapatunay.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Nai-save.", "saveFailed": "Hindi mai-save.", "enableAria": "I-enable ang OmniGlyph engine", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "buwan", "grokAdditionalCredits": "Karagdagang Kredito", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Magtotroso", "proxyTab": "Proxy", "budgetManagement": "Pamamahala ng Badyet", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Unang Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index 7fb9dbc363..e29e73670e 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Logi konsoli", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Wizualny harmonogram żądań", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Routing globalny", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "otwórz", "close": "zamknij" }, - "noResults": "Brak wyników", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Brak wyników" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Udział w limicie", "discovery": "Odkrywanie", "freeProviderRankings": "Rankingi darmowych dostawców", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Bezpłatne pakiety", "gamification": "Grywalizacja", "leaderboard": "Tabela liderów", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Wybierz, jak żądania są rozdzielane między models - dostępnych jest 14 strategii", "wizardStep4Title": "Przejrzyj i zapisz", "wizardStep4Desc": "Przejrzyj konfigurację i aktywuj combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "Wł.", "emailVisibilityStateOff": "Wył.", "reorderHandle": "Przeciągnij, aby zmienić kolejność", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Ten provider jest przestarzały", "riskNotice": { "title": "Przed kontynuowaniem", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provider z zastrzeżeniami dotyczącymi użytkowania — kliknij, aby uzyskać szczegóły", "oauth": "Ten provider korzysta z oficjalnej sesji produktu/OAuth, która nie jest autoryzowana do użytku jako proxy/router. Nie zalecamy intensywnego korzystania z autonomicznych agentów (w stylu OpenCloud, długich wieloetapowych przepływów, dużych partii) — upstream może zareagować ograniczeniem lub zablokowaniem konta. Użycie na własne ryzyko.", "webCookie": "Ten provider uwierzytelnia się za pomocą plików cookie sesji internetowej. Usługa upstream może unieważnić sesję w dowolnym momencie, co będzie wymagać ponownego zalogowania. Opcja ta nie jest zalecana do długich operacji bez nadzoru. Użycie na własne ryzyko.", @@ -5107,9 +5111,9 @@ "cancel": "Anuluj" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Wyłączone", "enableProvider": "Włącz provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Pomijanie {count} istniejących models", "autoSync": "Auto-Sync", "autoSyncShort": "Synchronizuj", + "autoFetchModels": "Automatyczne pobieranie modeli upstream", + "autoFetchModelsTooltip": "Pobierz i przechowuj modele upstream w razie potrzeby", + "autoFetchModelsEnabled": "Włączone automatyczne pobieranie modelu upstream", + "autoFetchModelsDisabled": "Automatyczne pobieranie modelu upstream wyłączone", + "autoFetchModelsToggleFailed": "Nie udało się przełączyć automatycznego pobierania modelu upstream", + "autoFetchModelsPartialFailure": "Niektóre połączenia zostały zaktualizowane, ale automatyczne pobieranie modelu upstream nie zostało zmienione wszędzie", + "overridesUpstreamModel": "Nadpisuje upstream", + "overridesUpstreamModelHint": "Twoje ustawienia nadpisują ten model upstream", + "resetToUpstreamDefaults": "Przywróć domyślne ustawienia upstream", + "resetToUpstreamDefaultsSuccess": "Przywrócono domyślne ustawienia modelu upstream", + "resetToUpstreamDefaultsFailed": "Nie udało się przywrócić domyślnych ustawień modelu upstream", "autoSyncTooltip": "Automatyczne odświeżanie listy models co 24h (konfigurowalne przez MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync włączony — models będą odświeżane okresowo", "autoSyncDisabled": "Auto-sync wyłączony", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Przepisywanie natywnych wywołań narzędzi web_fetch do /v1/web/fetch w OmniRoute.", "interceptionLoadError": "Nie udało się załadować ustawień przechwytywania: {error}", "interceptionSaveError": "Nie udało się zapisać ustawień przechwytywania: {error}", - "ccAliasSectionTitle": "Eksponuj w Claude Code (claude/…)", - "ccAliasSectionHint": "Reklamuj modele tego dostawcy pod identyfikatorami lustrzanymi claude/<provider>/<model>, aby model odkrywania bramy Claude Code mógł je wyświetlić. Domyślnie wyłączone — włączenie tego podwaja wpisy w katalogu dla wszystkich klientów.", - "ccAliasProviderLevelLabel": "Domyślny dostawca", - "ccAliasModelOverridesLabel": "Nadpisy dla poszczególnych modeli", - "ccAliasModelOverrideAriaLabel": "Nadpisz dla {modelId}", - "ccAliasStateInherit": "Dziedzicz", - "ccAliasStateOn": "Włączone", - "ccAliasStateOff": "Wyłączone", - "ccAliasAddModelPlaceholder": "Identyfikator modelu (np. gpt-4o)", - "ccAliasAddModelButton": "Dodaj nadpisanie", - "ccAliasLoadError": "Nie udało się załadować ustawień discovery-alias: {error}", - "ccAliasSaveError": "Nie udało się zapisać ustawienia discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Dodatkowe nagłówki upstream", "compatUpstreamHeadersHint": "Ustawienie o wysokich uprawnieniach — ten sam poziom zaufania, co edycja danych uwierzytelniających API dla provider; powinno być używane wyłącznie przez zaufanych administratorów. Scalane po dodaniu autoryzacji przez OmniRoute na podstawie klucza API dla provider. Jeśli niestandardowy nagłówek ma taką samą nazwę jak istniejący (np. Authorization), wprowadzona wartość w pełni zastępuje automatycznie wygenerowany nagłówek (w tym Bearer token) — upstream zobaczy tylko wpisaną wartość, a nie klucz z ustawień. Błędna konfiguracja może spowodować błąd 401 lub uszkodzenie autoryzacji upstream. Jeden wiersz na nagłówek (np. dodatkowe Authentication dla niektórych bramek). Najedź myszą lub kliknij pole, aby wyświetlić podgląd. Zapisuje się po utracie fokusu (blur), kliknięciu poza obszarem lub zamknięciu tego panelu.", "compatUpstreamHeaderName": "Nazwa nagłówka", @@ -6194,7 +6209,7 @@ "galadriel": "Połącz z Galadriel za pomocą klucza API.", "predibase": "$25 darmowych środków próbnych (ważność 30 dni)", "chenzk": "Brama zgodna z OpenAI z aktywnym katalogiem modeli na chenzk.top.", - "freepik": "Generuj obrazy za pomocą Mystic API od Freepik.", + "magnific": "Generuj obrazy za pomocą Mystic API od Freepik.", "freetheai": "Darmowa brama zgodna z OpenAI z obsługą modeli w trybie passthrough.", "g4f-gemini": "Darmowe, niewymagające klucza reverse proxy g4f.space do Gemini, z limitem do 5 żądań na minutę.", "g4f-groq": "Darmowe, niewymagające klucza reverse proxy g4f.space do Groq, z limitem do 5 żądań na minutę.", @@ -6209,6 +6224,7 @@ "claude": "Połącz Claude Code za pomocą istniejącego przepływu OAuth.", "cline": "Połącz Cline za pomocą istniejącego przepływu OAuth.", "cursor": "Połącz Cursor IDE za pomocą istniejącego przepływu OAuth.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Połącz GitHub Copilot za pomocą istniejącego przepływu OAuth.", "gitlab-duo": "Aplikacja OAuth z zakresami ai_features + read_user. Skonfiguruj GITLAB_DUO_OAUTH_CLIENT_ID i opcjonalnie GITLAB_DUO_OAUTH_CLIENT_SECRET w tej instancji OmniRoute.", "kilocode": "Połącz Kilo Code za pomocą istniejącego przepływu OAuth.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "W okresie oczekiwania", "codexPoolUsed": "wykorzystano", "codexPoolUntil": "Do {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonimowe zapasowe", "anonymousFallbackDesc": "Gdy wszystkie skonfigurowane połączenia są wyczerpane (kwota, kredyty lub wygaśnięcie), tymczasowo użyj bezkluczowego poziomu tego dostawcy. Wyłącz, aby pominąć tego dostawcę zamiast wysyłać anonimowe żądania — zalecane, gdy bezkluczowy poziom je odrzuca (401).", "anonymousFallbackEnabled": "Anonimowe przełączanie włączone dla {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Ustawienia punktu końcowego zapisanego modelu", "searchByModelAria": "Szukaj według modelu", "selectSupportedEndpoint": "Wybierz przynajmniej jeden obsługiwany punkt końcowy", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Automatyczne pobieranie modeli upstream", - "autoFetchModelsEnabled": "Włączone automatyczne pobieranie modelu upstream", - "autoFetchModelsTooltip": "Pobierz i przechowuj modele upstream w razie potrzeby", - "autoFetchModelsDisabled": "Automatyczne pobieranie modelu upstream wyłączone", - "overridesUpstreamModel": "Nadpisuje upstream", - "overridesUpstreamModelHint": "Twoje ustawienia nadpisują ten model upstream", - "autoFetchModelsPartialFailure": "Niektóre połączenia zostały zaktualizowane, ale automatyczne pobieranie modelu upstream nie zostało zmienione wszędzie", - "autoFetchModelsToggleFailed": "Nie udało się przełączyć automatycznego pobierania modelu upstream", - "resetToUpstreamDefaultsSuccess": "Przywrócono domyślne ustawienia modelu upstream", - "resetToUpstreamDefaults": "Przywróć domyślne ustawienia upstream", - "resetToUpstreamDefaultsFailed": "Nie udało się przywrócić domyślnych ustawień modelu upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Ustawienia", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Trwałe oznaczanie połączeń provider jako dezaktywowane, jeśli zwrócą one określone końcowe sygnały blokady (np. HTTP 403 'verify your account'). Spowoduje to usunięcie ich z rotacji combo.", "autoDisableThreshold": "Próg blokady", "autoDisableThresholdDesc": "Liczba kolejnych sygnałów blokady wymagana do trwałej dezaktywacji.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Zablokowane słowa kluczowe", "customBannedSignalsDesc": "Dodatkowe słowa kluczowe wyzwalające wykrywanie trwałej blokady konta. Wbudowane słowa kluczowe mają zawsze zastosowanie.", "customBannedSignalsPlaceholder": "np. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "skonfigurowano", "none": "Brak", "modelOverrideValuePlaceholder": "Wartość liczbowa", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Dodaj wartość klucza", "noModelOverrides": "Brak skonfigurowanych nadpisań dla tego model.", "modelOverrideLoadFailed": "Nie udało się załadować nadpisań model", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Zwięzłe CJK (文言)", "description": "Klasyczny chiński styl ultra-zwięzły (dostępny tylko dla języka chińskiego)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "combos typu round-robin i random zmieniają połączenie przy każdym żądaniu, zamiast przypinać całą konwersację do jednego połączenia na podstawie hasha pierwszej wiadomości. Pozostaw wyłączone, aby zachować trafienia prompt-cache dla wieloturowych czatów. Nadpisania per-combo mają pierwszeństwo.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Ukrywanie danych uwierzytelniających", "credentialRedactionDesc": "Ukrywaj klucze API, tokeny i sekrety w kontekście wysyłanym do dostawców oraz w odpowiedziach.", "enableCredentialRedaction": "Włącz ukrywanie danych uwierzytelniających", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Włącz silnik", "enableDescription": "Uruchamia się jako ostatni w stosie (po tym, jak RTK/Caveman oczyści tekst, a OmniGlyph skonwertuje resztę na obrazy), a także działa samodzielnie w trybie omniglyph. To jest wersja zapoznawcza i pozostaje domyślnie wyłączona do czasu zakończenia pełnej walidacji.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Zapisano.", "saveFailed": "Nie można zapisać.", "enableAria": "Włącz silnik OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksymalny", "grokAutoTopUpMonth": "miesiąc", "grokAdditionalCredits": "Dodatkowe Kredyty", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Zarządzanie budżetem", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Pierwszy Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index b3fe3125dd..4ba29762d0 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Linha do tempo de solicitação visual", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1282,8 +1284,6 @@ "resilienceConnectionsSubtitle": "Cooldown, disjuntor, estado de bloqueio", "settingsModalityBridge": "Ponte de Modalidade", "settingsModalityBridgeSubtitle": "Fallback de imagem/áudio → texto para modelos apenas de texto", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations", "commandPalette": { "title": "Paleta de Comandos", "searchPlaceholder": "Pesquisar páginas, configurações, ferramentas...", @@ -1800,6 +1800,11 @@ "updateStarted": "Atualização iniciada...", "reloadingPageAutomatically": "Recarregando a página automaticamente...", "providerTopology": "Topologia do provedor", + "recentRequests": "Requisições recentes", + "recentRequestsEmpty": "Nenhuma requisição ainda.", + "recentRequestsModel": "Modelo", + "recentRequestsTokens": "Entrada / Saída", + "recentRequestsWhen": "Quando", "downloadDmg": "Baixar DMG (macOS)", "downloadDmgDescription": "Uma nova versão do aplicativo de desktop OmniRoute está disponível. Por favor, baixe e instale o instalador DMG para macOS para atualizar (atual: v{version}).", "downloadExe": "Baixar EXE (Windows)", @@ -3606,6 +3611,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5106,7 @@ "deprecatedProvider": "Este provedor foi descontinuado", "riskNotice": { "title": "Antes de continuar", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provider com restrições de uso — clique para detalhes", "oauth": "Este provider usa sua sessão/OAuth oficial do produto, que não autoriza uso em proxy/router. Não recomendamos uso intensivo em agentes autônomos (estilo OpenCloud, multi-passos longos, batches grandes) — o upstream pode reagir restringindo ou banindo a conta. Use por sua conta e risco.", "webCookie": "Este provider autentica através dos cookies da sua sessão web. O serviço upstream pode invalidar a sessão a qualquer momento, exigindo re-login. Não recomendado para operações longas e não-supervisionadas. Use por sua conta e risco.", @@ -5107,9 +5116,9 @@ "cancel": "Cancelar" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Desativado", "enableProvider": "Ativar provedor", @@ -5233,6 +5242,17 @@ "skippingExistingModels": "Ignorando {count} modelos existentes", "autoSync": "Sincronização automática", "autoSyncShort": "Sincronizar", + "autoFetchModels": "Buscar automaticamente modelos upstream", + "autoFetchModelsTooltip": "Busque e armazene em cache os modelos upstream quando necessário", + "autoFetchModelsEnabled": "Modelo upstream de auto-busca habilitado", + "autoFetchModelsDisabled": "Busca automática do modelo upstream desativada", + "autoFetchModelsToggleFailed": "Falha ao alternar a busca automática do modelo upstream", + "autoFetchModelsPartialFailure": "Algumas conexões foram atualizadas, mas a busca automática do modelo upstream não foi alterada em todos os lugares", + "overridesUpstreamModel": "Substitui upstream", + "overridesUpstreamModelHint": "Suas configurações substituem este modelo upstream", + "resetToUpstreamDefaults": "Restaurar padrões do upstream", + "resetToUpstreamDefaultsSuccess": "Restaurados os padrões do modelo upstream", + "resetToUpstreamDefaultsFailed": "Falha ao restaurar as configurações padrão do modelo upstream", "autoSyncTooltip": "Atualize automaticamente a lista de modelos a cada 24h (configurável via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Sincronização automática habilitada – os modelos serão atualizados periodicamente", "autoSyncDisabled": "Sincronização automática desativada", @@ -5438,18 +5458,18 @@ "interceptFetchHint": "Reescreve chamadas nativas de web_fetch para /v1/web/fetch da OmniRoute.", "interceptionLoadError": "Falha ao carregar configuração de interceptação: {error}", "interceptionSaveError": "Falha ao salvar configuração de interceptação: {error}", - "ccAliasSectionTitle": "Expose em Claude Code (claude/…)", - "ccAliasSectionHint": "Anuncie os modelos deste provedor sob claude/<provider>/<model> IDs de espelho para que a descoberta de modelos do gateway do Claude Code possa listá-los. Desativado por padrão — habilitar isso dobra as entradas do catálogo para todos os clientes.", - "ccAliasProviderLevelLabel": "Provedor padrão", - "ccAliasModelOverridesLabel": "Substituições por modelo", - "ccAliasModelOverrideAriaLabel": "Substituição para {modelId}", - "ccAliasStateInherit": "Herdar", - "ccAliasStateOn": "Ligado", - "ccAliasStateOff": "Desligado", - "ccAliasAddModelPlaceholder": "ID do modelo (por exemplo, gpt-4o)", - "ccAliasAddModelButton": "Adicionar substituição", - "ccAliasLoadError": "Falha ao carregar as configurações de discovery-alias: {error}", - "ccAliasSaveError": "Falha ao salvar a configuração de discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6214,7 @@ "galadriel": "Conecte o Galadriel com uma chave de API.", "predibase": "$25 em créditos de teste gratuitos (validade de 30 dias)", "chenzk": "Gateway compatível com OpenAI com um catálogo de modelos ao vivo em chenzk.top.", - "freepik": "Gere imagens com a API Mystic do Freepik.", + "magnific": "Gere imagens com a API Mystic do Freepik.", "freetheai": "Gateway gratuito compatível com OpenAI com suporte a modelos via passthrough.", "g4f-gemini": "Proxy reverso gratuito e sem chave do g4f.space para o Gemini, limitado a 5 solicitações por minuto.", "g4f-groq": "Proxy reverso gratuito e sem chave do g4f.space para o Groq, limitado a 5 solicitações por minuto.", @@ -6209,6 +6229,7 @@ "claude": "Conecte o Claude Code com o fluxo OAuth existente.", "cline": "Conecte o Cline com o fluxo OAuth existente.", "cursor": "Conecte o Cursor IDE com o fluxo OAuth existente.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Conecte o GitHub Copilot com o fluxo OAuth existente.", "gitlab-duo": "Aplicação OAuth com os escopos ai_features + read_user. Configure GITLAB_DUO_OAUTH_CLIENT_ID e, opcionalmente, GITLAB_DUO_OAUTH_CLIENT_SECRET nesta instância do OmniRoute.", "kilocode": "Conecte o Kilo Code com o fluxo OAuth existente.", @@ -6270,6 +6291,7 @@ "kimiOfficialSupporterTooltip": "A Kimi (Moonshot AI) é parceira oficial de lançamento do OmniRoute", "cheaperInferenceSupporterBadge": "Amigo do Código Aberto", "cheaperInferenceSupporterTooltip": "A Cheaper Inference apoia o OmniRoute como amiga do código aberto", + "kimiPartnerLinkNote": "Link de parceria — apoia o OmniRoute sem custo extra para você", "codexQuotaPools": "Pools de cotas do Codex", "codexPoolAvailable": "Disponível", "codexPoolPartiallyLimited": "Parcialmente limitado", @@ -6279,19 +6301,6 @@ "codexPoolCoolingDown": "Em período de espera", "codexPoolUsed": "usado", "codexPoolUntil": "Até {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", - "kimiPartnerLinkNote": "Link de parceria — apoia o OmniRoute sem custo extra para você", "anonymousFallbackTitle": "Fallback anônimo", "anonymousFallbackDesc": "Quando todas as conexões configuradas estiverem esgotadas (cota, créditos ou expiração), use temporariamente a camada sem chave deste provedor. Desative para ignorar este provedor em vez de enviar solicitações anônimas — recomendado quando a camada sem chave as rejeita (401).", "anonymousFallbackEnabled": "Fallback anônimo ativado para {provider}", @@ -6367,18 +6376,7 @@ "savedModelEndpointSettings": "Configurações do endpoint do modelo salvo", "searchByModelAria": "Pesquisar por modelo", "selectSupportedEndpoint": "Selecione pelo menos um endpoint suportado", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsEnabled": "Modelo upstream de auto-busca habilitado", - "autoFetchModelsDisabled": "Busca automática do modelo upstream desativada", - "autoFetchModels": "Buscar automaticamente modelos upstream", - "autoFetchModelsTooltip": "Busque e armazene em cache os modelos upstream quando necessário", - "autoFetchModelsToggleFailed": "Falha ao alternar a busca automática do modelo upstream", - "overridesUpstreamModel": "Substitui upstream", - "autoFetchModelsPartialFailure": "Algumas conexões foram atualizadas, mas a busca automática do modelo upstream não foi alterada em todos os lugares", - "overridesUpstreamModelHint": "Suas configurações substituem este modelo upstream", - "resetToUpstreamDefaults": "Restaurar padrões do upstream", - "resetToUpstreamDefaultsFailed": "Falha ao restaurar as configurações padrão do modelo upstream", - "resetToUpstreamDefaultsSuccess": "Restaurados os padrões do modelo upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Configurações", @@ -6597,12 +6595,12 @@ "autoDisableDescription": "Marca permanentemente conexões de provedor como desativadas quando retornam sinais terminais de banimento (ex.: HTTP 403 'verify your account'). Isso remove a conexão da rotação de combos.", "autoDisableThreshold": "Limite de banimento", "autoDisableThresholdDesc": "Quantidade de sinais consecutivos de banimento antes da desativação permanente.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Palavras-Chave Proibidas", "customBannedSignalsDesc": "Palavras-chave adicionais que acionam a detecção de banimento permanente da conta. Palavras-chave integradas sempre se aplicam.", "customBannedSignalsPlaceholder": "chave da API revogada", @@ -7210,6 +7208,7 @@ "configured": "configurado", "none": "Nenhum", "modelOverrideValuePlaceholder": "Valor numérico", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Adicionar valor da chave", "noModelOverrides": "Nenhuma substituição configurada para este modelo.", "modelOverrideLoadFailed": "Falha ao carregar substituições de modelo", @@ -7781,6 +7780,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK conciso (文言)", "description": "Estilo ultra-conciso em chinês clássico (disponível apenas para chinês)." @@ -8061,6 +8064,10 @@ "disableSessionStickinessDesc": "Combos round-robin e aleatórios alternam para uma conexão diferente a cada requisição, em vez de fixar toda a conversa em uma conexão pelo hash da primeira mensagem. Deixe desativado para preservar acertos de cache de prompt em conversas com múltiplos turnos. Sobrescritas por combo têm prioridade.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Redação de Credenciais", "credentialRedactionDesc": "Redija chaves de API, tokens e segredos do contexto enviado para provedores e das respostas.", "enableCredentialRedaction": "Ativar a ocultação de credenciais", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 9935bfe7ef..05441018a3 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Registos da Consola", "logsTimeline": "Linha do Tempo", "logsTimelineSubtitle": "Linha do tempo de pedidos visuais", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Encaminhamento Global", "mitmProxy": "Proxy MITM", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "abrir", "close": "fechar" }, - "noResults": "Sem resultados", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Sem resultados" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Partilha de Quota", "discovery": "Descoberta", "freeProviderRankings": "Rankings de Fornecedores Gratuitos", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Escalões Gratuitos", "gamification": "Gamificação", "leaderboard": "Tabela de classificação", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Rever e Guardar", "wizardStep4Desc": "Rever a configuração e ativar o combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "Ligado", "emailVisibilityStateOff": "Desligado", "reorderHandle": "Arrasta para reordenar", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Este provedor foi descontinuado", "riskNotice": { "title": "Antes de continuar", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Provedor com advertências de utilização — clique para detalhes", "oauth": "Este provedor utiliza a sua sessão oficial do produto/OAuth, que não está autorizada para utilização de proxy/router. Não recomendamos a utilização intensiva de agentes autónomos (estilo OpenCloud, fluxos longos de vários passos, grandes lotes) — o upstream pode reagir restringindo ou banindo a conta. Utilize por sua conta e risco.", "webCookie": "Este provedor autentica-se através dos cookies da sua sessão web. O serviço upstream pode invalidar a sessão a qualquer momento, exigindo que inicie sessão novamente. Não recomendado para operações longas sem supervisão. Utilize por sua conta e risco.", @@ -5107,9 +5111,9 @@ "cancel": "Cancelar" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Desativado", "enableProvider": "Habilitar provedor", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "A ignorar {count} modelos existentes", "autoSync": "Sincronização automática", "autoSyncShort": "Sincronizar", + "autoFetchModels": "Busca automática de modelos upstream", + "autoFetchModelsTooltip": "Buscar e armazenar em cache modelos upstream quando necessário", + "autoFetchModelsEnabled": "Modelo upstream de auto-busca ativado", + "autoFetchModelsDisabled": "Auto-busca do modelo upstream desativada", + "autoFetchModelsToggleFailed": "Falha ao alternar a busca automática do modelo upstream", + "autoFetchModelsPartialFailure": "Algumas ligações foram atualizadas, mas a busca automática do modelo upstream não foi alterada em todos os lugares", + "overridesUpstreamModel": "Substitui upstream", + "overridesUpstreamModelHint": "As suas definições substituem este modelo upstream", + "resetToUpstreamDefaults": "Restaurar as definições padrão do upstream", + "resetToUpstreamDefaultsSuccess": "Restaurados os valores padrão do modelo upstream", + "resetToUpstreamDefaultsFailed": "Falha ao restaurar as definições padrão do modelo upstream", "autoSyncTooltip": "Atualiza automaticamente a lista de modelos a cada 24 horas (configurável via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Sincronização automática ativada — modelos serão atualizados periodicamente", "autoSyncDisabled": "Sincronização automática desativada", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Reescrever chamadas de ferramentas nativas web_fetch para o /v1/web/fetch do OmniRoute.", "interceptionLoadError": "Falha ao carregar as definições de interceção: {error}", "interceptionSaveError": "Falha ao guardar as definições de interceção: {error}", - "ccAliasSectionTitle": "Expose em Claude Code (claude/…)", - "ccAliasSectionHint": "Anuncie os modelos deste fornecedor sob claude/<provider>/<model> IDs de espelho para que a descoberta de modelos do gateway do Claude Code os possa listar. Desativado por padrão — ativar isto duplica as entradas do catálogo para todos os clientes.", - "ccAliasProviderLevelLabel": "Fornecedor padrão", - "ccAliasModelOverridesLabel": "Substituições por modelo", - "ccAliasModelOverrideAriaLabel": "Substituição para {modelId}", - "ccAliasStateInherit": "Herdar", - "ccAliasStateOn": "Ligado", - "ccAliasStateOff": "Desligado", - "ccAliasAddModelPlaceholder": "Id do modelo (ex: gpt-4o)", - "ccAliasAddModelButton": "Adicionar substituição", - "ccAliasLoadError": "Falha ao carregar as definições de discovery-alias: {error}", - "ccAliasSaveError": "Falha ao salvar a configuração discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Cabeçalhos upstream extra", "compatUpstreamHeadersHint": "Definição de alto privilégio — mesmo nível de confiança que editar credenciais de API do fornecedor; só admins de confiança devem usar.", "compatUpstreamHeaderName": "Nome do cabeçalho", @@ -6194,7 +6209,7 @@ "galadriel": "Ligue a Galadriel com uma chave de API.", "predibase": "$25 em créditos de avaliação gratuita (validade de 30 dias)", "chenzk": "Gateway compatível com a OpenAI com um catálogo de modelos em tempo real em chenzk.top.", - "freepik": "Gere imagens com a API Mystic da Freepik.", + "magnific": "Gere imagens com a API Mystic da Freepik.", "freetheai": "Gateway gratuito compatível com a OpenAI com suporte a modelos passthrough.", "g4f-gemini": "Proxy inverso g4f.space gratuito e sem chave para o Gemini, limitado a 5 pedidos por minuto.", "g4f-groq": "Proxy inverso g4f.space gratuito e sem chave para o Groq, limitado a 5 pedidos por minuto.", @@ -6209,6 +6224,7 @@ "claude": "Ligar o Claude Code com o fluxo OAuth existente.", "cline": "Ligar o Cline com o fluxo OAuth existente.", "cursor": "Ligar o Cursor IDE com o fluxo OAuth existente.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Ligar o GitHub Copilot com o fluxo OAuth existente.", "gitlab-duo": "Aplicação OAuth com os âmbitos ai_features + read_user. Configure GITLAB_DUO_OAUTH_CLIENT_ID e, opcionalmente, GITLAB_DUO_OAUTH_CLIENT_SECRET nesta instância do OmniRoute.", "kilocode": "Ligar o Kilo Code com o fluxo OAuth existente.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Em período de espera", "codexPoolUsed": "utilizado", "codexPoolUntil": "Até {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback anónimo", "anonymousFallbackDesc": "Quando todas as conexões configuradas estiverem esgotadas (quota, créditos ou expiração), use temporariamente o nível sem chave deste fornecedor. Desative para ignorar este fornecedor em vez de enviar pedidos anónimos — recomendado quando o nível sem chave os rejeita (401).", "anonymousFallbackEnabled": "Fallback anónimo ativado para {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Definições do ponto de extremidade do modelo guardado", "searchByModelAria": "Pesquisar por modelo", "selectSupportedEndpoint": "Selecione pelo menos um endpoint suportado", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Auto-busca do modelo upstream desativada", - "autoFetchModelsTooltip": "Buscar e armazenar em cache modelos upstream quando necessário", - "autoFetchModelsEnabled": "Modelo upstream de auto-busca ativado", - "autoFetchModels": "Busca automática de modelos upstream", - "overridesUpstreamModel": "Substitui upstream", - "overridesUpstreamModelHint": "As suas definições substituem este modelo upstream", - "autoFetchModelsToggleFailed": "Falha ao alternar a busca automática do modelo upstream", - "autoFetchModelsPartialFailure": "Algumas ligações foram atualizadas, mas a busca automática do modelo upstream não foi alterada em todos os lugares", - "resetToUpstreamDefaults": "Restaurar as definições padrão do upstream", - "resetToUpstreamDefaultsSuccess": "Restaurados os valores padrão do modelo upstream", - "resetToUpstreamDefaultsFailed": "Falha ao restaurar as definições padrão do modelo upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Configurações", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Marca permanentemente conexões de provedor como desativadas quando retornam sinais terminais de banimento (ex.: HTTP 403 'verify your account'). Isso remove a conexão da rotação de combos.", "autoDisableThreshold": "Limite de banimento", "autoDisableThresholdDesc": "Quantidade de sinais consecutivos de banimento antes da desativação permanente.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Palavras-chave Proibidas", "customBannedSignalsDesc": "Palavras-chave adicionais que acionam a deteção de banimento permanente da conta. As palavras-chave integradas aplicam-se sempre.", "customBannedSignalsPlaceholder": "ex. chave de API revogada", @@ -7210,6 +7203,7 @@ "configured": "configurado", "none": "Nenhum", "modelOverrideValuePlaceholder": "Valor numérico", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Adicionar chave-valor", "noModelOverrides": "Nenhuma substituição configurada para este modelo.", "modelOverrideLoadFailed": "Falha ao carregar as substituições de modelo", @@ -7781,6 +7775,10 @@ "label": "Ponytail (dev sénior preguiçoso)", "description": "Disciplina de dev sénior preguiçoso: sobe a escada YAGNI, corrige a causa raiz, menor diff funcional." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK conciso (文言)", "description": "Estilo ultraconciso em chinês clássico (disponível apenas para chinês)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "As combinações round-robin e aleatórias alternam para uma ligação diferente a cada pedido em vez de fixarem uma conversa inteira a uma ligação através do hash da primeira mensagem. Deixe desativado para preservar os hits da cache de prompts em conversas com múltiplos turnos. As sobreposições por combinação têm precedência.", "promptCacheAffinity": "Encaminhamento por localidade de prompt-cache", "promptCacheAffinityDesc": "Prefere a mesma conta de fornecedor para chaves de prompt-cache correspondentes, preservando o failover de saúde e quota.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Ocultação de Credenciais", "credentialRedactionDesc": "Oculte chaves de API, tokens e segredos do contexto enviado para os fornecedores e das respostas.", "enableCredentialRedaction": "Ativar ocultação de credenciais", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Ativar o motor", "enableDescription": "Executa em último lugar na pilha (após o RTK/Caveman limpar o texto, o OmniGlyph converte o restante em imagens) e também executa de forma autónoma através do modo omniglyph. Esta é uma pré-visualização e permanece desativada por predefinição até que a validação de ponta a ponta esteja concluída.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Guardado.", "saveFailed": "Não foi possível guardar.", "enableAria": "Ativar o motor OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "máx", "grokAutoTopUpMonth": "mês", "grokAdditionalCredits": "Créditos Adicionais", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Registrador", "proxyTab": "Procurador", "budgetManagement": "Gestão Orçamentária", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Primeiro Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Falha ao guardar as definições locais do Radar", "guidedCombos": "Guided combos", "offers": "Ofertas", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13346,7 +13379,7 @@ "pollErrorStopped": "Sondagem interrompida: o servidor rejeitou o pedido (404/403).", "pollErrorTransient": "Erro ao obter dados: a repetir automaticamente.", "degraded": { - "message": "__MISSING__:Partial data: unavailable sources: {sources}", + "message": "Partial data: unavailable sources: {sources}", "source": { "database": "Base de Dados", "circuitBreaker": "Disjuntor", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# dia} other {# dias}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index cec84fa369..b8ef63cbb8 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Cronologia cererilor vizuale", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "deschide", "close": "închide" }, - "noResults": "Niciun rezultat", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Niciun rezultat" }, "webhooks": { "title": "Webhook-uri", @@ -1739,8 +1739,8 @@ "quotaShare": "Partajare cotă", "discovery": "Descoperire", "freeProviderRankings": "Clasament furnizori gratuiți", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Niveluri gratuite", "gamification": "Gamificare", "leaderboard": "Clasament", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Acest furnizor a fost retras", "riskNotice": { "title": "Înainte de a continua", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Furnizor cu avertismente de utilizare — faceți clic pentru detalii", "oauth": "Acest furnizor utilizează sesiunea oficială a produsului/OAuth, care nu este autorizată pentru utilizarea ca proxy/router. Nu recomandăm utilizarea intensivă a agenților autonomi (stil OpenCloud, fluxuri lungi cu mai mulți pași, loturi mari) — upstream-ul poate reacționa prin restricționarea sau blocarea contului. Utilizați pe propriul risc.", "webCookie": "Acest furnizor se autentifică prin cookie-urile sesiunii web. Serviciul upstream poate invalida sesiunea în orice moment, solicitându-vă să vă autentificați din nou. Nu este recomandat pentru operațiuni lungi nesupravegheate. Utilizați pe propriul risc.", @@ -5107,9 +5111,9 @@ "cancel": "Anulează" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Dezactivat", "enableProvider": "Activați furnizorul", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Se omit {count} modele existente", "autoSync": "Sincronizare automată", "autoSyncShort": "Sincronizează", + "autoFetchModels": "Obține automat modelele upstream", + "autoFetchModelsTooltip": "Recuperează și stochează modelele upstream atunci când este necesar", + "autoFetchModelsEnabled": "Modelul upstream auto-fetch activat", + "autoFetchModelsDisabled": "Modelul upstream auto-fetch dezactivat", + "autoFetchModelsToggleFailed": "Nu s-a reușit comutarea automată a preluării modelului upstream", + "autoFetchModelsPartialFailure": "Unele conexiuni au fost actualizate, dar modelul upstream auto-fetch nu a fost schimbat peste tot", + "overridesUpstreamModel": "Suprascrie upstream", + "overridesUpstreamModelHint": "Setările tale suprascriu acest model de bază", + "resetToUpstreamDefaults": "Restabilește valorile implicite upstream", + "resetToUpstreamDefaultsSuccess": "Restabilite valorile implicite ale modelului upstream", + "resetToUpstreamDefaultsFailed": "Restaurarea valorilor implicite ale modelului upstream a eșuat", "autoSyncTooltip": "Actualizează automat lista de modele la fiecare 24 de ore (configurabil prin MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Sincronizare automată activată — modelele se vor reîmprospăta periodic", "autoSyncDisabled": "Sincronizarea automată a fost dezactivată", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Rescrie apelurile native de instrument web_fetch către /v1/web/fetch al OmniRoute.", "interceptionLoadError": "Nu s-au putut încărca setările de interceptare: {error}", "interceptionSaveError": "Nu s-au putut salva setările de interceptare: {error}", - "ccAliasSectionTitle": "Expune în Claude Code (claude/…)", - "ccAliasSectionHint": "Publica modelele acestui furnizor sub claude/<provider>/<model> ID-uri mirror, astfel încât descoperirea modelului gateway al Claude Code să le poată lista. Dezactivat în mod implicit — activarea acestuia dublează intrările din catalog pentru toți clienții.", - "ccAliasProviderLevelLabel": "Provider implicit", - "ccAliasModelOverridesLabel": "Suprapuneri pe model per model", - "ccAliasModelOverrideAriaLabel": "Suprascriere pentru {modelId}", - "ccAliasStateInherit": "Moștenește", - "ccAliasStateOn": "Activat", - "ccAliasStateOff": "Oprit", - "ccAliasAddModelPlaceholder": "ID model (de exemplu, gpt-4o)", - "ccAliasAddModelButton": "Adaugă suprascriere", - "ccAliasLoadError": "Nu s-au putut încărca setările discovery-alias: {error}", - "ccAliasSaveError": "Nu s-a reușit salvarea setării discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Conectați Galadriel cu o cheie API.", "predibase": "Credite de încercare gratuită de 25 $ (valabilitate 30 de zile)", "chenzk": "Gateway compatibil cu OpenAI cu un catalog live de modele la chenzk.top.", - "freepik": "Generați imagini cu API-ul Mystic de la Freepik.", + "magnific": "Generați imagini cu API-ul Mystic de la Freepik.", "freetheai": "Gateway gratuit compatibil cu OpenAI cu suport pentru modele passthrough.", "g4f-gemini": "Reverse proxy gratuit fără cheie g4f.space către Gemini, limitat la 5 cereri pe minut.", "g4f-groq": "Reverse proxy gratuit fără cheie g4f.space către Groq, limitat la 5 cereri pe minut.", @@ -6209,6 +6224,7 @@ "claude": "Conectați Claude Code cu fluxul OAuth existent.", "cline": "Conectați Cline cu fluxul OAuth existent.", "cursor": "Conectați Cursor IDE cu fluxul OAuth existent.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Conectați GitHub Copilot cu fluxul OAuth existent.", "gitlab-duo": "Aplicație OAuth cu permisiunile ai_features + read_user. Configurați GITLAB_DUO_OAUTH_CLIENT_ID și opțional GITLAB_DUO_OAUTH_CLIENT_SECRET pe această instanță OmniRoute.", "kilocode": "Conectați Kilo Code cu fluxul OAuth existent.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "În perioada de așteptare", "codexPoolUsed": "utilizat", "codexPoolUntil": "Până la {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Fallback anonim", "anonymousFallbackDesc": "Când toate conexiunile configurate sunt epuizate (cota, credite sau expirare), folosiți temporar nivelul fără cheie al acestui furnizor. Dezactivați pentru a sări peste acest furnizor în loc de a trimite cereri anonime — recomandat atunci când nivelul fără cheie le respinge (401).", "anonymousFallbackEnabled": "Fallback anonim activat pentru {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Setările punctului final al modelului salvat", "searchByModelAria": "Caută după model", "selectSupportedEndpoint": "Selectați cel puțin un punct final acceptat", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Obține automat modelele upstream", - "autoFetchModelsDisabled": "Modelul upstream auto-fetch dezactivat", - "autoFetchModelsTooltip": "Recuperează și stochează modelele upstream atunci când este necesar", - "autoFetchModelsEnabled": "Modelul upstream auto-fetch activat", - "overridesUpstreamModel": "Suprascrie upstream", - "autoFetchModelsToggleFailed": "Nu s-a reușit comutarea automată a preluării modelului upstream", - "overridesUpstreamModelHint": "Setările tale suprascriu acest model de bază", - "autoFetchModelsPartialFailure": "Unele conexiuni au fost actualizate, dar modelul upstream auto-fetch nu a fost schimbat peste tot", - "resetToUpstreamDefaults": "Restabilește valorile implicite upstream", - "resetToUpstreamDefaultsSuccess": "Restabilite valorile implicite ale modelului upstream", - "resetToUpstreamDefaultsFailed": "Restaurarea valorilor implicite ale modelului upstream a eșuat" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Setări", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Cuvinte cheie interzise", "customBannedSignalsDesc": "Cuvinte cheie suplimentare care declanșează detectarea blocării permanente a contului. Cuvintele cheie integrate se aplică întotdeauna.", "customBannedSignalsPlaceholder": "de ex. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "configurat", "none": "Niciunul", "modelOverrideValuePlaceholder": "Valoare numerică", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Adaugă cheie-valoare", "noModelOverrides": "Nu sunt configurate suprascrieri pentru acest model.", "modelOverrideLoadFailed": "Eroare la încărcarea suprascrierilor de model", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK concis (文言)", "description": "Stil ultra-concis în chineza clasică (disponibil doar pentru chineză)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Combinațiile round-robin și aleatorii comută la o conexiune diferită la fiecare solicitare, în loc să fixeze o întreagă conversație la o singură conexiune pe baza hash-ului primului mesaj. Lăsați dezactivat pentru a păstra accesările din cache-ul de prompturi pentru conversațiile cu mai multe replici. Suprascrierile per combinație au prioritate.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Mascare date de autentificare", "credentialRedactionDesc": "Mascați cheile API, tokenurile și secretele din contextul trimis către furnizori și din răspunsuri.", "enableCredentialRedaction": "Activează redactarea credențialelor", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Activează motorul", "enableDescription": "Rulează ultimul în stivă (după ce RTK/Caveman curăță textul, OmniGlyph convertește restul în imagini) și rulează, de asemenea, de sine stătător prin modul omniglyph. Aceasta este o previzualizare și rămâne dezactivată în mod implicit până când validarea end-to-end este finalizată.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Salvat.", "saveFailed": "Nu s-a putut salva.", "enableAria": "Activează motorul OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "luna", "grokAdditionalCredits": "Credite Suplimentare", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Managementul bugetului", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Primul token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index ba9a4e812e..cf9ff5e8c2 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Визуальная временная шкала запросов", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "открыть", "close": "закрыть" }, - "noResults": "Нет результатов", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Нет результатов" }, "webhooks": { "title": "Вебхуки", @@ -1739,8 +1739,8 @@ "quotaShare": "Доля квоты", "discovery": "Обнаружение", "freeProviderRankings": "Рейтинг бесплатных провайдеров", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Бесплатные тарифы", "gamification": "Геймификация", "leaderboard": "Таблица лидеров", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Этот провайдер устарел", "riskNotice": { "title": "Перед продолжением", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Провайдер с ограничениями по использованию — нажмите для получения деталей", "oauth": "Этот провайдер использует вашу официальную сессию продукта/OAuth, которая не разрешена для использования с прокси/маршрутизатором. Мы не рекомендуем интенсивное использование автономных агентов (в стиле OpenCloud, длинные многошаговые потоки, большие партии) — вышестоящий сервис может отреагировать, ограничив или заблокировав аккаунт. Используйте на свой страх и риск.", "webCookie": "Этот провайдер аутентифицируется через ваши веб-сессионные куки. Внешний сервис может аннулировать сессию в любое время, требуя повторного входа в систему. Не рекомендуется для длительных unattended операций. Используйте на свой страх и риск.", @@ -5107,9 +5111,9 @@ "cancel": "Отмена" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Отключено", "enableProvider": "Включить провайдера", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Пропуск {count} существующих моделей", "autoSync": "Автосинхронизация", "autoSyncShort": "Синхронизация", + "autoFetchModels": "Автоматически получать модели из upstream", + "autoFetchModelsTooltip": "Получить и кэшировать модели upstream по мере необходимости", + "autoFetchModelsEnabled": "Включен автоматический выбор модели upstream", + "autoFetchModelsDisabled": "Автоматическое получение модели из upstream отключено", + "autoFetchModelsToggleFailed": "Не удалось переключить автоматическую выборку модели upstream", + "autoFetchModelsPartialFailure": "Некоторые соединения обновлены, но авто-загрузка модели upstream не была изменена везде", + "overridesUpstreamModel": "Переопределяет upstream", + "overridesUpstreamModelHint": "Ваши настройки переопределяют эту модель upstream", + "resetToUpstreamDefaults": "Восстановить настройки по умолчанию upstream", + "resetToUpstreamDefaultsSuccess": "Восстановлены настройки модели по умолчанию для upstream", + "resetToUpstreamDefaultsFailed": "Не удалось восстановить значения по умолчанию для модели upstream", "autoSyncTooltip": "Автоматически обновляет список моделей каждые 24 часа (настраивается через MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Автосинхронизация включена — модели будут периодически обновляться", "autoSyncDisabled": "Автосинхронизация отключена", @@ -5438,16 +5453,16 @@ "interceptFetchHint": "Перенаправлять нативные вызовы инструмента web_fetch на /v1/web/fetch в OmniRoute.", "interceptionLoadError": "Не удалось загрузить настройки перехвата: {error}", "interceptionSaveError": "Не удалось сохранить настройки перехвата: {error}", - "ccAliasSectionTitle": "Зеркальные ID Claude Code", - "ccAliasSectionHint": "Эти зеркала публикуют не-Claude модели под ID claude/<провайдер>/<модель>, чтобы Claude Code gateway model discovery мог их перечислить.", - "ccAliasProviderLevelLabel": "Провайдер включён", - "ccAliasModelOverridesLabel": "Переопределения моделей", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", "ccAliasModelOverrideAriaLabel": "Override for {modelId}", - "ccAliasStateInherit": "Наследовать", - "ccAliasStateOn": "Вкл", - "ccAliasStateOff": "Выкл", - "ccAliasAddModelPlaceholder": "Добавить модель…", - "ccAliasAddModelButton": "Добавить", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Дополнительные заголовки upstream", @@ -6194,7 +6209,7 @@ "galadriel": "Подключите Galadriel с помощью API-ключа.", "predibase": "Бесплатный пробный баланс $25 (срок действия 30 дней)", "chenzk": "Совместимый с OpenAI шлюз с актуальным каталогом моделей на chenzk.top.", - "freepik": "Генерация изображений с помощью Freepik Mystic API.", + "magnific": "Генерация изображений с помощью Freepik Mystic API.", "freetheai": "Бесплатный совместимый с OpenAI шлюз с поддержкой сквозной передачи моделей (passthrough).", "g4f-gemini": "Бесплатный обратный прокси g4f.space без ключа к Gemini, лимит 5 запросов в минуту.", "g4f-groq": "Бесплатный обратный прокси g4f.space без ключа к Groq, лимит 5 запросов в минуту.", @@ -6209,6 +6224,7 @@ "claude": "Подключите Claude Code с помощью существующего процесса OAuth.", "cline": "Подключите Cline с помощью существующего процесса OAuth.", "cursor": "Подключите Cursor IDE с помощью существующего процесса OAuth.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Подключите GitHub Copilot с помощью существующего процесса OAuth.", "gitlab-duo": "Приложение OAuth с областями доступа (scopes) ai_features + read_user. Настройте GITLAB_DUO_OAUTH_CLIENT_ID и, при необходимости, GITLAB_DUO_OAUTH_CLIENT_SECRET на этом экземпляре OmniRoute.", "kilocode": "Подключите Kilo Code с помощью существующего процесса OAuth.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "В периоде ожидания", "codexPoolUsed": "использовано", "codexPoolUntil": "До {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Анонимный резервный вариант", "anonymousFallbackDesc": "Когда все настроенные соединения исчерпаны (квота, кредиты или срок действия), временно используйте безключевой уровень этого провайдера. Выключите, чтобы пропустить этого провайдера вместо отправки анонимных запросов — рекомендуется, когда безключевой уровень их отклоняет (401).", "anonymousFallbackEnabled": "Анонимный резервный вариант включен для {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Настройки конечной точки сохраненной модели", "searchByModelAria": "Поиск по модели", "selectSupportedEndpoint": "Выберите хотя бы одну поддерживаемую конечную точку", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Автоматическое получение модели из upstream отключено", - "autoFetchModels": "Автоматически получать модели из upstream", - "autoFetchModelsTooltip": "Получить и кэшировать модели upstream по мере необходимости", - "autoFetchModelsEnabled": "Включен автоматический выбор модели upstream", - "overridesUpstreamModel": "Переопределяет upstream", - "overridesUpstreamModelHint": "Ваши настройки переопределяют эту модель upstream", - "autoFetchModelsToggleFailed": "Не удалось переключить автоматическую выборку модели upstream", - "autoFetchModelsPartialFailure": "Некоторые соединения обновлены, но авто-загрузка модели upstream не была изменена везде", - "resetToUpstreamDefaults": "Восстановить настройки по умолчанию upstream", - "resetToUpstreamDefaultsFailed": "Не удалось восстановить значения по умолчанию для модели upstream", - "resetToUpstreamDefaultsSuccess": "Восстановлены настройки модели по умолчанию для upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Настройки", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Навсегда помечать соединения провайдера как отключённые, если они возвращают сигнал окончательной блокировки (например, HTTP 403 'verify your account'). Это убирает их из ротации комбо.", "autoDisableThreshold": "Порог блокировки", "autoDisableThresholdDesc": "Количество подряд идущих сигналов блокировки, необходимых перед постоянным отключением.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Запрещенные ключевые слова", "customBannedSignalsDesc": "Дополнительные ключевые слова, которые вызывают обнаружение постоянной блокировки аккаунта. Встроенные ключевые слова применяются всегда.", "customBannedSignalsPlaceholder": "например, api key revoked", @@ -7210,6 +7203,7 @@ "configured": "настроено", "none": "Нет", "modelOverrideValuePlaceholder": "Числовое значение", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Добавить ключ-значение", "noModelOverrides": "Для этой модели не настроено переопределений.", "modelOverrideLoadFailed": "Не удалось загрузить переопределения модели", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Краткий CJK (文言)", "description": "Ультракраткий классический китайский стиль (доступно только для китайского языка)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Комбинации Round-robin и Random переключаются на другое подключение при каждом запросе вместо привязки всего диалога к одному подключению по хэшу первого сообщения. Оставьте выключенным, чтобы сохранить попадания в кэш промптов для многоходовых чатов. Переопределения для конкретных комбинаций имеют приоритет.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Маскирование учетных данных", "credentialRedactionDesc": "Маскировать API-ключи, токены и секреты в контексте, отправляемом провайдерам, и в ответах.", "enableCredentialRedaction": "Включить маскирование учетных данных", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Включить движок", "enableDescription": "Запускается последним в стеке (после того как RTK/Caveman очищает текст, а OmniGlyph преобразует оставшуюся часть в изображения), а также работает автономно в режиме omniglyph. Это предварительная версия, которая остается отключенной по умолчанию до завершения сквозной проверки.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Сохранено.", "saveFailed": "Не удалось сохранить.", "enableAria": "Включить движок OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "макс", "grokAutoTopUpMonth": "месяц", "grokAdditionalCredits": "Дополнительные кредиты", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Регистратор", "proxyTab": "Прокси", "budgetManagement": "Управление бюджетом", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Первый токен", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index fbd89bef06..10bf077a43 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Vizualizácia časovej osi požiadaviek", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "otvorené", "close": "zatvoriť" }, - "noResults": "Žiadne výsledky", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Žiadne výsledky" }, "webhooks": { "title": "Webhooky", @@ -1739,8 +1739,8 @@ "quotaShare": "Zdieľanie kvóty", "discovery": "Objavovanie", "freeProviderRankings": "Bezplatné rebríčky poskytovateľov", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Bezplatné úrovne", "gamification": "Gamifikácia", "leaderboard": "Rebríček", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Podpora tohto poskytovateľa bola ukončená", "riskNotice": { "title": "Pred pokračovaním", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Poskytovateľ s obmedzeniami používania — kliknutím zobrazíte podrobnosti", "oauth": "Tento poskytovateľ používa vašu oficiálnu reláciu produktu/OAuth, ktorá nie je autorizovaná na použitie ako proxy/smerovač. Neodporúčame intenzívne používanie autonómnych agentov (v štýle OpenCloud, dlhé viacstupňové toky, veľké dávky) — upstream môže reagovať obmedzením alebo zablokovaním účtu. Používajte na vlastné riziko.", "webCookie": "Tento poskytovateľ sa autentifikuje prostredníctvom súborov cookie vašej webovej relácie. Služba upstream môže reláciu kedykoľvek zneplatniť, čo si vyžiada opätovné prihlásenie. Neodporúča sa pre dlhé operácie bez dozoru. Používajte na vlastné riziko.", @@ -5107,9 +5111,9 @@ "cancel": "Zrušiť" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Zakázané", "enableProvider": "Povoliť poskytovateľa", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Preskakujem {count} existujúcich modelov", "autoSync": "Automatická synchronizácia", "autoSyncShort": "Synchronizovať", + "autoFetchModels": "Automaticky načítať upstream modely", + "autoFetchModelsTooltip": "Načítajte a uložte upstream modely, keď je to potrebné", + "autoFetchModelsEnabled": "Automatické načítanie modelu upstream je povolené", + "autoFetchModelsDisabled": "Automatické načítanie modelu upstream je zakázané", + "autoFetchModelsToggleFailed": "Nepodarilo sa prepnúť automatické získavanie modelu upstream", + "autoFetchModelsPartialFailure": "Niektoré pripojenia boli aktualizované, ale automatické načítanie modelu upstream nebolo zmenené všade", + "overridesUpstreamModel": "Prepisuje upstream", + "overridesUpstreamModelHint": "Vaše nastavenia prepisujú tento upstream model", + "resetToUpstreamDefaults": "Obnoviť predvolené nastavenia upstream", + "resetToUpstreamDefaultsSuccess": "Obnovené predvolené nastavenia upstream modelu", + "resetToUpstreamDefaultsFailed": "Obnovenie predvolených nastavení modelu upstream zlyhalo", "autoSyncTooltip": "Automaticky obnovovať zoznam modelov každých 24 hodín (konfigurovateľné cez MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatická synchronizácia povolená – modely sa budú pravidelne obnovovať", "autoSyncDisabled": "Automatická synchronizácia je zakázaná", @@ -5439,17 +5454,17 @@ "interceptionLoadError": "Nepodarilo sa načítať nastavenia zachytávania: {error}", "interceptionSaveError": "Nepodarilo sa uložiť nastavenia zachytávania: {error}", "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "Inzerujte modely tohto poskytovateľa pod claude/<provider>/<model> zrkadlovými ID, aby mohol modelový objav brány Claude Code ich zoznamovať. Predvolene vypnuté — povolením sa zdvojnásobia záznamy v katalógu pre všetkých klientov.", - "ccAliasProviderLevelLabel": "Predvolený poskytovateľ", - "ccAliasModelOverridesLabel": "Pre každú modelovú výnimku", - "ccAliasModelOverrideAriaLabel": "Prepis pre {modelId}", - "ccAliasStateInherit": "Dedičstvo", - "ccAliasStateOn": "Na", - "ccAliasStateOff": "Vypnuté", - "ccAliasAddModelPlaceholder": "Model id (napr. gpt-4o)", - "ccAliasAddModelButton": "Pridať prepis", - "ccAliasLoadError": "Nepodarilo sa načítať nastavenia discovery-alias: {error}", - "ccAliasSaveError": "Nepodarilo sa uložiť nastavenie discovery-alias: {error}", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Pripojte Galadriel pomocou API kľúča.", "predibase": "Bezplatný skúšobný kredit 25 $ (platnosť 30 dní)", "chenzk": "Brána kompatibilná s OpenAI so živým katalógom modelov na chenzk.top.", - "freepik": "Generujte obrázky pomocou Mystic API od Freepik.", + "magnific": "Generujte obrázky pomocou Mystic API od Freepik.", "freetheai": "Bezplatná brána kompatibilná s OpenAI s podporou prenosu modelov (passthrough).", "g4f-gemini": "Bezplatný reverzný proxy server g4f.space bez kľúča pre Gemini, obmedzený na 5 požiadaviek za minútu.", "g4f-groq": "Bezplatný reverzný proxy server g4f.space bez kľúča pre Groq, obmedzený na 5 požiadaviek za minútu.", @@ -6209,6 +6224,7 @@ "claude": "Pripojte Claude Code pomocou existujúceho toku OAuth.", "cline": "Pripojte Cline pomocou existujúceho toku OAuth.", "cursor": "Pripojte Cursor IDE pomocou existujúceho toku OAuth.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Pripojte GitHub Copilot pomocou existujúceho toku OAuth.", "gitlab-duo": "Aplikácia OAuth s rozsahmi (scopes) ai_features + read_user. Nakonfigurujte GITLAB_DUO_OAUTH_CLIENT_ID a voliteľne GITLAB_DUO_OAUTH_CLIENT_SECRET na tejto inštancii OmniRoute.", "kilocode": "Pripojte Kilo Code pomocou existujúceho toku OAuth.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "V čakacej lehote", "codexPoolUsed": "využité", "codexPoolUntil": "Do {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonymný záložný systém", "anonymousFallbackDesc": "Keď sú všetky nakonfigurované pripojenia vyčerpané (kvóta, kredity alebo vypršanie platnosti), dočasne použite bezkľúčovú úroveň tohto poskytovateľa. Vypnite, aby ste preskočili tohto poskytovateľa namiesto odosielania anonymných požiadaviek — odporúča sa, keď bezkľúčová úroveň ich odmieta (401).", "anonymousFallbackEnabled": "Anonymný záložný režim povolený pre {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Nastavenia koncového bodu uloženého modelu", "searchByModelAria": "Hľadať podľa modelu", "selectSupportedEndpoint": "Vyberte aspoň jeden podporovaný koncový bod", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsEnabled": "Automatické načítanie modelu upstream je povolené", - "autoFetchModelsDisabled": "Automatické načítanie modelu upstream je zakázané", - "autoFetchModelsTooltip": "Načítajte a uložte upstream modely, keď je to potrebné", - "autoFetchModels": "Automaticky načítať upstream modely", - "overridesUpstreamModel": "Prepisuje upstream", - "autoFetchModelsToggleFailed": "Nepodarilo sa prepnúť automatické získavanie modelu upstream", - "overridesUpstreamModelHint": "Vaše nastavenia prepisujú tento upstream model", - "autoFetchModelsPartialFailure": "Niektoré pripojenia boli aktualizované, ale automatické načítanie modelu upstream nebolo zmenené všade", - "resetToUpstreamDefaultsSuccess": "Obnovené predvolené nastavenia upstream modelu", - "resetToUpstreamDefaults": "Obnoviť predvolené nastavenia upstream", - "resetToUpstreamDefaultsFailed": "Obnovenie predvolených nastavení modelu upstream zlyhalo" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Nastavenia", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Zakázané kľúčové slová", "customBannedSignalsDesc": "Ďalšie kľúčové slová, ktoré spúšťajú detekciu trvalého zablokovania účtu. Vstavané kľúčové slová platia vždy.", "customBannedSignalsPlaceholder": "napr. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "nakonfigurované", "none": "Žiadne", "modelOverrideValuePlaceholder": "Číselná hodnota", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Pridať kľúč – hodnotu", "noModelOverrides": "Pre tento model nie sú nakonfigurované žiadne prepísania.", "modelOverrideLoadFailed": "Nepodarilo sa načítať prepísania modelov", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Stručné CJK (文言)", "description": "Klasický čínsky ultra stručný štýl (dostupný len pre čínštinu)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Kombinácie round-robin a náhodného výberu sa pri každej požiadavke prepnú na iné pripojenie namiesto toho, aby celú konverzáciu priradili k jednému pripojeniu na základe hašu prvej správy. Ponechajte vypnuté, ak chcete zachovať zásahy do vyrovnávacej pamäte promptov (prompt-cache) pre viacúrovňové chaty. Prepísania pre jednotlivé kombinácie majú prednosť.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Maskovanie prihlasovacích údajov", "credentialRedactionDesc": "Maskovať API kľúče, tokeny a tajné kľúče v kontexte odosielanom poskytovateľom a v odpovediach.", "enableCredentialRedaction": "Enable credential redaction", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Povoliť engine", "enableDescription": "Spúšťa sa ako posledný v stacku (po tom, čo RTK/Caveman vyčistí text, OmniGlyph skonvertuje zvyšok na obrázky) a funguje aj samostatne v režime omniglyph. Toto je predbežná verzia a predvolene zostáva vypnutá, kým sa nedokončí end-to-end validácia.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Uložené.", "saveFailed": "Nepodarilo sa uložiť.", "enableAria": "Povoliť engine OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "mesiac", "grokAdditionalCredits": "Ďalšie kredity", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Správa rozpočtu", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Prvý token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 75b165386a..46f53972d7 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Visuell begäran tidslinje", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "öppna", "close": "stäng" }, - "noResults": "Inga resultat", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Inga resultat" }, "webhooks": { "title": "Webhooks", @@ -1739,8 +1739,8 @@ "quotaShare": "Kvotandel", "discovery": "Upptäckt", "freeProviderRankings": "Rankning av gratisleverantörer", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Gratisnivåer", "gamification": "Spelifiering", "leaderboard": "Topplista", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Denna leverantör har fasats ut", "riskNotice": { "title": "Innan du fortsätter", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Leverantör med användningsförbehåll — klicka för detaljer", "oauth": "Denna leverantör använder din officiella produktsession/OAuth, vilket inte är godkänt för proxy-/routeranvändning. Vi rekommenderar inte intensiv användning av autonoma agenter (OpenCloud-stil, långa flerstegsflöden, stora batcher) — uppströmsleverantören kan reagera genom att begränsa eller stänga av kontot. Används på egen risk.", "webCookie": "Denna leverantör autentiserar via dina webbsessionscookies. Uppströmstjänsten kan ogiltigförklara sessionen när som helst, vilket kräver att du loggar in igen. Rekommenderas inte för långa obevakade körningar. Används på egen risk.", @@ -5107,9 +5111,9 @@ "cancel": "Avbryt" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Inaktiverad", "enableProvider": "Aktivera leverantör", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Hoppar över {count} befintliga modeller", "autoSync": "Automatisk synkronisering", "autoSyncShort": "Synkronisera", + "autoFetchModels": "Automatiskt hämta upstream-modeller", + "autoFetchModelsTooltip": "Hämta och cacha upstream-modeller vid behov", + "autoFetchModelsEnabled": "Automatisk hämtning av upstream-modell aktiverad", + "autoFetchModelsDisabled": "Automatisk hämtning av upstream-modell inaktiverad", + "autoFetchModelsToggleFailed": "Misslyckades med att växla upstream-modellens automatisk hämtning", + "autoFetchModelsPartialFailure": "Vissa anslutningar har uppdaterats, men upstream-modellens automatisk hämtning ändrades inte överallt", + "overridesUpstreamModel": "Överskrider upstream", + "overridesUpstreamModelHint": "Dina inställningar åsidosätter denna upstream-modell", + "resetToUpstreamDefaults": "Återställ upstream-standarder", + "resetToUpstreamDefaultsSuccess": "Återställda standardinställningar för upstream-modellen", + "resetToUpstreamDefaultsFailed": "Misslyckades med att återställa standardinställningar för upstream-modellen", "autoSyncTooltip": "Uppdatera modelllistan automatiskt var 24:e timme (konfigurerbar via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Automatisk synkronisering aktiverad — modeller uppdateras regelbundet", "autoSyncDisabled": "Automatisk synkronisering inaktiverad", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Skriv om inbyggda web_fetch-verktygsanrop till OmniRoutes /v1/web/fetch.", "interceptionLoadError": "Kunde inte läsa in inställningar för interception: {error}", "interceptionSaveError": "Kunde inte spara inställningar för interception: {error}", - "ccAliasSectionTitle": "Exponera i Claude Code (claude/…)", - "ccAliasSectionHint": "Reklamera denna leverantörs modeller under claude/<provider>/<model> spegel-id så att Claude Codes gateway-modellupptäckten kan lista dem. Avstängd som standard — att aktivera detta dubblar katalogposterna för alla klienter.", - "ccAliasProviderLevelLabel": "Leverantör standard", - "ccAliasModelOverridesLabel": "Per-modell överskrivningar", - "ccAliasModelOverrideAriaLabel": "Överskrivning för {modelId}", - "ccAliasStateInherit": "Ärv", - "ccAliasStateOn": "På", - "ccAliasStateOff": "Av", - "ccAliasAddModelPlaceholder": "Modell-id (t.ex. gpt-4o)", - "ccAliasAddModelButton": "Lägg till överskrivning", - "ccAliasLoadError": "Misslyckades med att ladda discovery-alias-inställningar: {error}", - "ccAliasSaveError": "Misslyckades med att spara inställningen för discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Anslut Galadriel med en API-nyckel.", "predibase": "$25 i gratis provkrediter (30 dagars giltighet)", "chenzk": "OpenAI-kompatibel gateway med en live-modellkatalog på chenzk.top.", - "freepik": "Generera bilder med Freepiks Mystic API.", + "magnific": "Generera bilder med Freepiks Mystic API.", "freetheai": "Gratis OpenAI-kompatibel gateway med stöd för passthrough-modeller.", "g4f-gemini": "Gratis nyckelfri g4f.space reverse proxy till Gemini, begränsad till 5 anrop per minut.", "g4f-groq": "Gratis nyckelfri g4f.space reverse proxy till Groq, begränsad till 5 anrop per minut.", @@ -6209,6 +6224,7 @@ "claude": "Anslut Claude Code med det befintliga OAuth-flödet.", "cline": "Anslut Cline med det befintliga OAuth-flödet.", "cursor": "Anslut Cursor IDE med det befintliga OAuth-flödet.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Anslut GitHub Copilot med det befintliga OAuth-flödet.", "gitlab-duo": "OAuth-applikation med ai_features + read_user-omfång. Konfigurera GITLAB_DUO_OAUTH_CLIENT_ID och valfritt GITLAB_DUO_OAUTH_CLIENT_SECRET på denna OmniRoute-instans.", "kilocode": "Anslut Kilo Code med det befintliga OAuth-flödet.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "I vänteperiod", "codexPoolUsed": "använt", "codexPoolUntil": "Till {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonym fallback", "anonymousFallbackDesc": "När alla konfigurerade anslutningar är uttömda (kvot, krediter eller utgång), använd tillfälligt denna leverantörs nyckellösa nivå. Stäng av för att hoppa över denna leverantör istället för att skicka anonyma förfrågningar — rekommenderas när den nyckellösa nivån avvisar dem (401).", "anonymousFallbackEnabled": "Anonym fallback aktiverad för {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Inställningar för sparad modellslutpunkt", "searchByModelAria": "Sök efter modell", "selectSupportedEndpoint": "Välj minst en stödd slutpunkt", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Automatiskt hämta upstream-modeller", - "autoFetchModelsDisabled": "Automatisk hämtning av upstream-modell inaktiverad", - "autoFetchModelsEnabled": "Automatisk hämtning av upstream-modell aktiverad", - "autoFetchModelsTooltip": "Hämta och cacha upstream-modeller vid behov", - "overridesUpstreamModel": "Överskrider upstream", - "autoFetchModelsToggleFailed": "Misslyckades med att växla upstream-modellens automatisk hämtning", - "autoFetchModelsPartialFailure": "Vissa anslutningar har uppdaterats, men upstream-modellens automatisk hämtning ändrades inte överallt", - "overridesUpstreamModelHint": "Dina inställningar åsidosätter denna upstream-modell", - "resetToUpstreamDefaults": "Återställ upstream-standarder", - "resetToUpstreamDefaultsSuccess": "Återställda standardinställningar för upstream-modellen", - "resetToUpstreamDefaultsFailed": "Misslyckades med att återställa standardinställningar för upstream-modellen" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Inställningar", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Spärrade nyckelord", "customBannedSignalsDesc": "Ytterligare nyckelord som utlöser upptäckt av permanent kontoavstängning. Inbyggda nyckelord gäller alltid.", "customBannedSignalsPlaceholder": "t.ex. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "konfigurerad", "none": "Ingen", "modelOverrideValuePlaceholder": "Numeriskt värde", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Lägg till nyckelvärde", "noModelOverrides": "Inga åsidosättningar har konfigurerats för denna modell.", "modelOverrideLoadFailed": "Det gick inte att läsa in modellåsidosättningar", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Kortfattad CJK (文言)", "description": "Klassisk kinesisk ultrakortfattad stil (endast tillgänglig för kinesiska)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin- och slumpmässiga kombinationer roterar till en annan anslutning vid varje anrop istället för att fästa en hel konversation vid en anslutning baserat på hashen för det första meddelandet. Lämna inaktiverat för att bevara prompt-cache-träffar för flerstegschattar. Inställningar per kombination har företräde.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Maskering av autentiseringsuppgifter", "credentialRedactionDesc": "Maskera API-nycklar, tokens och hemligheter från kontext som skickas till leverantörer och från svar.", "enableCredentialRedaction": "Aktivera maskering av autentiseringsuppgifter", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Aktivera motorn", "enableDescription": "Körs sist i stacken (efter att RTK/Caveman rensar texten konverterar OmniGlyph resten till bilder) och körs även fristående via omniglyph-läge. Detta är en förhandsgranskning och förblir inaktiverad som standard tills end-to-end-valideringen är slutförd.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Sparat.", "saveFailed": "Kunde inte spara.", "enableAria": "Aktivera OmniGlyph-motorn", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "månad", "grokAdditionalCredits": "Ytterligare Krediter", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budgethantering", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Första token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json index 15f8f0e290..12d19b28c1 100644 --- a/src/i18n/messages/sw.json +++ b/src/i18n/messages/sw.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Muda wa ombi la kuona", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "fungua", "close": "funga" }, - "noResults": "Hakuna matokeo", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Hakuna matokeo" }, "webhooks": { "title": "Viboko vya mtandao", @@ -1739,8 +1739,8 @@ "quotaShare": "Mgao wa Quota", "discovery": "Ugunduzi", "freeProviderRankings": "Nafasi za Watoa Huduma Bila Malipo", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Viwango vya Bila Malipo", "gamification": "Uchezeshaji", "leaderboard": "Ubao wa Wanaoongoza", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Mtoa huduma huyu ameacha kutumika", "riskNotice": { "title": "Kabla ya kuendelea", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Mtoa huduma aliye na tahadhari za matumizi — bofya kwa maelezo zaidi", "oauth": "Mtoa huduma huyu anatumia kipindi chako rasmi cha bidhaa/OAuth, ambacho hakijaidhinishwa kwa matumizi ya proksi/ruta. Hatupendekezi matumizi makubwa ya ejenti inayojitegemea (mtindo wa OpenCloud, mtiririko mrefu wa hatua nyingi, makundi makubwa) — upstream inaweza kuchukua hatua kwa kuzuia au kupiga marufuku akaunti. Tumia kwa hatari yako mwenyewe.", "webCookie": "Mtoa huduma huyu anathibitisha kupitia kuki za kipindi chako cha wavuti. Huduma ya upstream inaweza kubatilisha kipindi wakati wowote, ikikuhitaji uingie tena. Haipendekezwi kwa shughuli ndefu zisizosimamiwa. Tumia kwa hatari yako mwenyewe.", @@ -5107,9 +5111,9 @@ "cancel": "Ghairi" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "Pata modeli za upstream kiotomatiki", + "autoFetchModelsTooltip": "Pata na kuhifadhi mifano ya juu inapohitajika", + "autoFetchModelsEnabled": "Mfano wa upstream auto-fetch umewezeshwa", + "autoFetchModelsDisabled": "Mfano wa upstream auto-fetch umezimwa", + "autoFetchModelsToggleFailed": "Imeshindikana kubadilisha hali ya upakuaji wa mfano wa juu.", + "autoFetchModelsPartialFailure": "Baadhi ya muunganisho yameboreshwa, lakini mfano wa juu wa auto-fetch haukubadilishwa kila mahali", + "overridesUpstreamModel": "Inazidi mwelekeo wa juu", + "overridesUpstreamModelHint": "Mipangilio yako inakataa mfano huu wa juu", + "resetToUpstreamDefaults": "Rejesha mipangilio ya msingi ya upstream", + "resetToUpstreamDefaultsSuccess": "Imerejeshwa mipangilio ya mfano wa upstream", + "resetToUpstreamDefaultsFailed": "Imeshindikana kurejesha mipangilio ya msingi ya upstream", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Andika upya simu za zana asili za web_fetch kwenda kwenye /v1/web/fetch ya OmniRoute.", "interceptionLoadError": "Imeshindwa kupakia mipangilio ya uzuiaji: {error}", "interceptionSaveError": "Imeshindwa kuhifadhi mipangilio ya uzuiaji: {error}", - "ccAliasSectionTitle": "Fichua katika Claude Code (claude/…)", - "ccAliasSectionHint": "Tangaza mifano ya mtoa huduma huyu chini ya claude/<provider>/<model> vitambulisho vya kioo ili kugundua mifano ya lango la Claude Code. Imezimwa kwa default — kuwezesha hii kunaongeza mara mbili orodha za katalogi kwa wateja wote.", - "ccAliasProviderLevelLabel": "Mtoa huduma wa kawaida", - "ccAliasModelOverridesLabel": "Mabadiliko ya kila mfano", - "ccAliasModelOverrideAriaLabel": "Kuzidisha kwa {modelId}", - "ccAliasStateInherit": "Rithi", - "ccAliasStateOn": "Juu", - "ccAliasStateOff": "Zimezimwa", - "ccAliasAddModelPlaceholder": "Kitambulisho cha mfano (mfano: gpt-4o)", - "ccAliasAddModelButton": "Ongeza urekebishaji", - "ccAliasLoadError": "Imeshindikana kupakia mipangilio ya discovery-alias: {error}", - "ccAliasSaveError": "Imeshindikana kuhifadhi mipangilio ya discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Unganisha Galadriel kwa ufunguo wa API.", "predibase": "Salio la majaribio ya bure la $25 (uhalali wa siku 30)", "chenzk": "Lango linalooana na OpenAI lenye orodha ya miundo ya moja kwa moja kwenye chenzk.top.", - "freepik": "Zalisha picha kwa kutumia Mystic API ya Freepik.", + "magnific": "Zalisha picha kwa kutumia Mystic API ya Freepik.", "freetheai": "Lango la bure linalooana na OpenAI lenye usaidizi wa miundo ya passthrough.", "g4f-gemini": "Reverse proxy ya bure isiyo na ufunguo ya g4f.space kwenda Gemini, yenye kikomo cha maombi 5 kwa dakika.", "g4f-groq": "Reverse proxy ya bure isiyo na ufunguo ya g4f.space kwenda Groq, yenye kikomo cha maombi 5 kwa dakika.", @@ -6209,6 +6224,7 @@ "claude": "Unganisha Claude Code kwa mtiririko uliopo wa OAuth.", "cline": "Unganisha Cline kwa mtiririko uliopo wa OAuth.", "cursor": "Unganisha Cursor IDE kwa mtiririko uliopo wa OAuth.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Unganisha GitHub Copilot kwa mtiririko uliopo wa OAuth.", "gitlab-duo": "Programu ya OAuth yenye upeo wa ai_features + read_user. Sanidi GITLAB_DUO_OAUTH_CLIENT_ID na kwa hiari GITLAB_DUO_OAUTH_CLIENT_SECRET kwenye instansi hii ya OmniRoute.", "kilocode": "Unganisha Kilo Code kwa mtiririko uliopo wa OAuth.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Katika kipindi cha kusubiri", "codexPoolUsed": "imetumika", "codexPoolUntil": "Hadi {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Kurejea kwa Kijakazi", "anonymousFallbackDesc": "Wakati muunganisho wote uliowekwa umepita (kikomo, mikopo, au muda wa kumalizika), tumia muda huu kiwango kisicho na funguo cha mtoa huduma huyu. Zima ili kupuuza mtoa huduma huyu badala ya kutuma maombi yasiyo na utambulisho — inapendekezwa wakati kiwango kisicho na funguo kinapokataa maombi hayo (401).", "anonymousFallbackEnabled": "Fallback isiyojulikana imewezeshwa kwa {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Mipangilio ya mwisho wa mfano uliohifadhiwa", "searchByModelAria": "Tafuta kwa mfano", "selectSupportedEndpoint": "Chagua angalau kiunganishi kimoja kinachoungwa mkono", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsEnabled": "Mfano wa upstream auto-fetch umewezeshwa", - "autoFetchModelsDisabled": "Mfano wa upstream auto-fetch umezimwa", - "autoFetchModels": "Pata modeli za upstream kiotomatiki", - "autoFetchModelsTooltip": "Pata na kuhifadhi mifano ya juu inapohitajika", - "autoFetchModelsToggleFailed": "Imeshindikana kubadilisha hali ya upakuaji wa mfano wa juu.", - "autoFetchModelsPartialFailure": "Baadhi ya muunganisho yameboreshwa, lakini mfano wa juu wa auto-fetch haukubadilishwa kila mahali", - "overridesUpstreamModelHint": "Mipangilio yako inakataa mfano huu wa juu", - "overridesUpstreamModel": "Inazidi mwelekeo wa juu", - "resetToUpstreamDefaults": "Rejesha mipangilio ya msingi ya upstream", - "resetToUpstreamDefaultsSuccess": "Imerejeshwa mipangilio ya mfano wa upstream", - "resetToUpstreamDefaultsFailed": "Imeshindikana kurejesha mipangilio ya msingi ya upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Maneno Muhimu Yaliyopigwa Marufuku", "customBannedSignalsDesc": "Maneno muhimu ya ziada yanayosababisha ugunduzi wa kupigwa marufuku kwa akaunti kabisa. Maneno muhimu yaliyojengwa ndani hutumika kila wakati.", "customBannedSignalsPlaceholder": "k.m. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "imesanidiwa", "none": "Hakuna", "modelOverrideValuePlaceholder": "Thamani ya nambari", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Ongeza thamani ya ufunguo", "noModelOverrides": "Hakuna ubatilishaji uliosanidiwa kwa modeli hii.", "modelOverrideLoadFailed": "Imeshindwa kupakia ubatilishaji wa modeli", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK Fupi (文言)", "description": "Mtindo mfupi zaidi wa Kichina cha Kale (inapatikana kwa Kichina pekee)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Mchanganyiko wa round-robin na bila mpangilio huzunguka hadi kwenye muunganisho tofauti kwa kila ombi badala ya kubandika mazungumzo yote kwenye muunganisho mmoja kwa heshi ya ujumbe wa kwanza. Acha ikiwa imezimwa ili kuhifadhi matokeo ya prompt-cache kwa mazungumzo ya zamu nyingi. Ubatilishaji wa kila mchanganyiko una kipaumbele.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Ufichaji wa Vitambulisho", "credentialRedactionDesc": "Ficha funguo za API, tokeni, na siri kutoka kwa muktadha uliotumwa kwa watoa huduma na kutoka kwa majibu.", "enableCredentialRedaction": "Washa ufichaji wa vitambulisho", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Wezesha injini", "enableDescription": "Hufanya kazi mwisho kwenye mrundikano (baada ya RTK/Caveman kusafisha maandishi, OmniGlyph hubadilisha yaliyosalia kuwa picha) na pia hufanya kazi pekee kupitia hali ya omniglyph. Hii ni hakiki na inabaki imezimwa kwa chaguomsingi hadi uthibitishaji wa mwisho hadi mwisho ukamilike.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Imehifadhiwa.", "saveFailed": "Imeshindwa kuhifadhi.", "enableAria": "Wezesha injini ya OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "max", "grokAutoTopUpMonth": "mwezi", "grokAdditionalCredits": "Mikopo Ya Ziada", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Tokeni ya Kwanza", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json index d9bb96f0f4..2e80cf7f22 100644 --- a/src/i18n/messages/ta.json +++ b/src/i18n/messages/ta.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "காட்சி கோரிக்கை காலக்கெடு", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "திறக்கவும்", "close": "மூடு" }, - "noResults": "எந்த முடிவுகளும் இல்லை", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "எந்த முடிவுகளும் இல்லை" }, "webhooks": { "title": "வெப்ஹூக்ஸ்", @@ -1739,8 +1739,8 @@ "quotaShare": "ஒதுக்கீட்டுப் பகிர்வு", "discovery": "கண்டறிதல்", "freeProviderRankings": "இலவச வழங்குநர் தரவரிசை", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "இலவச அடுக்குகள்", "gamification": "கேமிஃபிகேஷன்", "leaderboard": "லீடர்போர்டு", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "இந்த வழங்குநர் நிராகரிக்கப்பட்டார்", "riskNotice": { "title": "தொடர்வதற்கு முன்", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "பயன்பாட்டு எச்சரிக்கைகளைக் கொண்ட வழங்குநர் — விவரங்களுக்கு கிளிக் செய்யவும்", "oauth": "இந்த வழங்குநர் உங்களது அதிகாரப்பூர்வ தயாரிப்பு அமர்வு/OAuth ஐப் பயன்படுத்துகிறார், இது ப்ராக்ஸி/ரவுட்டர் பயன்பாட்டிற்கு அங்கீகரிக்கப்படவில்லை. தீவிரமான தன்னாட்சி முகவர் பயன்பாட்டை (OpenCloud-பாணி, நீண்ட பல-படி ஓட்டங்கள், பெரிய தொகுதிகள்) நாங்கள் பரிந்துரைக்கவில்லை — அப்ஸ்ட்ரீம் கணக்கைக் கட்டுப்படுத்துவதன் மூலமோ அல்லது தடை செய்வதன் மூலமோ எதிர்வினையாற்றலாம். உங்கள் சொந்த பொறுப்பில் பயன்படுத்தவும்.", "webCookie": "இந்த வழங்குநர் உங்கள் வலை அமர்வு குக்கீகள் மூலம் அங்கீகரிக்கிறார். அப்ஸ்ட்ரீம் சேவை எந்த நேரத்திலும் அமர்வை செல்லாததாக்கலாம், இதனால் நீங்கள் மீண்டும் உள்நுழைய வேண்டியிருக்கும். நீண்ட கவனிக்கப்படாத செயல்பாடுகளுக்கு பரிந்துரைக்கப்படவில்லை. உங்கள் சொந்த பொறுப்பில் பயன்படுத்தவும்.", @@ -5107,9 +5111,9 @@ "cancel": "ரத்துசெய்" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "உயர்தர மாதிரிகளை தானாகப் பெறவும்", + "autoFetchModelsTooltip": "தேவையான போது மேல்நிலை மாதிரிகளை பெறவும் மற்றும் கச்சே செய்யவும்", + "autoFetchModelsEnabled": "மேல்நிலை மாதிரி தானாகப் பெறுதல் செயல்படுத்தப்பட்டது", + "autoFetchModelsDisabled": "மேல்நிலை மாதிரி தானாகப் பெறுதல் முடக்கப்பட்டது", + "autoFetchModelsToggleFailed": "மேல்தர மாதிரி தானாகப் பெறுதலை மாற்ற முடியவில்லை", + "autoFetchModelsPartialFailure": "சில இணைப்புகள் புதுப்பிக்கப்பட்டன, ஆனால் மேல்மட்ட மாதிரி தானாகப் பெறுதல் எங்கும் மாற்றப்படவில்லை", + "overridesUpstreamModel": "மேல்நிலை மாற்றங்கள்", + "overridesUpstreamModelHint": "உங்கள் அமைப்புகள் இந்த மேல்மட்ட மாதிரியை மீறுகின்றன", + "resetToUpstreamDefaults": "முதன்மை இயல்புகளை மீட்டமைக்கவும்", + "resetToUpstreamDefaultsSuccess": "மீட்டமைக்கப்பட்ட மேல்நிலை மாதிரி இயல்புகள்", + "resetToUpstreamDefaultsFailed": "மேல்நிலை மாதிரி இயல்புகளை மீட்டெடுக்க முடியவில்லை", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "சொந்த web_fetch கருவி அழைப்புகளை OmniRoute இன் /v1/web/fetch க்கு மீண்டும் எழுதவும்.", "interceptionLoadError": "இடைமறிப்பு அமைப்புகளை ஏற்றுவதில் தோல்வி: {error}", "interceptionSaveError": "இடைமறிப்பு அமைப்புகளைச் சேமிப்பதில் தோல்வி: {error}", - "ccAliasSectionTitle": "Claude Code-ல் வெளிப்படுத்தவும் (claude/…)", - "ccAliasSectionHint": "இந்த வழங்குநரின் மாதிரிகளை claude/<provider>/<model> மிரர் அடையாளங்களின் கீழ் விளம்பரம் செய்யவும், எனவே Claude Code இன் கேட்வே மாதிரி கண்டுபிடிப்பு அவற்றைப் பட்டியலிடலாம். இயல்பாக அண்மையில் отключено — இதை இயக்குவது அனைத்து கிளையன்டுகளுக்கான பட்டியல் பதிவுகளை இரட்டிப்பாக்குகிறது.", - "ccAliasProviderLevelLabel": "முதன்மை வழங்குநர்", - "ccAliasModelOverridesLabel": "மாதிரி அடிப்படையில் மீறல்கள்", - "ccAliasModelOverrideAriaLabel": "{modelId} க்கான மீறல்", - "ccAliasStateInherit": "மரபு", - "ccAliasStateOn": "இல்", - "ccAliasStateOff": "ஆஃப்", - "ccAliasAddModelPlaceholder": "மாதிரி ஐடி (எடுத்துக்காட்டு: gpt-4o)", - "ccAliasAddModelButton": "மீட்டமைப்பு சேர்க்கவும்", - "ccAliasLoadError": "கண்டுபிடிப்பு-அலியாஸ் அமைப்புகளை ஏற்றுவதில் தோல்வி: {error}", - "ccAliasSaveError": "கண்டுபிடிப்பு-அலியாஸ் அமைப்பை சேமிக்க முடியவில்லை: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "API key மூலம் Galadriel-ஐ இணைக்கவும்.", "predibase": "$25 இலவச சோதனை கிரெடிட்கள் (30 நாள் செல்லுபடியாகும்)", "chenzk": "chenzk.top இல் நேரடி மாடல் பட்டியலுடன் கூடிய OpenAI-இணக்கமான gateway.", - "freepik": "Freepik-இன் Mystic API மூலம் படங்களை உருவாக்கவும்.", + "magnific": "Freepik-இன் Mystic API மூலம் படங்களை உருவாக்கவும்.", "freetheai": "passthrough மாடல் ஆதரவுடன் கூடிய இலவச OpenAI-இணக்கமான gateway.", "g4f-gemini": "Gemini-க்கான இலவச key இல்லாத g4f.space reverse proxy, நிமிடத்திற்கு 5 கோரிக்கைகள் என வரம்பிடப்பட்டுள்ளது.", "g4f-groq": "Groq-க்கான இலவச key இல்லாத g4f.space reverse proxy, நிமிடத்திற்கு 5 கோரிக்கைகள் என வரம்பிடப்பட்டுள்ளது.", @@ -6209,6 +6224,7 @@ "claude": "ஏற்கனவே உள்ள OAuth flow மூலம் Claude Code-ஐ இணைக்கவும்.", "cline": "ஏற்கனவே உள்ள OAuth flow மூலம் Cline-ஐ இணைக்கவும்.", "cursor": "ஏற்கனவே உள்ள OAuth flow மூலம் Cursor IDE-ஐ இணைக்கவும்.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "ஏற்கனவே உள்ள OAuth flow மூலம் GitHub Copilot-ஐ இணைக்கவும்.", "gitlab-duo": "ai_features + read_user scopes கொண்ட OAuth பயன்பாடு. இந்த OmniRoute instance-இல் GITLAB_DUO_OAUTH_CLIENT_ID மற்றும் விருப்பத்தேர்வாக GITLAB_DUO_OAUTH_CLIENT_SECRET-ஐ உள்ளமைக்கவும்.", "kilocode": "ஏற்கனவே உள்ள OAuth flow மூலம் Kilo Code-ஐ இணைக்கவும்.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "காத்திருப்பு காலத்தில் உள்ளது", "codexPoolUsed": "பயன்படுத்தப்பட்டது", "codexPoolUntil": "{value} வரை", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "அறியப்படாத மாற்று", "anonymousFallbackDesc": "எல்லா கட்டமைக்கப்பட்ட இணைப்புகள் முடிந்தால் (கோட்டா, கிரெடிட்கள், அல்லது காலாவதி), இந்த வழங்குநரின் விசையில்லா நிலையை தற்காலிகமாக பயன்படுத்தவும். இந்த வழங்குநரை தவிர்க்க மாறி அனான்மா கோரிக்கைகளை அனுப்பாமல் выключить செய்யவும் — விசையில்லா நிலை அவற்றை நிராகரிக்கும் போது (401) பரிந்துரைக்கப்படுகிறது.", "anonymousFallbackEnabled": "{provider} க்கான அங்கீகாரம் இல்லாத மாற்று செயல்படுத்தப்பட்டது", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "சேமிக்கப்பட்ட மாதிரி முடிவுறுப்பு அமைப்புகள்", "searchByModelAria": "மாதிரியில் தேடு", "selectSupportedEndpoint": "குறைந்தது ஒரு ஆதரிக்கப்படும் முடிவுகளைத் தேர்ந்தெடுக்கவும்", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsTooltip": "தேவையான போது மேல்நிலை மாதிரிகளை பெறவும் மற்றும் கச்சே செய்யவும்", - "autoFetchModelsDisabled": "மேல்நிலை மாதிரி தானாகப் பெறுதல் முடக்கப்பட்டது", - "autoFetchModels": "உயர்தர மாதிரிகளை தானாகப் பெறவும்", - "autoFetchModelsEnabled": "மேல்நிலை மாதிரி தானாகப் பெறுதல் செயல்படுத்தப்பட்டது", - "overridesUpstreamModel": "மேல்நிலை மாற்றங்கள்", - "autoFetchModelsPartialFailure": "சில இணைப்புகள் புதுப்பிக்கப்பட்டன, ஆனால் மேல்மட்ட மாதிரி தானாகப் பெறுதல் எங்கும் மாற்றப்படவில்லை", - "autoFetchModelsToggleFailed": "மேல்தர மாதிரி தானாகப் பெறுதலை மாற்ற முடியவில்லை", - "overridesUpstreamModelHint": "உங்கள் அமைப்புகள் இந்த மேல்மட்ட மாதிரியை மீறுகின்றன", - "resetToUpstreamDefaults": "முதன்மை இயல்புகளை மீட்டமைக்கவும்", - "resetToUpstreamDefaultsSuccess": "மீட்டமைக்கப்பட்ட மேல்நிலை மாதிரி இயல்புகள்", - "resetToUpstreamDefaultsFailed": "மேல்நிலை மாதிரி இயல்புகளை மீட்டெடுக்க முடியவில்லை" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "தடைசெய்யப்பட்ட முக்கிய வார்த்தைகள்", "customBannedSignalsDesc": "நிரந்தரக் கணக்குத் தடை கண்டறிதலைத் தூண்டும் கூடுதல் முக்கிய வார்த்தைகள். உள்ளமைக்கப்பட்ட முக்கிய வார்த்தைகள் எப்போதும் பொருந்தும்.", "customBannedSignalsPlaceholder": "எ.கா. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "கட்டமைக்கப்பட்டது", "none": "ஏதுமில்லை", "modelOverrideValuePlaceholder": "எண் மதிப்பு", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "விசை மதிப்பைச் சேர்", "noModelOverrides": "இந்த மாதிரிக்கு மேலெழுதல்கள் எதுவும் கட்டமைக்கப்படவில்லை.", "modelOverrideLoadFailed": "மாதிரி மேலெழுதல்களை ஏற்றுவதில் தோல்வி", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "சுருக்கமான CJK (文言)", "description": "செம்மொழி-சீன மிகச் சுருக்கமான நடை (சீன மொழிக்கு மட்டுமே கிடைக்கும்)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "முதல்-செய்தி ஹாஷ் மூலம் முழு உரையாடலையும் ஒரே இணைப்பில் நிலைநிறுத்துவதற்குப் பதிலாக, Round-robin மற்றும் random சேர்க்கைகள் ஒவ்வொரு கோரிக்கையிலும் வேறுபட்ட இணைப்புக்கு மாறுகின்றன. பல-முறை அரட்டைகளுக்கான prompt-cache ஹிட்களைப் பாதுகாக்க இதை முடக்கியே வைக்கவும். Per-combo மேலெழுதல்களுக்கு முன்னுரிமை உண்டு.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "கிரெடென்ஷியல் மறைத்தல்", "credentialRedactionDesc": "வழங்குநர்களுக்கு அனுப்பப்படும் சூழல் மற்றும் பதில்களில் இருந்து API விசைகள், டோக்கன்கள் மற்றும் ரகசியங்களை மறைக்கவும்.", "enableCredentialRedaction": "கிரெடென்ஷியல் மறைத்தலை இயக்கு", @@ -8621,6 +8623,27 @@ }, "enableTitle": "இயந்திரத்தை இயக்கு", "enableDescription": "அடுக்கில் கடைசியாக இயங்குகிறது (RTK/Caveman உரையைச் சுத்தப்படுத்திய பிறகு, OmniGlyph எஞ்சியிருப்பதை படங்களாக மாற்றுகிறது) மேலும் omniglyph பயன்முறை மூலமாகவும் தனித்து இயங்குகிறது. இது ஒரு முன்னோட்டமாகும், மேலும் இறுதி-முதல்-இறுதி சரிபார்ப்பு முடியும் வரை இயல்பாகவே முடக்கப்பட்டிருக்கும்.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "சேமிக்கப்பட்டது.", "saveFailed": "சேமிக்க முடியவில்லை.", "enableAria": "OmniGlyph இயந்திரத்தை இயக்கு", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "அதிகतम", "grokAutoTopUpMonth": "மாதம்", "grokAdditionalCredits": "கூடுதல் நிதிகள்", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "முதல் டோக்கன்", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json index 58688a4858..73032e0d13 100644 --- a/src/i18n/messages/te.json +++ b/src/i18n/messages/te.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "దృశ్య అభ్యర్థన కాలరేఖ", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "తిరిగి తెరువు", "close": "మూసివేయండి" }, - "noResults": "ఫలితాలు లేవు", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "ఫలితాలు లేవు" }, "webhooks": { "title": "వెబ్‌బూక్స్", @@ -1739,8 +1739,8 @@ "quotaShare": "కోటా షేర్", "discovery": "అన్వేషణ", "freeProviderRankings": "ఉచిత ప్రొవైడర్ ర్యాంకింగ్‌లు", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "ఉచిత శ్రేణులు", "gamification": "గేమిఫికేషన్", "leaderboard": "లీడర్‌బోర్డ్", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "ఈ ప్రొవైడర్ నిలిపివేయబడింది", "riskNotice": { "title": "కొనసాగడానికి ముందు", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "వినియోగ హెచ్చరికలు ఉన్న ప్రొవైడర్ — వివరాల కోసం క్లిక్ చేయండి", "oauth": "ఈ ప్రొవైడర్ మీ అధికారిక ప్రోడక్ట్ సెషన్/OAuthని ఉపయోగిస్తుంది, ఇది ప్రాక్సీ/రూటర్ వినియోగానికి అనుమతించబడలేదు. మేము తీవ్రమైన అటానమస్ ఏజెంట్ వినియోగాన్ని (OpenCloud-శైలి, సుదీర్ఘ బహుళ-దశల ఫ్లోలు, పెద్ద బ్యాచ్‌లు) సిఫార్సు చేయము — అప్‌స్ట్రీమ్ ఖాతాను పరిమితం చేయడం లేదా నిషేధించడం ద్వారా ప్రతిస్పందించవచ్చు. మీ స్వంత పూచీకత్తుపై ఉపయోగించండి.", "webCookie": "ఈ ప్రొవైడర్ మీ వెబ్ సెషన్ కుకీల ద్వారా ప్రామాణీకరిస్తుంది. అప్‌స్ట్రీమ్ సేవ ఎప్పుడైనా సెషన్‌ను చెల్లనిదిగా చేయవచ్చు, దీని వలన మీరు మళ్లీ లాగిన్ అవ్వాల్సి ఉంటుంది. ఎక్కువసేపు పర్యవేక్షణ లేని ఆపరేషన్ల కోసం సిఫార్సు చేయబడదు. మీ స్వంత పూచీకత్తుపై ఉపయోగించండి.", @@ -5107,9 +5111,9 @@ "cancel": "రద్దు చేయండి" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "ఆటో-ఫెచ్ అప్‌స్ట్రీమ్ మోడల్స్", + "autoFetchModelsTooltip": "అవసరమైనప్పుడు అప్‌స్ట్రీమ్ మోడల్స్‌ను పొందండి మరియు కాష్ చేయండి", + "autoFetchModelsEnabled": "అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్ ప్రారంభించబడింది", + "autoFetchModelsDisabled": "అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్ నిలిపివేయబడింది", + "autoFetchModelsToggleFailed": "అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్‌ను టోగుల్ చేయడంలో విఫలమైంది", + "autoFetchModelsPartialFailure": "కొన్ని కనెక్షన్లు నవీకరించబడ్డాయి, కానీ అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్ ప్రతి చోట మారలేదు", + "overridesUpstreamModel": "అప్‌స్ట్రీమ్‌ను ఓవర్‌రైడ్ చేయండి", + "overridesUpstreamModelHint": "మీ సెట్టింగ్స్ ఈ అప్‌స్ట్రీమ్ మోడల్‌ను అధిగమిస్తాయి", + "resetToUpstreamDefaults": "అప్‌స్ట్రీమ్ డిఫాల్ట్స్‌ను పునరుద్ధరించండి", + "resetToUpstreamDefaultsSuccess": "అప్‌స్ట్రీమ్ మోడల్ డిఫాల్ట్స్ పునరుద్ధరించబడ్డాయి", + "resetToUpstreamDefaultsFailed": "అప్‌స్ట్రీమ్ మోడల్ డిఫాల్ట్స్‌ను పునరుద్ధరించడంలో విఫలమైంది", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "స్థానిక web_fetch టూల్ కాల్‌లను OmniRoute యొక్క /v1/web/fetch కి రీరైట్ చేయండి.", "interceptionLoadError": "ఇంటర్‌సెప్షన్ సెట్టింగ్‌లను లోడ్ చేయడం విఫలమైంది: {error}", "interceptionSaveError": "ఇంటర్‌సెప్షన్ సెట్టింగ్‌లను సేవ్ చేయడం విఫలమైంది: {error}", - "ccAliasSectionTitle": "Claude కోడ్‌లో ఎక్స్‌పోజ్ చేయండి (claude/…)", - "ccAliasSectionHint": "ఈ ప్రొవైడర్ యొక్క మోడళ్లను claude/<provider>/<model> మిర్రర్ ఐడీల క్రింద ప్రచారం చేయండి, కాబట్టి Claude Code యొక్క గేట్వే మోడల్ డిస్కవరీ వాటిని జాబితా చేయగలదు. డిఫాల్ట్‌గా ఆఫ్ - దీన్ని ప్రారంభించడం అన్ని క్లయింట్ల కోసం కాటలాగ్ ఎంట్రీలను రెండింతలు చేస్తుంది.", - "ccAliasProviderLevelLabel": "ప్రదాత డిఫాల్ట్", - "ccAliasModelOverridesLabel": "ప్రతి మోడల్ కోసం ఓవర్‌రైడ్స్", - "ccAliasModelOverrideAriaLabel": "{modelId} కోసం ఓవర్‌రైడ్", - "ccAliasStateInherit": "వారసత్వం", - "ccAliasStateOn": "పై", - "ccAliasStateOff": "ఆఫ్", - "ccAliasAddModelPlaceholder": "మోడల్ ఐడి (ఉదాహరణకు gpt-4o)", - "ccAliasAddModelButton": "ఓవర్‌రైడ్ జోడించండి", - "ccAliasLoadError": "డిస్కవరీ-అలియాస్ సెట్టింగ్స్ లోడ్ చేయడంలో విఫలమైంది: {error}", - "ccAliasSaveError": "discovery-alias సెట్టింగ్‌ను సేవ్ చేయడంలో విఫలమైంది: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "API కీతో Galadrielని కనెక్ట్ చేయండి.", "predibase": "$25 ఉచిత ట్రయల్ క్రెడిట్‌లు (30 రోజుల చెల్లుబాటు)", "chenzk": "chenzk.top వద్ద లైవ్ మోడల్ కేటలాగ్‌తో కూడిన OpenAI-అనుకూల గేట్‌వే.", - "freepik": "Freepik యొక్క Mystic APIతో చిత్రాలను రూపొందించండి.", + "magnific": "Freepik యొక్క Mystic APIతో చిత్రాలను రూపొందించండి.", "freetheai": "పాస్‌త్రూ మోడల్ మద్దతుతో కూడిన ఉచిత OpenAI-అనుకూల గేట్‌వే.", "g4f-gemini": "Geminiకి ఉచిత నో-కీ g4f.space రివర్స్ ప్రాక్సీ, నిమిషానికి 5 అభ్యర్థనలకు పరిమితం చేయబడింది.", "g4f-groq": "Groqకి ఉచిత నో-కీ g4f.space రివర్స్ ప్రాక్సీ, నిమిషానికి 5 అభ్యర్థనలకు పరిమితం చేయబడింది.", @@ -6209,6 +6224,7 @@ "claude": "ఇప్పటికే ఉన్న OAuth ఫ్లోతో Claude Codeని కనెక్ట్ చేయండి.", "cline": "ఇప్పటికే ఉన్న OAuth ఫ్లోతో Clineని కనెక్ట్ చేయండి.", "cursor": "ఇప్పటికే ఉన్న OAuth ఫ్లోతో Cursor IDEని కనెక్ట్ చేయండి.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "ఇప్పటికే ఉన్న OAuth ఫ్లోతో GitHub Copilotని కనెక్ట్ చేయండి.", "gitlab-duo": "ai_features + read_user స్కోప్‌లతో కూడిన OAuth అప్లికేషన్. ఈ OmniRoute ఇన్‌స్టాన్స్‌లో GITLAB_DUO_OAUTH_CLIENT_ID మరియు ఐచ్ఛికంగా GITLAB_DUO_OAUTH_CLIENT_SECRETని కాన్ఫిగర్ చేయండి.", "kilocode": "ఇప్పటికే ఉన్న OAuth ఫ్లోతో Kilo Codeని కనెక్ట్ చేయండి.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "నిరీక్షణ వ్యవధిలో ఉంది", "codexPoolUsed": "ఉపయోగించబడింది", "codexPoolUntil": "{value} వరకు", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "అనామక ఫాల్బ్యాక్", "anonymousFallbackDesc": "అన్ని కాన్ఫిగర్ చేసిన కనెక్షన్లు ముగిసినప్పుడు (కోటా, క్రెడిట్స్, లేదా కాలం ముగిసినప్పుడు), తాత్కాలికంగా ఈ ప్రొవైడర్ యొక్క కీ లెస్ టియర్‌ను ఉపయోగించండి. అనామక అభ్యర్థనలను పంపించకుండా ఈ ప్రొవైడర్‌ను దాటించడానికి ఆపివేయండి — కీ లెస్ టియర్ వాటిని తిరస్కరించినప్పుడు (401) సిఫారసు చేయబడింది.", "anonymousFallbackEnabled": "{provider} కోసం అనామక ఫాల్బ్యాక్ ప్రారంభించబడింది", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "సేవ్ చేసిన మోడల్ ఎండ్‌పాయింట్ సెట్టింగ్స్", "searchByModelAria": "మోడల్ ద్వారా శోధించండి", "selectSupportedEndpoint": "కమిషన్ చేయబడిన కనెక్ట్ చేయబడిన ఎండ్‌పాయింట్‌లలో కనీసం ఒకటి ఎంచుకోండి", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsTooltip": "అవసరమైనప్పుడు అప్‌స్ట్రీమ్ మోడల్స్‌ను పొందండి మరియు కాష్ చేయండి", - "autoFetchModelsEnabled": "అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్ ప్రారంభించబడింది", - "autoFetchModels": "ఆటో-ఫెచ్ అప్‌స్ట్రీమ్ మోడల్స్", - "autoFetchModelsDisabled": "అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్ నిలిపివేయబడింది", - "overridesUpstreamModelHint": "మీ సెట్టింగ్స్ ఈ అప్‌స్ట్రీమ్ మోడల్‌ను అధిగమిస్తాయి", - "overridesUpstreamModel": "అప్‌స్ట్రీమ్‌ను ఓవర్‌రైడ్ చేయండి", - "autoFetchModelsToggleFailed": "అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్‌ను టోగుల్ చేయడంలో విఫలమైంది", - "autoFetchModelsPartialFailure": "కొన్ని కనెక్షన్లు నవీకరించబడ్డాయి, కానీ అప్‌స్ట్రీమ్ మోడల్ ఆటో-ఫెచ్ ప్రతి చోట మారలేదు", - "resetToUpstreamDefaultsSuccess": "అప్‌స్ట్రీమ్ మోడల్ డిఫాల్ట్స్ పునరుద్ధరించబడ్డాయి", - "resetToUpstreamDefaults": "అప్‌స్ట్రీమ్ డిఫాల్ట్స్‌ను పునరుద్ధరించండి", - "resetToUpstreamDefaultsFailed": "అప్‌స్ట్రీమ్ మోడల్ డిఫాల్ట్స్‌ను పునరుద్ధరించడంలో విఫలమైంది" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "నిషేధించబడిన కీలకపదాలు", "customBannedSignalsDesc": "శాశ్వత ఖాతా నిషేధ గుర్తింపును ప్రేరేపించే అదనపు కీలకపదాలు. అంతర్నిర్మిత కీలకపదాలు ఎల్లప్పుడూ వర్తిస్తాయి.", "customBannedSignalsPlaceholder": "ఉదా. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "కాన్ఫిగర్ చేయబడింది", "none": "ఏదీ లేదు", "modelOverrideValuePlaceholder": "సంఖ్యా విలువ", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "కీ విలువను జోడించండి", "noModelOverrides": "ఈ మోడల్ కోసం ఎటువంటి ఓవర్‌రైడ్‌లు కాన్ఫిగర్ చేయబడలేదు.", "modelOverrideLoadFailed": "మోడల్ ఓవర్‌రైడ్‌లను లోడ్ చేయడం విఫలమైంది", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "సంక్షిప్త CJK (文言)", "description": "క్లాసికల్-చైనీస్ అల్ట్రా-సంక్షిప్త శైలి (చైనీస్ కోసం మాత్రమే అందుబాటులో ఉంది)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "రౌండ్-రాబిన్ మరియు యాదృచ్ఛిక కాంబోలు మొదటి-సందేశం హ్యాష్ ద్వారా మొత్తం సంభాషణను ఒకే కనెక్షన్‌కు పిన్ చేయడానికి బదులుగా ప్రతి అభ్యర్థనపై వేరే కనెక్షన్‌కు మారుతాయి. మల్టీ-టర్న్ చాట్‌ల కోసం ప్రాంప్ట్-క్యాచీ హిట్‌లను అలాగే ఉంచడానికి దీనిని నిలిపివేయండి. ప్రతి కాంబో ఓవర్‌రైడ్‌లు ప్రాధాన్యతను కలిగి ఉంటాయి.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "క్రెడెన్షియల్ రెడాక్షన్", "credentialRedactionDesc": "ప్రొవైడర్‌లకు పంపిన సందర్భం నుండి మరియు ప్రతిస్పందనల నుండి API కీలు, టోకెన్‌లు మరియు రహస్యాలను తొలగించండి.", "enableCredentialRedaction": "క్రెడెన్షియల్ రెడాక్షన్‌ను ప్రారంభించండి", @@ -8621,6 +8623,27 @@ }, "enableTitle": "ఇంజిన్‌ను ఎనేబుల్ చేయండి", "enableDescription": "స్టాక్‌లో చివరిగా రన్ అవుతుంది (RTK/Caveman వచనాన్ని క్లీన్ చేసిన తర్వాత, OmniGlyph మిగిలిన భాగాన్ని చిత్రాలుగా మారుస్తుంది) మరియు omniglyph మోడ్ ద్వారా స్వతంత్రంగా కూడా రన్ అవుతుంది. ఇది ప్రివ్యూ మరియు ఎండ్-టు-ఎండ్ ధ్రువీకరణ పూర్తయ్యే వరకు డిఫాల్ట్‌గా ఆఫ్‌లోనే ఉంటుంది.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "సేవ్ చేయబడింది.", "saveFailed": "సేవ్ చేయడం సాధ్యపడలేదు.", "enableAria": "OmniGlyph ఇంజిన్‌ను ఎనేబుల్ చేయండి", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "గరిష్టం", "grokAutoTopUpMonth": "మాసం", "grokAdditionalCredits": "అదనపు క్రెడిట్స్", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "మొదటి టోకెన్", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index ed1e5d4063..4b004659a9 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "ไทม์ไลน์คำขอภาพ", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "เปิด", "close": "ปิด" }, - "noResults": "ไม่มีผลลัพธ์", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "ไม่มีผลลัพธ์" }, "webhooks": { "title": "เว็บฮุค", @@ -1739,8 +1739,8 @@ "quotaShare": "การแชร์โควตา", "discovery": "การค้นพบ", "freeProviderRankings": "อันดับผู้ให้บริการฟรี", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "แพ็กเกจฟรี", "gamification": "เกมมิฟิเคชัน", "leaderboard": "กระดานผู้นำ", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "ผู้ให้บริการรายนี้เลิกใช้แล้ว", "riskNotice": { "title": "ก่อนดำเนินการต่อ", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "ผู้ให้บริการที่มีข้อควรระวังในการใช้งาน — คลิกเพื่อดูรายละเอียด", "oauth": "ผู้ให้บริการรายนี้ใช้เซสชันผลิตภัณฑ์อย่างเป็นทางการ/OAuth ของคุณ ซึ่งไม่ได้รับอนุญาตให้ใช้กับพร็อกซี/เราเตอร์ เราไม่แนะนำให้ใช้งานเอเจนต์อัตโนมัติอย่างหนักหน่วง (เช่น สไตล์ OpenCloud, โฟลว์หลายขั้นตอนที่ยาวนาน, การประมวลผลแบบกลุ่มขนาดใหญ่) — ต้นทางอาจตอบสนองโดยการจำกัดหรือแบนบัญชี ใช้งานโดยยอมรับความเสี่ยงด้วยตนเอง", "webCookie": "ผู้ให้บริการรายนี้ยืนยันตัวตนผ่านคุกกี้เซสชันเว็บของคุณ บริการต้นทางอาจทำให้เซสชันหมดอายุเมื่อใดก็ได้ ซึ่งจะทำให้คุณต้องเข้าสู่ระบบใหม่อีกครั้ง ไม่แนะนำสำหรับการทำงานระยะยาวที่ไม่มีการเฝ้าดูแล ใช้งานโดยยอมรับความเสี่ยงด้วยตนเอง", @@ -5107,9 +5111,9 @@ "cancel": "ยกเลิก" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "ปิดการใช้งาน", "enableProvider": "เปิดใช้งานผู้ให้บริการ", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "ข้าม {count} โมเดลที่มีอยู่", "autoSync": "ซิงค์อัตโนมัติ", "autoSyncShort": "ซิงค์", + "autoFetchModels": "ดึงโมเดลจาก upstream อัตโนมัติ", + "autoFetchModelsTooltip": "ดึงและเก็บโมเดลจากต้นทางเมื่อจำเป็น", + "autoFetchModelsEnabled": "เปิดใช้งานการดึงข้อมูลโมเดลจากต้นทางอัตโนมัติ", + "autoFetchModelsDisabled": "การดึงข้อมูลโมเดลจากต้นทางถูกปิดใช้งาน", + "autoFetchModelsToggleFailed": "ไม่สามารถเปลี่ยนการดึงข้อมูลอัตโนมัติของโมเดล upstream ได้", + "autoFetchModelsPartialFailure": "การเชื่อมต่อบางรายการได้รับการอัปเดต แต่การดึงข้อมูลโมเดลต้นน้ำอัตโนมัติไม่ได้เปลี่ยนแปลงในทุกที่", + "overridesUpstreamModel": "เขียนทับต้นทาง", + "overridesUpstreamModelHint": "การตั้งค่าของคุณจะมีผลเหนือโมเดลต้นทางนี้", + "resetToUpstreamDefaults": "คืนค่าการตั้งค่าเริ่มต้นของ upstream", + "resetToUpstreamDefaultsSuccess": "กู้คืนค่าเริ่มต้นของโมเดลต้นทาง", + "resetToUpstreamDefaultsFailed": "ไม่สามารถกู้คืนค่าเริ่มต้นของโมเดลต้นน้ำได้", "autoSyncTooltip": "รีเฟรชรายการโมเดลโดยอัตโนมัติทุกๆ 24 ชั่วโมง (กำหนดค่าได้ผ่าน MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "เปิดใช้งานการซิงค์อัตโนมัติ — โมเดลจะรีเฟรชเป็นระยะ", "autoSyncDisabled": "ปิดใช้งานการซิงค์อัตโนมัติแล้ว", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "เขียนทับการเรียกใช้เครื่องมือ web_fetch ดั้งเดิมไปยัง /v1/web/fetch ของ OmniRoute", "interceptionLoadError": "โหลดการตั้งค่าการสกัดกั้นล้มเหลว: {error}", "interceptionSaveError": "บันทึกการตั้งค่าการสกัดกั้นล้มเหลว: {error}", - "ccAliasSectionTitle": "เปิดเผยใน Claude Code (claude/…)", - "ccAliasSectionHint": "โฆษณาโมเดลของผู้ให้บริการนี้ภายใต้ claude/<provider>/<model> mirror ids เพื่อให้การค้นหาโมเดลของ Claude Code สามารถแสดงรายการได้ ปิดโดยค่าเริ่มต้น — การเปิดใช้งานนี้จะทำให้รายการในแคตตาล็อกเพิ่มเป็นสองเท่าสำหรับลูกค้าทุกคน.", - "ccAliasProviderLevelLabel": "ผู้ให้บริการเริ่มต้น", - "ccAliasModelOverridesLabel": "การเขียนทับต่อโมเดลแต่ละตัว", - "ccAliasModelOverrideAriaLabel": "การแทนที่สำหรับ {modelId}", - "ccAliasStateInherit": "สืบทอด", - "ccAliasStateOn": "เปิด", - "ccAliasStateOff": "ปิด", - "ccAliasAddModelPlaceholder": "รหัสโมเดล (เช่น gpt-4o)", - "ccAliasAddModelButton": "เพิ่มการเขียนทับ", - "ccAliasLoadError": "ไม่สามารถโหลดการตั้งค่า discovery-alias ได้: {error}", - "ccAliasSaveError": "ไม่สามารถบันทึกการตั้งค่า discovery-alias ได้: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "เชื่อมต่อ Galadriel ด้วยคีย์ API", "predibase": "เครดิตทดลองใช้ฟรี $25 (มีอายุ 30 วัน)", "chenzk": "เกตเวย์ที่เข้ากันได้กับ OpenAI พร้อมแคตตาล็อกโมเดลแบบสดที่ chenzk.top", - "freepik": "สร้างรูปภาพด้วย Mystic API ของ Freepik", + "magnific": "สร้างรูปภาพด้วย Mystic API ของ Freepik", "freetheai": "เกตเวย์ฟรีที่เข้ากันได้กับ OpenAI พร้อมการรองรับโมเดลแบบ passthrough", "g4f-gemini": "รีเวิร์สพร็อกซี g4f.space ฟรีแบบไม่ต้องใช้คีย์ไปยัง Gemini จำกัด 5 คำขอต่อนาที", "g4f-groq": "รีเวิร์สพร็อกซี g4f.space ฟรีแบบไม่ต้องใช้คีย์ไปยัง Groq จำกัด 5 คำขอต่อนาที", @@ -6209,6 +6224,7 @@ "claude": "เชื่อมต่อ Claude Code ด้วยโฟลว์ OAuth ที่มีอยู่", "cline": "เชื่อมต่อ Cline ด้วยโฟลว์ OAuth ที่มีอยู่", "cursor": "เชื่อมต่อ Cursor IDE ด้วยโฟลว์ OAuth ที่มีอยู่", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "เชื่อมต่อ GitHub Copilot ด้วยโฟลว์ OAuth ที่มีอยู่", "gitlab-duo": "แอปพลิเคชัน OAuth ที่มีขอบเขต ai_features + read_user กำหนดค่า GITLAB_DUO_OAUTH_CLIENT_ID และ GITLAB_DUO_OAUTH_CLIENT_SECRET (ไม่บังคับ) บนอินสแตนซ์ OmniRoute นี้", "kilocode": "เชื่อมต่อ Kilo Code ด้วยโฟลว์ OAuth ที่มีอยู่", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "อยู่ในช่วงพัก", "codexPoolUsed": "ใช้แล้ว", "codexPoolUntil": "จนถึง {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "การสำรองข้อมูลแบบไม่ระบุชื่อ", "anonymousFallbackDesc": "เมื่อการเชื่อมต่อที่กำหนดทั้งหมดหมดลง (โควตา, เครดิต, หรือหมดอายุ) ให้ใช้ชั้นที่ไม่มีคีย์ของผู้ให้บริการนี้ชั่วคราว ปิดเพื่อข้ามผู้ให้บริการนี้แทนที่จะส่งคำขอแบบไม่ระบุชื่อ — แนะนำเมื่อชั้นที่ไม่มีคีย์ปฏิเสธคำขอเหล่านั้น (401).", "anonymousFallbackEnabled": "เปิดใช้งานการสำรองข้อมูลแบบไม่ระบุชื่อสำหรับ {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "การตั้งค่า endpoint ของโมเดลที่บันทึกไว้", "searchByModelAria": "ค้นหาตามรุ่น", "selectSupportedEndpoint": "เลือกจุดสิ้นสุดที่รองรับอย่างน้อยหนึ่งจุด", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsTooltip": "ดึงและเก็บโมเดลจากต้นทางเมื่อจำเป็น", - "autoFetchModels": "ดึงโมเดลจาก upstream อัตโนมัติ", - "autoFetchModelsEnabled": "เปิดใช้งานการดึงข้อมูลโมเดลจากต้นทางอัตโนมัติ", - "autoFetchModelsDisabled": "การดึงข้อมูลโมเดลจากต้นทางถูกปิดใช้งาน", - "overridesUpstreamModel": "เขียนทับต้นทาง", - "overridesUpstreamModelHint": "การตั้งค่าของคุณจะมีผลเหนือโมเดลต้นทางนี้", - "autoFetchModelsToggleFailed": "ไม่สามารถเปลี่ยนการดึงข้อมูลอัตโนมัติของโมเดล upstream ได้", - "autoFetchModelsPartialFailure": "การเชื่อมต่อบางรายการได้รับการอัปเดต แต่การดึงข้อมูลโมเดลต้นน้ำอัตโนมัติไม่ได้เปลี่ยนแปลงในทุกที่", - "resetToUpstreamDefaults": "คืนค่าการตั้งค่าเริ่มต้นของ upstream", - "resetToUpstreamDefaultsSuccess": "กู้คืนค่าเริ่มต้นของโมเดลต้นทาง", - "resetToUpstreamDefaultsFailed": "ไม่สามารถกู้คืนค่าเริ่มต้นของโมเดลต้นน้ำได้" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "การตั้งค่า", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "คีย์เวิร์ดที่ถูกแบน", "customBannedSignalsDesc": "คีย์เวิร์ดเพิ่มเติมที่ทริกเกอร์การตรวจจับการแบนบัญชีถาวร คีย์เวิร์ดในตัวจะมีผลเสมอ", "customBannedSignalsPlaceholder": "เช่น api key revoked", @@ -7210,6 +7203,7 @@ "configured": "กำหนดค่าแล้ว", "none": "ไม่มี", "modelOverrideValuePlaceholder": "ค่าตัวเลข", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "เพิ่มคีย์-ค่า", "noModelOverrides": "ไม่มีการกำหนดค่าการเขียนทับสำหรับโมเดลนี้", "modelOverrideLoadFailed": "โหลดการเขียนทับโมเดลล้มเหลว", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "CJK แบบกระชับ (文言)", "description": "สไตล์ภาษาจีนคลาสสิกแบบกระชับอย่างยิ่ง (ใช้ได้เฉพาะภาษาจีนเท่านั้น)" @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "คอมโบแบบ Round-robin และแบบสุ่มจะสลับไปยังการเชื่อมต่ออื่นในทุกคำขอ แทนที่จะตรึงการสนทนาทั้งหมดไว้กับการเชื่อมต่อเดียวตามแฮชของข้อความแรก ปิดไว้เพื่อรักษา prompt-cache hits สำหรับการแชทแบบหลายรอบ การแทนที่ระดับคอมโบจะมีผลเหนือกว่า", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "การปกปิดข้อมูลรับรอง", "credentialRedactionDesc": "ปกปิดคีย์ API, โทเค็น และข้อมูลลับจากบริบทที่ส่งไปยังผู้ให้บริการและจากการตอบกลับ", "enableCredentialRedaction": "เปิดใช้งานการปกปิดข้อมูลรับรอง", @@ -8621,6 +8623,27 @@ }, "enableTitle": "เปิดใช้งานเอนจิน", "enableDescription": "ทำงานเป็นลำดับสุดท้ายในสแตก (หลังจาก RTK/Caveman คลีนข้อความ และ OmniGlyph แปลงส่วนที่เหลือเป็นรูปภาพ) และยังทำงานแบบสแตนด์อโลนผ่านโหมด omniglyph นี่เป็นเวอร์ชันพรีวิวและจะยังคงปิดใช้งานไว้เป็นค่าเริ่มต้นจนกว่าการตรวจสอบความถูกต้องแบบครบวงจร (end-to-end) จะเสร็จสิ้น", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "บันทึกแล้ว", "saveFailed": "ไม่สามารถบันทึกได้", "enableAria": "เปิดใช้งานเอนจิน OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "สูงสุด", "grokAutoTopUpMonth": "เดือน", "grokAdditionalCredits": "เครดิตเพิ่มเติม", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "คนตัดไม้", "proxyTab": "หนังสือมอบฉันทะ", "budgetManagement": "การจัดการงบประมาณ", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "โทเค็นแรก", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index 5ef5816345..abd8bfc297 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Görsel istek zaman çizelgesi", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "açık", "close": "kapat" }, - "noResults": "Sonuç yok", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Sonuç yok" }, "webhooks": { "title": "Web kancaları", @@ -1739,8 +1739,8 @@ "quotaShare": "Kota Payı", "discovery": "Keşif", "freeProviderRankings": "Ücretsiz Sağlayıcı Sıralamaları", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Ücretsiz Katmanlar", "gamification": "Oyunlaştırma", "leaderboard": "Liderlik Tablosu", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Bu sağlayıcı kullanımdan kaldırıldı", "riskNotice": { "title": "Devam etmeden önce", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Kullanım uyarıları olan sağlayıcı — ayrıntılar için tıklayın", "oauth": "Bu sağlayıcı, proxy/yönlendirici kullanımı için yetkilendirilmemiş resmi ürün oturumunuzu/OAuth'unuzu kullanır. Yoğun otonom ajan kullanımını (OpenCloud tarzı, uzun çok adımlı akışlar, büyük toplu işlemler) önermiyoruz — üst sağlayıcı hesabı kısıtlayarak veya yasaklayarak tepki verebilir. Kullanım riski size aittir.", "webCookie": "Bu sağlayıcı, web oturumu çerezleriniz aracılığıyla kimlik doğrulaması yapar. Üst servis oturumu istediği zaman geçersiz kılabilir ve tekrar giriş yapmanızı gerektirebilir. Uzun süreli gözetimsiz işlemler için önerilmez. Kullanım riski size aittir.", @@ -5107,9 +5111,9 @@ "cancel": "İptal" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Devre dışı", "enableProvider": "Sağlayıcıyı etkinleştir", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "{count} mevcut model atlanıyor", "autoSync": "Otomatik Senkronizasyon", "autoSyncShort": "Senkronize Et", + "autoFetchModels": "Otomatik olarak üst akış modellerini al", + "autoFetchModelsTooltip": "Gerekli olduğunda yukarı akış modellerini al ve önbelleğe al", + "autoFetchModelsEnabled": "Üst akış modeli otomatik alma etkinleştirildi", + "autoFetchModelsDisabled": "Üst akış modeli otomatik alma devre dışı bırakıldı", + "autoFetchModelsToggleFailed": "Yukarı akış model otomatik alımını değiştirme başarısız oldu", + "autoFetchModelsPartialFailure": "Bazı bağlantılar güncellendi, ancak yukarı akış modeli otomatik alımı her yerde değişmedi.", + "overridesUpstreamModel": "Üst akışı geçersiz kılar", + "overridesUpstreamModelHint": "Ayarlarınız bu üst modelin üzerine yazıyor.", + "resetToUpstreamDefaults": "Varsayılan ayarları geri yükle", + "resetToUpstreamDefaultsSuccess": "Yukarı akış model varsayılanları geri yüklendi", + "resetToUpstreamDefaultsFailed": "Üst akış model varsayılanlarını geri yükleme başarısız oldu", "autoSyncTooltip": "Model listesini her 24 saatte bir otomatik olarak yenileyin (MODEL_SYNC_INTERVAL_HOURS aracılığıyla yapılandırılabilir)", "autoSyncEnabled": "Otomatik senkronizasyon etkin — modeller periyodik olarak yenilenecek", "autoSyncDisabled": "Otomatik senkronizasyon devre dışı bırakıldı", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Yerel web_fetch araç çağrılarını OmniRoute'un /v1/web/fetch uç noktasına yeniden yazar.", "interceptionLoadError": "Yakalama ayarları yüklenemedi: {error}", "interceptionSaveError": "Yakalama ayarları kaydedilemedi: {error}", - "ccAliasSectionTitle": "Claude Kodu'nda Açığa Çıkar (claude/…)", - "ccAliasSectionHint": "Bu sağlayıcının modellerini claude/<provider>/<model> ayna kimlikleri altında tanıtın, böylece Claude Code'un geçiş modeli keşfi bunları listeleyebilir. Varsayılan olarak kapalı — bunu etkinleştirmek, tüm müşteriler için katalog girişlerini iki katına çıkarır.", - "ccAliasProviderLevelLabel": "Sağlayıcı varsayılan", - "ccAliasModelOverridesLabel": "Model başına geçersiz kılmalar", - "ccAliasModelOverrideAriaLabel": "{modelId} için geçersiz kılma", - "ccAliasStateInherit": "Devralmak", - "ccAliasStateOn": "Açık", - "ccAliasStateOff": "Kapalı", - "ccAliasAddModelPlaceholder": "Model kimliği (ör. gpt-4o)", - "ccAliasAddModelButton": "Override ekle", - "ccAliasLoadError": "Keşif-alias ayarlarını yüklemek başarısız oldu: {error}", - "ccAliasSaveError": "discovery-alias ayarını kaydetme başarısız oldu: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Ek yukarı akış başlıkları", "compatUpstreamHeadersHint": "Yüksek ayrıcalıklı ayar: sağlayıcı API kimlik bilgilerini düzenlemekle aynı güven düzeyine sahiptir; yalnızca güvenilir yöneticiler kullanmalıdır. OmniRoute, sağlayıcı API anahtarından kimlik doğrulama başlığını ekledikten sonra bu başlıklar birleştirilir. Özel bir başlık mevcut bir başlıkla aynı adı kullanıyorsa (ör. Authorization), verdiğiniz değer otomatik oluşturulan başlığın (Bearer token dahil) tamamının yerini alır; yukarı akış yalnızca sizin yazdığınız değeri görür. Hatalı yapılandırma 401 hatalarına veya bozuk yukarı akış kimlik doğrulamasına yol açabilir. Her başlık için bir satır kullanın (ör. bazı geçitler için ek Authentication başlığı). Önizlemek için değerin üzerine gelin veya odaklayın. Bu panelde bulanıklaştırma, dışarı tıklama veya paneli kapatma sırasında otomatik kaydedilir.", "compatUpstreamHeaderName": "Başlık adı", @@ -6194,7 +6209,7 @@ "galadriel": "Galadriel'i bir API anahtarı ile bağlayın.", "predibase": "25$ ücretsiz deneme kredisi (30 gün geçerli)", "chenzk": "chenzk.top adresinde canlı model kataloğuna sahip OpenAI uyumlu ağ geçidi.", - "freepik": "Freepik'in Mystic API'si ile görseller oluşturun.", + "magnific": "Freepik'in Mystic API'si ile görseller oluşturun.", "freetheai": "Doğrudan geçişli (passthrough) model destekli, ücretsiz OpenAI uyumlu ağ geçidi.", "g4f-gemini": "Gemini için anahtarsız, ücretsiz g4f.space ters proxy'si, dakikada 5 istek ile sınırlıdır.", "g4f-groq": "Groq için anahtarsız, ücretsiz g4f.space ters proxy'si, dakikada 5 istek ile sınırlıdır.", @@ -6209,6 +6224,7 @@ "claude": "Mevcut OAuth akışıyla Claude Code'u bağlayın.", "cline": "Mevcut OAuth akışıyla Cline'ı bağlayın.", "cursor": "Mevcut OAuth akışıyla Cursor IDE'yi bağlayın.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Mevcut OAuth akışıyla GitHub Copilot'ı bağlayın.", "gitlab-duo": "ai_features + read_user kapsamlarına sahip OAuth uygulaması. Bu OmniRoute örneğinde GITLAB_DUO_OAUTH_CLIENT_ID ve isteğe bağlı olarak GITLAB_DUO_OAUTH_CLIENT_SECRET yapılandırın.", "kilocode": "Mevcut OAuth akışıyla Kilo Code'u bağlayın.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "Bekleme süresinde", "codexPoolUsed": "kullanıldı", "codexPoolUntil": "{value} tarihine kadar", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Anonim yedekleme", "anonymousFallbackDesc": "Tüm yapılandırılmış bağlantılar tükendiğinde (kota, kredi veya süresi dolmuş), bu sağlayıcının anahtarsız katmanını geçici olarak kullanın. Anahtarsız katmanın bunları reddettiği (401) durumlarda, anonim istek göndermek yerine bu sağlayıcıyı atlamak için kapatın — önerilir.", "anonymousFallbackEnabled": "{provider} için anonim geri dönüş etkinleştirildi", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Kaydedilmiş model uç noktası ayarları", "searchByModelAria": "Model ile ara", "selectSupportedEndpoint": "En az bir desteklenen uç noktayı seçin", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "Üst akış modeli otomatik alma devre dışı bırakıldı", - "autoFetchModels": "Otomatik olarak üst akış modellerini al", - "autoFetchModelsTooltip": "Gerekli olduğunda yukarı akış modellerini al ve önbelleğe al", - "autoFetchModelsEnabled": "Üst akış modeli otomatik alma etkinleştirildi", - "autoFetchModelsToggleFailed": "Yukarı akış model otomatik alımını değiştirme başarısız oldu", - "autoFetchModelsPartialFailure": "Bazı bağlantılar güncellendi, ancak yukarı akış modeli otomatik alımı her yerde değişmedi.", - "overridesUpstreamModel": "Üst akışı geçersiz kılar", - "overridesUpstreamModelHint": "Ayarlarınız bu üst modelin üzerine yazıyor.", - "resetToUpstreamDefaults": "Varsayılan ayarları geri yükle", - "resetToUpstreamDefaultsSuccess": "Yukarı akış model varsayılanları geri yüklendi", - "resetToUpstreamDefaultsFailed": "Üst akış model varsayılanlarını geri yükleme başarısız oldu" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Ayarlar", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Yasaklı Anahtar Kelimeler", "customBannedSignalsDesc": "Kalıcı hesap engelleme algılamasını tetikleyen ek anahtar kelimeler. Yerleşik anahtar kelimeler her zaman geçerlidir.", "customBannedSignalsPlaceholder": "örn. api key revoked", @@ -7210,6 +7203,7 @@ "configured": "yapılandırıldı", "none": "Yok", "modelOverrideValuePlaceholder": "Sayısal değer", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Anahtar değer ekle", "noModelOverrides": "Bu model için yapılandırılmış geçersiz kılma yok.", "modelOverrideLoadFailed": "Model geçersiz kılmaları yüklenemedi", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Kısa ve öz CJK (文言)", "description": "Klasik Çince ultra kısa ve öz stil (yalnızca Çince için kullanılabilir)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Round-robin ve rastgele kombinasyonlar, tüm bir konuşmayı ilk mesaj karmasıyla tek bir bağlantıya sabitlemek yerine her istekte farklı bir bağlantıya döner. Çok turlu sohbetlerde prompt-cache isabetlerini korumak için kapalı bırakın. Kombinasyon bazlı geçersiz kılmalar önceliklidir.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Kimlik Bilgisi Karartma", "credentialRedactionDesc": "Sağlayıcılara gönderilen bağlamdan ve yanıtlardan API anahtarlarını, belirteçleri ve sırları karartın.", "enableCredentialRedaction": "Kimlik bilgisi karartmayı etkinleştir", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Motoru etkinleştir", "enableDescription": "Yığında en son çalışır (RTK/Caveman metni temizledikten sonra OmniGlyph geri kalanını görüntülere dönüştürür) ve ayrıca omniglyph modu aracılığıyla bağımsız olarak çalışır. Bu bir önizlemedir ve uçtan uca doğrulama tamamlanana kadar varsayılan olarak kapalı kalır.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Kaydedildi.", "saveFailed": "Kaydedilemedi.", "enableAria": "OmniGlyph motorunu etkinleştir", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "maksimum", "grokAutoTopUpMonth": "ay", "grokAdditionalCredits": "Ekstra Krediler", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Günlükler", "proxyTab": "Proxy", "budgetManagement": "Bütçe Yönetimi", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "İlk Token", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index 9fe5efbd52..ce9ede8d17 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Логи консолі", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Візуальний графік запитів", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Глобальна маршрутизація", "mitmProxy": "MITM-проксі", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "відкрити", "close": "закрити" }, - "noResults": "Немає результатів", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "Немає результатів" }, "webhooks": { "title": "Веб-хуки", @@ -1739,8 +1739,8 @@ "quotaShare": "Частка квоти", "discovery": "Дослідження", "freeProviderRankings": "Рейтинги безкоштовних провайдерів", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "Безкоштовні тарифи", "gamification": "Гейміфікація", "leaderboard": "Таблиця лідерів", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Перевірте та збережіть", "wizardStep4Desc": "Перегляньте конфігурацію та активуйте комбо", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "Цей постачальник більше не підтримується", "riskNotice": { "title": "Перед тим, як продовжити", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "Провайдер із застереженнями щодо використання — натисніть для подробиць", "oauth": "Цей провайдер використовує вашу офіційну продуктову сесію/OAuth, які не авторизовані для використання у проксі/маршрутизаторі. Ми не рекомендуємо інтенсивне автономне використання агентами (стиль OpenCloud, довгі багатокрокові потоки, великі пакети) — провайдер може у відповідь обмежити або заблокувати акаунт. Використовуйте на власний ризик.", "webCookie": "Цей провайдер автентифікується через cookie вашої веб-сесії. Сервіс може в будь-який момент анулювати сесію, що вимагатиме повторного входу. Не рекомендовано для довгих автоматизованих операцій. Використовуйте на власний ризик.", @@ -5107,9 +5111,9 @@ "cancel": "Скасувати" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Вимкнено", "enableProvider": "Увімкнути провайдера", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Пропуск {count} наявних моделей", "autoSync": "Автоматична синхронізація", "autoSyncShort": "Синхронізувати", + "autoFetchModels": "Автоматичне отримання моделей з upstream", + "autoFetchModelsTooltip": "Отримати та кешувати моделі з upstream за потреби", + "autoFetchModelsEnabled": "Увімкнено автоматичне отримання моделі з upstream", + "autoFetchModelsDisabled": "Автоматичне отримання моделі з upstream вимкнено", + "autoFetchModelsToggleFailed": "Не вдалося перемкнути автоматичне отримання моделі upstream", + "autoFetchModelsPartialFailure": "Деякі з'єднання оновлено, але автоматичне отримання моделі з верхнього рівня не було змінено скрізь", + "overridesUpstreamModel": "Перезаписує upstream", + "overridesUpstreamModelHint": "Ваші налаштування переважають цю модель вгору за течією", + "resetToUpstreamDefaults": "Відновити значення за замовчуванням з upstream", + "resetToUpstreamDefaultsSuccess": "Відновлено значення за замовчуванням моделі з upstream", + "resetToUpstreamDefaultsFailed": "Не вдалося відновити значення за замовчуванням моделі upstream", "autoSyncTooltip": "Автоматично оновлювати список моделей кожні 24 години (налаштовується через MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Автоматична синхронізація ввімкнена — моделі періодично оновлюватимуться", "autoSyncDisabled": "Автоматична синхронізація вимкнена", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "Перенаправляти виклики нативного інструмента web_fetch на /v1/web/fetch в OmniRoute.", "interceptionLoadError": "Не вдалося завантажити налаштування перехоплення: {error}", "interceptionSaveError": "Не вдалося зберегти налаштування перехоплення: {error}", - "ccAliasSectionTitle": "Відкрити в Claude Code (claude/…)", - "ccAliasSectionHint": "Рекламуйте моделі цього постачальника під claude/<provider>/<model> mirror ids, щоб модель виявлення шлюзу Claude Code могла їх перерахувати. Вимкнено за замовчуванням — увімкнення цього подвоює записи каталогу для всіх клієнтів.", - "ccAliasProviderLevelLabel": "Постачальник за замовчуванням", - "ccAliasModelOverridesLabel": "Перемикання за моделлю", - "ccAliasModelOverrideAriaLabel": "Перезапис для {modelId}", - "ccAliasStateInherit": "Успадкувати", - "ccAliasStateOn": "Увімкнено", - "ccAliasStateOff": "Вимкнено", - "ccAliasAddModelPlaceholder": "Ідентифікатор моделі (наприклад, gpt-4o)", - "ccAliasAddModelButton": "Додати перевизначення", - "ccAliasLoadError": "Не вдалося завантажити налаштування discovery-alias: {error}", - "ccAliasSaveError": "Не вдалося зберегти налаштування discovery-alias: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Connect Galadriel with an API key.", "predibase": "$25 free trial credits (30-day validity)", "chenzk": "OpenAI-compatible gateway with a live model catalog at chenzk.top.", - "freepik": "Generate images with Freepik's Mystic API.", + "magnific": "Generate images with Freepik's Mystic API.", "freetheai": "Free OpenAI-compatible gateway with passthrough model support.", "g4f-gemini": "Free no-key g4f.space reverse proxy to Gemini, limited to 5 requests per minute.", "g4f-groq": "Free no-key g4f.space reverse proxy to Groq, limited to 5 requests per minute.", @@ -6209,6 +6224,7 @@ "claude": "Connect Claude Code with the existing OAuth flow.", "cline": "Connect Cline with the existing OAuth flow.", "cursor": "Connect Cursor IDE with the existing OAuth flow.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Connect GitHub Copilot with the existing OAuth flow.", "gitlab-duo": "OAuth application with ai_features + read_user scopes. Configure GITLAB_DUO_OAUTH_CLIENT_ID and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET on this OmniRoute instance.", "kilocode": "Connect Kilo Code with the existing OAuth flow.", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "У періоді очікування", "codexPoolUsed": "використано", "codexPoolUntil": "До {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "Анонімний резервний варіант", "anonymousFallbackDesc": "Коли всі налаштовані з'єднання вичерпані (квота, кредити або термін дії), тимчасово використовуйте безключовий рівень цього постачальника. Вимкніть, щоб пропустити цього постачальника замість надсилання анонімних запитів — рекомендовано, коли безключовий рівень їх відхиляє (401).", "anonymousFallbackEnabled": "Анонімний резервний варіант увімкнено для {provider}", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "Налаштування кінцевої точки збереженої моделі", "searchByModelAria": "Пошук за моделлю", "selectSupportedEndpoint": "Виберіть принаймні одну підтримувану точку доступу", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Автоматичне отримання моделей з upstream", - "autoFetchModelsDisabled": "Автоматичне отримання моделі з upstream вимкнено", - "autoFetchModelsTooltip": "Отримати та кешувати моделі з upstream за потреби", - "autoFetchModelsEnabled": "Увімкнено автоматичне отримання моделі з upstream", - "autoFetchModelsToggleFailed": "Не вдалося перемкнути автоматичне отримання моделі upstream", - "overridesUpstreamModel": "Перезаписує upstream", - "overridesUpstreamModelHint": "Ваші налаштування переважають цю модель вгору за течією", - "autoFetchModelsPartialFailure": "Деякі з'єднання оновлено, але автоматичне отримання моделі з верхнього рівня не було змінено скрізь", - "resetToUpstreamDefaultsSuccess": "Відновлено значення за замовчуванням моделі з upstream", - "resetToUpstreamDefaults": "Відновити значення за замовчуванням з upstream", - "resetToUpstreamDefaultsFailed": "Не вдалося відновити значення за замовчуванням моделі upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Налаштування", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "Banned Keywords", "customBannedSignalsDesc": "Додаткові ключові слова, які запускають виявлення постійного блокування акаунта. Вбудовані ключові слова застосовуються завжди.", "customBannedSignalsPlaceholder": "наприклад, api key revoked", @@ -7210,6 +7203,7 @@ "configured": "налаштовано", "none": "Немає", "modelOverrideValuePlaceholder": "Числове значення", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Додати ключ-значення", "noModelOverrides": "Для цієї моделі не налаштовано перевизначень.", "modelOverrideLoadFailed": "Не вдалося завантажити перевизначення моделі", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "Стисла CJK (文言)", "description": "Класичний китайський ультрастислий стиль (доступно тільки для китайської)." @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "Комбінації Round-robin та random перемикаються на інше з'єднання при кожному запиті замість закріплення всієї розмови за одним з'єднанням за хешем першого повідомлення. Залиште вимкненим, щоб зберегти влучання в кеш підказок (prompt-cache) для багатокрокових чатів. Перевизначення для конкретних комбінацій мають пріоритет.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "Вилучення облікових даних", "credentialRedactionDesc": "Вилучати API-ключі, токени та секрети з контексту, що надсилається провайдерам, та з відповідей.", "enableCredentialRedaction": "Увімкнути вилучення облікових даних", @@ -8621,6 +8623,27 @@ }, "enableTitle": "Увімкнути рушій", "enableDescription": "Запускається останнім у стеку (після того, як RTK/Caveman очищає текст, а OmniGlyph конвертує решту в зображення), а також працює автономно в режимі omniglyph. Це попередня версія, яка залишається вимкненою за замовчуванням до завершення наскрізної перевірки.", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "Збережено.", "saveFailed": "Не вдалося зберегти.", "enableAria": "Увімкнути рушій OmniGlyph", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "макс", "grokAutoTopUpMonth": "місяць", "grokAdditionalCredits": "Додаткові Кредити", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Лісоруб", "proxyTab": "Проксі", "budgetManagement": "Управління бюджетом", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "Перший токен", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json index 76749d9d57..b5c237a7d5 100644 --- a/src/i18n/messages/ur.json +++ b/src/i18n/messages/ur.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Console Logs", "logsTimeline": "Timeline", "logsTimelineSubtitle": "بصری درخواست کا وقت لائن", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "کھولیں", "close": "بند کریں" }, - "noResults": "کوئی نتائج نہیں", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "کوئی نتائج نہیں" }, "webhooks": { "title": "ویب ہکس", @@ -1739,8 +1739,8 @@ "quotaShare": "کوٹہ شیئر", "discovery": "دریافت", "freeProviderRankings": "مفت فراہم کنندگان کی درجہ بندی", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "مفت ٹیئرز", "gamification": "گیمیفیکیشن", "leaderboard": "لیڈر بورڈ", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available", "wizardStep4Title": "Review & Save", "wizardStep4Desc": "Review your configuration and activate the combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "On", "emailVisibilityStateOff": "Off", "reorderHandle": "Drag to reorder", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "اس فراہم کنندہ کو فرسودہ کر دیا گیا ہے۔", "riskNotice": { "title": "جاری رکھنے سے پہلے", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "استعمال کے انتباہات والا فراہم کنندہ — تفصیلات کے لیے کلک کریں", "oauth": "یہ فراہم کنندہ آپ کے آفیشل پروڈکٹ سیشن/OAuth کا استعمال کرتا ہے، جو پراکسی/راؤٹر کے استعمال کے لیے مجاز نہیں ہے۔ ہم خود مختار ایجنٹ کے زیادہ استعمال (OpenCloud طرز، طویل کثیر مرحلہ جاتی فلو، بڑے بیچز) کی سفارش نہیں کرتے ہیں — اپ اسٹریم اکاؤنٹ کو محدود یا بین کر کے ردعمل ظاہر کر سکتا ہے۔ اپنے خطرے پر استعمال کریں۔", "webCookie": "یہ فراہم کنندہ آپ کے ویب سیشن کوکیز کے ذریعے توثیق کرتا ہے۔ اپ اسٹریم سروس کسی بھی وقت سیشن کو باطل کر سکتی ہے، جس کے لیے آپ کو دوبارہ لاگ ان کرنے کی ضرورت ہوگی۔ طویل غیر حاضر کارروائیوں کے لیے تجویز نہیں کی جاتی ہے۔ اپنے خطرے پر استعمال کریں۔", @@ -5107,9 +5111,9 @@ "cancel": "منسوخ کریں" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "Disabled", "enableProvider": "Enable provider", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "Skipping {count} existing models", "autoSync": "Auto-Sync", "autoSyncShort": "Sync", + "autoFetchModels": "خودکار طور پر اپ اسٹریم ماڈلز حاصل کریں", + "autoFetchModelsTooltip": "جب ضرورت ہو تو اوپر کے ماڈلز کو حاصل کریں اور کیش کریں", + "autoFetchModelsEnabled": "اپ اسٹریم ماڈل خودکار حاصل کرنا فعال ہے", + "autoFetchModelsDisabled": "اپ اسٹریم ماڈل خودکار حاصل کرنا غیر فعال ہے", + "autoFetchModelsToggleFailed": "اپ اسٹریم ماڈل خودکار حاصل کرنے کو تبدیل کرنے میں ناکامی", + "autoFetchModelsPartialFailure": "کچھ کنکشنز کو اپ ڈیٹ کیا گیا، لیکن اوپر کی طرف ماڈل خودکار طور پر ہر جگہ تبدیل نہیں ہوا", + "overridesUpstreamModel": "اوپر والے کو اووررائیڈ کرتا ہے", + "overridesUpstreamModelHint": "آپ کی ترتیبات اس اوپر کی ماڈل کو اووررائیڈ کرتی ہیں", + "resetToUpstreamDefaults": "اپ اسٹریم ڈیفالٹس بحال کریں", + "resetToUpstreamDefaultsSuccess": "اپ اسٹریم ماڈل کے ڈیفالٹس بحال کر دیے گئے ہیں", + "resetToUpstreamDefaultsFailed": "اپ اسٹریم ماڈل کے ڈیفالٹس کو بحال کرنے میں ناکامی", "autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Auto-sync enabled — models will refresh periodically", "autoSyncDisabled": "Auto-sync disabled", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "نیٹو web_fetch ٹول کالز کو OmniRoute کے /v1/web/fetch پر دوبارہ لکھیں۔", "interceptionLoadError": "انٹرسیپشن کی ترتیبات لوڈ کرنے میں ناکامی: {error}", "interceptionSaveError": "انٹرسیپشن کی ترتیبات محفوظ کرنے میں ناکامی: {error}", - "ccAliasSectionTitle": "Claude کو کوڈ میں ظاہر کریں (claude/…)", - "ccAliasSectionHint": "اس فراہم کنندہ کے ماڈلز کو claude/<provider>/<model> آئینہ شناختوں کے تحت اشتہار دیں تاکہ Claude Code کے گیٹ وے ماڈل کی دریافت انہیں درج کر سکے۔ ڈیفالٹ کے طور پر بند — اس کو فعال کرنے سے تمام کلائنٹس کے لیے کیٹلاگ کی اندراجات دوگنا ہو جاتی ہیں۔", - "ccAliasProviderLevelLabel": "فراہم کنندہ ڈیفالٹ", - "ccAliasModelOverridesLabel": "فی ماڈل اووررائیڈز", - "ccAliasModelOverrideAriaLabel": "{modelId} کے لیے اووررائیڈ", - "ccAliasStateInherit": "وراثت", - "ccAliasStateOn": "پر", - "ccAliasStateOff": "بند", - "ccAliasAddModelPlaceholder": "ماڈل آئی ڈی (جیسے gpt-4o)", - "ccAliasAddModelButton": "اووررائیڈ شامل کریں", - "ccAliasLoadError": "ڈسکوری-ایلیاس سیٹنگز لوڈ کرنے میں ناکامی: {error}", - "ccAliasSaveError": "ڈسکوری-ایلیاس سیٹنگ کو محفوظ کرنے میں ناکامی: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Extra upstream headers", "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.", "compatUpstreamHeaderName": "Header name", @@ -6194,7 +6209,7 @@ "galadriel": "Galadriel کو ایک API کلید کے ساتھ منسلک کریں۔", "predibase": "$25 کے مفت ٹرائل کریڈٹس (30 دن کی میعاد)", "chenzk": "chenzk.top پر لائیو ماڈل کیٹلاگ کے ساتھ OpenAI سے مطابقت رکھنے والا گیٹ وے۔", - "freepik": "Freepik کے Mystic API کے ساتھ تصاویر تیار کریں۔", + "magnific": "Freepik کے Mystic API کے ساتھ تصاویر تیار کریں۔", "freetheai": "passthrough ماڈل سپورٹ کے ساتھ مفت OpenAI سے مطابقت رکھنے والا گیٹ وے۔", "g4f-gemini": "Gemini کے لیے مفت بغیر کلید والا g4f.space ریورس پراکسی، فی منٹ 5 درخواستوں تک محدود۔", "g4f-groq": "Groq کے لیے مفت بغیر کلید والا g4f.space ریورس پراکسی، فی منٹ 5 درخواستوں تک محدود۔", @@ -6209,6 +6224,7 @@ "claude": "Claude Code کو موجودہ OAuth فلو کے ساتھ منسلک کریں۔", "cline": "Cline کو موجودہ OAuth فلو کے ساتھ منسلک کریں۔", "cursor": "Cursor IDE کو موجودہ OAuth فلو کے ساتھ منسلک کریں۔", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "GitHub Copilot کو موجودہ OAuth فلو کے ساتھ منسلک کریں۔", "gitlab-duo": "ai_features + read_user اسکوپس کے ساتھ OAuth ایپلیکیشن۔ اس OmniRoute انسٹنس پر GITLAB_DUO_OAUTH_CLIENT_ID اور اختیاری طور پر GITLAB_DUO_OAUTH_CLIENT_SECRET کنفیگر کریں۔", "kilocode": "Kilo Code کو موجودہ OAuth فلو کے ساتھ منسلک کریں۔", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "وقفۂ انتظار میں", "codexPoolUsed": "استعمال شدہ", "codexPoolUntil": "{value} تک", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "نامعلوم متبادل", "anonymousFallbackDesc": "جب تمام کنفیگر کردہ کنکشنز ختم ہو جائیں (کوٹہ، کریڈٹس، یا میعاد)، اس فراہم کنندہ کی بغیر کلید کی سطح کو عارضی طور پر استعمال کریں۔ اس فراہم کنندہ کو چھوڑنے کے لیے بند کریں بجائے اس کے کہ گمنام درخواستیں بھیجیں — جب بغیر کلید کی سطح انہیں مسترد کرتی ہے (401) تو یہ تجویز کردہ ہے۔", "anonymousFallbackEnabled": "{provider} کے لیے نامعلوم متبادل فعال ہے", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "محفوظ شدہ ماڈل اینڈپوائنٹ کی ترتیبات", "searchByModelAria": "ماڈل کے ذریعے تلاش کریں", "selectSupportedEndpoint": "کم از کم ایک سپورٹ کردہ اینڈپوائنٹ منتخب کریں", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModelsDisabled": "اپ اسٹریم ماڈل خودکار حاصل کرنا غیر فعال ہے", - "autoFetchModelsEnabled": "اپ اسٹریم ماڈل خودکار حاصل کرنا فعال ہے", - "autoFetchModelsTooltip": "جب ضرورت ہو تو اوپر کے ماڈلز کو حاصل کریں اور کیش کریں", - "autoFetchModels": "خودکار طور پر اپ اسٹریم ماڈلز حاصل کریں", - "autoFetchModelsToggleFailed": "اپ اسٹریم ماڈل خودکار حاصل کرنے کو تبدیل کرنے میں ناکامی", - "overridesUpstreamModel": "اوپر والے کو اووررائیڈ کرتا ہے", - "autoFetchModelsPartialFailure": "کچھ کنکشنز کو اپ ڈیٹ کیا گیا، لیکن اوپر کی طرف ماڈل خودکار طور پر ہر جگہ تبدیل نہیں ہوا", - "overridesUpstreamModelHint": "آپ کی ترتیبات اس اوپر کی ماڈل کو اووررائیڈ کرتی ہیں", - "resetToUpstreamDefaultsFailed": "اپ اسٹریم ماڈل کے ڈیفالٹس کو بحال کرنے میں ناکامی", - "resetToUpstreamDefaultsSuccess": "اپ اسٹریم ماڈل کے ڈیفالٹس بحال کر دیے گئے ہیں", - "resetToUpstreamDefaults": "اپ اسٹریم ڈیفالٹس بحال کریں" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.", "autoDisableThreshold": "Ban Threshold", "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "ممنوعہ الفاظ", "customBannedSignalsDesc": "اضافی الفاظ جو مستقل اکاؤنٹ پر پابندی کی شناخت کو متحرک کرتے ہیں۔ پہلے سے موجود الفاظ ہمیشہ لاگو ہوتے ہیں۔", "customBannedSignalsPlaceholder": "مثال کے طور پر api key revoked", @@ -7210,6 +7203,7 @@ "configured": "کنفیگر شدہ", "none": "کوئی نہیں", "modelOverrideValuePlaceholder": "عددی قدر", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "کی ویلیو شامل کریں", "noModelOverrides": "اس ماڈل کے لیے کوئی اوور رائیڈز کنفیگر نہیں کیے گئے۔", "modelOverrideLoadFailed": "ماڈل اوور رائیڈز لوڈ کرنے میں ناکامی", @@ -7781,6 +7775,10 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, + "i-have-adhd": { + "label": "I have ADHD (action-first)", + "description": "Action-first output: next action leads, steps numbered, one concrete next step, no preamble." + }, "terse-cjk": { "label": "مختصر CJK (文言)", "description": "کلاسیکی چینی انتہائی مختصر انداز (صرف چینی زبان کے لیے دستیاب ہے)۔" @@ -8061,6 +8059,10 @@ "disableSessionStickinessDesc": "راؤنڈ رابن اور رینڈم کمبوز پہلے پیغام کے ہیش کے ذریعے پوری گفتگو کو ایک کنکشن سے منسلک کرنے کے بجائے ہر درخواست پر ایک مختلف کنکشن پر منتقل ہو جاتے ہیں۔ ملٹی ٹرن چیٹس کے لیے پرامپٹ کیش ہٹس کو برقرار رکھنے کے لیے اسے بند رہنے دیں۔ فی کمبو اوور رائیڈز کو ترجیح حاصل ہوگی۔", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Reasoning token buffer", + "reasoningTokenBufferDesc": "Allow combo routing to add max_tokens headroom only for known reasoning models when the full buffer fits inside a known output cap.", + "zeroLatencyOptimizations": "Zero-latency optimizations", + "zeroLatencyOptimizationsDesc": "Opt in to hedging, predictive TTFT skips, and proactive fallback compression. Leave off to prevent these latency features from racing targets or compressing fallback requests.", "credentialRedaction": "اسناد کی ریڈیکشن", "credentialRedactionDesc": "فراہم کنندگان کو بھیجے گئے سیاق و سباق اور جوابات سے API کیز، ٹوکنز اور خفیہ معلومات کو سنسر کریں۔", "enableCredentialRedaction": "اسناد کی سنسرشپ کو فعال کریں", @@ -8621,6 +8623,27 @@ }, "enableTitle": "انجن فعال کریں", "enableDescription": "اسٹیک میں سب سے آخر میں چلتا ہے (RTK/Caveman کے متن صاف کرنے کے بعد، OmniGlyph باقی ماندہ کو تصاویر میں تبدیل کرتا ہے) اور omniglyph موڈ کے ذریعے اسٹینڈ الون بھی چلتا ہے۔ یہ ایک پیش نظارہ ہے اور اینڈ ٹو اینڈ توثیق مکمل ہونے تک ڈیفالٹ طور پر بند رہتا ہے۔", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "محفوظ ہو گیا۔", "saveFailed": "محفوظ نہیں ہو سکا۔", "enableAria": "OmniGlyph انجن فعال کریں", @@ -9090,6 +9113,16 @@ "grokAutoTopUpMax": "زیادہ سے زیادہ", "grokAutoTopUpMonth": "مہینہ", "grokAdditionalCredits": "اضافی کریڈٹس", + "kimiExtraUsageCredits": "Extra Usage Credits", + "kimiExtraUsage": "Extra Usage", + "kimiExtraUsageEnabled": "Enabled", + "kimiExtraUsageDisabled": "Disabled", + "kimiExtraUsageFrozen": "Frozen", + "kimiExtraUsageUnavailable": "Unavailable", + "kimiMonthlyUsed": "Used this month", + "kimiMonthlyLimit": "Monthly limit", + "kimiMonthlyLimitUnlimited": "Unlimited", + "kimiAdditionalCredits": "Additional Credits", "loggerTab": "Logger", "proxyTab": "Proxy", "budgetManagement": "Budget Management", @@ -12488,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "پہلا ٹوکن", @@ -13213,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13753,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index b4ba071acd..9cf64c0d2f 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -1165,6 +1165,8 @@ "consoleLogs": "Nhật ký bảng điều khiển", "logsTimeline": "Timeline", "logsTimelineSubtitle": "Dòng thời gian yêu cầu trực quan", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "Định tuyến toàn cục", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1282,8 +1284,6 @@ "resilienceConnectionsSubtitle": "Cooldown, cầu dao, trạng thái khóa", "settingsModalityBridge": "Cầu Kết Nối Modality", "settingsModalityBridgeSubtitle": "Chuyển đổi hình ảnh/âm thanh → văn bản cho các mô hình chỉ văn bản", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations", "commandPalette": { "title": "Bảng lệnh", "searchPlaceholder": "Tìm kiếm trang, cài đặt, công cụ...", @@ -1800,6 +1800,11 @@ "updateStarted": "Đã bắt đầu cập nhật...", "reloadingPageAutomatically": "Đang tự động tải lại trang...", "providerTopology": "Cấu trúc liên kết nhà cung cấp", + "recentRequests": "Yêu cầu gần đây", + "recentRequestsEmpty": "Chưa có yêu cầu nào.", + "recentRequestsModel": "Mô hình", + "recentRequestsTokens": "Vào / Ra", + "recentRequestsWhen": "Khi", "downloadDmg": "Tải xuống DMG (macOS)", "downloadDmgDescription": "Đã có phiên bản mới của ứng dụng máy tính OmniRoute. Vui lòng tải xuống và cài đặt trình cài đặt DMG cho macOS để cập nhật (hiện tại: v{version}).", "downloadExe": "Tải xuống EXE (Windows)", @@ -3606,6 +3611,10 @@ "wizardStep3Desc": "Chọn cách phân phối các yêu cầu giữa các mô hình của bạn - hiện có 14 chiến lược", "wizardStep4Title": "Xem lại & Lưu", "wizardStep4Desc": "Xem lại cấu hình của bạn và kích hoạt combo", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "Bật", "emailVisibilityStateOff": "Tắt", "reorderHandle": "Kéo để sắp xếp lại", @@ -5233,6 +5242,17 @@ "skippingExistingModels": "Bỏ qua {count} mô hình đã tồn tại", "autoSync": "Tự động đồng bộ hóa", "autoSyncShort": "Đồng bộ", + "autoFetchModels": "Tự động lấy các mô hình upstream", + "autoFetchModelsTooltip": "Lấy và lưu trữ các mô hình upstream khi cần thiết", + "autoFetchModelsEnabled": "Mô hình upstream tự động lấy dữ liệu đã được kích hoạt", + "autoFetchModelsDisabled": "Tự động lấy mô hình upstream đã bị vô hiệu hóa", + "autoFetchModelsToggleFailed": "Không thể chuyển đổi chế độ tự động lấy mô hình upstream", + "autoFetchModelsPartialFailure": "Một số kết nối đã được cập nhật, nhưng mô hình upstream auto-fetch không được thay đổi ở mọi nơi", + "overridesUpstreamModel": "Ghi đè lên upstream", + "overridesUpstreamModelHint": "Cài đặt của bạn ghi đè lên mô hình upstream này", + "resetToUpstreamDefaults": "Khôi phục mặc định của upstream", + "resetToUpstreamDefaultsSuccess": "Đã khôi phục các giá trị mặc định của mô hình upstream", + "resetToUpstreamDefaultsFailed": "Không thể khôi phục mặc định mô hình upstream", "autoSyncTooltip": "Tự động làm mới danh sách mô hình sau mỗi 24 giờ (có thể cấu hình qua MODEL_SYNC_INTERVAL_HOURS)", "autoSyncEnabled": "Đã bật tự động đồng bộ hóa — các mô hình sẽ được làm mới định kỳ", "autoSyncDisabled": "Đã tắt tự động đồng bộ hóa", @@ -6194,7 +6214,7 @@ "galadriel": "Kết nối Galadriel bằng khóa API.", "predibase": "25 USD tín dụng dùng thử miễn phí (có hiệu lực 30 ngày)", "chenzk": "Gateway tương thích OpenAI với danh mục mô hình trực tiếp tại chenzk.top.", - "freepik": "Tạo hình ảnh bằng API Mystic của Freepik.", + "magnific": "Tạo hình ảnh bằng API Mystic của Freepik.", "freetheai": "Gateway miễn phí tương thích OpenAI, hỗ trợ chuyển tiếp mô hình.", "g4f-gemini": "Proxy ngược g4f.space miễn phí, không cần khóa cho Gemini, giới hạn 5 yêu cầu mỗi phút.", "g4f-groq": "Proxy ngược g4f.space miễn phí, không cần khóa cho Groq, giới hạn 5 yêu cầu mỗi phút.", @@ -6209,6 +6229,7 @@ "claude": "Kết nối Claude Code bằng luồng OAuth hiện có.", "cline": "Kết nối Cline bằng luồng OAuth hiện có.", "cursor": "Kết nối Cursor IDE bằng luồng OAuth hiện có.", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "Kết nối GitHub Copilot bằng luồng OAuth hiện có.", "gitlab-duo": "Ứng dụng OAuth với phạm vi ai_features + read_user. Cấu hình GITLAB_DUO_OAUTH_CLIENT_ID và tùy chọn GITLAB_DUO_OAUTH_CLIENT_SECRET trên instance OmniRoute này.", "kilocode": "Kết nối Kilo Code bằng luồng OAuth hiện có.", @@ -6280,18 +6301,6 @@ "codexPoolCoolingDown": "Đang trong thời gian chờ", "codexPoolUsed": "đã dùng", "codexPoolUntil": "Đến {value}", - "ccAliasSectionTitle": "Hiển thị trong Claude Code (claude/…)", - "ccAliasSectionHint": "Công bố các mô hình của nhà cung cấp này dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Mặc định tắt — bật lên sẽ nhân đôi số mục trong danh mục với mọi client.", - "ccAliasProviderLevelLabel": "Mặc định của nhà cung cấp", - "ccAliasModelOverridesLabel": "Ghi đè theo từng mô hình", - "ccAliasModelOverrideAriaLabel": "Ghi đè cho {modelId}", - "ccAliasStateInherit": "Kế thừa", - "ccAliasStateOn": "Bật", - "ccAliasStateOff": "Tắt", - "ccAliasAddModelPlaceholder": "Id mô hình (ví dụ: gpt-4o)", - "ccAliasAddModelButton": "Thêm ghi đè", - "ccAliasLoadError": "Không tải được cài đặt bí danh khám phá: {error}", - "ccAliasSaveError": "Không lưu được cài đặt bí danh khám phá: {error}", "anonymousFallbackTitle": "Dự phòng ẩn danh", "anonymousFallbackDesc": "Khi tất cả kết nối đã cấu hình đều cạn kiệt (hạn ngạch, tín dụng hoặc hết hạn), hãy tạm thời sử dụng tầng không cần khóa của nhà cung cấp này. Tắt tùy chọn này để bỏ qua nhà cung cấp thay vì gửi yêu cầu ẩn danh — khuyến nghị khi tầng không cần khóa từ chối các yêu cầu đó (401).", "anonymousFallbackEnabled": "Đã bật dự phòng ẩn danh cho {provider}", @@ -6367,18 +6376,7 @@ "savedModelEndpointSettings": "Đã lưu cài đặt endpoint mô hình", "searchByModelAria": "Tìm kiếm theo mô hình", "selectSupportedEndpoint": "Chọn ít nhất một endpoint được hỗ trợ", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "Tự động lấy các mô hình upstream", - "autoFetchModelsDisabled": "Tự động lấy mô hình upstream đã bị vô hiệu hóa", - "autoFetchModelsEnabled": "Mô hình upstream tự động lấy dữ liệu đã được kích hoạt", - "autoFetchModelsTooltip": "Lấy và lưu trữ các mô hình upstream khi cần thiết", - "overridesUpstreamModel": "Ghi đè lên upstream", - "autoFetchModelsPartialFailure": "Một số kết nối đã được cập nhật, nhưng mô hình upstream auto-fetch không được thay đổi ở mọi nơi", - "overridesUpstreamModelHint": "Cài đặt của bạn ghi đè lên mô hình upstream này", - "autoFetchModelsToggleFailed": "Không thể chuyển đổi chế độ tự động lấy mô hình upstream", - "resetToUpstreamDefaults": "Khôi phục mặc định của upstream", - "resetToUpstreamDefaultsSuccess": "Đã khôi phục các giá trị mặc định của mô hình upstream", - "resetToUpstreamDefaultsFailed": "Không thể khôi phục mặc định mô hình upstream" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Cài đặt", @@ -7210,6 +7208,7 @@ "configured": "đã định cấu hình", "none": "Không có", "modelOverrideValuePlaceholder": "Giá trị số", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "Thêm cặp khóa-giá trị", "noModelOverrides": "Không có ghi đè nào được định cấu hình cho mô hình này.", "modelOverrideLoadFailed": "Tải ghi đè mô hình thất bại", @@ -7781,13 +7780,13 @@ "label": "Ponytail (lazy senior dev)", "description": "Lazy senior-dev discipline: climb the YAGNI ladder, fix root cause, smallest working diff." }, - "terse-cjk": { - "label": "CJK súc tích (文言)", - "description": "Văn phong Hán cổ cực kỳ súc tích (chỉ khả dụng với tiếng Trung)." - }, "i-have-adhd": { "label": "Tôi bị ADHD (ưu tiên hành động)", "description": "Đầu ra ưu tiên hành động: nêu hành động kế tiếp trước, các bước được đánh số, một bước tiếp theo cụ thể, không mở đầu dài dòng." + }, + "terse-cjk": { + "label": "CJK súc tích (文言)", + "description": "Văn phong Hán cổ cực kỳ súc tích (chỉ khả dụng với tiếng Trung)." } }, "resilienceWaitForCooldown": "Chờ thời gian hồi", @@ -8065,6 +8064,10 @@ "disableSessionStickinessDesc": "Các tổ hợp luân phiên và ngẫu nhiên sẽ chuyển sang một kết nối khác với mỗi yêu cầu, thay vì gắn toàn bộ cuộc trò chuyện với một kết nối dựa trên mã băm của tin nhắn đầu tiên. Hãy để tùy chọn này tắt để duy trì các lần trúng cache prompt cho các cuộc trò chuyện nhiều lượt. Các thiết lập ghi đè theo từng tổ hợp được ưu tiên.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", + "reasoningTokenBuffer": "Bộ đệm token suy luận", + "reasoningTokenBufferDesc": "Cho phép định tuyến combo thêm khoảng dư max_tokens chỉ với các mô hình suy luận đã biết, khi toàn bộ bộ đệm vẫn nằm trong giới hạn đầu ra đã biết.", + "zeroLatencyOptimizations": "Tối ưu hóa zero-latency", + "zeroLatencyOptimizationsDesc": "Bật hedging, bỏ qua TTFT theo dự đoán và nén dự phòng chủ động. Để tắt nếu bạn không muốn các tính năng độ trễ này chạy đua giữa các đích hoặc nén các yêu cầu dự phòng.", "credentialRedaction": "Credential Redaction", "credentialRedactionDesc": "Redact API keys, tokens, and secrets from context sent to providers and from responses.", "enableCredentialRedaction": "Enable credential redaction", @@ -8220,11 +8223,7 @@ "cliproxyapiHealth": "Sức Khỏe", "cliproxyapiPort": "Cổng", "qdrantHost": "Máy chủ", - "qdrantCollection": "Bộ Sưu Tập", - "reasoningTokenBuffer": "Bộ đệm token suy luận", - "reasoningTokenBufferDesc": "Cho phép định tuyến combo thêm khoảng dư max_tokens chỉ với các mô hình suy luận đã biết, khi toàn bộ bộ đệm vẫn nằm trong giới hạn đầu ra đã biết.", - "zeroLatencyOptimizations": "Tối ưu hóa zero-latency", - "zeroLatencyOptimizationsDesc": "Bật hedging, bỏ qua TTFT theo dự đoán và nén dự phòng chủ động. Để tắt nếu bạn không muốn các tính năng độ trễ này chạy đua giữa các đích hoặc nén các yêu cầu dự phòng." + "qdrantCollection": "Bộ Sưu Tập" }, "contextRtk": { "title": "RTK Engine", diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index b2c15380aa..b4b6bad59b 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -1165,6 +1165,8 @@ "consoleLogs": "控制台日志", "logsTimeline": "时间线", "logsTimelineSubtitle": "可视化请求时间线", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "全局路由", "mitmProxy": "MITM 代理", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "打开", "close": "关闭" }, - "noResults": "没有结果", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "没有结果" }, "webhooks": { "title": "Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "配额共享", "discovery": "发现", "freeProviderRankings": "免费服务商排行", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "免费层级", "gamification": "游戏化", "leaderboard": "排行榜", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "选择请求在模型之间的分发方式 — 提供 13 种策略", "wizardStep4Title": "审查并保存", "wizardStep4Desc": "审查您的配置并激活组合", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "开启", "emailVisibilityStateOff": "关闭", "reorderHandle": "拖拽排序", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "此提供者已弃用", "riskNotice": { "title": "继续之前", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "该提供者有使用注意事项 —— 点击查看详情", "oauth": "此提供者使用你官方产品的会话 / OAuth,这并未被授权用于代理或路由用途。 不建议进行高强度的自主代理使用(OpenCloud 风格、长链路多步流程、大批量请求)—— 上游可能因此限制甚至封禁账号。 使用风险自负。", "webCookie": "此提供者通过你的网页会话 Cookie 进行鉴权。上游服务可能随时让会话失效,届时你需要重新登录。不建议用于长时间无人值守的操作。 使用风险自负。", @@ -5107,9 +5111,9 @@ "cancel": "取消" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "已禁用", "enableProvider": "启用提供者", @@ -5449,18 +5453,18 @@ "interceptFetchHint": "将原生的 web_fetch 工具调用重写为 OmniRoute 的 /v1/web/fetch。", "interceptionLoadError": "加载拦截设置失败:{error}", "interceptionSaveError": "保存拦截设置失败:{error}", - "ccAliasSectionTitle": "在 Claude Code 中暴露 (claude/…)", - "ccAliasSectionHint": "将该提供者的模型以 claude/<provider>/<model> 镜像 ID 发布,让 Claude Code 的网关模型可以发现它们。默认关闭 — 启用会使所有客户端的目录条目翻倍。", - "ccAliasProviderLevelLabel": "提供者默认值", - "ccAliasModelOverridesLabel": "按模型覆盖", - "ccAliasModelOverrideAriaLabel": "覆盖 {modelId}", - "ccAliasStateInherit": "继承", - "ccAliasStateOn": "开启", - "ccAliasStateOff": "关闭", - "ccAliasAddModelPlaceholder": "模型 ID (例如 gpt-4o)", - "ccAliasAddModelButton": "添加覆盖", - "ccAliasLoadError": "加载发现别名设置失败: {error}", - "ccAliasSaveError": "保存发现别名设置失败: {error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "上游额外请求头", "compatUpstreamHeadersHint": "与修改厂商连接/API 配置同属高权限能力,仅可信管理员应使用。这些头会在 OmniRoute 按厂商 API Key 自动加好鉴权头之后再合并。若「名称」与系统已加的头相同(例如都叫 Authorization),则以你填的值为准,会整段替换自动那条(含 Bearer 令牌),上游请求里不再使用面板里保存的密钥来生成 Authorization。填错可能导致 401,请谨慎。每个请求头单独一行;部分网关需要额外 Authentication 等可在此加。鼠标移入或聚焦「值」可暂时看明文。点空白处、关闭本面板或切走焦点即保存。", "compatUpstreamHeaderName": "请求头名称", @@ -6205,7 +6209,7 @@ "galadriel": "使用 API 密钥连接 Galadriel。", "predibase": "$25 免费试用额度(30 天有效期)", "chenzk": "兼容 OpenAI 的网关,在 chenzk.top 提供实时模型目录。", - "freepik": "使用 Freepik 的 Mystic API 生成图像。", + "magnific": "使用 Freepik 的 Mystic API 生成图像。", "freetheai": "免费的 OpenAI 兼容网关,支持直通模型。", "g4f-gemini": "免费免密钥的 g4f.space Gemini 反向代理,限制为每分钟 5 次请求。", "g4f-groq": "免费免密钥的 g4f.space Groq 反向代理,限制为每分钟 5 次请求。", @@ -6220,6 +6224,7 @@ "claude": "使用现有的 OAuth 流程连接 Claude Code。", "cline": "使用现有的 OAuth 流程连接 Cline。", "cursor": "使用现有的 OAuth 流程连接 Cursor IDE。", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "使用现有的 OAuth 流程连接 GitHub Copilot。", "gitlab-duo": "具有 ai_features + read_user 作用域的 OAuth 应用程序。在此 OmniRoute 实例上配置 GITLAB_DUO_OAUTH_CLIENT_ID 以及可选的 GITLAB_DUO_OAUTH_CLIENT_SECRET。", "kilocode": "使用现有的 OAuth 流程连接 Kilo Code。", @@ -6291,18 +6296,6 @@ "codexPoolCoolingDown": "冷却中", "codexPoolUsed": "已使用", "codexPoolUntil": "截至 {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "匿名回退", "anonymousFallbackDesc": "当所有配置的连接耗尽(配额、积分或到期)时,临时使用此提供者的无密钥层。关闭以跳过此提供者,而不是发送匿名请求 — 当无密钥层拒绝它们时(401)建议使用。", "anonymousFallbackEnabled": "为 {provider} 启用匿名回退", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "若提供者连接返回特定的永久封禁信号(如 HTTP 403\"请验证您的账户\"),则将其永久标记为停用。这会将其从组合轮换中移除。", "autoDisableThreshold": "封禁阈值", "autoDisableThresholdDesc": "触发永久停用所需的连续封禁信号次数。", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "封禁关键词", "customBannedSignalsDesc": "触发永久封号检测的附加关键词。内置关键词始终生效。", "customBannedSignalsPlaceholder": "例如 api key revoked", @@ -7210,6 +7203,7 @@ "configured": "已配置", "none": "无", "modelOverrideValuePlaceholder": "数字值", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "添加键值", "noModelOverrides": "该模型尚未配置覆盖。", "modelOverrideLoadFailed": "加载模型覆盖失败", @@ -8629,6 +8623,27 @@ }, "enableTitle": "启用引擎", "enableDescription": "在堆栈中最后运行(在 RTK/Caveman 清理文本、OmniGlyph 将剩余部分转换为图像之后),也可以通过 omniglyph 模式独立运行。此功能为预览版,在端到端验证完成前默认保持关闭。", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "已保存。", "saveFailed": "无法保存。", "enableAria": "启用 OmniGlyph 引擎", @@ -12506,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "首个 Token", @@ -13231,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13771,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index 0da35d19db..b2d9679086 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -1165,6 +1165,8 @@ "consoleLogs": "控制台日誌", "logsTimeline": "Timeline", "logsTimelineSubtitle": "視覺請求時間線", + "conversations": "Conversations", + "conversationsSubtitle": "Multi-turn agentic conversations", "globalRouting": "全域性路由", "mitmProxy": "MITM 代理", "oneProxy": "1Proxy", @@ -1291,9 +1293,7 @@ "open": "打開", "close": "關閉" }, - "noResults": "沒有結果", - "conversations": "Conversations", - "conversationsSubtitle": "Multi-turn agentic conversations" + "noResults": "沒有結果" }, "webhooks": { "title": "Webhook", @@ -1739,8 +1739,8 @@ "quotaShare": "配額分享", "discovery": "探索", "freeProviderRankings": "免費提供者排名", - "radar": "__MISSING__:Radar", - "setup": "__MISSING__:Setup", + "radar": "Radar", + "setup": "Setup", "freeTiers": "免費方案", "gamification": "遊戲化", "leaderboard": "排行榜", @@ -3606,6 +3606,10 @@ "wizardStep3Desc": "選擇請求在模型之間的分發方式 — 提供 13 種策略", "wizardStep4Title": "審查並儲存", "wizardStep4Desc": "審查您的設定並啟用組合", + "usageGuideInvokeTitle": "How to call this combo", + "usageGuideInvokeDesc": "Send the combo's exact name as the model, e.g. model: \"my-combo\" (or combo/my-combo).", + "usageGuideInvokeAutoNote": "auto and auto/* are a separate zero-config router that does not use your combos (unless a combo is literally named auto).", + "usageGuideInvokeOpenrouterNote": "openrouter/auto is a real paid OpenRouter product (Auto Best Available), not an OmniRoute alias — exclude it via Settings → Routing → Hide paid models.", "emailVisibilityStateOn": "開啟", "emailVisibilityStateOff": "關閉", "reorderHandle": "拖拽排序", @@ -5097,7 +5101,7 @@ "deprecatedProvider": "此提供者已棄用", "riskNotice": { "title": "繼續之前", - "detailsTitle": "__MISSING__:Usage caveats", + "detailsTitle": "Usage caveats", "tooltip": "該提供者有使用注意事項 —— 點選檢視詳情", "oauth": "此提供者使用你官方產品的會話 / OAuth,這並未被授權用於代理或路由用途。 不建議進行高強度的自主代理使用(OpenCloud 風格、長鏈路多步流程、大批次請求)—— 上游可能因此限制甚至封禁帳號。 使用風險自負。", "webCookie": "此提供者通過你的網頁會話 Cookie 進行鑑權。上游服務可能隨時讓會話失效,屆時你需要重新登入。不建議用於長時間無人值守的操作。 使用風險自負。", @@ -5107,9 +5111,9 @@ "cancel": "取消" }, "warningNotice": { - "tooltip": "__MISSING__:{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", - "lastFailureSuffix": "__MISSING__: (last failure {time})", - "ariaLabel": "__MISSING__:View connection health details, {count} warning(s)" + "tooltip": "{count} connection(s) flagged — up to {maxFailures} recent failures{lastFailureSuffix}. Click to view connection health.", + "lastFailureSuffix": " (last failure {time})", + "ariaLabel": "View connection health details, {count} warning(s)" }, "disabled": "已停用", "enableProvider": "啟用提供者", @@ -5233,6 +5237,17 @@ "skippingExistingModels": "跳過 {count} 個已有模型", "autoSync": "自動同步", "autoSyncShort": "同步", + "autoFetchModels": "自動獲取上游模型", + "autoFetchModelsTooltip": "在需要時獲取並快取上游模型", + "autoFetchModelsEnabled": "上游模型自動獲取已啟用", + "autoFetchModelsDisabled": "上游模型自動獲取已禁用", + "autoFetchModelsToggleFailed": "無法切換上游模型自動獲取", + "autoFetchModelsPartialFailure": "某些連接已更新,但上游模型自動獲取並未在所有地方更改", + "overridesUpstreamModel": "覆蓋上游", + "overridesUpstreamModelHint": "您的設定覆蓋了此上游模型", + "resetToUpstreamDefaults": "恢復上游預設值", + "resetToUpstreamDefaultsSuccess": "已恢復上游模型預設值", + "resetToUpstreamDefaultsFailed": "無法恢復上游模型的預設值", "autoSyncTooltip": "每 24 小時自動重新整理模型列表(可通過 MODEL_SYNC_INTERVAL_HOURS 設定)", "autoSyncEnabled": "自動同步已啟用 — 模型將定期重新整理", "autoSyncDisabled": "自動同步已停用", @@ -5438,18 +5453,18 @@ "interceptFetchHint": "將原生的 web_fetch 工具呼叫重新導向至 OmniRoute 的 /v1/web/fetch。", "interceptionLoadError": "載入攔截設定失敗:{error}", "interceptionSaveError": "儲存攔截設定失敗:{error}", - "ccAliasSectionTitle": "在 Claude Code (claude/…) 中公開", - "ccAliasSectionHint": "在 claude/<provider>/<model> 鏡像 ID 下廣告此提供者的模型,以便 Claude Code 的網關模型發現可以列出它們。預設為關閉 — 啟用此功能會使所有客戶的目錄條目加倍。", - "ccAliasProviderLevelLabel": "提供者預設", - "ccAliasModelOverridesLabel": "每個模型的覆蓋設定", - "ccAliasModelOverrideAriaLabel": "{modelId} 的覆蓋設定", - "ccAliasStateInherit": "繼承", - "ccAliasStateOn": "開啟", - "ccAliasStateOff": "關閉", - "ccAliasAddModelPlaceholder": "模型 ID(例如:gpt-4o)", - "ccAliasAddModelButton": "新增覆蓋", - "ccAliasLoadError": "無法加載 discovery-alias 設定:{error}", - "ccAliasSaveError": "無法保存 discovery-alias 設定:{error}", + "ccAliasSectionTitle": "Expose in Claude Code (claude/…)", + "ccAliasSectionHint": "Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", + "ccAliasProviderLevelLabel": "Provider default", + "ccAliasModelOverridesLabel": "Per-model overrides", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", + "ccAliasStateInherit": "Inherit", + "ccAliasStateOn": "On", + "ccAliasStateOff": "Off", + "ccAliasAddModelPlaceholder": "Model id (e.g. gpt-4o)", + "ccAliasAddModelButton": "Add override", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "上游額外請求頭", "compatUpstreamHeadersHint": "與修改廠商連線/API 設定同屬高許可權能力,僅可信管理員應使用。這些頭會在 OmniRoute 按廠商 API Key 自動加好鑑權頭之後再合併。若「名稱」與系統已加的頭相同(例如都叫 Authorization),則以你填的值為準,會整段替換自動那條(含 Bearer 權杖),上游請求裡不再使用面板裡儲存的金鑰來生成 Authorization。填錯可能導致 401,請謹慎。每個請求頭單獨一行;部分閘道器需要額外 Authentication 等可在此加。滑鼠移入或聚焦「值」可暫時看明文。點空白處、關閉本面板或切走焦點即儲存。", "compatUpstreamHeaderName": "請求頭名稱", @@ -6194,7 +6209,7 @@ "galadriel": "使用 API 金鑰連線 Galadriel。", "predibase": "$25 美元免費試用額度(30 天有效期)", "chenzk": "OpenAI 相容閘道,在 chenzk.top 提供即時模型目錄。", - "freepik": "使用 Freepik 的 Mystic API 生成圖片。", + "magnific": "使用 Freepik 的 Mystic API 生成圖片。", "freetheai": "免費的 OpenAI 相容閘道,支援透傳模型。", "g4f-gemini": "免費無需金鑰的 g4f.space Gemini 反向代理,每分鐘限制 5 次請求。", "g4f-groq": "免費無需金鑰的 g4f.space Groq 反向代理,每分鐘限制 5 次請求。", @@ -6209,6 +6224,7 @@ "claude": "使用現有的 OAuth 流程連線 Claude Code。", "cline": "使用現有的 OAuth 流程連線 Cline。", "cursor": "使用現有的 OAuth 流程連線 Cursor IDE。", + "cursor-api": "Connect Cursor with a user API key (crsr_...) from cursor.com/dashboard/api; no IDE session needed.", "github": "使用現有的 OAuth 流程連線 GitHub Copilot。", "gitlab-duo": "具有 ai_features + read_user 範圍的 OAuth 應用程式。在此 OmniRoute 實例上設定 GITLAB_DUO_OAUTH_CLIENT_ID 和可選的 GITLAB_DUO_OAUTH_CLIENT_SECRET。", "kilocode": "使用現有的 OAuth 流程連線 Kilo Code。", @@ -6280,18 +6296,6 @@ "codexPoolCoolingDown": "冷卻中", "codexPoolUsed": "已使用", "codexPoolUntil": "截至 {value}", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}", "anonymousFallbackTitle": "匿名後備", "anonymousFallbackDesc": "當所有配置的連接耗盡(配額、積分或到期)時,暫時使用此提供者的無密鑰層級。關閉以跳過此提供者,而不是發送匿名請求 — 當無密鑰層級拒絕它們(401)時建議這樣做。", "anonymousFallbackEnabled": "為 {provider} 啟用匿名後備", @@ -6367,18 +6371,7 @@ "savedModelEndpointSettings": "已儲存的模型端點設定", "searchByModelAria": "按型號搜尋", "selectSupportedEndpoint": "請選擇至少一個受支持的端點", - "antigravityClientProfileHarness": "Harness / CLI", - "autoFetchModels": "自動獲取上游模型", - "autoFetchModelsDisabled": "上游模型自動獲取已禁用", - "autoFetchModelsEnabled": "上游模型自動獲取已啟用", - "autoFetchModelsTooltip": "在需要時獲取並快取上游模型", - "autoFetchModelsToggleFailed": "無法切換上游模型自動獲取", - "autoFetchModelsPartialFailure": "某些連接已更新,但上游模型自動獲取並未在所有地方更改", - "overridesUpstreamModel": "覆蓋上游", - "overridesUpstreamModelHint": "您的設定覆蓋了此上游模型", - "resetToUpstreamDefaults": "恢復上游預設值", - "resetToUpstreamDefaultsSuccess": "已恢復上游模型預設值", - "resetToUpstreamDefaultsFailed": "無法恢復上游模型的預設值" + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "設定", @@ -6597,12 +6590,12 @@ "autoDisableDescription": "若提供者連線返回特定的永久封禁訊號(如 HTTP 403\"請驗證您的帳戶\"),則將其永久標記為停用。這會將其從組合輪換中移除。", "autoDisableThreshold": "封禁閾值", "autoDisableThresholdDesc": "觸發永久停用所需的連續封禁訊號次數。", - "autoDisableBannedScope": "__MISSING__:Apply auto-disable to", - "autoDisableBannedScopeDesc": "__MISSING__:Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", - "autoDisableBannedScopeAll": "__MISSING__:All connections", - "autoDisableBannedScopeAllDesc": "__MISSING__:Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", - "autoDisableBannedScopeSubscription": "__MISSING__:Login / subscription accounts only", - "autoDisableBannedScopeSubscriptionDesc": "__MISSING__:Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", + "autoDisableBannedScope": "Apply auto-disable to", + "autoDisableBannedScopeDesc": "Login seats (paid subscriptions and free accounts) can be locked by the upstream if OmniRoute keeps retrying after a ban. Paid prepaid API keys do not have that risk — leave them in the pool so fill-first can use the next key.", + "autoDisableBannedScopeAll": "All connections", + "autoDisableBannedScopeAllDesc": "Deactivate every connection that returns a permanent ban signal, including prepaid API keys.", + "autoDisableBannedScopeSubscription": "Login / subscription accounts only", + "autoDisableBannedScopeSubscriptionDesc": "Deactivate OAuth, cookie, session, and web-login seats (paid or free). Prepaid API keys stay active so routing can fail over.", "customBannedSignals": "禁止關鍵字", "customBannedSignalsDesc": "觸發永久帳戶封鎖偵測的額外關鍵字。內建關鍵字始終適用。", "customBannedSignalsPlaceholder": "例如:api key revoked", @@ -7210,6 +7203,7 @@ "configured": "已設定", "none": "無", "modelOverrideValuePlaceholder": "數值", + "modelOverrideReasoningEffortsPlaceholder": "English comma-separated, e.g. low, medium, high", "addKeyValue": "新增鍵值", "noModelOverrides": "此模型未設定任何覆寫。", "modelOverrideLoadFailed": "載入模型覆寫設定失敗", @@ -8629,6 +8623,27 @@ }, "enableTitle": "啟用引擎", "enableDescription": "在堆疊中最後執行(RTK/Caveman 清理文字後,OmniGlyph 將剩餘部分轉換為圖片),也可透過 omniglyph 模式獨立執行。此為預覽功能,預設為關閉,待端到端驗證完成後才會預設開啟。", + "profileTitle": "Compression profile", + "profileDescription": "The profile is a ceiling, not a floor: a stricter profile cannot be reopened by a per-step override. Measured on this codebase: with coding-safe or balanced, a session that has not accumulated history yet compresses nothing, because both raise the minimum-characters threshold and keep the system prompt, tool schemas and tool results native.", + "profiles": { + "aggressive": { + "label": "Aggressive (default)", + "description": "The policy the published receipts measured. Images the system prompt, tool documentation and dense history." + }, + "balanced": { + "label": "Balanced", + "description": "Keeps live state native and protects the last 8 turns; only collapses older closed history." + }, + "codingSafe": { + "label": "Coding-safe", + "description": "Keeps authority, tool schemas and live tool output native, protecting the last 12 turns. Compresses nothing until the session accumulates history." + }, + "passthrough": { + "label": "Passthrough", + "description": "Routes without transforming. The engine is skipped and the request is forwarded untouched." + } + }, + "profileAria": "Select the OmniGlyph compression profile", "saved": "已儲存。", "saveFailed": "無法儲存。", "enableAria": "啟用 OmniGlyph 引擎", @@ -12506,9 +12521,9 @@ }, "badges": { "radar-supporter": { - "name": "__MISSING__:Radar Supporter", - "description": "__MISSING__:Verified a live OmniRoute Radar supporter feed", - "criteria": "__MISSING__:Verify a signed live Radar supporter feed." + "name": "Radar Supporter", + "description": "Verified a live OmniRoute Radar supporter feed", + "criteria": "Verify a signed live Radar supporter feed." }, "first-token": { "name": "第一個代幣", @@ -13231,7 +13246,7 @@ "localStateSaveFailed": "Failed to save local Radar settings", "guidedCombos": "Guided combos", "offers": "Offers", - "intel": "__MISSING__:Intel" + "intel": "Intel" }, "radarCombosPage": { "title": "Radar guided combos", @@ -13771,36 +13786,36 @@ "trialDays": "{days, plural, one {# day} other {# days}}" }, "radarIntelPage": { - "title": "__MISSING__:Radar Intel", - "subtitle": "__MISSING__:Radar-owned ELO rankings and factual catalog movement.", - "backToRadar": "__MISSING__:Back to Radar", - "loading": "__MISSING__:Loading Intel...", - "refresh": "__MISSING__:Refresh Intel", - "syncing": "__MISSING__:Refreshing...", - "loadFailed": "__MISSING__:We could not refresh Intel. The last verified local cache is kept.", - "empty": "__MISSING__:No verified Intel snapshot is available yet.", - "supporterBadge": "__MISSING__:Radar Supporter", - "methodology": "__MISSING__:Methodology", - "eloMethod": "__MISSING__:ELO, initial {initial}, K={factor}", - "freshness": "__MISSING__:Catalog freshness", - "ageDays": "__MISSING__:{days, plural, one {# day old} other {# days old}}", - "trend": "__MISSING__:Catalog trend", - "modelDelta": "__MISSING__:{current} models, +{added} / -{removed}", - "ranking": "__MISSING__:Model ranking", - "noRankings": "__MISSING__:No confirmed comparisons are available yet.", - "model": "__MISSING__:Model", - "category": "__MISSING__:Category", - "rating": "__MISSING__:Rating", - "matches": "__MISSING__:Matches", + "title": "Radar Intel", + "subtitle": "Radar-owned ELO rankings and factual catalog movement.", + "backToRadar": "Back to Radar", + "loading": "Loading Intel...", + "refresh": "Refresh Intel", + "syncing": "Refreshing...", + "loadFailed": "We could not refresh Intel. The last verified local cache is kept.", + "empty": "No verified Intel snapshot is available yet.", + "supporterBadge": "Radar Supporter", + "methodology": "Methodology", + "eloMethod": "ELO, initial {initial}, K={factor}", + "freshness": "Catalog freshness", + "ageDays": "{days, plural, one {# day old} other {# days old}}", + "trend": "Catalog trend", + "modelDelta": "{current} models, +{added} / -{removed}", + "ranking": "Model ranking", + "noRankings": "No confirmed comparisons are available yet.", + "model": "Model", + "category": "Category", + "rating": "Rating", + "matches": "Matches", "freshnessValues": { - "fresh": "__MISSING__:Fresh", - "aging": "__MISSING__:Aging", - "stale": "__MISSING__:Stale" + "fresh": "Fresh", + "aging": "Aging", + "stale": "Stale" }, "trendValues": { - "growing": "__MISSING__:Growing", - "stable": "__MISSING__:Stable", - "shrinking": "__MISSING__:Shrinking" + "growing": "Growing", + "stable": "Stable", + "shrinking": "Shrinking" } }, "capabilityFilter": { diff --git a/src/lib/db/migrationRunner.ts b/src/lib/db/migrationRunner.ts index 251ec8cda2..2b1b6269e1 100644 --- a/src/lib/db/migrationRunner.ts +++ b/src/lib/db/migrationRunner.ts @@ -505,6 +505,18 @@ function isSchemaAlreadyApplied( // Retroactive guard for 143_radar_local_model_state -> 153. A database // that already created the table must not execute or track it twice. return hasTable(db, "radar_local_model_state"); + case "159": + // Renumbered from 158 (collided with 158_call_logs_error_type on + // release/v3.8.50). Idempotent freepik->magnific slug rewrite: skip + // when provider_connections has no remaining freepik rows (already + // applied under 158, or a DB that never stored Freepik). + if (migration.name !== "rename_freepik_to_magnific") return false; + if (!hasTable(db, "provider_connections")) return false; + return ( + db + .prepare("SELECT 1 FROM provider_connections WHERE provider = 'freepik' LIMIT 1") + .get() == null + ); default: return false; } diff --git a/src/lib/db/migrations/160_rename_freepik_to_magnific.sql b/src/lib/db/migrations/160_rename_freepik_to_magnific.sql new file mode 100644 index 0000000000..3c38e20e39 --- /dev/null +++ b/src/lib/db/migrations/160_rename_freepik_to_magnific.sql @@ -0,0 +1,41 @@ +-- Canonical provider id is now `magnific`. Freepik was the previous slug +-- (Magnific started as Freepik's developer API). Rewrite stored rows so +-- dashboard cards, credentials, and usage stay attached after the rename. +-- `freepik` remains a runtime alias for old URLs and `freepik/` ids. + +UPDATE provider_connections SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE usage_history SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE call_logs SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE registered_keys SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE provider_key_limits SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE quota_snapshots SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE provider_plans SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE hourly_usage_summary SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE daily_usage_summary SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE provider_quota_reset_events SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE session_account_affinity SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE model_context_overrides SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE model_capability_overrides SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE session_model_history SET provider = 'magnific' WHERE provider = 'freepik'; +UPDATE tier_assignments SET provider = 'magnific' WHERE provider = 'freepik'; + +UPDATE usage_history +SET model = 'magnific' || substr(model, 8) +WHERE model LIKE 'freepik/%'; + +UPDATE call_logs +SET model = 'magnific' || substr(model, 8) +WHERE model LIKE 'freepik/%'; + +UPDATE hourly_usage_summary +SET model = 'magnific' || substr(model, 8) +WHERE model LIKE 'freepik/%'; + +UPDATE daily_usage_summary +SET model = 'magnific' || substr(model, 8) +WHERE model LIKE 'freepik/%'; + +UPDATE key_value +SET key = 'magnific' +WHERE namespace IN ('cliToolLastConfig', 'cliToolInitialConfig') + AND key = 'freepik'; diff --git a/src/lib/modelMetadataRegistry.ts b/src/lib/modelMetadataRegistry.ts index c5c0bbbb7c..5e477084ea 100644 --- a/src/lib/modelMetadataRegistry.ts +++ b/src/lib/modelMetadataRegistry.ts @@ -29,7 +29,6 @@ import { CANONICAL_EFFORT_VALUES, extendCodexGpt56EffortValues, } from "@/shared/reasoning/effortStandardization"; -import type { ModelCapabilityResolutionSnapshot } from "@/lib/modelCapabilityResolutionSnapshot"; const MODEL_METADATA_SCHEMA_VERSION = "model-metadata-v1"; diff --git a/src/lib/providers/catalog.ts b/src/lib/providers/catalog.ts index 1f53542c6b..0491b4d899 100644 --- a/src/lib/providers/catalog.ts +++ b/src/lib/providers/catalog.ts @@ -9,6 +9,7 @@ import { UPSTREAM_PROXY_PROVIDERS, WEB_COOKIE_PROVIDERS, isClaudeCodeCompatibleProvider, + resolveProviderId, supportsApiKeyOnFreeProvider, supportsDualAuthProvider, type RiskNoticeVariant, @@ -194,9 +195,10 @@ export function getStaticProviderCatalogGroup( export function resolveStaticProviderCatalogEntry( providerId: string ): ResolvedStaticProviderCatalogEntry | null { + const canonicalId = resolveProviderId(providerId); for (const category of STATIC_PROVIDER_CATALOG_RESOLUTION_ORDER) { const group = STATIC_PROVIDER_CATALOG_GROUPS[category]; - const provider = group.providers[providerId]; + const provider = group.providers[canonicalId] ?? group.providers[providerId]; if (!provider) continue; return { ...provider, diff --git a/src/lib/providers/imageValidation.ts b/src/lib/providers/imageValidation.ts index 444517a608..1d91eb18ee 100644 --- a/src/lib/providers/imageValidation.ts +++ b/src/lib/providers/imageValidation.ts @@ -28,6 +28,11 @@ const IMAGE_PROVIDER_VALIDATION_ENDPOINTS: Record< topaz: { path: "/account/v1/credits/balance", }, + magnific: { + // GET /v1/ai/mystic lists tasks and does not start a paid generation. + baseUrl: "https://api.magnific.com", + path: "/v1/ai/mystic", + }, }; function normalizeBaseUrl(baseUrl: string) { @@ -86,9 +91,15 @@ function buildImageProviderValidationHeaders( break; case "none": break; - default: - headers.Authorization = `Bearer ${apiKey}`; + default: { + const headerName = String(imageProvider?.authHeader || "").trim(); + if (headerName.toLowerCase().startsWith("x-")) { + headers[headerName] = apiKey; + } else { + headers.Authorization = `Bearer ${apiKey}`; + } break; + } } } @@ -109,7 +120,9 @@ export async function validateImageProviderApiKey({ providerSpecificData = {}, }: any) { const imageProvider = getImageProvider(provider); - const validationConfig = IMAGE_PROVIDER_VALIDATION_ENDPOINTS[provider]; + const validationConfig = + IMAGE_PROVIDER_VALIDATION_ENDPOINTS[imageProvider?.id] || + IMAGE_PROVIDER_VALIDATION_ENDPOINTS[provider]; if (!imageProvider || !validationConfig) { return { valid: false, error: "Provider validation not supported", unsupported: true }; diff --git a/src/lib/providers/validation.ts b/src/lib/providers/validation.ts index df29569f8b..bb970b7af5 100644 --- a/src/lib/providers/validation.ts +++ b/src/lib/providers/validation.ts @@ -141,6 +141,7 @@ export { validateWebCookieProvider, bytezValidationResultFromStatus }; // They are re-exported above to preserve the historical public surface. export async function validateProviderApiKey({ provider, apiKey, providerSpecificData = {} }: any) { + provider = typeof provider === "string" ? resolveProviderId(provider) : provider; const requiresApiKey = !providerAllowsOptionalApiKey(provider); const isLocal = isLocalProvider(provider); @@ -214,6 +215,8 @@ export async function validateProviderApiKey({ provider, apiKey, providerSpecifi validateImageProviderApiKey({ provider: "recraft", apiKey, providerSpecificData }), topaz: ({ apiKey, providerSpecificData }: any) => validateImageProviderApiKey({ provider: "topaz", apiKey, providerSpecificData }), + magnific: ({ apiKey, providerSpecificData }: any) => + validateImageProviderApiKey({ provider: "magnific", apiKey, providerSpecificData }), elevenlabs: validateElevenLabsProvider, inworld: validateInworldProvider, kie: validateKieProvider, diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index d5754eeea4..23f9c53b39 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -1,21 +1,12 @@ // Re-export service kinds from leaf module (avoids circular dep with providerSchema) export type { ServiceKind } from "./serviceKinds"; -export { SERVICE_KIND_VALUES } from "./serviceKinds"; - export type RiskNoticeVariant = "oauth" | "webCookie" | "deprecated" | "embedded-service"; -export interface ProviderRiskNoticeFields { - subscriptionRisk?: boolean; - riskNoticeVariant?: RiskNoticeVariant; - isEmbeddedService?: boolean; -} - import { NOAUTH_PROVIDERS } from "./providers/noauth"; export { supportsNoAuthProviderProxy } from "./providers/noauth"; import { OAUTH_PROVIDERS } from "./providers/oauth"; import { WEB_COOKIE_PROVIDERS, resolveWebProviderHost } from "./providers/web-cookie"; export { resolveWebProviderHost }; -export type { WebProviderHostLink } from "./providers/web-cookie"; import { APIKEY_PROVIDERS } from "./providers/apikey"; import { LOCAL_PROVIDERS } from "./providers/local"; import { SEARCH_PROVIDERS } from "./providers/search"; @@ -70,6 +61,10 @@ export const PROVIDER_CONNECTION_FAMILY_ALIASES: Readonly, { }, }); -export type AiProviderId = - | keyof typeof NOAUTH_PROVIDERS - | keyof typeof OAUTH_PROVIDERS - | keyof typeof APIKEY_PROVIDERS - | keyof typeof WEB_COOKIE_PROVIDERS - | keyof typeof LOCAL_PROVIDERS - | keyof typeof SEARCH_PROVIDERS - | keyof typeof AUDIO_ONLY_PROVIDERS - | keyof typeof UPSTREAM_PROXY_PROVIDERS - | keyof typeof CLOUD_AGENT_PROVIDERS - | keyof typeof SYSTEM_PROVIDERS; - export type AiProviderDefinition = | (typeof NOAUTH_PROVIDERS)[keyof typeof NOAUTH_PROVIDERS] | (typeof OAUTH_PROVIDERS)[keyof typeof OAUTH_PROVIDERS] diff --git a/src/shared/constants/providers/apikey/specialty-media.ts b/src/shared/constants/providers/apikey/specialty-media.ts index e66e97bc2b..b6924d239e 100644 --- a/src/shared/constants/providers/apikey/specialty-media.ts +++ b/src/shared/constants/providers/apikey/specialty-media.ts @@ -85,15 +85,16 @@ export const APIKEY_PROVIDERS_SPECIALTY = { website: "https://ideogram.ai", authHint: "Get API key at ideogram.ai/docs/api", }, - freepik: { - id: "freepik", - alias: "fpk", - name: "Freepik (Mystic)", + magnific: { + id: "magnific", + alias: "freepik", + name: "Magnific", icon: "image", color: "#1B9E7F", - textIcon: "FP", - website: "https://freepik.com", - authHint: "Get API key at freepik.com/developers (Mystic image endpoint)", + textIcon: "MG", + website: "https://www.magnific.com", + authHint: + "Get an API key at magnific.com/user/api-keys (header x-magnific-api-key). Legacy Freepik developer keys still work.", hasFree: true, freeNote: "One-time ~€5 API credit for new accounts; pay-per-use afterward.", }, diff --git a/src/shared/validation/compressionConfigSchemas.ts b/src/shared/validation/compressionConfigSchemas.ts index 50a21aaf10..e0ba0b6fe5 100644 --- a/src/shared/validation/compressionConfigSchemas.ts +++ b/src/shared/validation/compressionConfigSchemas.ts @@ -71,6 +71,8 @@ export const rtkConfigSchema = z trustProjectFilters: z.boolean().optional(), rawOutputRetention: rtkRawOutputRetentionSchema.optional(), rawOutputMaxBytes: z.number().int().min(1024).max(10_000_000).optional(), + rawOutputMaxFiles: z.number().int().min(1).max(10_000_000).optional(), + rawOutputMaxAgeDays: z.number().int().min(1).max(3650).optional(), enableGrouping: z.boolean().optional(), groupingThreshold: z.number().int().min(2).max(100).optional(), stripCodeComments: z.boolean().optional(), diff --git a/stryker.conf.json b/stryker.conf.json index 08c35843f5..42d5eb7412 100644 --- a/stryker.conf.json +++ b/stryker.conf.json @@ -42,6 +42,7 @@ "plugins": ["@stryker-mutator/tap-runner"], "tap": { "testFiles": [ + "tests/unit/10085-compatible-generic-vs-uuid-credential.test.ts", "tests/unit/7993-noauth-proxy-routing.test.ts", "tests/unit/8200-perplexity-web-401-cooldown.test.ts", "tests/unit/8247-accountfallback-model-unhealthy.test.ts", @@ -51,7 +52,6 @@ "tests/unit/8396-cooldown-429-cap.test.ts", "tests/unit/8488-capability-filter-fail-closed.test.ts", "tests/unit/8779-agy-prefix-credential-lookup.test.ts", - "tests/unit/10085-compatible-generic-vs-uuid-credential.test.ts", "tests/unit/account-fallback-anthropic-quota.test.ts", "tests/unit/account-fallback-cf1010-no-retry-8775.test.ts", "tests/unit/account-fallback-lockout-eviction.test.ts", @@ -64,12 +64,12 @@ "tests/unit/adobe-firefly.test.ts", "tests/unit/agentrouter-error-rules.test.ts", "tests/unit/agentrouter-lock-scope-10334.test.ts", + "tests/unit/aihorde-optional-api-key.test.ts", "tests/unit/alibaba-free-tier-exhaustion.test.ts", "tests/unit/anthropic-thinking-signature-recovery.test.ts", "tests/unit/antigravity-429-quota-tdd.test.ts", "tests/unit/antigravity-prefer-stored-project.test.ts", "tests/unit/api-key-policy-noauth-allowed-connections.test.ts", - "tests/unit/api-key-policy-noauth-allowed-connections.test.ts", "tests/unit/api-key-rotator-health.test.ts", "tests/unit/api/jobs.test.ts", "tests/unit/appearance-widget-settings-schema.test.ts", @@ -109,9 +109,9 @@ "tests/unit/chatcore-codex-account-pool.test.ts", "tests/unit/chatcore-compression-integration.test.ts", "tests/unit/chatcore-executor-helpers.test.ts", - "tests/unit/chatcore-header-drop-warn-dedupe-10315.test.ts", "tests/unit/chatcore-executor-proxy.test.ts", "tests/unit/chatcore-extracted-modules-3821.test.ts", + "tests/unit/chatcore-header-drop-warn-dedupe-10315.test.ts", "tests/unit/chatcore-headers.test.ts", "tests/unit/chatcore-imports-cleanly.test.ts", "tests/unit/chatcore-log-truncation.test.ts", @@ -145,13 +145,13 @@ "tests/unit/clinepass-provider.test.ts", "tests/unit/cliproxyapi-dedicated-credential-7645.test.ts", "tests/unit/cliproxyapi-model-mapping-dispatch.test.ts", - "tests/unit/cliproxyapi-model-mapping-dispatch.test.ts", - "tests/unit/cliproxyapi-model-mapping-dispatch.test.ts", "tests/unit/codex-failover.test.ts", "tests/unit/codex-quota-selection-hydration.test.ts", "tests/unit/codex-responses-to-chat-9161.test.ts", + "tests/unit/codex-same-account-transport-retry-9708.test.ts", "tests/unit/codex-session-affinity-reset-aware-5903.test.ts", "tests/unit/codex-stream-false.test.ts", + "tests/unit/codex-turn-state.test.ts", "tests/unit/collect-metrics-module-coverage.test.ts", "tests/unit/combo-499-abort.test.ts", "tests/unit/combo-account-allowlist-3266.test.ts", @@ -217,21 +217,24 @@ "tests/unit/cursor-renewal.test.ts", "tests/unit/custom-model-target-format.test.ts", "tests/unit/db-reset-module-state.test.ts", + "tests/unit/db/stats-dbstat-optional.test.ts", "tests/unit/ddg-circuit-breaker-null-content-6999-7000.test.ts", "tests/unit/domain-persistence.test.ts", "tests/unit/edgetts-provider.test.ts", + "tests/unit/embedding-account-cooldown-10347.test.ts", + "tests/unit/embedding-cooldown-integration-10347.test.ts", "tests/unit/embeddings-auth.test.ts", "tests/unit/error-classification.test.ts", - "tests/unit/executor-contract-violation-terminal.test.ts", "tests/unit/error-message-sanitization.test.ts", "tests/unit/error-sensitive-redaction.test.ts", "tests/unit/execute-chat-resource-pressure-breaker.test.ts", "tests/unit/executor-antigravity.test.ts", + "tests/unit/executor-contract-violation-terminal.test.ts", "tests/unit/executor-devin-cli-agentic-acp.test.ts", "tests/unit/executor-web-cookie-sweep.test.ts", "tests/unit/format-provider-error-cause.test.ts", "tests/unit/forwarded-header-budget.test.ts", - "tests/unit/gemini-web-capabilities-9356.test.ts", + "tests/unit/fusion-vision-panel-3378.test.ts", "tests/unit/gemini-web-capabilities-9356.test.ts", "tests/unit/gemini-web-missing-browser-3516.test.ts", "tests/unit/grok-cli-oauth.test.ts", @@ -281,6 +284,9 @@ "tests/unit/plan3-p0.test.ts", "tests/unit/plugin-sandbox-permissions.test.ts", "tests/unit/plugins-route-error-sanitization.test.ts", + "tests/unit/probe-gate-autodisable.test.ts", + "tests/unit/probe-production-path.test.ts", + "tests/unit/probe-testall-isolation.test.ts", "tests/unit/provider-breaker-halfopen-recovery.test.ts", "tests/unit/provider-error-rules.test.ts", "tests/unit/provider-health-matrix.test.ts", @@ -302,11 +308,11 @@ "tests/unit/rate-limit-queue-timeout-lockout.test.ts", "tests/unit/repro-7503-no-choices.test.ts", "tests/unit/repro-9486.test.ts", - "tests/unit/repro-9486.test.ts", "tests/unit/repro-9630-combo-false-503.test.ts", "tests/unit/repro-antigravity-404-family-cooldown-hijack.test.ts", "tests/unit/resilience-connections.test.ts", "tests/unit/responses-handler.test.ts", + "tests/unit/responses-passthrough-openai-compatible.test.ts", "tests/unit/rotation-config-omniroute.test.ts", "tests/unit/route-explainability.test.ts", "tests/unit/route-guard-acp-agents-local-only.test.ts", @@ -320,6 +326,7 @@ "tests/unit/route-guard-provider-login-local-only.test.ts", "tests/unit/route-guard-qwen-settings-local-only.test.ts", "tests/unit/router-strategies.test.ts", + "tests/unit/routing-adaptive-e2e.test.ts", "tests/unit/rule12-error-sanitization-sweep.test.ts", "tests/unit/serial/combo-health-autopilot.test.ts", "tests/unit/serial/combo-quota-share-cooldown-wait-timing.test.ts", @@ -335,9 +342,9 @@ "tests/unit/skip-provider-breaker-consumer-2743.test.ts", "tests/unit/sse-auth-antigravity-credits.test.ts", "tests/unit/sse-auth-codex-account-pool.test.ts", + "tests/unit/sse-auth-exclusive-leases.test.ts", "tests/unit/sse-auth-resource-404.test.ts", "tests/unit/sse-auth.test.ts", - "tests/unit/db/stats-dbstat-optional.test.ts", "tests/unit/stream-early-eof-breaker.test.ts", "tests/unit/stream-readiness.test.ts", "tests/unit/strict-random-deck.test.ts", diff --git a/tests/snapshots/provider/translate-path.json b/tests/snapshots/provider/translate-path.json index 0afdd55ac3..4fc9db6fdd 100644 --- a/tests/snapshots/provider/translate-path.json +++ b/tests/snapshots/provider/translate-path.json @@ -1534,6 +1534,38 @@ "stream": "https://api2.cursor.sh" } }, + "cursor-api": { + "format": "cursor", + "headers": { + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/connect+proto", + "User-Agent": "Cursor/3.9", + "connect-accept-encoding": "gzip", + "connect-protocol-version": "1" + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/connect+proto", + "User-Agent": "Cursor/3.9", + "connect-accept-encoding": "gzip", + "connect-protocol-version": "1" + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/connect+proto", + "User-Agent": "Cursor/3.9", + "connect-accept-encoding": "gzip", + "connect-protocol-version": "1" + } + }, + "url": { + "nonStream": "https://api2.cursor.sh", + "stream": "https://api2.cursor.sh" + } + }, "dahl": { "format": "openai", "headers": { @@ -3740,6 +3772,52 @@ "stream": "https://models.mixlayer.ai/v1/chat/completions" } }, + "mlx-gemma": { + "format": "openai", + "headers": { + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + } + }, + "url": { + "nonStream": "http://localhost:11435/v1", + "stream": "http://localhost:11435/v1" + } + }, + "mlx-qwen": { + "format": "openai", + "headers": { + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + } + }, + "url": { + "nonStream": "http://localhost:11436/v1", + "stream": "http://localhost:11436/v1" + } + }, "mnn-ai": { "format": "openai", "headers": { @@ -5509,6 +5587,29 @@ "stream": "https://api.together.xyz/v1/chat/completions" } }, + "token-kiosk": { + "format": "openai", + "headers": { + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json" + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json" + } + }, + "url": { + "nonStream": "https://agent-router.gaib.ai/v1/chat/completions", + "stream": "https://agent-router.gaib.ai/v1/chat/completions" + } + }, "tokenreply": { "format": "openai", "headers": { diff --git a/tests/unit/alibaba-image-media.test.ts b/tests/unit/alibaba-image-media.test.ts index 539df1437e..4a9e3e0a23 100644 --- a/tests/unit/alibaba-image-media.test.ts +++ b/tests/unit/alibaba-image-media.test.ts @@ -49,7 +49,7 @@ test("Alibaba registration preserves existing bare duplicate-model routing", () model: "z-image-turbo", }); assert.deepEqual(parseImageModel("qwen-image-2.0"), { - provider: "lmarena", + provider: "bailian-coding-plan", model: "qwen-image-2.0", }); assert.deepEqual(parseImageModel("qwen-image-3.0-pro"), { diff --git a/tests/unit/antigravity-retired-public-models.test.ts b/tests/unit/antigravity-retired-public-models.test.ts index 5f778d5965..890509bb73 100644 --- a/tests/unit/antigravity-retired-public-models.test.ts +++ b/tests/unit/antigravity-retired-public-models.test.ts @@ -34,6 +34,7 @@ const EXPECTED_LEADING_MODEL_ORDER = [ "gemini-3.7-flash-high", "gemini-3.7-flash-medium", "gemini-3.7-flash-low", + "gemini-3.7-flash-tiered", "gemini-pro-agent", "gemini-3.1-pro-low", "gemini-3.1-flash-lite", diff --git a/tests/unit/freepik-image-handler.test.ts b/tests/unit/freepik-image-handler.test.ts deleted file mode 100644 index 610445e5af..0000000000 --- a/tests/unit/freepik-image-handler.test.ts +++ /dev/null @@ -1,163 +0,0 @@ -import test from "node:test"; -import assert from "node:assert/strict"; -import dns from "node:dns"; - -import { handleImageGeneration } from "../../open-sse/handlers/imageGeneration.ts"; -import { IMAGE_PROVIDERS } from "../../open-sse/config/imageRegistry.ts"; -import { APIKEY_PROVIDERS } from "../../src/shared/constants/providers.ts"; -import { IMAGE_ONLY_PROVIDER_IDS } from "../../src/shared/constants/providers.ts"; - -// Stub DNS for fetchRemoteImage/direct-fetch DNS-rebinding guards, mirroring -// tests/unit/nanobanana-image-handler.test.ts. -const originalDnsLookup = dns.promises.lookup; -(dns.promises as { lookup: unknown }).lookup = (async ( - _hostname: string, - options?: { all?: boolean } -) => { - const record = { address: "203.0.113.1", family: 4 }; - return options && options.all ? [record] : record; -}) as typeof dns.promises.lookup; -process.on("exit", () => { - (dns.promises as { lookup: unknown }).lookup = originalDnsLookup; -}); - -test("freepik provider is registered (registry shape)", () => { - assert.ok(APIKEY_PROVIDERS.freepik, "freepik should be in APIKEY_PROVIDERS"); - assert.equal(APIKEY_PROVIDERS.freepik.id, "freepik"); - assert.ok(IMAGE_ONLY_PROVIDER_IDS.has("freepik"), "freepik should be in IMAGE_ONLY_PROVIDER_IDS"); - - const provider = IMAGE_PROVIDERS.freepik; - assert.ok(provider, "freepik should be in IMAGE_PROVIDERS"); - assert.equal(provider.format, "freepik-image"); - assert.equal(provider.authType, "apikey"); - assert.equal(provider.authHeader, "x-freepik-api-key"); - assert.ok(provider.models.some((m) => m.id === "realism")); - assert.ok(provider.models.some((m) => m.id === "fluid")); -}); - -test("handleImageGeneration(freepik): async submit+poll returns b64_json payload", async () => { - const originalFetch = globalThis.fetch; - let pollCount = 0; - - globalThis.fetch = (async (url: string, options: { headers?: Record; body?: string } = {}) => { - const u = String(url); - - if (u === "https://api.freepik.com/v1/ai/mystic") { - assert.equal(options.headers?.["x-freepik-api-key"], "test-key"); - const parsed = JSON.parse(options.body as string); - assert.equal(parsed.prompt, "a red panda astronaut"); - assert.equal(parsed.model, "realism"); - return new Response( - JSON.stringify({ data: { task_id: "task-freepik-1", status: "CREATED" } }), - { status: 200, headers: { "content-type": "application/json" } } - ); - } - - if (u === "https://api.freepik.com/v1/ai/mystic/task-freepik-1") { - pollCount += 1; - if (pollCount < 2) { - return new Response( - JSON.stringify({ data: { task_id: "task-freepik-1", status: "IN_PROGRESS" } }), - { status: 200, headers: { "content-type": "application/json" } } - ); - } - return new Response( - JSON.stringify({ - data: { - task_id: "task-freepik-1", - status: "COMPLETED", - generated: ["https://cdn.example.com/freepik-result.png"], - }, - }), - { status: 200, headers: { "content-type": "application/json" } } - ); - } - - if (u === "https://cdn.example.com/freepik-result.png") { - return new Response(new Uint8Array([0x89, 0x50, 0x4e, 0x47]), { status: 200 }); - } - - throw new Error(`Unexpected URL: ${u}`); - }) as typeof fetch; - - try { - const result = await handleImageGeneration({ - body: { - model: "freepik/realism", - prompt: "a red panda astronaut", - poll_interval_ms: 1, - }, - credentials: { apiKey: "test-key" }, - log: null, - }); - - assert.equal(result.success, true); - assert.equal(result.data.data.length, 1); - assert.equal(result.data.data[0].b64_json, "iVBORw=="); - assert.equal(pollCount, 2); - } finally { - globalThis.fetch = originalFetch; - } -}); - -test("handleImageGeneration(freepik): FAILED status returns sanitized 502 error", async () => { - const originalFetch = globalThis.fetch; - - globalThis.fetch = (async (url: string) => { - const u = String(url); - if (u === "https://api.freepik.com/v1/ai/mystic") { - return new Response(JSON.stringify({ data: { task_id: "task-fail", status: "CREATED" } }), { - status: 200, - headers: { "content-type": "application/json" }, - }); - } - if (u === "https://api.freepik.com/v1/ai/mystic/task-fail") { - return new Response(JSON.stringify({ data: { task_id: "task-fail", status: "FAILED" } }), { - status: 200, - headers: { "content-type": "application/json" }, - }); - } - throw new Error(`Unexpected URL: ${u}`); - }) as typeof fetch; - - try { - const result = await handleImageGeneration({ - body: { model: "freepik/realism", prompt: "broken prompt", poll_interval_ms: 1 }, - credentials: { apiKey: "test-key" }, - log: null, - }); - - assert.equal(result.success, false); - assert.equal(result.status, 502); - assert.match(result.error, /Freepik Mystic image generation failed/); - // Hard Rule #12: error responses must never leak a raw stack trace / file path. - assert.ok(!result.error.includes("at /")); - } finally { - globalThis.fetch = originalFetch; - } -}); - -test("handleImageGeneration(freepik): submit error response is sanitized, not raw upstream body", async () => { - const originalFetch = globalThis.fetch; - - globalThis.fetch = (async () => { - // Simulate an upstream error body containing something that looks like a - // stack trace / absolute source path, to prove sanitizeErrorMessage runs. - const stackyBody = "Error: boom\n at /srv/app/handlers/mystic.ts:42:10"; - return new Response(stackyBody, { status: 500 }); - }) as typeof fetch; - - try { - const result = await handleImageGeneration({ - body: { model: "freepik/realism", prompt: "x" }, - credentials: { apiKey: "test-key" }, - log: null, - }); - - assert.equal(result.success, false); - assert.equal(result.status, 500); - assert.ok(!result.error.includes("/srv/app/handlers/mystic.ts")); - } finally { - globalThis.fetch = originalFetch; - } -}); diff --git a/tests/unit/hard-session-lease-bypass-inventory.test.ts b/tests/unit/hard-session-lease-bypass-inventory.test.ts index 428b75bdcf..9736a33e07 100644 --- a/tests/unit/hard-session-lease-bypass-inventory.test.ts +++ b/tests/unit/hard-session-lease-bypass-inventory.test.ts @@ -13,15 +13,19 @@ type BypassClass = "A" | "B" | "C"; const EXPECTED: Record> = { credential: { - "open-sse/handlers/chatCore.ts": 1, + "open-sse/handlers/chatCore.ts": 2, "open-sse/services/imageCombo.ts": 1, + "open-sse/services/speechCombo.ts": 1, + "open-sse/services/videoCombo.ts": 2, "src/app/api/compression/compare/verify/route.ts": 1, "src/app/api/internal/codex-responses-ws/route.ts": 1, "src/app/api/search/providers/route.ts": 3, "src/app/api/v1/audio/speech/route.ts": 1, - "src/app/api/v1/audio/transcriptions/route.ts": 1, + "src/app/api/v1/_shared/videoModelResolution.ts": 1, + "src/app/api/v1/audio/transcriptions/route.ts": 2, "src/app/api/v1/audio/translations/route.ts": 1, - "src/app/api/v1/images/edits/route.ts": 5, + "src/app/api/v1/classify/route.ts": 1, + "src/app/api/v1/images/edits/route.ts": 6, "src/app/api/v1/images/generations/route.ts": 3, "src/app/api/v1/images/upscale/route.ts": 1, "src/app/api/v1/messages/count_tokens/route.ts": 1, @@ -32,8 +36,9 @@ const EXPECTED: Record> = { "src/app/api/v1/providers/[provider]/images/generations/route.ts": 1, "src/app/api/v1/rerank/route.ts": 2, "src/app/api/v1/search/route.ts": 2, + "src/app/api/v1/segment/route.ts": 1, "src/app/api/v1/session-leases/route.ts": 1, - "src/app/api/v1/videos/generations/route.ts": 3, + "src/app/api/v1/videos/generations/route.ts": 2, "src/app/api/v1/web/fetch/route.ts": 1, "src/lib/embeddings/service.ts": 2, "src/lib/memory/embedding/index.ts": 1, @@ -49,6 +54,7 @@ const EXPECTED: Record> = { "open-sse/handlers/chatCore/cliproxyapiCredentials.ts": 1, "open-sse/handlers/imageGeneration.ts": 1, "open-sse/handlers/imageGeneration/providers/chatgptWeb.ts": 1, + "open-sse/handlers/imageGeneration/providers/geminiWeb.ts": 1, "open-sse/handlers/videoGeneration.ts": 1, "open-sse/services/compression/eval/executorModelClient.ts": 1, "src/lib/compression/judgeModelClient.ts": 1, @@ -57,6 +63,7 @@ const EXPECTED: Record> = { connection: { "open-sse/handlers/autoComboCandidates.ts": 1, "open-sse/handlers/chatCore.ts": 2, + "open-sse/handlers/cursorCliProxy.ts": 1, "open-sse/services/alibabaFreeTier.ts": 1, "open-sse/services/alibabaFreeTierQuotaFetcher.ts": 1, "open-sse/services/combo/providerWildcard.ts": 1, @@ -149,6 +156,7 @@ const CLASSIFICATION: Record> = { "open-sse/handlers/chatCore/cliproxyapiCredentials.ts": "A", "open-sse/handlers/imageGeneration.ts": "B", "open-sse/handlers/imageGeneration/providers/chatgptWeb.ts": "B", + "open-sse/handlers/imageGeneration/providers/geminiWeb.ts": "B", "open-sse/handlers/videoGeneration.ts": "B", "open-sse/services/compression/eval/executorModelClient.ts": "B", "src/lib/compression/judgeModelClient.ts": "B", diff --git a/tests/unit/instrumentation-warm-catalog-cache.test.ts b/tests/unit/instrumentation-warm-catalog-cache.test.ts index 5f73283249..84fa161e78 100644 --- a/tests/unit/instrumentation-warm-catalog-cache.test.ts +++ b/tests/unit/instrumentation-warm-catalog-cache.test.ts @@ -70,10 +70,15 @@ test.after(async () => { const REAL_FETCH = globalThis.fetch; let fetchCallCount = 0; +function isOpenRouterCatalogUrl(input: RequestInfo | URL): boolean { + const url = String(input instanceof Request ? input.url : input); + return url.includes("openrouter.ai"); +} + function installFakeOpenRouterFetch(): void { fetchCallCount = 0; - globalThis.fetch = (async () => { - fetchCallCount++; + globalThis.fetch = (async (input: RequestInfo | URL) => { + if (isOpenRouterCatalogUrl(input)) fetchCallCount++; return new Response(JSON.stringify({ data: [{ id: "test/fake-model", architecture: {} }] }), { status: 200, headers: { "content-type": "application/json" }, @@ -83,8 +88,8 @@ function installFakeOpenRouterFetch(): void { function installFailingOpenRouterFetch(): void { fetchCallCount = 0; - globalThis.fetch = (async () => { - fetchCallCount++; + globalThis.fetch = (async (input: RequestInfo | URL) => { + if (isOpenRouterCatalogUrl(input)) fetchCallCount++; throw new Error("simulated OpenRouter network failure"); }) as typeof fetch; } diff --git a/tests/unit/magnific-image-handler.test.ts b/tests/unit/magnific-image-handler.test.ts new file mode 100644 index 0000000000..5b2c934921 --- /dev/null +++ b/tests/unit/magnific-image-handler.test.ts @@ -0,0 +1,233 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import dns from "node:dns"; + +import { handleImageGeneration } from "../../open-sse/handlers/imageGeneration.ts"; +import { + IMAGE_PROVIDERS, + getImageProvider, + parseImageModel, +} from "../../open-sse/config/imageRegistry.ts"; +import { APIKEY_PROVIDERS, resolveProviderId } from "../../src/shared/constants/providers.ts"; +import { IMAGE_ONLY_PROVIDER_IDS } from "../../src/shared/constants/providers.ts"; +import { connectionBelongsToProviderPage } from "../../src/app/(dashboard)/dashboard/providers/providerPageUtils.ts"; + +// Stub DNS for fetchRemoteImage/direct-fetch DNS-rebinding guards, mirroring +// tests/unit/nanobanana-image-handler.test.ts. +const originalDnsLookup = dns.promises.lookup; +(dns.promises as { lookup: unknown }).lookup = (async ( + _hostname: string, + options?: { all?: boolean } +) => { + const record = { address: "203.0.113.1", family: 4 }; + return options && options.all ? [record] : record; +}) as typeof dns.promises.lookup; +process.on("exit", () => { + (dns.promises as { lookup: unknown }).lookup = originalDnsLookup; +}); + +test("magnific provider is registered (registry shape)", () => { + assert.ok(APIKEY_PROVIDERS.magnific, "magnific should be in APIKEY_PROVIDERS"); + assert.equal(APIKEY_PROVIDERS.magnific.id, "magnific"); + assert.ok( + IMAGE_ONLY_PROVIDER_IDS.has("magnific"), + "magnific should be in IMAGE_ONLY_PROVIDER_IDS" + ); + assert.ok(!IMAGE_ONLY_PROVIDER_IDS.has("freepik")); + + const provider = IMAGE_PROVIDERS.magnific; + assert.ok(provider, "magnific should be in IMAGE_PROVIDERS"); + assert.equal(provider.format, "magnific-image"); + assert.equal(provider.authType, "apikey"); + assert.equal(provider.authHeader, "x-magnific-api-key"); + assert.equal(provider.baseUrl, "https://api.magnific.com/v1/ai/mystic"); + assert.equal(provider.alias, "freepik"); + assert.ok(provider.models.some((m) => m.id === "realism")); + assert.ok(provider.models.some((m) => m.id === "fluid")); + assert.equal(APIKEY_PROVIDERS.magnific.alias, "freepik"); + assert.equal(resolveProviderId("freepik"), "magnific"); + assert.equal(resolveProviderId("magnific"), "magnific"); + assert.equal(getImageProvider("freepik")?.id, "magnific"); + assert.deepEqual(parseImageModel("freepik/realism"), { provider: "magnific", model: "realism" }); + assert.deepEqual(parseImageModel("magnific/realism"), { provider: "magnific", model: "realism" }); + assert.equal(connectionBelongsToProviderPage("freepik", "magnific"), true); + assert.equal(connectionBelongsToProviderPage("magnific", "freepik"), true); +}); + +test("handleImageGeneration(magnific): async submit+poll returns b64_json payload", async () => { + const originalFetch = globalThis.fetch; + let pollCount = 0; + + globalThis.fetch = (async ( + url: string, + options: { headers?: Record; body?: string } = {} + ) => { + const u = String(url); + + if (u === "https://api.magnific.com/v1/ai/mystic") { + assert.equal(options.headers?.["x-magnific-api-key"], "test-key"); + const parsed = JSON.parse(options.body as string); + assert.equal(parsed.prompt, "a red panda astronaut"); + assert.equal(parsed.model, "realism"); + return new Response( + JSON.stringify({ data: { task_id: "task-magnific-1", status: "CREATED" } }), + { status: 200, headers: { "content-type": "application/json" } } + ); + } + + if (u === "https://api.magnific.com/v1/ai/mystic/task-magnific-1") { + pollCount += 1; + if (pollCount < 2) { + return new Response( + JSON.stringify({ data: { task_id: "task-magnific-1", status: "IN_PROGRESS" } }), + { status: 200, headers: { "content-type": "application/json" } } + ); + } + return new Response( + JSON.stringify({ + data: { + task_id: "task-magnific-1", + status: "COMPLETED", + generated: ["https://cdn.example.com/magnific-result.png"], + }, + }), + { status: 200, headers: { "content-type": "application/json" } } + ); + } + + if (u === "https://cdn.example.com/magnific-result.png") { + return new Response(new Uint8Array([0x89, 0x50, 0x4e, 0x47]), { status: 200 }); + } + + throw new Error(`Unexpected URL: ${u}`); + }) as typeof fetch; + + try { + const result = await handleImageGeneration({ + body: { + model: "magnific/realism", + prompt: "a red panda astronaut", + poll_interval_ms: 1, + }, + credentials: { apiKey: "test-key" }, + log: null, + }); + + assert.equal(result.success, true); + assert.equal(result.data.data.length, 1); + assert.equal(result.data.data[0].b64_json, "iVBORw=="); + assert.equal(pollCount, 2); + } finally { + globalThis.fetch = originalFetch; + } +}); + +test("handleImageGeneration(magnific): FAILED status returns sanitized 502 error", async () => { + const originalFetch = globalThis.fetch; + + globalThis.fetch = (async (url: string) => { + const u = String(url); + if (u === "https://api.magnific.com/v1/ai/mystic") { + return new Response(JSON.stringify({ data: { task_id: "task-fail", status: "CREATED" } }), { + status: 200, + headers: { "content-type": "application/json" }, + }); + } + if (u === "https://api.magnific.com/v1/ai/mystic/task-fail") { + return new Response(JSON.stringify({ data: { task_id: "task-fail", status: "FAILED" } }), { + status: 200, + headers: { "content-type": "application/json" }, + }); + } + throw new Error(`Unexpected URL: ${u}`); + }) as typeof fetch; + + try { + const result = await handleImageGeneration({ + body: { model: "magnific/realism", prompt: "broken prompt", poll_interval_ms: 1 }, + credentials: { apiKey: "test-key" }, + log: null, + }); + + assert.equal(result.success, false); + assert.equal(result.status, 502); + assert.match(result.error, /Magnific Mystic image generation failed/); + // Hard Rule #12: error responses must never leak a raw stack trace / file path. + assert.ok(!result.error.includes("at /")); + } finally { + globalThis.fetch = originalFetch; + } +}); + +test("handleImageGeneration(magnific): submit error response is sanitized, not raw upstream body", async () => { + const originalFetch = globalThis.fetch; + + globalThis.fetch = (async () => { + // Simulate an upstream error body containing something that looks like a + // stack trace / absolute source path, to prove sanitizeErrorMessage runs. + const stackyBody = "Error: boom\n at /srv/app/handlers/mystic.ts:42:10"; + return new Response(stackyBody, { status: 500 }); + }) as typeof fetch; + + try { + const result = await handleImageGeneration({ + body: { model: "magnific/realism", prompt: "x" }, + credentials: { apiKey: "test-key" }, + log: null, + }); + + assert.equal(result.success, false); + assert.equal(result.status, 500); + assert.ok(!result.error.includes("/srv/app/handlers/mystic.ts")); + } finally { + globalThis.fetch = originalFetch; + } +}); + +test("handleImageGeneration(freepik/realism): legacy alias routes to the Magnific Mystic adapter", async () => { + const originalFetch = globalThis.fetch; + let sawSubmit = false; + + globalThis.fetch = (async ( + url: string, + options: { headers?: Record; body?: string } = {} + ) => { + const u = String(url); + if (u === "https://api.magnific.com/v1/ai/mystic") { + sawSubmit = true; + assert.equal(options.headers?.["x-magnific-api-key"], "test-key"); + return new Response(JSON.stringify({ data: { task_id: "task-alias", status: "CREATED" } }), { + status: 200, + headers: { "content-type": "application/json" }, + }); + } + if (u === "https://api.magnific.com/v1/ai/mystic/task-alias") { + return new Response( + JSON.stringify({ + data: { + task_id: "task-alias", + status: "COMPLETED", + generated: ["https://cdn.example.com/magnific-result.png"], + }, + }), + { status: 200, headers: { "content-type": "application/json" } } + ); + } + if (u === "https://cdn.example.com/magnific-result.png") { + return new Response(new Uint8Array([0x89, 0x50, 0x4e, 0x47]), { status: 200 }); + } + throw new Error(`Unexpected URL: ${u}`); + }) as typeof fetch; + + try { + const result = await handleImageGeneration({ + body: { model: "freepik/realism", prompt: "alias probe", poll_interval_ms: 1 }, + credentials: { apiKey: "test-key" }, + log: null, + }); + assert.equal(result.success, true); + assert.equal(sawSubmit, true); + } finally { + globalThis.fetch = originalFetch; + } +}); diff --git a/tests/unit/provider-alias-uniqueness.test.ts b/tests/unit/provider-alias-uniqueness.test.ts index 4fb4ba2887..d093d1186c 100644 --- a/tests/unit/provider-alias-uniqueness.test.ts +++ b/tests/unit/provider-alias-uniqueness.test.ts @@ -74,6 +74,14 @@ test("hailuo-web resolves to its own id/alias and does not collide with minimax" assert.equal(resolveProviderId("minimax-cn"), "minimax-cn"); }); +test("freepik is the Magnific Mystic legacy alias, not a second provider id", () => { + assert.equal(resolveProviderId("freepik"), "magnific"); + assert.equal(resolveProviderId("magnific"), "magnific"); + assert.equal(getProviderAlias("magnific"), "freepik"); + assert.ok("magnific" in APIKEY_PROVIDERS); + assert.ok(!("freepik" in APIKEY_PROVIDERS)); +}); + test("no provider id is registered in both the API-key and web-cookie catalogs", () => { // A provider belongs to exactly one auth category; the same id in both catalogs // renders the provider twice in the dashboard (once per section). huggingchat diff --git a/tests/unit/provider-validation-image-only.test.ts b/tests/unit/provider-validation-image-only.test.ts index 7012dfb94e..11a37dee18 100644 --- a/tests/unit/provider-validation-image-only.test.ts +++ b/tests/unit/provider-validation-image-only.test.ts @@ -35,6 +35,11 @@ const imageOnlyProviders = { header: "X-API-Key", value: "topaz-key", }, + magnific: { + url: "https://api.magnific.com/v1/ai/mystic", + header: "x-magnific-api-key", + value: "magnific-key", + }, }; const expectedValidationError = (status: number) => @@ -95,3 +100,20 @@ for (const provider of Object.keys(imageOnlyProviders)) { }); } } + +test("freepik alias validates through the Magnific Mystic endpoint", async () => { + let fetchCalled = false; + globalThis.fetch = async (url, init = {}) => { + fetchCalled = true; + assert.equal(String(url), "https://api.magnific.com/v1/ai/mystic"); + assert.equal((init.headers as Record)["x-magnific-api-key"], "legacy-key"); + return new Response(JSON.stringify({ data: [] }), { status: 200 }); + }; + + const result = await validateProviderApiKey({ provider: "freepik", apiKey: "legacy-key" }); + + assert.equal(result.valid, true); + assert.equal(result.error, null); + assert.notEqual(result.unsupported, true); + assert.equal(fetchCalled, true); +}); diff --git a/tests/unit/redirects-cli-renames.test.ts b/tests/unit/redirects-cli-renames.test.ts index 9fcde5f7c9..b1944534c7 100644 --- a/tests/unit/redirects-cli-renames.test.ts +++ b/tests/unit/redirects-cli-renames.test.ts @@ -38,6 +38,14 @@ test("next.config.mjs has permanent wildcard redirect from /dashboard/agents/:pa ); }); +test("next.config.mjs has permanent redirect from /dashboard/providers/freepik to /dashboard/providers/magnific", () => { + assert.ok( + configSource.includes('source: "/dashboard/providers/freepik"') && + configSource.includes('destination: "/dashboard/providers/magnific"'), + "expected /dashboard/providers/freepik → /dashboard/providers/magnific redirect in next.config.mjs" + ); +}); + test("all 4 CLI redirect entries use permanent: true", () => { // Extract the CLI Pages block const cliBlock = configSource.slice(configSource.indexOf("// CLI Pages — Plano 14 (F9)")); diff --git a/tests/unit/session-affinity-combo-timeout-eviction.test.ts b/tests/unit/session-affinity-combo-timeout-eviction.test.ts index 04a5764957..9dfb36f260 100644 --- a/tests/unit/session-affinity-combo-timeout-eviction.test.ts +++ b/tests/unit/session-affinity-combo-timeout-eviction.test.ts @@ -170,8 +170,13 @@ test("the combo timeout runner aborts with the shared reason constant", () => { ); assert.match( src, - /timeoutController\.abort\(new Error\(COMBO_PER_MODEL_TIMEOUT_REASON\)\)/, - "the runner must use the constant the eviction predicate matches on" + /const abortErr = new Error\(COMBO_PER_MODEL_TIMEOUT_REASON\)/, + "the runner must construct the shared timeout reason" + ); + assert.match( + src, + /timeoutController\.abort\(abortErr\)/, + "the runner must abort with that Error so the eviction predicate matches" ); }); diff --git a/tests/unit/sse-heartbeat.test.ts b/tests/unit/sse-heartbeat.test.ts index 57ecbd9450..2f26b295b7 100644 --- a/tests/unit/sse-heartbeat.test.ts +++ b/tests/unit/sse-heartbeat.test.ts @@ -39,8 +39,19 @@ function decodeChunk(value) { return typeof value === "string" ? value : new TextDecoder().decode(value); } +async function withSseCommentsOn(fn) { + const prev = process.env.OMNIROUTE_SSE_COMMENTS; + process.env.OMNIROUTE_SSE_COMMENTS = "on"; + try { + return await fn(); + } finally { + if (prev === undefined) delete process.env.OMNIROUTE_SSE_COMMENTS; + else process.env.OMNIROUTE_SSE_COMMENTS = prev; + } +} + test("createSseHeartbeatTransform emits SSE comments while preserving stream output", async () => { - await withFakeIntervals(async (intervals) => { + await withSseCommentsOn(() => withFakeIntervals(async (intervals) => { const transform = createSseHeartbeatTransform({ intervalMs: 250 }); const writer = transform.writable.getWriter(); const reader = transform.readable.getReader(); @@ -65,11 +76,11 @@ test("createSseHeartbeatTransform emits SSE comments while preserving stream out assert.equal(emitted[0], 'data: {"chunk":"one"}\n\n'); assert.match(emitted[1], /^: keepalive /); assert.equal(intervals[0].cleared, true); - }); + })); }); test("createSseHeartbeatTransform clears the interval when aborted", async () => { - await withFakeIntervals(async (intervals) => { + await withSseCommentsOn(() => withFakeIntervals(async (intervals) => { const controller = new AbortController(); const transform = createSseHeartbeatTransform({ signal: controller.signal }); const reader = transform.readable.getReader(); @@ -83,7 +94,7 @@ test("createSseHeartbeatTransform clears the interval when aborted", async () => await writer.close(); await reader.cancel(); - }); + })); }); const { shapeForClientFormat } = await import("../../open-sse/utils/sseHeartbeat.ts"); @@ -166,7 +177,7 @@ test("shape: openai-responses-in-progress emits response.in_progress data event" }); test("shape default is comment (back-compat)", async () => { - await withFakeIntervals(async (intervals) => { + await withSseCommentsOn(() => withFakeIntervals(async (intervals) => { const transform = createSseHeartbeatTransform({ intervalMs: 100 }); const writer = transform.writable.getWriter(); const reader = transform.readable.getReader(); @@ -184,7 +195,7 @@ test("shape default is comment (back-compat)", async () => { await pump; assert.match(emitted[0], /^: keepalive /); - }); + })); }); test("intervalMs <= 0 returns passthrough (no setInterval, no heartbeat)", async () => { @@ -224,8 +235,11 @@ test("shapeForClientFormat maps formats correctly", () => { test("no shape collides with stream.ts event: keepalive strip regex", async () => { const shapes = ["comment", "anthropic-ping", "openai-chunk", "openai-responses-in-progress"]; for (const shape of shapes) { - await withFakeIntervals(async (intervals) => { - const transform = createSseHeartbeatTransform({ intervalMs: 100, shape }); + await withSseCommentsOn(() => withFakeIntervals(async (intervals) => { + const transform = createSseHeartbeatTransform({ + intervalMs: 100, + shape, + }); const writer = transform.writable.getWriter(); const reader = transform.readable.getReader(); const emitted = []; @@ -249,6 +263,6 @@ test("no shape collides with stream.ts event: keepalive strip regex", async () = `shape ${shape} produced forbidden line: ${line}` ); } - }); + })); } });