# Environment Variables Reference (Čeština)
🌐 **Languages:** 🇺🇸 [English](../../../../reference/ENVIRONMENT.md) · 🇪🇹 [am](../../../am/docs/reference/ENVIRONMENT.md) · 🇸🇦 [ar](../../../ar/docs/reference/ENVIRONMENT.md) · 🇦🇿 [az](../../../az/docs/reference/ENVIRONMENT.md) · 🇧🇬 [bg](../../../bg/docs/reference/ENVIRONMENT.md) · 🇧🇩 [bn](../../../bn/docs/reference/ENVIRONMENT.md) · 🇧🇦 [bs](../../../bs/docs/reference/ENVIRONMENT.md) · 🇩🇰 [da](../../../da/docs/reference/ENVIRONMENT.md) · 🇩🇪 [de](../../../de/docs/reference/ENVIRONMENT.md) · 🇬🇷 [el](../../../el/docs/reference/ENVIRONMENT.md) · 🇪🇸 [es](../../../es/docs/reference/ENVIRONMENT.md) · 🇪🇪 [et](../../../et/docs/reference/ENVIRONMENT.md) · 🇮🇷 [fa](../../../fa/docs/reference/ENVIRONMENT.md) · 🇫🇮 [fi](../../../fi/docs/reference/ENVIRONMENT.md) · 🇫🇷 [fr](../../../fr/docs/reference/ENVIRONMENT.md) · 🇮🇪 [ga](../../../ga/docs/reference/ENVIRONMENT.md) · 🇮🇳 [gu](../../../gu/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ha](../../../ha/docs/reference/ENVIRONMENT.md) · 🇮🇱 [he](../../../he/docs/reference/ENVIRONMENT.md) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [sr](../../../sr/docs/reference/ENVIRONMENT.md) · 🇸🇪 [sv](../../../sv/docs/reference/ENVIRONMENT.md) · 🇰🇪 [sw](../../../sw/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ta](../../../ta/docs/reference/ENVIRONMENT.md) · 🇮🇳 [te](../../../te/docs/reference/ENVIRONMENT.md) · 🇹🇭 [th](../../../th/docs/reference/ENVIRONMENT.md) · 🇹🇷 [tr](../../../tr/docs/reference/ENVIRONMENT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/ENVIRONMENT.md) · 🇵🇰 [ur](../../../ur/docs/reference/ENVIRONMENT.md) · 🇺🇿 [uz](../../../uz/docs/reference/ENVIRONMENT.md) · 🇻🇳 [vi](../../../vi/docs/reference/ENVIRONMENT.md) · 🇳🇬 [yo](../../../yo/docs/reference/ENVIRONMENT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/ENVIRONMENT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/ENVIRONMENT.md)
---
> Kompletní přehled všech proměnných prostředí, které OmniRoute rozpoznává.
> Šablonu pro rychlý začátek najdete v souboru [`.env.example`](../../.env.example).
> [!IMPORTANT]
> Každá zde zdokumentovaná proměnná musí být uvedena také v `.env.example` a
> každá proměnná v `.env.example` musí být uvedena zde. `npm run check:env-doc-sync`
> tuto shodu vynucuje při commitu i v CI. Chcete-li proměnnou záměrně vynechat, přidejte ji
> do seznamu povolených výjimek v `scripts/check/check-env-doc-sync.mjs`.
---
## Obsah
- [1. Povinné tajné údaje](#1-required-secrets)
- [2. Úložiště a databáze](#2-storage--database)
- [3. Síť a porty](#3-network--ports)
- [4. Zabezpečení a ověřování](#4-security--authentication)
- [5. Sanitizace vstupů a ochrana osobních údajů](#5-input-sanitization--pii-protection)
- [6. Zásady pro nástroje a směrování](#6-tool--routing-policies)
- [7. Adresy URL a cloudová synchronizace](#7-urls--cloud-sync)
- [8. Odchozí proxy](#8-outbound-proxy)
- [9. Integrace nástrojů CLI](#9-cli-tool-integration)
- [10. Integrace interního agenta a MCP](#10-internal-agent--mcp-integrations)
- [11. Přihlašovací údaje poskytovatelů OAuth](#11-oauth-provider-credentials)
- [12. Přepsání User-Agent poskytovatelů](#12-provider-user-agent-overrides)
- [13. Kompatibilita otisku CLI](#13-cli-fingerprint-compatibility)
- [14. Poskytovatelé klíčů API](#14-api-key-providers)
- [15. Nastavení časových limitů](#15-timeout-settings)
- [16. Protokolování](#16-logging)
- [17. Optimalizace paměti](#17-memory-optimization)
- [18. Synchronizace cen](#18-pricing-sync)
- [19. Synchronizace modelů (vývoj)](#19-model-sync-dev)
- [20. Nastavení specifická pro poskytovatele](#20-provider-specific-settings)
- [21. Stav proxy](#21-proxy-health)
- [22. Ladění](#22-debugging)
- [23. Integrace GitHubu](#23-github-integration)
- [24. Sandbox dovedností (v3.8.0+)](#24-skills-sandbox-v380)
- [27. Kanál Radar (vlastní hosting)](#27-radar-feed-self-hosting)
- [Scénáře nasazení](#deployment-scenarios)
- [Audit: odstraněné / nepoužívané proměnné](#audit-removed--dead-variables)
---
## 1. Povinná tajemství
Nenastavená tajemství označená **Ano** se při prvním spuštění vygenerují automaticky (`JWT_SECRET`, `API_KEY_SECRET`) a uloží do `server.env` v datovém adresáři — nastavte je explicitně, pokud je tento adresář dočasný. Výjimkou je `OMNIROUTE_WS_BRIDGE_SECRET`: neukládá se do `server.env` — vstupní body serveru při každém spuštění vytvářejí dočasnou hodnotu, kterou může použít pouze most běžící uvnitř procesu, takže externí klienti mostu ji potřebují nastavit explicitně.
| Proměnná | Povinná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------- | ------------------ | ----------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `JWT_SECRET` | **Ano** | _(žádná)_ | `src/lib/auth` | Podepisuje a ověřuje všechny session cookies dashboardu (JWT). Vygenerujte pomocí `openssl rand -base64 48`. |
| `API_KEY_SECRET` | **Ano** | _(žádná)_ | `src/lib/db/apiKeys.ts` | Šifrovací klíč AES pro hodnoty API klíčů uložené v SQLite. Vygenerujte pomocí `openssl rand -hex 32`. |
| `INITIAL_PASSWORD` | Ne | _(nenastaveno)_ | `src/lib/auth/managementPassword.ts` | Nastavuje heslo dashboardu při spuštění, dokud není žádné uložené; po uložení hesla se ignoruje. Instalace z npm i ze zdrojových kódů kopírují `.env.example` do `.env`, takže začínají s jeho veřejně známou zástupnou hodnotou `CHANGEME`: nahraďte ji před prvním spuštěním, nebo v tomto `.env` nastavte `INITIAL_PASSWORD=` (prázdné), aby se heslo vytvořilo v úvodním průvodci při první návštěvě, stejně jako když je hodnota nenastavená (výchozí stav Docker image). Uložené heslo změníte v Dashboard → Nastavení → Zabezpečení, nebo spusťte `omniroute reset-password` (`node bin/reset-password.mjs` ve checkoutu zdrojových kódů) s `DATA_DIR` nastaveným na datový adresář serveru. |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **Ano** (produkce) | _(nenastaveno)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Sdílené tajemství pro interní WebSocketový most Codex Responses. Ověřuje požadavky mostu mezi WS relé v Electronu/prohlížeči a OmniRoute. ⚠️ **POVINNÉ v produkci — pokud není nastavené, všechny požadavky WS mostu se zamítají.** Vygenerujte pomocí `openssl rand -base64 32`. |
| `OMNIROUTE_SW_BUILD_ID` | Ne | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Explicitní id pro obcházení mezipaměti service workeru (cache-busting) PWA shellu (#11779); první v řetězci rozlišení. |
| `SOURCE_VERSION` | Ne | _(nenastaveno)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Druhá v řetězci — nastavují ji PaaS buildery (např. ve stylu Heroku) jako nasazený commit. |
| `NEXT_PUBLIC_SW_BUILD_ID` | Ne | _(odvozená)_ | `src/shared/components/PwaRegister.tsx` | Veřejná hodnota z doby buildu, kterou klient používá k registraci `/sw.js?v=…`; odvozuje se ze dvou předchozích, potom z git SHA. |
| `OMNIROUTE_PEER_STAMP_TOKEN` | Ne (automaticky) | _(automaticky při každém spuštění)_ | `src/server/authz/policies/management.ts` | Tajemství pro každý proces dokazující, že důvěryhodné razítko peer-IP pochází z vlastního HTTP serveru OmniRoute (`scripts/dev/peer-stamp.mjs`). Authz middleware důvěřuje lokalitě požadavku (omezení tras LOCAL_ONLY na loopback/LAN) jen tehdy, když razítko nese tento token. Generuje se automaticky při každém spuštění — ponechte nenastavené; nastavte pevně pouze u víceprocesových instalací, které musí razítko sdílet. |
| `OMNIROUTE_TRUSTED_PROXIES` | Ne | _(nenastaveno)_ | `scripts/dev/peer-stamp.mjs` | Čárkou oddělené IP adresy nebo rozsahy CIDR reverzních proxy, jejichž hlavičkám `X-Forwarded-For` / `X-Real-IP` smí seznam povolených/zamítnutých IP věřit — navíc k loopbacku, adresám privátních sítí a edge uzlům Cloudflare, kterým se důvěřuje vždy. Potřebné jen pro proxy na jakékoli jiné veřejné adrese; jinak filtr posuzuje vlastní adresu dané proxy. Omezovač rychlosti relé podle klienta (`/api/v1/relay/chat/completions`) se řídí stejnou rozlišenou adresou klienta, nikdy jen samotnými předávacími hlavičkami. |
### Příkazy pro vygenerování
```bash
# Vygenerujte všechna čtyři tajemství najednou:
echo "JWT_SECRET=$(openssl rand -base64 48)"
echo "API_KEY_SECRET=$(openssl rand -hex 32)"
echo "INITIAL_PASSWORD=$(openssl rand -base64 16)"
echo "OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -base64 32)"
```
> [!CAUTION]
> Nikdy necommitujte soubory `.env` se skutečnými tajemstvími do systému správy verzí. `.gitignore` už `.env` vylučuje, ale před pushnutím to ověřte.
---
## 2. Úložiště a databáze
OmniRoute používá **SQLite** (prostřednictvím `better-sqlite3`) pro veškerou perzistenci. Tyto proměnné řídí umístění dat, šifrování a životní cyklus.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Kořenový adresář pro databázi SQLite, zálohy a datové soubory. Přepište pro svazky Dockeru nebo vlastní cesty. |
| `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(není nastavena)_ | `src/lib/dataPaths.ts` | Východisko z ochrany DATA_DIR pro testy/eval (#10428). Testy a sondy Node eval/print (`-e`/`--eval`/`-p`/`--print`, včetně forem `--eval=`/`--print=`) bez nastavené `DATA_DIR` se přesměrují do jednorázového dočasného adresáře, aby nemohly otevřít skutečnou databázi operátora; nastavte na `1`, chcete-li se vrátit ke skutečnému adresáři. |
| `OMNIROUTE_BUILD_SHA` | _(není nastavena)_ | `src/lib/monitoring/buildSha.ts` | Git SHA běžícího artefaktu. Opatřeno razítkem při `npm run build:release`; lze vložit v kontejnerech, které se dodávají bez sentinelu `dist/BUILD_SHA`. Vystaveno jako `system.buildSha` na `/api/monitoring/health`. |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Ref, vůči kterému brána provenience pack-artefaktu ověřuje SHA sestavení (#10427). |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(není nastavena)_ | `scripts/build/buildProvenance.ts` | Nastavte na `1`, aby bylo možné zabalit sestavení, jehož SHA není na linii vydání, a zaznamenat je jako záměrný canary místo selhání brány (#10427). |
| `OMNIROUTE_SMOKE_API_KEY` | _(není nastavena)_ | `scripts/ops/deploy-canary.mjs` | API klíč pro smoke sondu canary nasazení, odesílaný jako `Authorization: Bearer` na `/v1/chat/completions`. Používá jej pouze skript nasazení (#10429), nikdy server. Nesouvisí s proměnnými `OMNIROUTE_SMOKE_*` volitelného (opt-in) smoke harnessu CLI (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` v `tests/integration/upstream-cli-smoke.int.test.ts`) — viz [Integrace CLI → Reálný smoke průchod](../guides/CLI-INTEGRATIONS.md). |
| `OMNIROUTE_BUILDING` | _(není nastavena)_ | `src/lib/buildPhase.ts` | Signál fáze sestavení (#10060): na `1` jej nastavuje `scripts/build/build-next-isolated.mjs` a dědí jej každý spuštěný build worker, takže vrstva DB vrací no-op stub místo načítání nativního doplňku better-sqlite3 (který při ukončení způsobí abort workeru). Pro běžící server nikdy nenastavujte. |
| `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Nastavte na `1` pro přeskočení volitelné kontroly prebuildu nativních závislostí u exotických vendrovaných stromů. Chybějící závislost se tím sestavitelnou nestane; používejte pouze tehdy, když jsou nativní závislosti dodávány mimo standardní proces (out of band). |
| `OMNIROUTE_DATA_DIR` | _(není nastavena)_ | `open-sse/executors/promptql/threadSticky.ts` | **Záložní alias** pro `DATA_DIR`, kontrolovaný pouze tehdy, když `DATA_DIR` není nastavena. Slouží k nalezení diskové mezipaměti thread-sticky relací exekutoru PromptQL (`
/promptql-thread-sessions.json`); pokud není nastavena žádná z proměnných, zůstává mezipaměť pouze v paměti (neperzistuje přes restarty). |
| `OMNIROUTE_PLUGINS_DIR` | _(není nastavena)_ | `src/lib/plugins/scanner.ts` | Adresář, který čte **běhový skener pluginů** — a kořen, do nějž správce pluginů instaluje — přepisuje výchozí hodnotu odvozenou z domovského adresáře (#11827). Nasměrujte jej na bind-mountovaný strom pluginů v Dockeru/K8s namísto přesouvání HOME jen kvůli změně cesty skenování (HOME řídí i veškeré ostatní chování vázané na domovský adresář). Nenastaveno = `~/.omniroute/plugins`, nebo `/tmp/.omniroute/plugins`, pokud proces vůbec neexportuje domovský adresář — tichou situaci, kdy pluginy nejsou nalezeny, již tato proměnná odstraňuje. Výsledný adresář se při spuštění jednou zaznamená do logu jako `scanner.dir_resolved` se vstupem, který zvítězil. Pouze na straně serveru: pluginy CLI příkazů si ponechávají vlastní `OMNIROUTE_PLUGIN_PATH` (sekce 9). |
| `STORAGE_ENCRYPTION_KEY` | _(prázdné = vypnuto)_ | `src/lib/db/encryption.ts` | AES klíč pro úplné šifrování SQLite databáze v klidovém stavu. Vygenerujte pomocí `openssl rand -hex 32`. |
| `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | Označení verze šifrovacího klíče. Zvyšte při provádění rotace klíčů, aby bylo možné dešifrovat staré zálohy. |
| `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | Když je `true`, přeskočí rutinní/předzápisové zálohy SQLite souboru (uložení/vymazání ceníku models.dev, zápisy nastavení). Ruční zálohy a zálohy před obnovou stále probíhají. **Nezakazuje** povinný trvalý bezpečnostní snímek migration runneru ani ochranu proti hromadné migraci u existující perzistentní DB. Neruční zálohy jsou omezeny na maximálně jednu za 60 minut. Dashboard **Nastavení → Úložiště** může rutinní automatickou zálohu zakázat nezávisle. |
| `OMNIROUTE_SQLITE_SLOW_MS` | _(nenastaveno/vypnuto)_ | `src/lib/db/adapters/slowDiagnostics.ts` | Milisekundy; hodnoty pod 1 nebo nečíselné zůstávají vypnuté; varuje maximálně jednou za 10 s; logovací řádek obsahuje pouze driver, operation a elapsedMs. |
| `OMNIROUTE_CRYPT_KEY` | _(nenastaveno)_ | `src/lib/db/encryption.ts` | **Zastaralý alias** pro `STORAGE_ENCRYPTION_KEY`. Akceptován jako záložní varianta, když primární proměnná chybí. |
| `OMNIROUTE_API_KEY_BASE64` | _(nenastaveno)_ | `src/lib/db/encryption.ts` | **Zastaralý alias** (forma kódovaná v Base64) akceptovaný jako záložní varianta. Před použitím se automaticky dekóduje. |
| `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(nenastaveno)_ | `src/lib/db/core.ts` | Přepíše interval pravidelné kontroly stavu SQLite (ms). Když není nastaveno, výchozí hodnoty se odvozují od `NODE_ENV`. |
| `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(odstraněno)_ | `src/lib/db/walMaintenance.ts` | **Odstraněno.** Periodický živý `wal_checkpoint(TRUNCATE)` může zneplatnit sdílené mapování wal-indexu a shodit proces s SIGBUS (#13973), takže plánovač již neexistuje. Proměnná je inertní: kladná hodnota zaloguje jednorázové varování o zastarání, zatímco `0` nebo nenastavená hodnota zůstane tiše. WAL je udržován PASSIVE checkpointy (níže) a zkracován checkpointem při vypnutí. |
| `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5m) | `src/lib/db/walMaintenance.ts` | Přepíše interval častého `wal_checkpoint(PASSIVE)` (ms). Udržuje nevyřízené WAL rámce malé, aby checkpointy zůstaly rychlé a WAL soubor zůstal omezený mezi zkráceními při vypnutí. `0` zakáže. |
| `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Když PASSIVE tik zjistí, že WAL soubor přesahuje tuto velikost, spustí `wal_checkpoint(RESTART)`, aby WAL začal znovu bez přepisování mapovaného wal-indexu. Živé checkpointy v režimu truncate byly odstraněny (viz řádek `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). |
| `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Nastavte na `1`/`true`/`yes`/`on`, aby se proces ukončil poté, co kritický tlak na prostředky přetrvává po dobu `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, což umožní supervisorovi (systemd `Restart=always`, restart policy Dockeru) spustit čistý proces místo nekonečného servování chyb 503. |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2m) | `open-sse/utils/resourcePressure.ts` | Jak dlouho musí kritický tlak přetrvávat, než se spustí ukončení pro automatický restart. |
| `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Nastavte na `1`/`true`/`yes`/`on` pro ignorování celohostitelského `/proc/pressure/memory` (`psi_some` / `psi_full`), když hlučný soused vyvolá chyby 503, zatímco tento proces je v pořádku (#13124). Ochrany cgroup a V8 haldy zůstávají zapnuté. PSI se také přestává počítat jako důkaz omezení jádrem pro `cgroup_high`: celková hodnota cgroup nad `memory.high` se pak stane kritickou pouze při nárůstu `high`/`max` v `memory.events`. Bez `memory.events` se zachová hrubý poměr. |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(automatická detekce)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Explicitní cesta (absolutní nebo relativní k cwd) k `sql-wasm.wasm` při použití záložního WASM adaptéru `sql.js`. Když není nastaveno, detekuje se automaticky prostřednictvím závislostí balíčku a kandidátních rozložení. |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Počet dní, po které automatický úklidový sweep uchovává checkpointy terminálního (completed/failed/cancelled/expired) jobu Batch API, odkazované vstupní/výstupní/chybové soubory a řádek před jejich smazáním. Zasáhne pouze tehdy, když je zapnuto `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`; odpovídá retenčnímu oknu výstupů vlastního Batch API od OpenAI. Neovlivňuje operátorem spuštěnou trasu `DELETE /api/v1/batches/delete-completed`, která zůstává záměrně bezpodmínečná (bez věkového filtru). |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Když je `true`, automatický úklidový sweep maže terminální joby Batch API (a jejich checkpointy) starší než `OMNIROUTE_BATCH_RETENTION_DAYS` a čistí BLOB obsah nahraných souborů po jejich vlastním `expires_at`. Ve výchozím nastavení vypnuto: každá stávající instalace uchovává tato data přesně jako dříve, dokud se operátor nerozhodne funkci zapnout. Zároveň jde o feature flag upravitelný z dashboardu — viz `docs/reference/FEATURE_FLAGS.md` → Runtime. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Nastavte na `1` pro úplné přeskočení DB healthchecku při startu. Užitečné pro krátkodobé úlohy a integrační testy. |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Nastavte na `1` pro vynucení smyčky DB healthchecku i v případech, kdy by byla normálně přeskočena (např. u krátkodobých úloh). |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Nastavte na `1` pro přeskočení warm-upu nativního runtime během `npm install`. Užitečné v CI/headless instalacích, kde je sqlite již sestaven. |
| `OMNIROUTE_MIGRATIONS_DIR` | _(automatická detekce)_ | `src/lib/db/migrationRunner.ts` | Přepíše adresář, který migration runner prohledává. Užitečné při distribuci zabudovaných migrací ve vlastních buildech. |
| `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(nenastaveno)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Další migrační adresáře jako položky `namespace=dir` oddělené oddělovačem cest dané platformy (např. `ee=/opt/app/enterprise/db/migrations`). Soubory nalezené v nich se zaznamenávají jako `-`, takže distribuce dodávající vlastní migrace nikdy nekoliduje s upstream numerickými sloty. Poškozená položka, neplatný namespace nebo chybějící adresář vyhodí chybu při startu namísto tichého přeskočení schématu. |
| `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Bezpečnostní práh pro hromadné čekající migrace (#3416). Start se přeruší, pokud na existující DB čeká více než tento počet migrací (chrání před vymazanou sledovací tabulkou). Zvyšte ho pro obnovení starší zálohy; nastavte na `0` pro vypnutí kontroly. |
| `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Pracovní adresář pro release gate `check:install-upgrade`. Potřebuje zhruba 12 GB (dva ~3 GB instalační stromy plus tarball), takže nesmí běžet na malém tmpfs — na self-hosted runneru je `/tmp` 12 GB tmpfs v RAM a gate ji vyčerpal, čímž došlo k oříznutí balíčku. |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(výchozí v kódu)_ | `src/lib/spend/batchWriter.ts` | Interval flushování (ms) pro dávkový zapisovač spend/cost. Nižší hodnoty snižují slučování zápisů; vyšší hodnoty snižují DB contention. |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(výchozí v kódu)_ | `src/lib/spend/batchWriter.ts` | Maximální počet bufferovaných spend záznamů před vynuceným flushem. Zvyšte na nasazeních s vysokým QPS; snižte, když je důležitější omezená paměť. |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(nenastaveno)_ | `open-sse/utils/proxyFetch.ts` | Nastavte na `"true"` pro vypisování debug logů `[ProxyFetch]` na cestě Vercel relay. Ve výchozím nastavení vypnuto, aby neunikaly nápovědy o routování. |
| `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(nenastaveno)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Absolutní cesta k binárnímu souboru lokálního proxy core (soubor pojmenovaný `sing-box`), který ověřuje vygenerovanou konfiguraci core, než nahradí převzatý soubor. Při nenastavení se vedle převzatého souboru zapíše pouze `.generated`. Pouze prostředí hostitele: nikdy se neukládá do databáze ani nepřijímá přes management API, protože se binárka spouští. |
| `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(nenastaveno)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Jak se lokální proxy core po ověřené výměně konfigurace reloaduje: JSON pole argumentů spuštěné bez shellu, nebo přesně `external`, když soubor aplikuje externí pozorovatel. Nikdy se neukládá do databáze ani neexpozuje přes API. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Nastavte na `"true"` nebo `"1"`, aby se do podrobného řádku procesního logu `[ProxyEgress]` zahrnuly IP adresy klienta/výstupu (egress) a prefix účtu. Ve výchozím nastavení je VYPNUTO, aby procesní log neodhaloval IP adresy ani prefix účtu. |
| `OMNIROUTE_DEBUG` | _(nenastaveno)_ | `bin/cli/commands/quota.mjs` | Nastavte na `1` pro výpis diagnostiky časování jednotlivých požadavků (`[omniroute] GET completed in Nms`) z CLI příkazů quota na stderr. |
| `OMNIROUTE_HEALTHCHECK_PATH` | _(automaticky)_ | `scripts/dev/healthcheck.mjs` | Explicitní cesta, kterou testuje kontrola stavu kontejneru (health check). Pokud není nastavena, sonda ji odvodí z `OMNIROUTE_BASE_PATH`; jejím nastavením se znovu zapne hloubkový monitorovací endpoint. |
| `OMNIROUTE_DEBUG_COMPLETION` | _(nenastaveno)_ | `bin/cli/commands/completion.mjs` | Nastavte na libovolnou neprázdnou hodnotu pro vypisování diagnostiky `[omniroute completion]` z cest mezipaměti doplňování shellu v CLI (čtení/obnovení/zápis). Ve výchozím nastavení vypnuto — tyto mezipaměti selhávají tiše, aby chybějící či poškozená mezipaměť nikdy nerozbila doplňování tabulátorem. |
| `BATCH_RETRY_DURATION_MS` | `86400000` (24h) | `open-sse/services/batchProcessor.ts` | Maximální okno pro opakování jednotlivých položek dávky (ms). Položky, které tuto dobu překročí, se označí jako neúspěšné. |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Základní zpoždění (ms) pro exponenciální backoff při opakování položek dávky. |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | Strop (ms) pro exponenciální backoff mezi opakováními položek dávky. |
| `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Maximální počet souběžně zpracovávaných dávek. Zvyšte pro vyšší propustnost; udržujte nízko, abyste předešli návalům rate-limitů. |
> [!IMPORTANT]
> Před změnou existující perzistentní databáze publikuje spouštěč migrací kompletní,
> obsahově adresovaný snímek do `DATA_DIR/db_backups/`. Publikace vyžaduje souborový systém,
> který podporuje pevné odkazy v rámci téhož souborového systému bez přepisování a trvalou synchronizaci souborů. Hostitelé POSIX také
> vyžadují synchronizaci adresářů; ve Windows může Node odmítnout popisovače adresářů, takže OmniRoute publikovaný soubor vyprázdní (flush) a synchronizaci adresářových položek považuje za best-effort.
> Pokud připojený `DATA_DIR` nemůže tyto záruky poskytnout, spuštění bezpečně selže (fail-closed) ještě před aplikací
> migrace. Přesuňte `DATA_DIR` na svazek, který tyto primitivy má; nepoužívejte
> `DISABLE_SQLITE_AUTO_BACKUP` k obejití bezpečnosti migrací.
### Scénáře
| Scénář | Konfigurace |
| --------------------- | ------------------------------------------------------------------------------------ |
| **Lokální vývoj** | Ponechte všechny výchozí hodnoty. DB se nachází v `~/.omniroute/omniroute.db`. |
| **Docker** | `DATA_DIR=/data` + připojte svazek na `/data`. |
| **Šifrování v klidu** | Nastavte `STORAGE_ENCRYPTION_KEY` + udržujte zálohy klíče! Jeho ztráta = ztráta dat. |
| **CI/Testování** | `DATA_DIR=/tmp/omniroute-test` — efemérní, šifrování není potřeba. |
---
## 3. Síť a porty
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PORT` | `20128` | `src/lib/runtime/ports.ts` | Primární port pro Dashboard UI i API endpointy (režim jednoho portu). |
| `OMNIROUTE_BASE_PATH` | _(prázdné = kořen)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | URL podcesta pro provoz OmniRoute za reverzní proxy (nastavuje Next.js `basePath`; autentizační přesměrování jsou basePath-aware). Např. `/omniroute`. V Dockeru je hodnota zapečena během `docker build` (`ARG OMNIROUTE_BASE_PATH`); předem sestavené root image mohou jinou runtime hodnotu použít jednou při startu kontejneru, ještě před spuštěním Next.js. Nastavte `NEXT_PUBLIC_BASE_URL` na veřejný origin včetně stejné podcesty. |
| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(prázdné = kořen)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Zrcadlo `OMNIROUTE_BASE_PATH` viditelné v prohlížeči, vložené při buildu, aby zobrazení endpointů v dashboardu ukazovalo `https://host/omniroute/v1` místo `https://host/v1`. Když není nastaveno, použije se hodnota `OMNIROUTE_BASE_PATH`. Po změně je nutné znovu sestavit (Next `basePath` je build-time). |
| `DASHBOARD_ALLOW_EMBED` | _(nenastaveno = nikdy nelze zobrazit v iframe)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Volitelné (opt-in) vkládání HTML stránek do iframe. Při nenastavení každá route odesílá `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Nastavením na `vscode` se stránky (dashboard, přihlášení, dokumentace, landing) servírují s `frame-ancestors 'self' vscode-webview:` a bez `X-Frame-Options`, takže je může vykreslit VS Code Simple Browser (režim OmniCopilotu `dashboardOpen: "editor"`). API povrch (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, aliasy na kořenové úrovni) si v obou případech zachovává striktní hlavičky. Rozpoznána je pouze hodnota `vscode` — `1`/`true` ji nepovolí. Build-time: po změně znovu sestavte (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` pro image; nastavení u předem sestavené instalace nemá žádný účinek). |
| `API_PORT` | _(nenastaveno)_ | `src/lib/runtime/ports.ts` | Při nastavení servíruje proxy API `/v1/*` na tomto samostatném portu. |
| `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Bind adresa pro API port. |
| `DASHBOARD_PORT` | _(nenastaveno)_ | `src/lib/runtime/ports.ts` | Při nastavení servíruje Dashboard UI na tomto samostatném portu. |
| `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(vypnuto)_ | `src/sse/utils/backpressure.ts` | Omezí počet souběžných probíhajících chatových připojení; požadavky nad limit dostanou `503` s `Retry-After`. Kladné celé číslo pojistku povolí; nenastavení/`0` ji zakáže. |
| `OMNIROUTE_INSTANCE_ID` | _(nenastaveno)_ | `src/shared/resilience/peerRouting.ts` | Stabilní, jedinečné ID této brány při řetězení instancí OmniRoute. Umožňuje příchozí kontroly peer-loop. Povolené znaky: písmena, číslice, `.`, `_`, `:` a `-`; maximálně 64 znaků. |
| `OMNIROUTE_PEER_URLS` | _(nenastaveno)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | Základní URL adresy OmniRoute oddělené čárkami, které mohou přijímat `X-OmniRoute-Peer-Trace`. Metadata peeru přijímají pouze výslovně povolené upstream URL; všechni ostatní poskytovatelé zůstávají nedotčeni. |
| `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | Maximální počet dříve navštívených instancí OmniRoute akceptovaných u zřetězeného požadavku (`1`–`32`). Opakované instance nebo vyčerpaný rozpočet vrátí HTTP `508 Loop Detected`. |
| `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Publikovaný port na straně hostitele pro Dashboard v produkčním režimu Dockeru. |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Publikovaný port na straně hostitele pro API v produkčním režimu Dockeru. |
| `OMNIROUTE_PORT` | _(nenastaveno)_ | `src/lib/runtime/ports.ts` | Má přednost před `PORT` při spuštění uvnitř Electronu nebo jiných wrapperů. |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Port pro server živého monitorování přes WebSocket v reálném čase. |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Adresa, na kterou se váže živý WebSocket server. Nastavte na `0.0.0.0` pro zpřístupnění v síti LAN (nakonfigurujte také `LIVE_WS_ALLOWED_ORIGINS`). Připojení se ověřují pomocí session cookie dashboardu nebo Bearer API klíče, který drží správcovský rozsah (`manage`/`admin`). |
| `LIVE_WS_ALLOWED_ORIGINS` | _(nenastaveno)_ | `src/server/ws/liveServer.ts` | Další originy oddělené čárkami, kterým je povoleno otevřít živý WebSocket. Loopback originy dashboardu jsou již ve výchozím nastavení povoleny. |
| `LIVE_WS_ALLOWED_HOSTS` | _(nenastaveno)_ | `src/server/ws/liveServerAllowList.ts` | Další názvy hostitelů oddělené čárkami povolené pro originy živého WebSocketu. Na rozdíl od `LIVE_WS_ALLOWED_ORIGINS` (úplné URL originů) se porovnává pouze část hostitele — užitečné pro nastavení v LAN/Tailscale. |
| `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(nenastaveno)_ | `src/hooks/useLiveDashboard.ts` | Veřejná URL pro WebSocket živého dashboardu (na straně prohlížeče). Nastavte, pokud je před WS serverem reverzní proxy nebo Cloudflare Tunnel (např. `wss://ws.my-ai.com/live-ws`); prohlížeč se pak připojuje tam místo na `ws://hostname:20132`. Část pathname se používá také jako cesta pro WebSocket upgrade (výchozí: `/live-ws`). |
| `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` and `scripts/start-ws-server.mjs` | Nastavte na `0` nebo `false` pro zakázání WebSocket serveru v reálném čase (ve výchozím nastavení povolen, vázán na loopback). Přepínač CI/harness, který zakazuje samostatný pomocný skript živého WebSocketu. |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Rychlostní limit relaye na dvojici (token, IP), požadavky/minutu. V paměti, na instanci. `0` nebo záporná hodnota zakáže bránu dimenze IP (limit DB na token stále platí). |
| `NODE_ENV` | `production` | Next.js core | Řídí podrobnost protokolování, ukládání do mezipaměti, zveřejňování detailů chyb a optimalizace Next.js. |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — výchozí v kódu) | `package.json` / Next.js 16 | Turbopack je výchozí bundler pro `npm run dev` a `npm run build` (2–3× rychlejší sestavení, změřeno benchmarkem). Nastavte na `0` pro návrat na webpack na Windows, při potížích s nekompatibilitou nativních vazeb / bundleru, **nebo na strojích s omezenou RAM** — produkční sestavení Turbopacku na této verzní linii Next.js (16.2.x) jsou upstreamově známá tím, že na velkých grafech modulů mají paměťový špičkový odběr mnohem vyšší než webpack (oprava memory-eviction Turbopacku z Next 16.3 ještě není stabilní); fallback na webpack vrcholí mnohem níže. Viz #6409. **Sestavení Docker image mají výchozí `0` (webpack)**: `Dockerfile` deklaruje `ARG OMNIROUTE_USE_TURBOPACK=0`, takže holý `docker build .` (Railway a další hostingy na jedno kliknutí, ad-hoc self-hosteři) nebude na builderu s omezenou pamětí ukončen OOM killerem; předejte `--build-arg OMNIROUTE_USE_TURBOPACK=1` pro sestavení image s Turbopackem. Viz `docs/guides/DOCKER_GUIDE.md` → Prostředky v době sestavení. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(nenastaveno)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Nastavte na `1` pro přeskočení kontroly integrity SQLite při spuštění. Užitečné pro rychlejší start u velkých databází. |
| `NOTIFY_SOCKET` | _(nenastaveno)_ | systemd (protokol sd_notify) | Nastavuje systemd, když proces běží pod servisní jednotkou s integrací sd_notify; OmniRoute tuto hodnotu čte (viz `OMNIROUTE_DISABLE_SD_NOTIFY`) a odesílá notifikace READY/WATCHDOG. Uživatel ji nikdy nenastavuje. |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(nenastaveno)_ | `scripts/dev/systemd-notify.mjs` | Nastavte na `1` pro zakázání systemd sd_notify (Type=notify / WatchdogSec=) i při běhu pod systemd jednotkou. Notifikátor je mimo systemd v každém případě nečinný (no-op). |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Interval (ms) pro plánovač kontroly stavu přihlašovacích údajů na pozadí. Minimum: 10000 (10 s). |
| `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (ms) pro stav přihlašovacích údajů uložený v mezipaměti. |
| `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Nastavte na `1` nebo `true` pro zakázání pravidelného testování připojení poskytovatelů na pozadí. Poskytovatelé vyhledávání (SEARCH_VALIDATOR_CONFIGS v `src/lib/providers/validation/searchProviders.ts`, např. `tavily-search`) jsou z této kontroly vždy vyloučeni — jejich „validace" je skutečný zpoplatněný upstreamový dotaz, takže na časovači nikdy nejsou kontrolováni (#9970). |
| `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Nastavte na `1`, aby autentizovaný volající mohl požádat o `/api/monitoring/health?deep=1`, což jednou za TTL vzorkuje rozhraní completions. Anonymní volající sondu nikdy nespustí. |
| `OMNIROUTE_EVENT_LOOP_STALL_THRESHOLD_MS` | `5000` | `src/lib/healthzLag.ts` | Prahová hodnota zablokování (ms) pro záznamník event loopu při spouštění: zmrazení delší než tato hodnota při obnovení zaznamená jeden řádek `event loop stalled` s údaji o paměti a počtech probíhajících požadavků a zvýší čítač/maximum `eventLoopStall` na `/api/monitoring/health`. Nastavte na `0` pro zakázání; nečitelná nebo záporná hodnota se vrátí na `5000`. |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Adresa vazby pro dev/start server Next.js. Při nastavení přepíše výchozí `0.0.0.0`. |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Adresa vazby, kterou používá runner Playwright při spouštění Next.js. Výchozí hodnota je `127.0.0.1` pro hermetické testy. **Nepoužívejte pro `omniroute serve`** — místo toho použijte `OMNIROUTE_SERVER_HOST` (POSIX shelly automaticky nastavují `HOSTNAME` na název stroje; `.env` ji nemůže přepsat). |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Adresa vazby pro `omniroute serve`. Zabraňuje kolizi s proměnnou `HOSTNAME` POSIX shellu (bash/zsh ji vždy nastavují na název stroje). Pokud není nastavena, použije se výchozí hodnota `0.0.0.0`. (#6194) |
### Režimy portů
```
┌─────────────────────────── Single Port (default) ──────────────────────────┐
│ PORT=20128 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Split Ports ─────────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ Use case: Expose API to LAN while restricting Dashboard to localhost. │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker Production ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → Maps container ports to host ports in docker-compose.prod.yml. │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 4. Zabezpečení a autentizace
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Sůl kombinovaná s hardwarovými identifikátory pro vytváření otisku stroje (machine fingerprinting). Pro izolaci ji měňte podle nasazení. |
| `OMNIROUTE_CLI_SALT` | _(nenastaveno = náhodná sůl pro každou instalaci, uložená v `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | HMAC sůl pro odvození místního CLI autentizačního tokenu. Nastavení této hodnoty rotuje všechny CLI tokeny na stroji a vždy má prioritu před uloženou solí. Viz `docs/security/CLI_TOKEN.md`. |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Nastavuje příznak `Secure` na session cookies. **Musí být `true`** při provozu za HTTPS. |
| `REQUIRE_API_KEY` | `false` | middleware API | Pokud je `true`, všechny proxy požadavky `/v1/*` musí obsahovat platný API klíč. **Tento příznak nehlídá `GET /v1/models`**, který se místo toho řídí postojem přihlášení k dashboardu (`requireAuthForModels`) — takže `401` z `/v1/models` NEZNAMENÁ, že je inference chráněná. Viz `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). |
| `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Umožňuje zobrazit úplné hodnoty API klíčů v uživatelském rozhraní Dashboardu. Konfigurovatelné pomocí Feature Flags v Dashboardu; bezpečnostní riziko u sdílených instancí. |
| `NO_LOG_API_KEY_IDS` | _(prázdné)_ | `src/lib/compliance/index.ts` | ID API klíčů oddělená čárkami, která obcházejí protokolování požadavků (soulad s GDPR). |
| `DEFAULT_RATE_LIMIT_PER_DAY` | _(nenastaveno = neomezeno)_ | `src/shared/utils/apiKeyPolicy.ts` | Záložní denní rozpočet požadavků použitý na API klíče, jejichž sloupec `rate_limits` je null. Nenastaveno nebo prázdné: žádný implicitní strop (#2289, #11017). `0` je totéž (neomezeno). Kladné celé číslo N povoluje N/den, 5N/týden, 20N/měsíc. Chybně formátované neprázdné hodnoty se vracejí k původním oknům 1000/den, 5000/týden, 20000/měsíc. |
| `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | Maximální povolená velikost těla požadavku. Odmítá payloady překračující tento limit. |
| `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | Skutečná těla požadavků na této hranici nebo nad ní získají před parsováním JSON atomickou procesně lokální heavyweight admission rezervaci (cesta BYTE, včetně `POST /v1/responses`). Stejný únik zdravé rezervy (healthy-headroom escape) z [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) jako u structure-heavy; stále omezeno hodnotou `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), takže se [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) nevrátí. |
| `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Pevný limit chatovací routy vynucovaný vůči bajtům přečteným během omezeného příjmu, včetně požadavků s chybějící, neplatnou nebo nepoctivou hodnotou `Content-Length`; přebytek obdrží `413`. |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(nenastaveno — žádný limit počtu požadavků)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** tento zastaralý limit POČTU požadavků se nyní uplatňuje pouze při explicitním nastavení. Pokud zůstane nenastaven (výchozí stav), přijímání náročných chatových požadavků je místo toho řízeno proměnnou `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — automaticky odvozeným BAJTOVÝM rozpočtem dimenzovaným z reálného paměťového stropu procesu v **jednom procesu** (jedna halda V8). Dva překrývající se požadavky `/v1/responses` s ~750k tokeny shazují haldy ~12 Gi (#7849) — jde o varování **paměťového rozpočtu**, ne o pevné produktové maximum 2. Zdravý proces (halda pod poměrem shazování) MŮŽE přijmout více souběžných dlouhých `/v1/responses` prostřednictvím `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Desítky dlouhých SSE klientů (40–50) představují haldu + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, ne „max 2“. Slepé zvýšení této hodnoty ve smyslu „využij hostitele“ znovu zavádí #7849. Násobte **haldy** pomocí **N nezávislých `DATA_DIR`s** (#11024); nikdy `replicas>1` na jednom SQLite souboru. |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(automaticky odvozeno)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** přepis automaticky odvozeného bajtového rozpočtu příjmu (25 % přísnějšího paměťového stropu V8/cgroup děleno 8násobnou přechodnou amplifikací). Odvozené i explicitní hodnoty se připínají k 8 MiB–2 GiB. Tělo větší než efektivní rozpočet okamžitě selže s `413 body_exceeds_budget`; soupeření mezi jednotlivě obsloužitelnými těly zůstává opakovatelné `503`. 40–50 souběžných dlouhých SSE klientů představuje tento rozpočet + halda, ne pevné „max 2“. Před laděním si přečtěte `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` na `/api/monitoring/health`. |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Poměr shazování při tlaku na haldu (`heapUsed / heap_size_limit`) pro přijímání náročných požadavků BYTE a STRUCTURE (#10183, #10268, #10437). Souběžný náročný požadavek přesahující `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` se shodí s opakovatelným `503` pouze tehdy, když je halda TAKÉ na tomto poměru nebo nad ním; na zdravé haldě je místo toho přijat prostřednictvím rezervy zdravé haldy (healthy-headroom). |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (výchozí `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Omezená dodatečná kapacita pro rychlou cestu při zdravé haldě (#10437) na **obou** STRUCTURE i BYTE (`admitChatRequest`, včetně těl ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Bez tohoto omezení by každý vytížený požadavek se zdravou haldou obcházel přijímání bez jakéhokoli stropu. Jakmile je cestou zdravé haldy aktivních tolik souběžných přidělení, další vytížené požadavky propadávají do STEJNÉ cesty omezeného čekání/shazování používané při skutečném tlaku na haldu. `0` obcházení zcela zakáže. |
| `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Počet zpráv, který klasifikuje chatový požadavek jako náročný, i když je jeho tělo pod bajtovým prahem. |
| `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Počet nástrojů, který klasifikuje chatový požadavek jako náročný, i když je jeho tělo pod bajtovým prahem. |
| `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Konzervativní odhad tokenů z velikosti řetězce, který klasifikuje požadavek jako náročný; jde o proxy nákladů přijímání, nikoli o fakturační tokenizaci poskytovatele. |
| `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (zakázáno) | `src/shared/middleware/chatBodyAdmission.ts` | Volitelný opt-in limit historie chatu. Ve výchozím nastavení zakázáno: počet zpráv je politikou nasazení, nikoli univerzální vlastností požadavku, a omezení zde odmítá konverzace terminálním `413` dříve, než je kompresní pipeline dokáže učinit obsloužitelnými. Růst haldy je omezen proměnnou `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` a shazováním při tlaku na haldu. Na nasazeních s omezenou pamětí, která potřebují pevný strop, nastavte kladnou hodnotu; přebytek pak obdrží strukturované `413` s požadavkem na kompakci. |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Pevný limit pro nestreamovanou odpověď upstreamu plně ukládanou do paměti. Po jeho překročení se čteč upstreamu zruší a požadavek rychle selže, místo aby rostl neomezený řetězec, dokud se nevyčerpá halda. |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Maximální počet bajtů přenášených po síti z hlaviček odpovědi upstreamu. Při překročení rozpočtu se hlavičky s nižší prioritou (např. vlastní `x-codex-*`, `x-oai-request-id`) zahazují, aby se vešly do běžných limitů hlaviček reverzní proxy. Nastavením vyšší hodnoty předáte více metadat z upstreamu za cenu větší velikosti hlaviček odpovědi. |
| `CORS_ORIGIN` | _(nenastaveno)_ | `src/server/cors/origins.ts` | Starší (legacy) CORS allowlist pro jediný origin. Pro nová nasazení preferujte `CORS_ALLOWED_ORIGINS`. CORS slouží pouze pro prohlížečové API klienty z jiných originů; autentizované zápisy z dashboardu místo toho používají požadavky stejného originu a CSRF ochranu vázanou na relaci. |
| `CORS_ALLOWED_ORIGINS` | _(nenastaveno)_ | `src/server/cors/origins.ts` | Seznam povolených originů CORS oddělený čárkami. Žádný wildcard se neodesílá, pokud není explicitně nakonfigurováno `CORS_ALLOW_ALL=true`. |
| `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Úniková cesta pouze pro vývoj, která zrcadlí libovolný prohlížečový `Origin`. Nepovolujte na sdílených ani produkčních nasazeních. |
| `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Starší (legacy) alias. Jeho přepínač na dashboardu (přepsání v DB) se čte před touto hodnotou prostředí; `false`, `0`, `no` nebo `off` na kterémkoli z nich vypíná kontroly hostitelů stejným způsobem jako `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, a to i když je přepínač tohoto příznaku na dashboardu uložen jako vypnutý; ostatní hodnoty ponechávají ochranu na dvou příznacích níže. |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Vypíná kontroly hostitelů ochrany odchozích URL včetně blokování cloudových metadat (celý rozsah 169.254.0.0/16, metadata.google.internal) na cestách poskytovatele, které se řídí režimem ochrany: validace URL, objevování modelů, základní URL uzlů poskytovatele (včetně vzdálených rerank uzlů) a test proxy-fallbacku, mimo jiné odchozí cesty související s poskytovatelem, jako je vzdálené načítání obrázků/médií. Příznak také povoluje soukromé cíle webhooků, kromě koncových bodů cloudových metadat/link-local, které zůstávají blokované i při zapnutém příznaku. Chat požadavky odesílané přes `BaseExecutor.execute()` si zachovávají kontrolu cloudových metadat. Lokální poskytovatelé fungují s výchozími hodnotami: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (výchozí `true`) již povoluje lokální a LAN URL na cestách validace, objevování a uzlů poskytovatele; test proxy-fallbacku a soukromé cíle webhooků se řídí pouze tímto příznakem a blokují lokální/LAN hostitele, dokud je vypnutý. Přepisuje `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. Hodnota uložená z přepínače na dashboardu má přednost před touto proměnnou. |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Povoluje URL poskytovatelů na lokálních/soukromých adresách (127.0.0.1, localhost, LAN, soukromé rozsahy) pro validaci poskytovatele, objevování modelů, chat a další odchozí cesty související s poskytovatelem, které režim ochrany řídí. **Výchozí `true`** (primárně lokální): ochrana pak blokuje koncové body cloudových metadat — celý rozsah 169.254.0.0/16 plus známé hostname metadat (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Nastavte `false` pro režim pouze veřejných adres, který blokuje i soukromé a loopback hostitele. Ochrana kontroluje hostname nebo IP literál tak, jak je zapsán, před jakýmkoli DNS dotazem; v režimu pouze veřejných adres obálka safe-fetch navíc hostname překládá a odmítá jakoukoli soukromou odpověď. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` tyto kontroly vypíná na cestách uvedených v jeho řádku. Vestavění lokální poskytovatelé, jako jsou LM Studio, Ollama, vLLM, Llamafile a Triton, přeskakují všechny kontroly hostitelů pro ověření klíče a chat. Hodnota uložená z přepínače na dashboardu má přednost před touto proměnnou. (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Umožňuje trasám `/v1/audio/*` (transkripce, řeč, překlady) používat OpenAI-kompatibilní uzel poskytovatele hostovaný mimo localhost. Ve výchozím nastavení vypnuto — směrování audia na vzdáleného hostitele mění identitu odchozího provozu a musí být explicitním rozhodnutím operátora. Loopback/soukromé uzly (localhost, 127.0.0.1, 172.16-31.x) jsou vždy povoleny a nejsou ovlivněny. (#3963) |
| `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Umožňuje `POST /v1/rerank` (a krok loopback reranku paměťového enginu) používat OpenAI-kompatibilní uzel poskytovatele hostovaný mimo localhost — zařízení v LAN nebo Tailscale peer se spuštěným TEI, Infinity, vLLM atd. Ve výchozím nastavení vypnuto — směrování na vzdáleného hostitele mění identitu odchozího provozu a musí být explicitním rozhodnutím operátora. Loopback uzly (localhost, 127.0.0.1, 172.16-31.x) jsou vždy povoleny a nejsou ovlivněny. Základní URL vzdáleného uzlu musí rovněž projít politikou odchozích URL poskytovatele (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). |
| `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(prázdné)_ | `src/shared/network/localNodeHosts.ts` | Názvy hostitelů (oddělené čárkami nebo bílými znaky), které směrování provider-node považuje za lokální — typicky název Docker/Compose služby rerankeru, TEI nebo audio sidecaru ve vlastní Docker síti OmniRoute (`http://reranker:8080/v1`), takže uzel nepotřebuje pevně zakódovanou IP adresu kontejneru. Uvedení hostitelé jsou způsobilí pro `/v1/rerank`, `/v1/audio/*` a lokální kontrolu stavu, aniž by bylo nutné zapínat `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` pro každý vzdálený uzel, a jsou voláni přímo — nikdy přes `HTTP(S)_PROXY` nebo připnutý proxy daného připojení. Stále však odesílají API klíč připojení. Přijímány jsou pouze jednoúrovňové názvy (single-label) a názvy `.internal`/`.local`; veřejné FQDN, IP literály a názvy cloud-metadata jsou ignorovány s varováním. (#14635) |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Pokud je povolen OIDC, zakáže přihlašování heslem, takže se uživatelé mohou ověřit pouze prostřednictvím OIDC Single Sign-On. Je přijímán také neprefixovaný alias `OIDC_DISABLE_PASSWORD_LOGIN`; přednost má Feature Flag v Dashboardu se stejným klíčem. (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Neprefixovaný alias proměnné `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). |
### Kontrolní seznam zabezpečení
```bash
# Minimální zabezpečení pro produkci:
AUTH_COOKIE_SECURE=true # Vyžaduje HTTPS
REQUIRE_API_KEY=true # Ověřuje všechna volání proxy
ALLOW_API_KEY_REVEAL=false # Nikdy nezobrazovat klíče v UI
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # Limit 5 MB
```
---
## 5. Sanitizace vstupu a ochrana PII
OmniRoute poskytuje dvouvrstvou ochranu: kontrolu injekcí na straně požadavků a odstraňování PII na straně odpovědí.
> **⚠️ Omezení:** Tato ochranná opatření představují detekci založenou na heuristikách s _vynaložením maximálního úsilí_, nikoli kompletní firewall proti prompt injection nebo systém DLP pro PII. Mohou vést k falešně pozitivním výsledkům (neškodné persony či RPG prompty jsou označeny) i falešně negativním výsledkům (leetspeak, mezery, neanglické vzory). Sama o sobě nejsou pro zajištění souladu s předpisy dostačující. Než se na ně spolehnete, upravte režimy a otestujte je na svém provozu.
### Strana požadavků: Ochrana proti prompt injection
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| --------------------------------- | --------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | Povolí kontrolu příchozích zpráv na vzory prompt injection. |
| `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Zásady pro injekce: `warn` = pouze protokolovat, `block` = odmítnout požadavek s kódem 400. Zastaralý režim `redact` text injekce **neodstraňuje**; pro přepis PII v požadavku použijte `PII_REDACTION_ENABLED`. |
| `INJECTION_GUARD_MODE` | _(nenastaveno)_ | `src/middleware/promptInjectionGuard.ts` | Zastaralý alias pro `INPUT_SANITIZER_MODE` — stejné chování. |
| `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | Minimální závažnost, kterou `MODE=block` odmítne: `high` (výchozí), `medium` nebo `low`. Vzory se střední závažností jsou pouze sledovány, pokud není práh snížen. |
| `INJECTION_GUARD_BLOCK_THRESHOLD` | _(nenastaveno)_ | `src/shared/utils/injectionSeverity.ts` | Zastaralý alias pro `INPUT_SANITIZER_BLOCK_THRESHOLD` — stejné chování. |
| `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | Pokud je nastaveno na `true`, anonymizuje PII v příchozích požadavcích (nezávisle na režimu injekcí). |
| `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | Anonymizuje známé vzory klíčů API / tajných tokenů v datových částech požadavků a odpovědí. Volitelné; odpovídá nastavení `PII_REDACTION_ENABLED`. |
### Strana odpovědí: Sanitizátor PII
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| -------------------------------- | --------------- | ------------------------- | -------------------------------------------------------------------------------------- |
| `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | Před vrácením klientovi zkontroluje odpovědi LLM na únik PII. |
| `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = maskovat PII, `warn` = pouze protokolovat, `block` = zahodit celou odpověď. |
### Sanitizátor kontextu tokenizovaných tras VS Code
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ----------------------------------- | --------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | Odstraňuje implicitní kontext aktivního editoru (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) z požadavků `/v1/vscode/[token]/*` a anonymizuje obsah explicitně připojených citlivých souborů. Ve výchozím nastavení zabezpečeno; nastavením na `0` tuto funkci zakážete. |
### Scénáře
| Scénář | Konfigurace |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Soulad s podnikovými předpisy** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (blokování injekcí + anonymizace PII v požadavcích a odpovědích; režimy jsou nezávislé) |
| **Pouze monitorování** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — protokoluje, ale nikdy neblokuje |
| **Osobní použití** | Ponechte vše zakázané — nulová režie |
---
## 6. Zásady nástrojů a směrování
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ----------------------------------------------------------- | -------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | Řídí přístup LLM k nástrojům/volání funkcí. `allowlist` = pouze uvedené nástroje, `denylist` = vše kromě uvedených, `disabled` = bez omezení. |
| `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | Cesta k JSON souboru s pravidly pro manipulaci s payloadem (úpravy na straně upstreamu pro jednotlivé modely/protokoly). |
| `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Interval obnovení (ms) pro za provozu znovunačítání souboru s pravidly payloadu. Minimum `1000`. |
| `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Dobrovolné (opt-in): směruje neprefixovaná ID modelů `claude-*` od klientů Claude Code přes OAuth účet Claude Code, místo aby vyžadoval prefix poskytovatele. Explicitní prefixy poskytovatele mají stále přednost. Lze nakonfigurovat také přepínačem na dashboardu na stránce poskytovatele Claude. |
| `OMNIROUTE_REDACT_THINKING` | `true` | `open-sse/executors/base/redactThinkingBeta.ts` | Nastavením na `false` zabráníte tomu, aby OmniRoute sám přidával Anthropic betu `redact-thinking-2026-02-12` (prázdné thinking bloky obsahující pouze podpis). Požadavky s `thinking.display: "summarized"` ji přeskakují bez ohledu na to; klientem vyjednaná redact beta nebo opt-in `requestDefaults.redactThinking` kompatibilní s CC ji zachová. Požadavky Claude OAuth si betu ponechávají (je součástí OAuth otisku Claude Code), pokud není zapnutý feature flag `CLAUDE_OAUTH_SUMMARIZED_THINKING_UNREDACTED`, který je ve výchozím nastavení vypnutý. |
| `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Starší chování `resolveBareModelToConnectionDefault` (#4825): nahradí jakýkoli neprefixovaný název modelu hodnotou `defaultModel` vybraného připojení. Ve výchozím nastavení vypnuto; nahrazuje se pouze `auto` nebo prázdný model; při zapnutí zaznamená jedno varování na dvojici. |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Limit souběžnosti na model pro round-robin kombinace (#9100). Semafor round-robin kombinace byl pevně omezen na 3 souběžné požadavky na model bez možnosti přepsání, což serializovalo provoz s vyšší souběžností za tento limit. Validováno na `>= 1`, oříznuto na `<= 32`. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Nebezpečný opt-in, který přeskakuje lokální kontrolu kontextového okna / maximálního počtu vstupních tokenů v OmniRoute pro přímé požadavky na jeden model. Upstream poskytovatelé nadále vynucují své skutečné limity; komprese promptu a vlastní limit výstupních tokenů modelu zůstávají aktivní. Efektivní priorita je přepsání Feature Flags v DB > proměnná prostředí > výchozí hodnota; není vyžadován restart. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(nenastaveno)_ | `open-sse/services/selfHostedEntry.ts` | Inline YAML dokument `providers:` (RIC-738, D4). Když je nastaven (s blokem `strategy:` nebo bez něj), `/v1/chat/completions` se přesměruje na self-hosted sjednocený OpenAI-kompatibilní vstup místo cloudové pipeline. Nenastaveno (výchozí): trasa prochází přímo do stávající cloudové pipeline. Viz `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(nenastaveno)_ | `open-sse/services/selfHostedEntry.ts` | Cesta k YAML souboru obsahujícímu stejný dokument `providers:` jako `OMNIROUTE_SELF_HOSTED_PROVIDERS`, pro nasazení, která preferují soubor před inline proměnnou prostředí. Kterákoli z nich aktivuje self-hosted vstup. |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(nenastaveno — otevřená trasa)_ | `open-sse/services/selfHostedEntry.ts` | Volitelný sdílený API klíč pro sjednocený self-hosted vstup (kostra D5, rezervováno pro systém kvót na klíč). Když je nastaven, požadavky musí obsahovat `Authorization: Bearer `. Nenastaveno: trasa je otevřená, v souladu se stávajícím vzorem self-hosted lokálních poskytovatelů (nasazení na loopbacku/důvěryhodné síti). |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(nenastaveno)_ | `open-sse/services/routingStrategies.ts` | Inline YAML dokument `strategy:` pro deterministický směrovací engine (M2/RIC-740, D3) — blacklist/whitelist, jistič s cooldownem, priorita podle nákladů, citlivost na latenci, záložní řetězec. Přepisuje inline blok `strategy:` vnořený uvnitř `OMNIROUTE_SELF_HOSTED_PROVIDERS`, pro každý klíč zvlášť. Viz `docs/routing/DETERMINISTIC_ROUTING.md`. |
| `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(nenastaveno)_ | `open-sse/services/routingStrategies.ts` | Cesta k YAML souboru obsahujícímu stejný dokument `strategy:` jako `OMNIROUTE_SELF_HOSTED_STRATEGY`, pro nasazení, která preferují soubor před inline proměnnou prostředí. |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(nenastaveno)_ | `open-sse/services/conversationTracker.ts` | Nastavte `1`, aby se přestala shromažďovat historie konverzací. `resolveConversationId()` vrátí nesledovaný výsledek ještě před čtením SQLite nebo parsováním historie zpráv a vztahuje se to i na ID relací dodaná klientem. Zpracování směrovacích relací zůstává beze změny a existující záznamy se nemažou. Pro nasazení, která nepoužívají zobrazení konverzací na dashboardu a chtějí, aby tabulka turnů přestala růst. |
| `OMNIROUTE_NADIR_API_KEY` | _(nenastaveno)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | API klíč pro volitelnou strategii auto-kombo routeru `nadir`, používaný, když není nastaven vlastní `config.nadir.apiKey` komba. Volitelné: volání bez klíče skončí na anonymní úrovni Nadiru, která je rychlostně limitována na IP adresu, a za sdílenou branou proto není použitelná. Citlivá hodnota; pokud komba používají různé účty, preferujte pole pro jednotlivá komba. |
| `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Základní origin rozhraní Nadir decision API, používaný, když není nastaveno vlastní `config.nadir.baseUrl` komba. Potřebné pouze pro self-hosted Nadir, který udržuje začátky promptů uvnitř vaší vlastní sítě. Koncové `/v1` je tolerováno a odstraňuje se. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Týdenní okno pro limity využití v USD na jednotlivé API klíče (vynucování v požadavcích, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: týden končí při nejbližším týdenním resetu mezi upstream připojeními, kterých může klíč dosáhnout, nebo jde o klouzavých 7 dní, pokud není žádný znám. `calendar`: místní týden od pondělí 00:00 do následujícího pondělí 00:00, stejný pro každý klíč. `calendar` se doporučuje, když je jeden fond upstream účtů sdílen mnoha jednotlivě rozpočtovanými klíči. Neplatné hodnoty se vrátí k hodnotě `provider`. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(časové pásmo procesu)_ | `src/lib/usage/apiKeyUsageLimits.ts` | Časové pásmo IANA (například `Asia/Shanghai`), které určuje pondělí 00:00 pro týdenní okno `calendar`. Nenastavené nebo neplatné: časové pásmo procesu OmniRoute (`TZ` hostitele nebo kontejneru, které je v imagech kontejnerů často nenastavené, tj. koordinovaný světový čas). V režimu `provider` se ignoruje. |
| `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Výchozí maximální počet nástrojů povolených v požadavku (výchozí hodnota OpenAI). Pouze kladná celá čísla; nenastavené nebo neplatné hodnoty ponechají `128`. Poskytovatel se známým/proaktivním limitem (`grok-cli` 200, `nvidia` 1536) stále uplatňuje vlastní strop — toto pouze posouvá výchozí strop. |
| `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(zapnuto)_ | `open-sse/executors/syntxChat.ts` | SYNTX.ai emulované volání nástrojů v promptu: nenastavené nebo `1`/`true`/`on`/`yes` vloží místní katalog nástrojů do promptu; jakákoli jiná hodnota (např. `0`) toto vložení přeskočí. |
---
## 7. Adresy URL a cloudová synchronizace
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | Adresa URL na straně serveru, kterou interní synchronizační úlohy používají k volání `/api/sync/cloud`. Ponechte ji jako adresu URL zpětné smyčky nebo kontejneru, i když je aplikace veřejně zpřístupněna přes proxy. |
| `CLOUD_URL` | _(prázdné)_ | `src/lib/cloudSync.ts` | Adresa URL koncového bodu cloudového přenosu (prémiová funkce). |
| `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | Časový limit HTTP pro požadavky cloudové synchronizace. |
| `OMNIROUTE_BUILD_PROFILE` | `full` | Konfigurace sestavení Webpacku | Profil při sestavení (nastavte na `minimal`, chcete-li privilegované moduly fyzicky vyloučit z balíčku). |
| `OMNIROUTE_STANDALONE_DIR` | _samostatný výstup .build/_ | `scripts/build/colocate-standalone.mjs` | Přepsání adresáře samostatného výstupu při sestavení, který používá krok kolokace po sestavení. Nejde o nastavení za běhu. |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(prázdné)_ | `src/lib/cloudSync.ts` | Sdílený tajný klíč používaný k ověření podpisu HMAC-SHA256 odpovědí cloudové synchronizace. |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Nastavením na `true` umožníte koncovému bodu cloudové synchronizace přepsat místní přihlašovací údaje. Výchozí hodnota je `false`. |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Nastavením na `true` odmítnete nepodepsanou odpověď cloudové synchronizace, pokud není nakonfigurován žádný místní tajný klíč (#13679). Přítomný podpis je vždy ověřen — a pokud není nastavena proměnná `OMNIROUTE_CLOUD_SYNC_SECRET`, je vždy odmítnut — bez ohledu na tento příznak. Od verze v3.9 bude ověřování ve výchozím nastavení vynuceno. |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Nastavením na `true` se bez potvrzení uživatele obnoví jednostupňové chování „importovat vše“ z verze v3.8.5. |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, řídicí panel, synchronizace | Veřejná adresa URL pro OAuth redirect_uri, odkazy řídicího panelu a generované veřejné adresy URL. Nastavte ji na stabilní veřejnou adresu URL, pokud musí zpětná volání OAuth nebo generované odkazy pro prohlížeč používat kanonického hostitele reverzního proxy serveru. |
| `NEXT_PUBLIC_CLOUD_URL` | _(prázdné)_ | Klientská strana | Klientská kopie proměnné `CLOUD_URL`. |
| `NEXT_PUBLIC_APP_URL` | _(nenastaveno)_ | `src/shared/services/cloudSyncScheduler.ts` | Zpětná kompatibilita pro `NEXT_PUBLIC_BASE_URL`. |
| `NEXT_PUBLIC_PORT` | _(nenastaveno — použije se `PORT`)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Záložní port na straně klienta pro zobrazované URL, když není znám žádný origin (SSR/testy); načítá se před `PORT`. |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(nenastaveno)_ | Resolver veřejného originu, URL obrázků | Origin OmniRoute určený pro prohlížeče s nejvyšší prioritou, používaný ke generování veřejných URL a ověřování originu mimo dashboard. Nastavte jej, když OpenWebUI nebo jiný relay přistupuje k OmniRoute přes interní URL, ale prohlížeč uživatele musí načítat vygenerovaná média z LAN, tunelu nebo veřejného originu. **Nezahrnujte** `/v1`. |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(nenastaveno)_ | `open-sse/config/providerPluginManifestUrl.ts` | Absolutní URL manifestu pluginu poskytovatele oznamovaná klientům typu sidecar. Pokud není nastavena, OmniRoute odvodí `/api/v1/provider-plugin-manifest` z originu požadavku nebo HOST/PORT. |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Protokol používaný při odvozování URL manifestu pluginu poskytovatele z HOST/PORT bez originu požadavku. Za veřejnou proxy ukončující TLS nastavte `https`, pokud není nastavena explicitní hodnota `OMNIROUTE_PROVIDER_MANIFEST_URL`. |
| `OMNIROUTE_TRUST_PROXY` | _(nenastaveno)_ | `src/server/origin/publicOrigin.ts` | Volitelný režim důvěry pro předané hlavičky veřejného originu. Nenastaveno = při bezpečnostních rozhodnutích nedůvěřovat hlavičkám `Forwarded` / `X-Forwarded-*`. `true` / `loopback` důvěřuje předanému hostiteli/protokolu pouze od loopback proxy označené tokenem. `private` / `lan` důvěřuje také proxy peerům v privátní LAN a umožňuje bridge `API_PORT` zachovat hlavičku `X-Forwarded-For` takového peeru. V produkci upřednostněte explicitní `NEXT_PUBLIC_BASE_URL`. |
| `KIE_CALLBACK_URL` | _(nenastaveno)_ | `open-sse/utils/kieTask.ts` | Veřejná URL zpětného volání pro asynchronní úlohy kie.ai. Přepsání s nejvyšší prioritou před `OMNIROUTE_KIE_CALLBACK_URL` a `OMNIROUTE_PUBLIC_URL`. |
| `OMNIROUTE_KIE_CALLBACK_URL` | _(nenastaveno)_ | `open-sse/utils/kieTask.ts` | Alternativní název pro `KIE_CALLBACK_URL`. Použije se jako záložní možnost, když primární proměnná není nastavena. |
| `OMNIROUTE_PUBLIC_URL` | _(nenastaveno)_ | `open-sse/utils/kieTask.ts` | Veřejný origin používaný k sestavení URL asynchronních zpětných volání. Záložní možnost s nejnižší prioritou pro zpětná volání kie.ai; používá se také jako obecná veřejná URL pro další relay služby. |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Endpoint pro zjišťování kvóty CrofAI používaný stránkou Využití. Přepište pro relay služby / testovací fixtures. |
| `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Endpoint kvóty ClinePass pro 5hodinové / týdenní / měsíční období používaný stránkou Využití. Přepište pro relay služby / testovací fixtures. |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Oficiální endpoint OpenCode Go pro využití, ověřovaný pomocí API klíče a používaný stránkou Využití. Přepište pro relay služby / testovací fixtures. |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Syntetizuje hlavičky identity OpenCode CLI (User-Agent, x-opencode-client/project, UUID požadavku/relace) pro upstream požadavky opencode-go/zen, které klient neodeslal, aby je Cloudflare při odchozím provozu z VPS přijal (#6210/#5997). Ve výchozím nastavení zapnuto od #10571; vypněte pomocí `false`/`0`/`no`/`off`. |
| `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | Výchozí User-Agent používaný, když je zapnuto `OPENCODE_SYNTHESIZE_CLI_HEADERS` a není nastaveno přepsání `_USER_AGENT` pro konkrétního poskytovatele. Používá se pouze pro exekutory opencode. Pokud nadřazená služba odmítne požadavek bez klíče, nakonfigurovaná hodnota, která neobsahuje `opencode/= 1.17>`, se namísto odmítnutí nahradí touto výchozí hodnotou. |
| `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (zapnuto) | `open-sse/utils/opencodeHeaders.ts` | Předává hlavičky klientské aplikace s informacemi o původu (`x-session-id`, `x-title`, `http-referer`) nadřazeným poskytovatelům, takže si požadavek pocházející z uvedeného prostředí zachová svou identitu při průchodu routerem (kontroly vydavatele OpenRouter jsou založeny na těchto hlavičkách). `0`/`false`/`no`/`off` zachová identitu registru/provozovatele a zahodí hodnoty dodané klientem. Vlastní hlavičky nakonfigurované provozovatelem mají vždy přednost před hodnotami klienta. |
| `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | Hodnota syntetizované hlavičky `x-opencode-client`, když je zapnuto `OPENCODE_SYNTHESIZE_CLI_HEADERS`. |
| `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | Hodnota syntetizované hlavičky `x-opencode-project`, když je zapnuto `OPENCODE_SYNTHESIZE_CLI_HEADERS`. |
| `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(nenastaveno)_ | `open-sse/config/providerErrorRules.ts` | Výsledná množina poskytovatelů, jejichž chyby nadřazené služby jsou seskupovány podle výstupní IP adresy (jedna chyba 429 odstaví všechna související připojení sdílející tuto IP adresu). Při nenastavené hodnotě se použije výchozí nastavení bezplatné úrovně `opencode,opencode-go,opencode-cli`; `none`/`off`/`false`/`0` kaskádu zcela deaktivuje; seznam oddělený čárkami tuto množinu nahradí. Placené tarify jsou v nadřazené službě seskupovány podle účtu a mohou tuto funkci bezpečně deaktivovat (#9611). |
| `OMNIROUTE_EGRESS_QUOTA_ROTATION_PROVIDERS` | _(nenastaveno)_ | `open-sse/config/providerErrorRules.ts` | Rozsah rotace výstupních připojení při odmítnutí kvůli kvótě. Při nenastavené hodnotě se člen fondu po chybě 429 odstaví pouze pro výše uvedenou rodinu seskupovanou podle IP adresy; `all` rozšíří tento zápis na všechny poskytovatele, takže po přijetí omezení rychlosti prostřednictvím určitého člena použije další výběr jiné výstupní připojení. Jakákoli jiná hodnota než `all` je ignorována. Vyžaduje `PROXY_SKIP_RECENTLY_FAILED` (ve výchozím nastavení zapnuto). Úložiště je klíčováno podle výstupní adresy, nikoli podle dvojice (poskytovatel, adresa), takže rozšířená chyba 429 odstaví daného člena pro všechny poskytovatele až do uplynutí stanovené doby (5 min, s prodloužením na dvojnásobek až do 15 min). Hodnota se načítá při každém výsledku odpovědi, takže změna se projeví bez restartu. |
| `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(nenastaveno)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Nastavením na `off` se přestane upravovat tělo požadavků OpenCode bez klíče (příznak streamování a seznam nástrojů). Hlavičky se nadále používají. Hodnota se načítá při každém požadavku, takže se změna projeví okamžitě. |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(nenastaveno)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Názvy nástrojů oddělené čárkami, které mají být deklarovány v požadavku OpenCode bez klíče, jenž žádné nástroje neobsahuje, pokud pro daný model ještě nebyly žádné zaznamenány. Prázdná hodnota použije jako záložní řešení jediný zástupný nástroj, o němž je model instruován, aby jej nevolal. Nejvýše 32 položek ve formátu `[A-Za-z_][A-Za-z0-9_-]{0,63}`; neplatné položky jsou ignorovány. |
| `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | Adresa URL nastavení Ollama Cloud používaná ke získávání údajů o kvótě. Lze přepsat pro přenosové služby / testovací přípravky. |
| `OMNIROUTE_OLLAMA_CLOUD_BALANCE_URL` | `https://ollama.com/api/balance` | `open-sse/services/ollamaCloudBalance.ts` | Dokumentovaný koncový bod nadřazené služby Ollama Cloud pro zjištění zůstatku (`GET https://ollama.com/api/balance`, `Authorization: Bearer `). Načítá se jednou při zavedení modulu. Používá se jako první pro kvótu Ollama Cloud, pokud připojení obsahuje klíč API; získávání údajů ze stránky nastavení pomocí souboru cookie zůstává záložní možností. Lze přepsat pro přenosové služby / testovací přípravky. |
| `OLLAMA_USAGE_COOKIE` | _(nenastaveno)_ | `open-sse/services/usage.ts` | Soubor cookie Ollama Cloud `__Secure-session` používaný k získávání údajů o kvótě ze stránky nastavení. Citlivý údaj; pokud je nakonfigurováno více účtů, upřednostněte pole pro jednotlivá připojení v ovládacím panelu. |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(nenastaveno)_ | `open-sse/services/usage.ts` | Alternativní proměnná prostředí pro soubor cookie Ollama Cloud `__Secure-session`. Citlivý údaj; pokud je nakonfigurováno více účtů, upřednostněte pole pro jednotlivá připojení v ovládacím panelu. |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(nenastaveno)_ | `open-sse/services/usage.ts` | Alternativní proměnná prostředí pro soubor cookie `__Secure-session` služby Ollama Cloud, která se používá před kratšími aliasy. Obsahuje citlivé údaje; pokud je nakonfigurováno více účtů, upřednostněte pole pro jednotlivá připojení v Dashboardu. |
| `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | Koncový bod limitů využití služby CodeWhisperer (AWS Kiro). Lze jej přepsat pro relay servery / testovací fixture. |
> [!IMPORTANT]
> Při nasazení za reverzním proxy serverem (nginx, Caddy) nastavte `NEXT_PUBLIC_BASE_URL` na svou stabilní veřejnou adresu URL (např. `https://omniroute.example.com`), pokud musí zpětná volání OAuth nebo generované veřejné odkazy používat tento název hostitele. Bez tohoto nastavení mohou zpětná volání OAuth selhat, protože se redirect_uri nebude shodovat, a generované veřejné odkazy mohou odkazovat na interní origin kontejneru.
>
> Ponechte `BASE_URL` jako interní loopback adresu nebo adresu URL kontejneru pro úlohy mezi servery. Pro interní požadavky na vlastní službu obsahující přihlašovací údaje nepoužívejte `Origin` z prohlížeče ani veřejný název hostitele.
>
> Autentizované zápisy z dashboardu nevyžadují statickou veřejnou základní adresu URL: dashboard odesílá požadavky s nebezpečnými metodami v rámci stejného originu spolu s tokenem CSRF svázaným s relací. OmniRoute nadále centralizuje ověřování veřejného originu pro integrace prohlížeče mimo dashboard: nejprve se důvěřuje explicitním proměnným prostředí s veřejnými adresami URL; nezpracované hlavičky `Forwarded` / `X-Forwarded-*` se ignorují, pokud není povoleno `OMNIROUTE_TRUST_PROXY` a bezprostřední proxy server není tokenem označen jako důvěryhodný. Nastavení CORS nepoužívejte k opravě požadavků dashboardu v rámci stejného originu; CORS je určeno pouze pro klienty prohlížeče z jiného originu.
---
## 8. Odchozí proxy
Směřujte volání upstream poskytovatelů LLM přes HTTP nebo SOCKS5 proxy kvůli řízení odchozího provozu, geo-směrování nebo maskování IP adresy.
`OMNIROUTE_UPSTREAM_HTTP2_ENABLED` má výchozí hodnotu `true`. Nastavením na `false`, `0`, `no` nebo
`off` vynutíte HTTP/1.1 u dispatcherů Undici v `open-sse/utils/proxyDispatcher.ts`
a `open-sse/utils/proxyFetch.ts`: přímý odchozí provoz, HTTP(S)/SOCKS proxy, relaye
a jejich opakované pokusy s novým socketem. Tím se zachová ověřování TLS certifikátů,
autentizace proxy, limity připojení a nastavení keep-alive. Po změně OmniRoute
restartujte, protože dispatchery jsou uloženy v mezipaměti a relay agenti se vytvářejí
při spuštění. Tento přepínač neovlivňuje TLS fingerprinting knihovny wreq ani transporty
specifické pro jednotlivé poskytovatele.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ---------------------------------------- | --------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Povolí agenta SOCKS5 proxy pro odchozí (upstream) volání. Vypnete hodnotou `false`. |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Klientská strana | Informovanost klientské strany o dostupnosti SOCKS5. |
| `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Ve výchozím stavu zapnutý příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepsání z databáze dashboardu má přednost). Fondy proxy a rotace jednotlivých účtů přestanou znovu obsluhovat člena, který právě selhal (odmítnutá TCP sonda nebo 429 skrze něj), na dobu, která se s každým opakováním zdvojnásobí, až do stropu. Hodnota `false` obnoví prostý výběr. |
| `SELECTOR_CONTROL_ALLOWLIST` | _(nenastaveno)_ | `src/lib/proxySubscription/selectorGuard.ts` | Seznam povolených cílů ovládání selektorů lokálního jádra mimo loopback (hostitelé nebo IP adresy oddělené čárkou či mezerou; `*` otevře LAN/privátní rozsahy, ale nikdy metadata/link-local). Loopback přes http/https je povolen ve výchozím nastavení. Hodnota z databáze dashboardu má před touto proměnnou přednost, pokud je nastavena a není prázdná. |
| `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Základní doba (ms) odstavení při 429, s každým opakováním zdvojnásobená. Načítá se jednou při startu. Omezeno na `1000..3600000`; hodnota mimo rozsah nebo nečitelná se s varováním vrátí na výchozí hodnotu. |
| `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Strop (ms) odstavení při 429. Načítá se jednou při startu. Omezeno na `1000..3600000`; hodnota mimo rozsah nebo nečitelná se s varováním vrátí na výchozí hodnotu. Je-li strop nižší než základ, vrátí se na výchozí hodnotu. Snížení stropu také zkracuje zapomínání sérií: záznamy se po vypršení pročistí po `2 x max`. |
| `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Dobrovolný (opt-in) příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepsání z databáze dashboardu má přednost). U poskytovatelů, jejichž kvóta je seskupena podle výstupní (egress) adresy, řadí člena fondu sdílejícího pozorovanou výstupní adresu nedávno odmítnutého člena těsně pod zdravé členy. Pouze pořadí, nikdy vyloučení. Vyžaduje `PROXY_SKIP_RECENTLY_FAILED`, který vytváří signál odmítnutí, jenž tento příznak čte. |
| `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Okno odrazu (ms), které omezuje opakovaná upozornění webhooku `proxy.set_aside` na jednoho člena fondu, takže nával odmítnutí odešle jedinou událost. Načítá se při každém vyslání. Omezeno na `1000..3600000`; hodnota mimo rozsah nebo nečitelná se tiše vrátí na výchozí hodnotu. |
| `HTTP_PROXY` | _(nenastaveno)_ | Standard Node.js | HTTP proxy pro odchozí (upstream) volání. |
| `HTTPS_PROXY` | _(nenastaveno)_ | Standard Node.js | HTTPS proxy pro odchozí (upstream) volání. |
| `ALL_PROXY` | _(nenastaveno)_ | Standard Node.js | Univerzální proxy (podporuje `socks5://`). |
| `OMNIROUTE_PROXY_ECHO_URL` | _(nenastaveno)_ | `src/lib/proxyEchoTarget.ts` | Připne cíl echo-IP používaný sondami odchozího provozu proxy na jednu URL. Pokud není nastaveno, sonda zkouší `api64.ipify.org` a poté `api4.ipify.org`, aby tunely pouze s IPv4 nebyly hlášeny jako mrtvé (#9694). |
| `NO_PROXY` | _(nenastaveno)_ | Node.js standard | Názvy hostitelů/IP adresy oddělené čárkami, které mají proxy obcházet. |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Maximální počet souběžných socketů na jeden kešovaný HTTP/SOCKS proxy dispečer. Dlouhotrvající SSE streamy, jako je Codex `/v1/responses`, potřebují více než jedno spojení, když několik požadavků sdílí stejnou proxy na úrovni účtu. Hodnoty nad `256` jsou omezeny. |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Timeout SOCKS5 handshaku (připojení) v ms. Zvyšte jej, když je jeden hostitel rezidenční brány vystaven vysoké souběžnosti (např. 100 současných požadavků) — skutečný handshake může při saturovaném poolu překročit 10 s, i když je proxy dosažitelná, což se jinak projeví jako falešné `[Proxy Fast-Fail] Proxy unreachable`. Omezeno na `120000`. |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Když je `false` (výchozí), požadavek, jehož přiřazenou proxy se nepodaří vyřešit, je **odmítnut (fail-closed)** místo přepnutí na přímé spojení — zabraňuje únikům skutečné IP. Nastavte `true` pro obnovení původního DIRECT fallbacku. |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Falšuje TLS fingerprint pomocí wreq-js (napodobuje Chrome 124). Působí proti blokování JA3/JA4. |
| `TLS_FINGERPRINT_PROVIDERS` | _(nenastaveno)_ | `open-sse/utils/proxyFetch.ts` | Seznam povolených poskytovatelů oddělených čárkami pro nové směrování TLS přes proxy (`open-sse/utils/proxyFetch.ts`). Přímé TLS si při nenastavení zachovává původní chování; pouze tito poskytovatelé jsou směrováni přes most fingerprintu Chrome 124. Groq (`api.groq.com`) je vyloučen i v případě, že allowlist není nastaven, protože Chrome JA3 spouští Cloudflare 1010, zatímco nativní undici se k API dostane. |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Umožní kontextu prohlížeče Claude Turnstile Playwright ignorovat chyby HTTPS certifikátů. |
### Scénáře
| Scénář | Konfigurace |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| **SOCKS5 přes SSH tunel** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` |
| **Firemní HTTP proxy** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` |
| **Ochrana proti fingerprintu** | `ENABLE_TLS_FINGERPRINT=true` — vyžaduje `wreq-js` (součást balíčku) |
| **Řízený odchozí provoz / bez přímého přístupu** | Nechte `PROXY_FAIL_OPEN=false` (výchozí). Požadavky tvrdě selžou, když je proxy nedostupná, místo úniku přes přímé spojení. |
| **Legacy / dev — povolit přímý fallback** | `PROXY_FAIL_OPEN=true`. Obnoví chování před zpřísněním: při selhání vyřešení proxy se použije přímé spojení. |
> **Poznámka (obejití validace NVIDIA — #3226):** Endpoint validace API klíče NVIDIE
> se zasekává, když je směrován přes globální proxy/TLS-patchnutý fetch (undici dispatcher → 504).
> `src/lib/providers/validation.ts::directHttpsRequest()` záměrně obchází proxy patch
> pro toto jediné validační volání pomocí `safeOutboundFetch({ bypassProxyPatch: true })`.
> Jedná se o dokumentovanou, vymezenou výjimku — **neovlivňuje** odchozí provoz chatu/využití.
> Obejití je rozsahově vymezeno testem `tests/unit/proxy-bypass-scope-guard-3226.test.ts`.
---
## 9. Integrace nástrojů CLI
Řídí, jak OmniRoute vyhledává a spouští CLI sidecary (Claude Code, Codex atd.).
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| --------------------------------- | -------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = hledat v systémové PATH; `manual` = používat pouze explicitní cesty. |
| `CLI_EXTRA_PATHS` | _(nenastaveno)_ | `src/shared/services/cliRuntime.ts` | Další položky PATH pro vyhledávání binárních souborů CLI (oddělené dvojtečkou). |
| `CLI_CONFIG_HOME` | _(nenastaveno)_ | `src/shared/services/cliRuntime.ts` | Přepíše domovský adresář pro čtení konfigurací CLI (`~/.claude`, `~/.codex`). Musí být absolutní a uvnitř domovského adresáře procesu — **nebo**, v kontejneru, cesta připojená bind mountem (tak funguje `/host-home`). Cokoli jiného se vrátí k domovskému adresáři. |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Povolí OmniRoute zapisovat konfigurační soubory CLI (obnova tokenu, data relace). Nastavením na `false` způsobíte, že každý zápis konfigurace CLI selže s explicitní chybou "writes disabled". |
| `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Claude CLI. |
| `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Codex CLI. |
| `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Droid CLI. |
| `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru OpenClaw CLI. |
| `CLI_CURSOR_BIN` | `agent`, poté `cursor` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru agenta Cursor. Bez ní detekce nejprve zkusí `agent` a poté přejde na `cursor`. |
| `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Cline CLI. |
| `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru 5dive CLI. |
| `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | Systémový stavový adresář 5dive (autentizační profily vlastněné rootem); odpovídá výchozí hodnotě STATE_DIR samotného 5dive. |
| `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Continue CLI. |
| `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Qoder CLI. |
| `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Qwen Code CLI. |
| `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Aider CLI. |
| `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Goose CLI. |
| `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Google Gemini CLI — pouze detekce a kontroly stavu na straně serveru; `omniroute run gemini` hledá binární soubor `gemini` v systémové PATH. |
| `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Kilo Code CLI. |
| `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru OpenCode CLI. |
| `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Hermes. Sdílená oběma položkami katalogu (`hermes` a `hermes-agent`). |
| `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru ForgeCode CLI. |
| `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru jcode CLI. |
| `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru DeepSeek TUI. |
| `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru CodeWhale CLI. |
| `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Smelt CLI. |
| `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Pi (pi-coding-agent). |
| `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Crush CLI. |
| `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru agenta Oh My Pi (`omp`). |
| `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Letta CLI. |
| `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Prime Agent (Prime Intellect). |
| `CLI_WINDSURF_BIN` | _(žádný)_ | `src/shared/services/cliRuntime.ts` | Vlastní cesta k binárnímu souboru Windsurf. Windsurf se dodává **bez výchozího příkazu** — detekce binárního souboru zůstává vypnutá, dokud není tato hodnota nastavena. |
| `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Vlastní cesta k binárnímu souboru Devin CLI (v3.8.0). Používá ji executor Windsurf/Devin. |
| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | Hodnota `ide_version` pro Devin Desktop. Přepsání musí používat formát `x.y.z`; neplatné hodnoty se vrátí k ověřené výchozí hodnotě. |
| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | Hodnota `extension_version` přibaleného Codeium/jazykového serveru, odlišná od `ide_version` Desktopu. Přepsání musí používat `x.y.z`; neplatné hodnoty použijí přibalenou výchozí hodnotu. |
| `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Přepsání Devin CLI pouze pro agentní můstek. Executor přijímá pouze lokální ACP stdio upstream. |
| `DEVIN_AGENTIC_HOME` | _(povinné)_ | `open-sse/executors/devin-cli-agentic.ts` | Absolutní izolovaný domovský adresář pro agentní podproces Devin; akceptované cesty můstku jsou `/home/bridge` a cesty `.sandbox` vázané na úlohu (na Windows `C:\...\.sandbox\...`). |
| `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Maximální doba trvání jednoho kola Devin ACP, než můstek ukončí podřízený proces a vrátí explicitní timeout. |
| `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | Hlavní alias modelu Claude Code pro izolovaný můstek. Živý harness nahradí příklad modelem vráceným aktuálním účtem Devin. |
| `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izolovaného můstku použitý, když Claude Code požaduje svůj výchozí model Sonnet. |
| `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izolovaného můstku použitý, když Claude Code požaduje svůj výchozí model Opus. |
| `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izolovaného můstku použitý, když Claude Code požaduje svůj výchozí model Haiku. |
| `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izolovaného můstku použitý pro subagenty Claude Code. |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Volitelné přepsání API správy sedadel Codeium používaného kvótou Devin CLI (`GetUserStatus`). |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Přepsání absolutní cesty k binárnímu souboru CLI Augment (Auggie) používanému lokálním poskytovatelem `auggie`. Pokud není nastaveno, použije se `CLI_AUGGIE_BIN` a poté vyhledávání v PATH. |
| `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Alternativní přepsání cesty k binárnímu souboru CLI Augment (Auggie) (kontroluje se po `AUGGIE_BIN`). |
| `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Binární soubor používaný stdio klientem lokálního poskytovatele `zcode`. Pokud není nastaven, použije se `zcode` z PATH. |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | JSON pole (≤16 řetězců) dalších argumentů předávaných binárnímu souboru `zcode` při spuštění přes `cliTools`. |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Pracovní adresář podprocesu aplikačního serveru ZCode. |
| `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Přepsání ID poskytovatele odesílaného aplikačnímu serveru. |
| `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Kořenový adresář runtime aplikačního serveru ZCode (kde se nacházejí přibalené `node` a `zcode-server.cjs`). |
| `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Spustitelný soubor Node používaný k hostování aplikačního serveru ZCode. |
| `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Vstupní skript aplikačního serveru používaný k hostování serveru ZCode. |
| `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Časový limit spuštění (ms), po jehož uplynutí je spuštění aplikačního serveru ZCode považováno za neúspěšné. |
| `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | Časový limit RPC (ms) na jeden požadavek pro volání aplikačního serveru ZCode. |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Maximální doba trvání (ms) jednoho kola ZCode, než ho supervisor ukončí. |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Interval dotazování (ms) na dokončení kola ZCode. |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Domovský adresář Hermes Agent, kde OmniRoute čte/zapisuje konfiguraci Hermes CLI. Odpovídá proměnné prostředí, kterou instalátor Hermes PowerShell nastavuje ve Windows (`%LOCALAPPDATA%\hermes`). |
### Automatická synchronizace profilů CLI
Tyto příznaky funkcí jsou volitelné (opt-in) a ve výchozím nastavení vypnuté.
Lze je také přepínat z řídicího panelu CLI Code.
| Variable | Default | Source File | Description |
| ------------------------------------- | ------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Po synchronizaci modelů poskytovatele automaticky přepíše profilové soubory `~/.codex/*.config.toml` z živého katalogu. Vyžaduje `CLI_ALLOW_CONFIG_WRITES`; nikdy nemění aktivní/výchozí konfiguraci Codex, autentizaci, nastavení Codex-lb ani výběr poskytovatele. |
| `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Po synchronizaci modelů poskytovatele automaticky přepíše profilové soubory Claude Code `~/.claude/profiles//settings.json` z živého katalogu. Vyžaduje `CLI_ALLOW_CONFIG_WRITES`; nikdy nemění aktivní/výchozí konfiguraci Claude, autentizaci ani výběr poskytovatele. |
### Příklad pro Docker
```bash
# Připojte hostitelské binární soubory do kontejneru a sdělte OmniRoute, kde se nacházejí:
CLI_EXTRA_PATHS=/host-cli/bin
CLI_CONFIG_HOME=/host-home
CLI_ALLOW_CONFIG_WRITES=true
CLI_CLAUDE_BIN=/host-cli/bin/claude
```
`CLI_CONFIG_HOME` se uplatní pouze tehdy, když je cesta skutečně bind-mountována z hostitele — spárujte ji s mounty jako `~/.codex:/host-home/.codex:rw` (viz profil `host` v `docker-compose.yml`). Cesta, která není ani uvnitř domovského adresáře uživatele kontejneru, ani bind mount, se ignoruje, protože zápis na ni by se při opětovném vytvoření kontejneru zahodil.
Image běží jako `USER node`, takže nenamountovaný `/root` **není** platným přepsáním.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ---------------------------------------- | --------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(automaticky)_ | `src/shared/utils/containerEnv.ts` | Vynutí zapnutí (`1`/`true`) nebo vypnutí (`0`/`false`) detekce kontejneru. Potřeba pouze u runtime prostředí, která automatická detekce nezachytí. |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Přesto povolí zápisy konfigurace CLI nástrojů do nenamountované cesty kontejneru. Ekvivalentem v CLI je `--allow-container-write`. |
| `DOCKER_UPDATE_TRIGGER_FILE` | nenastaveno | `src/lib/system/autoUpdate.ts` | Pouze Docker image: tlačítko **Update Now** na dashboardu zapíše JSON požadavek do tohoto souboru (musí být uvnitř `DATA_DIR`) pro watcher na straně hostitele, který stáhne novou verzi a znovu vytvoří kontejner. Viz [Příručku k Dockeru](../guides/DOCKER_GUIDE.md#dashboard-updates-in-docker). |
### Pomocné proměnné binárního CLI (`omniroute`)
Tyto proměnné ladí chování samotného binárního CLI `omniroute` (nikoli detekci sidecaru popsanou výše).
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------------------------- | --------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_LANG` | _(systém)_ | `bin/cli/i18n.mjs` | Vynutí jazyk výstupu CLI. Lokále BCP-47 (např. `en`, `pt-BR`). Přepíše systémové proměnné prostředí pro lokáli (LC_ALL, LC_MESSAGES). |
| `OMNIROUTE_SHOW_LOG` | _(nenastaveno)_ | `bin/cli/runtime/processSupervisor.mjs` | Nastavte na `1`, aby se stdout/stderr serveru předával do terminálu v supervizovaném režimu. Ekvivalent příznaku `--log` u `omniroute serve`. |
| `OMNIROUTE_CLI_TOKEN` | _(nenastaveno)_ | `bin/cli/api.mjs` | Token strojové autentizace vkládaný jako hlavička `x-omniroute-cli-token`. Automaticky generován v úloze 8.12. |
| `GEMINI_CLI_HOME` | _(nenastaveno)_ | `bin/cli/commands/setup-gemini.mjs` | Trvalý kořen domovského adresáře Gemini; jednorázové spuštění používá dočasný izolovaný domovský adresář. |
| `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Doba odkladu v milisekundách před vynuceným ukončením potomka CLI, kterému byl zaslán signál. |
| `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(nenastaveno)_ | `bin/omniroute.mjs` | Nastavte na 1 spolu s explicitním DATA_DIR, aby se přeskočil soubor prostředí datového adresáře výchozího uživatele. |
| `OMNIROUTE_SYNC_TOKEN` | _(nenastaveno)_ | `bin/cli/commands/sync.mjs` | Synchronizační token pro `omniroute sync bundle` (`GET /api/sync/bundle` přijímá pouze synchronizační token, nikoli API klíč). Ekvivalent `--token`. |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | HTTP timeout (ms) na jeden pokus pro požadavky CLI → server. |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Maximální doba (ms), po kterou CLI čeká na health endpoint serveru, než vypíše varování o timeoutu. Užitečné při pomalých studených startech (např. Windows). Lze nastavit také pomocí `--ready-timeout`. |
| `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | Nastavte na `1` pro výpis diagnostiky opakování/backoffu na stderr během příkazů CLI. |
| `OMNIROUTE_PLUGIN_PATH` | _(nenastaveno)_ | `bin/cli/plugins.mjs` | Vlastní adresář pro vyhledávání CLI pluginů (balíčky `omniroute-cmd-*`). Není-li nastaven, výchozí je `~/.omniroute/plugins/`. Pouze CLI — nikdy se nedostane ke skeneru pluginů na straně serveru, který určuje `OMNIROUTE_PLUGINS_DIR` (sekce 2). |
| `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(nenastaveno)_ | `bin/omniroute.mjs` | Při nastavení na libovolnou neprázdnou hodnotu potlačí oznámení o aktualizaci CLI při ukončení procesu. Oznámení zůstává nezávisle vypnuté v CI, tichém režimu a netextových výstupních režimech. |
| `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(odvozeno)_ | `bin/cli/commands/doctor.mjs` | Liveness URL testovaná příkazem `omniroute doctor`. Programová volba `livenessUrl` má přednost; jinak se tato hodnota použije doslovně. Není-li nastavena, CLI odvodí endpoint `/api/health/degradation` místního dashboardu. |
| `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Cesta ke katalogu providerů používaná příkazy CLI pro providery. Programová volba `catalogPath` má přednost. Absolutní cesty se použijí tak, jak jsou; relativní cesty se vyhodnotí z kořene projektu. Není-li nastavena, CLI použije adresář konstant providerů se zastaralým souborem `providers.ts` jako záložní variantou. |
| `OMNIROUTE_PROVIDER_TEST_MODEL` | _(výchozí hodnota providera)_ | `bin/cli/provider-test.mjs` | Globální záložní model pro testy připojení providerů v CLI. Pořadí přednosti: nakonfigurovaný model připojení, přepsání modelu specifické pro providera, tato hodnota a poté vestavěný testovací model providera. |
---
## 10. Interní agent a integrace MCP
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_BASE_URL` | automatická detekce | `open-sse/mcp-server/server.ts` | Explicitní URL, přes kterou nástroje MCP/A2A kontaktují OmniRoute. Přepisuje automatickou detekci localhostu. |
| `OMNIROUTE_API_KEY` | _(nenastaveno)_ | MCP/A2A moduly | Klíč API pro volání interních nástrojů MCP a dovedností A2A. |
| `OMNIROUTE_API_KEY_ID` | _(nenastaveno)_ | `open-sse/mcp-server/audit.ts` | ID klíče pro atribuci v protokolu auditu MCP. |
| `ROUTER_API_KEY` | _(nenastaveno)_ | Zastaralé | Zastaralý alias pro `OMNIROUTE_API_KEY`. |
| `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | Počet dní, po které je historie úloh A2A uchovávána v místní databázi, než ji denní čištění odstraní. Při nenastavení, nečíselné hodnotě nebo `<= 0` se použije výchozí hodnota `30`. |
| `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | Vypínač funkce pozorovatelnosti memory-hits A2A. Nastavením na `0` zcela přeskočíte vyhledávání v paměti pro danou úlohu; jakákoli jiná hodnota (včetně nenastavení) ji ponechá zapnutou. |
| `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Povoluje koncový bod offline/místního Issue Agenta pro zaznamenanou triáž. Ponechte zakázáno, pokud explicitně nespouštíte místní workflow zaznamenané triáže. |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(nenastaveno)_ | `src/lib/issueAgent/execution.ts` | Časový limit (ms) pro jedno spuštění zaznamenané triáže Issue Agenta. Omezen interním maximem; při nenastavení nebo neplatné hodnotě se použije vestavěná výchozí hodnota. |
| `OMNIROUTE_CONTEXT` | _(aktivní kontext)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Kontext/profil vzdáleného režimu CLI pro příkazy `omniroute`; přepisuje aktivní kontext v místním úložišti kontextů. Ekvivalent `--context `. |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Zakáže volitelný backend `keytar` (klíčenka OS) pro přihlašovací údaje kontextu CLI. Při zapnutí zůstávají přihlašovací údaje v `config.json` s oprávněním `0600` a CLI jednorázově vypíše varování o záložním režimu; určeno pro záměrný headless/kontejnerový provoz. |
| `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Vynutí řízení přístupu na základě rozsahů u volání nástrojů MCP. |
| `OMNIROUTE_MCP_SCOPES` | _(všechny)_ | `open-sse/mcp-server/server.ts` | Rozsahy oddělené čárkou: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. |
| `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | Komprimuje popisy nástrojů MCP před serializací manifestu. Hodnoty pro zapnutí: `1`, `true`, `on`. |
| `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | Algoritmus/profil komprese. Hodnoty pro vypnutí: `0`, `false`, `off`. |
| `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | Limit (ms) pro přerušení interních manažerských čtení MCP serveru (stav, odolnost, kombinace, kvóta, využití). |
| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Časový rozpočet pro přerušení (ms) pro MCP skoky, které čekají na poskytovatele (`route_request`, `web_search`, `web_fetch`). |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | Maximální počet instancí indexu lokálního korpusu uložených v paměti (LRU, jedna na indexovaný kořenový adresář). Omezeno minimem `1`. |
| `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | Interval synchronizace katalogu modelů v hodinách. |
| `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | Interval dotazování na rate-limity a kvóty poskytovatele. |
| `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Mezera (ms) mezi po sobě jdoucími načteními OAuth kvót při hromadné synchronizaci; OAuth připojení se načítají jedno po druhém, aby se předešlo zahlcení upstreamu. `0` toto chování vypíná (souběžné načítání). |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Minimální interval (ms) mezi po sobě jdoucími načteními upstream kvót na cestě preflight/monitoringu jednotlivých požadavků; rozprostírá souběžná síťová volání, aby mnoho účtů na jedné IP nezahlcovalo upstream. Zapojeno do načítačů kvót Codex (`/wham/usage`), DeepSeek, Bailian (obě místa načítání), OpenCode a Crof (#6009, #6911). Obecná dispečerská cesta `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/atd.) zatím není pokryta — sledováno samostatně. Zásahy do cache nejsou ovlivněny. `0` vypíná; omezeno na `0..60000`. |
| `OMNIROUTE_QUOTA_FETCH_JITTER_MS` | `120` | `open-sse/services/quotaFetchThrottle.ts` | Dodatečné náhodné rozestupy (ms) pro každý požadavek, vzorkované při každém rezervovaném načtení upstream kvóty. Výchozí hodnota 120; omezeno na `0..60000`; `0` odstraní pouze jitter. Nastavením `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS=0` vypnete celý throttle. Jitter nezaručuje prevenci zákazů ze strany upstreamu. |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Zpoždění (ms) před obnovením limitů poskytovatele po skutečné události spotřeby, aby mělo upstream kvótové API čas zaregistrovat spotřebu. |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | automatická detekce | `open-sse/services/adobeFireflyBrowserLogin.ts` | Absolutní cesta ke spustitelnému souboru systémového Chrome nebo Edge používanému pro interaktivní přihlášení k Adobe Firefly a obnovení mimo obrazovku. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | povoleno | `open-sse/services/adobeFireflySession.ts` | Udržuje stav IMS a browser-risk aktuální pomocí Chrome CDP relací vázaných na účet. Nastavte na `0` pro vypnutí obnovování prohlížeče. |
| `ADOBE_FIREFLY_SESSION_DISK` | povoleno | `open-sse/services/adobeFireflySession.ts` | Uchovává opravené relace Adobe pod `DATA_DIR` napříč restarty procesu. Nastavte na `0`, aby relace zůstaly pouze v paměti. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Minimální rozestup v milisekundách mezi odesláními generování Adobe Firefly; `0` rozestupy vypíná. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Dodatečná doba klidu v milisekundách po každém třetím úspěšném odeslání Adobe. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | Základní backoff v milisekundách po přechodných odpovědích Adobe 408; kombinován s rozestupy odesílání během maximálně pěti pokusů. |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Vypne všechny služby na pozadí (synchronizace, ceny, obnova modelů). Užitečné pro CI/test. |
| `OMNIROUTE_HEADLESS` | _(není nastaveno)_ | `src/lib/system/headless.ts` | Spuštění pouze s proxy enginem: přeskočí volitelné subsystémy, `/dashboard` → 404. Stejné jako `omniroute serve --headless`. Viz [HEADLESS.md](../guides/HEADLESS.md). |
| `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(nenastaveno)_ | `src/lib/config/runtimeSettings.ts` | Vynutí spuštění úloh na pozadí při detekci automatizovaného testování. Nastavte `1` pro přepsání testovací heuristiky. |
| `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | Interval kontroly resetování rozpočtu (ms). Minimum `10000`. |
| `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | Interval proaktivní obnovy po ochlazení připojení (ms): znovu ověřuje připojení, jejichž dočasná hodnota `rate_limited_until` již vypršela, mimo kritickou cestu požadavků. Minimum `5000`. |
| `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | Vypne plánovač proaktivní obnovy po ochlazení připojení (líná obnova v `getProviderCredentials` se stále používá). |
| `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Interval čištění mezipaměti uvažování (ms). Minimum `60000`. |
| `OMNIROUTE_REASONING_MIN_BUDGET` | _nenastaveno_ (vypnuto) | `open-sse/services/reasoningTokenBuffer.ts` | Volitelný minimální limit výstupních rozpočtů modelů s uvažováním: hodnota `max_tokens` volajícího v intervalu `[256, floor)` se zvýší na tento limit (omezeno maximálním výstupním limitem modelu). Nenastaveno = klientské rozpočty se nikdy nezvětšují (#9507). |
| `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _nenastaveno_ (vypnuto) | `open-sse/services/learnedReasoningEffortCaps.ts` | Volitelné, čárkou oddělené ID poskytovatelů (nebo `*`): když odpověď 400/422 na `reasoning_effort` neuvádí žádnou přijímanou množinu, provede se jeden opakovaný pokus o úroveň níže (nikdy pod `low`) a daná úroveň se naučí pouze tehdy, pokud je sonda zodpovězena (#14895). |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Cron výraz (UTC) pro úlohu exportu záznamů volání, která vyprazdňuje všechna povolená cílová umístění exportu záznamů. Při exportování těl zpráv preferujte `*/5 * * * *`. |
| `OMNIROUTE_LOG_EXPORT_RUN_TIMEOUT_MS` | `900000` | `src/lib/logExport/childRunner.ts` | Časový limit (wall-clock) podřízeného procesu pro jednotlivá cílová umístění v milisekundách. Vypršení limitu zaznamená selhání a ukončí proces bez posunutí nepotvrzené dávky. Neplatné/nekladné/neceločíselné hodnoty použijí výchozí hodnotu. |
| `OMNIROUTE_LOG_EXPORT_CHILD_MAX_OLD_SPACE_MB` | `1024` | `src/lib/logExport/childRunner.ts` | Limit V8 old-space podřízeného procesu exportu Node v MB (nikoli celková RSS). Výchozí hodnota ponechává prostor pro 500 řádků omezených artefaktů s těly; příliš velké dávky mohou přesto vyčerpat haldu podřízeného procesu. Selhání doporučuje snížit velikost dávky nebo tento limit zvýšit. Neplatné/nekladné/neceločíselné hodnoty použijí výchozí hodnotu. Exporty Bun se vrátí k běhu v rámci procesu bez tohoto limitu. |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Interval dotazování (ms) pro hot-reload konfigurace. Hodnoty nižší než `1000` jsou odmítnuty. |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(povoleno)_ | `src/lib/db/apiKeys.ts` | Nastavte `1` pro obejití mezipaměti ověřování API klíčů postavené na Redis (vynutí čtení z databáze). |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | Důvěřovat uživatelsky spravovaným pravidlům RTK filtrování projektu bez přísných kontrol podpisu. |
| `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | Limit počtu znaků pro proaktivní zkracování výsledků nástrojů v režimu Lite, když není nastaveno `lite.maxToolLength`. Rozsah 256–1000000. Nastavení na dashboardu má před touto proměnnou prostředí přednost. |
| `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | Maximální počet současně běžících synchronních RTK/Caveman workerů; nadbytečné úlohy čekají ve frontě FIFO. |
| `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Časový limit jednotlivé úlohy v milisekundách. Workery, kterým vyprší limit, jsou ukončeny a požadavek selže režimem fail-open beze změny. |
| `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | Doba nečinnosti v milisekundách, po jejímž uplynutí je nevyužitý kompresní worker ukončen. |
| `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Limit haldy staré generace (old-generation) V8 v MB pro každý kompresní worker, ve všech režimech (minimum `128`). Úloha, která jej překročí, selže otevřeně (fail-open, bez komprese), místo aby zvětšovala haldu gatewaye. |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Hlavní vypínač T02 circuit-breakeru per-engine pro skládanou pipeline. **Opt-in (ve výchozím stavu vypnuto)** — když je zapnuto, engine, který opakovaně vyhazuje výjimky napříč požadavky, je po dobu cooldownu přeskakován (fail-open); vypnuto = bajtově identické původní chování. |
| `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Počet po sobě jdoucích selhání napříč požadavky před otevřením breakeru daného enginu. |
| `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Počet milisekund, po které zůstává otevřený engine přeskakován před polootvřenou (half-open) sondou. |
| `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | T08/H8 CCR rampa zpětné vazby načítání: každé předchozí načtení uloženého bloku lineárně zvyšuje jeho efektivní `minChars` (často načítaný obsah se komprimuje méně; `>=3` načtení = nikdy nekomprimováno). `1` rampu vypíná (binární přeskočení pouze na prahu). |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | Trvalé úložiště CCR bloků (#9061). Zálohuje úložiště v paměti pomocí SQLite, takže blok přežije LRU vyřazení, TTL, restart nebo načtení přistávající na jiné instanci. Nastavte `false` pro uchovávání bloků pouze v paměti. Bloky nad 512KB a cloudové runtime zůstávají v každém případě pouze v paměti. |
| `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Hlavní vypínač T08/H5 zmrazování prefixu pozorovaného podle použití. **Opt-in (ve výchozím stavu vypnuto)** — když je zapnuto, systémový prompt pozorovaný `>=` prahu je považován za stabilní kešovatelný prefix a je chráněn před kompresí i u poskytovatelů, které statická cache heuristika nezachytí (freeze pouze _zachovává_, nikdy nic nemění). |
| `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Počet pozorování systémového promptu, než je považován za zmrazený stabilní prefix. |
| `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Bootstrap skript nastaví na `true` po počátečním nastavení. Řídí viditelnost průvodce nastavením. |
| `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Úniková cesta: umožňuje tělu požadavku přepsat pole projektu Antigravity. |
| `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Zásada kreditů Google One AI: `off` nikdy nevkládá kredity, `retry` vloží jednou po oprávněné kvótové chybě 429 a `always` vkládá při prvním požadavku. |
| `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Umožňuje překladači požadavků Antigravity přeskočit přísnou validaci podpisu CLI požadavků, když upstream odmítá skutečné podpisy (režim debug / zastaralé CLI). Nenulová hodnota obejití povoluje. |
| `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | Přepíše cestu k souboru tokenu Antigravity CLI (agy) pro import automaticky detekovaného lokálního přihlášení. |
### OAuth CLI Bridge (interní)
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------- | ------------------- | ------------------------------- | ------------------------------------------ |
| `OMNIROUTE_SERVER` | automatická detekce | `src/lib/oauth/config/index.ts` | URL serveru pro auth bridge CLI↔OmniRoute. |
| `OMNIROUTE_TOKEN` | _(nenastaveno)_ | `src/lib/oauth/config/index.ts` | Auth token pro CLI bridge. |
| `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | ID uživatele pro relace CLI bridge. |
| `SERVER_URL` | _(nenastaveno)_ | `src/lib/oauth/config/index.ts` | Zastaralý alias pro `OMNIROUTE_SERVER`. |
| `CLI_TOKEN` | _(nenastaveno)_ | `src/lib/oauth/config/index.ts` | Zastaralý alias pro `OMNIROUTE_TOKEN`. |
| `CLI_USER_ID` | _(nenastaveno)_ | `src/lib/oauth/config/index.ts` | Zastaralý alias pro `OMNIROUTE_USER_ID`. |
---
## 11. Přihlašovací údaje poskytovatele OAuth
Vestavěné přihlašovací údaje pro **vývoj na localhostu**. U vzdálených nasazení si zaregistrujte vlastní v konzoli pro vývojáře každého poskytovatele.
| Proměnná | Poskytovatel | Poznámky |
| ------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Veřejný klient — není potřeba žádné tajemství. |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Přepíše přesměrovací URI. Výchozí: `https://platform.claude.com/oauth/code/callback` |
| `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Veřejný klient. |
| `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Vyžaduje odpovídající `_SECRET`. |
| `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — |
| `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | Veřejný klient. |
| `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | Volitelné přepsání veřejného ID klienta device-flow pro Muse CLI. Pokud ho nenastavíte, použije se vestavěný veřejný klient. |
| `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Vyžaduje odpovídající `_SECRET`. |
| `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — |
| `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Veřejný klient. |
| `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Volitelné přepsání OAuth ID klienta pro GitHub Enterprise Copilot. Pokud není nastaveno, použije se veřejná výchozí hodnota z `GITHUB_OAUTH_CLIENT_ID`. |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | Volitelné přepsání ID integrace klienta GitHub Copilot odesílaného v hlavičkách `Copilot-Integration-Id` a `Editor-Plugin-Version`. Výchozí hodnota je `copilot-developer-cli`. |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | Záložní API klíč používaný souborem `open-sse/executors/devin-cli.ts`, když není k dispozici žádný přihlašovací údaj pro dané připojení. Volitelné. |
| `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Vlastní cesta k binárce Devin CLI (`devin`). Zjišťuje ji `open-sse/executors/devin-cli.ts`. |
| `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | OAuth ID klienta pro GitLab Duo. Zaregistrujte aplikaci na `https://gitlab.com/-/profile/applications` s přesměrovacím URI `/callback` a rozsahy `api, read_user, openid, profile, email`. Jako záložní hodnota se použije `GITLAB_OAUTH_CLIENT_ID`. |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | OAuth tajemství klienta pro GitLab Duo. Volitelné — tok PKCE tajemství nevyžaduje. Jako záložní hodnota se použije `GITLAB_OAUTH_CLIENT_SECRET`. |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Přepíše základní URL GitLabu (GitLab na vlastním hostingu). Výchozí hodnota je `https://gitlab.com`. Jako záložní hodnota se použije `GITLAB_BASE_URL`. |
| `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Starší záložní varianta pro `GITLAB_DUO_BASE_URL`. Použije se, když není nastavena varianta `_DUO_`. |
| `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Starší záložní varianta pro `GITLAB_DUO_OAUTH_CLIENT_ID`, zpracovávaná souborem `src/lib/oauth/constants/oauth.ts`. |
| `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Starší záložní varianta pro `GITLAB_DUO_OAUTH_CLIENT_SECRET`, zpracovávaná souborem `src/lib/oauth/constants/oauth.ts`. |
| `QODER_OAUTH_CLIENT_SECRET` | Qoder | — |
| `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Nastavte pro povolení Qoder OAuth. |
| `QODER_OAUTH_TOKEN_URL` | Qoder | — |
| `QODER_OAUTH_USERINFO_URL` | Qoder | — |
| `QODER_OAUTH_CLIENT_ID` | Qoder | — |
| `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Přímá záložní varianta pomocí API klíče (obejde OAuth). |
| `QODER_CLI_WORKSPACE` | Qoder | ID pracovního prostoru pro Qoder CLI. |
| `OMNIROUTE_QODER_WORKSPACE` | Qoder | Alias pro `QODER_CLI_WORKSPACE`. |
| `QODER_CLI_CONFIG_DIR` | Qoder | Přepíše konfigurační adresář Qoder CLI (izolovaná PAT relace, zabraňuje přepsání přihlášení z prohlížeče). |
| `QODER_CLI_MAX_CONCURRENCY` | Qoder | Maximální počet souběžných běhů qodercli (spuštění v režimu print nebo ACP prompty); další požadavky čekají ve frontě FIFO. Nenastaveno (výchozí) = bez limitu. |
| `QODER_CLI_QUEUE_TIMEOUT_MS` | Qoder | Jak dlouho požadavek Qoder čeká na volný slot qodercli (pouze při nastaveném limitu), než selže s chybou 429 `qodercli_busy` + `Retry-After`. Výchozí hodnota `120000`. |
| `QODER_CLI_TRANSPORT` | Qoder | `print` (výchozí) spouští `qodercli --print` pro každý požadavek; `acp` udržuje jeden trvalý proces `qodercli --acp` na každý PAT. |
| `QODER_CLI_ACP_IDLE_TIMEOUT_MS` | Qoder | ACP transport: ukončí trvalý proces qodercli po uplynutí této doby nečinnosti. Výchozí hodnota `600000`. |
| `QODER_CLI_ACP_STARTUP_TIMEOUT_MS` | Qoder | ACP transport: časový limit, do kdy musí qodercli odpovědět na ACP `initialize`. Výchozí hodnota `60000`. |
| `QODER_CLI_ACP_MAX_SESSIONS_PER_PROCESS` | Qoder | ACP transport: recykluje trvalý proces qodercli po tomto počtu relací. Výchozí hodnota `500`. |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Frontend token `tk`, který se odesílá jako `validated` na `/api/chat`. Vyžadován, když Blackbox vynucuje shodu tokenů; jinak OmniRoute použije náhodný UUID. Viz issue #2252. |
| `VISION_BRIDGE_BASE_URL` | guardrail Vision Bridge | Základní URL kompatibilní s OpenAI pro volání vision-bridge mimo Anthropic. Výchozí hodnotou je starší env proměnná s URL OpenAI nebo api.openai.com. Nasměrujte na self-loop `/v1` služby OmniRoute nebo libovolný OpenAI-kompatibilní endpoint (Gemini OpenAI-compat, OpenRouter). Issue #2232. Pokud je URL vlastní `/v1` služby OmniRoute, podpožadavek describe odesílá `x-omniroute-admission-bypass: internal` a autentizuje se vyřešeným self-loop přihlašovacím údajem (sentinel `sk_omniroute` v lokálním režimu, nebo `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350), takže fungují i nasazení s `REQUIRE_API_KEY=true`. |
| `VISION_BRIDGE_API_KEY` | guardrail Vision Bridge | API klíč pro výše uvedenou URL. Pro volání vision-bridge mimo Anthropic přepisuje env proměnné OpenAI / Google jednotlivých poskytovatelů. Modely Anthropic si ponechávají svou dedikovanou cestu k API klíči Anthropic. Issue #2232. |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | guardrail Vision Bridge | Jak dlouho se ukládá do mezipaměti výsledek směrování „žádný použitelný kandidát", v ms (výchozí `30000`). Neplatné nebo záporné hodnoty se vrátí k výchozí hodnotě; `0` negativní mezipaměť vypíná. Zdroj: `src/lib/guardrails/visionBridgeRouter.ts`. |
> [!WARNING]
>
> 1. Přejděte na [Google Cloud Console → Přihlašovací údaje](https://console.cloud.google.com/apis/credentials)
> 2. Vytvořte ID klienta OAuth 2.0 (typ: „Webová aplikace")
> 3. Přidejte URL svého serveru jako autorizovaný URI přesměrování
> 4. Nahraďte hodnoty přihlašovacích údajů v souboru `.env`.
---
## 12. Přepsání User-Agent poskytovatelů
Přepíše hlavičku `User-Agent` odesílanou každému upstream poskytovateli. Hodnota se za běhu dynamicky řeší v základní třídě executoru:
```
process.env[`${PROVIDER_ID}_USER_AGENT`]
```
> **Zdroj:** `open-sse/executors/base.ts` → `buildHeaders()`
| Proměnná | Výchozí hodnota | Kdy aktualizovat |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Když Anthropic vydá novou verzi CLI |
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Nastavte na `1`/`true`, aby se názvy nástrojů harnessů třetích stran předávaly Anthropic doslovně na obou cestách směřujících do Anthropic (nativní OAuth i CLIProxyAPI). Ve výchozím nastavení executor deterministicky přejmenovává názvy nástrojů, které nepocházejí z Claude Code (kanonické mapování Claude Code, pokud existuje, jinak PascalCase), a v odpovědi je převádí zpět pomocí `_toolNameMap`, takže harnessy s nástroji ve snake_case nejsou odmítnuty jako rozpoznaní klienti třetích stran. Pouze pro ladění. |
| `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | Když OpenAI aktualizuje Codex CLI |
| `CODEX_CLIENT_VERSION` | `0.155.0` | Přepíše verzi klienta Codex nezávisle na celém řetězci UA |
| `GROK_CLI_CLIENT_VERSION` | `1.0.41` | Přepíše `x-grok-client-version` pro inferenci, synchronizaci modelů a OAuth pomocí device-code, a zároveň výchozí User-Agent Grok CLI pro inferenci a synchronizaci modelů. Přijímá SemVer s volitelnými prerelease/build metadaty, maximálně 128 znaků po oříznutí okolních bílých znaků. Nenastavené, prázdné, neplatné hodnoty nebo hodnoty obsahující zalomení řádku použijí dodaný pevně připnutý řetězec. Stávající úplné přepsání User-Agent pro inferenci má přednost. |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | Přepíše uváděnou verzi Claude Code nezávisle na `CLAUDE_USER_AGENT`. Anthropic podle této hodnoty omezuje přístup k některým modelům (#12417). |
| `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Přepíše tříznakovou příponu, kterou OmniRoute připojuje k `cc_version=` ve fakturačním bloku Claude. Zvyšujte ji společně s `CLAUDE_CODE_CLIENT_VERSION` — připnutí pouze samotné verze by uvádělo dvojici `version.revision`, kterou žádný skutečný binární soubor neprodukuje. |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | Přepíše uváděnou verzi Copilot CLI nezávisle na `GITHUB_USER_AGENT` |
| `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | Když se aktualizuje GitHub Copilot Chat |
| `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | Když se aktualizuje Antigravity IDE |
| `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | Když se aktualizuje Kiro IDE |
| `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | Přepíše `clientId` pro Kiro social device-code (veřejné ID) |
| `KIRO_VERIFY_FULL_CRC` | `false` | Dobrovolné: úplná validace CRC každé zprávy v událostním streamu Kiro (ladění poškozených streamů) |
| `KIRO_CREDIT_PRICE_USD` | `0.02` | USD za jeden Kiro kredit; převádí kredity z `meteringEvent` na přesnou cenu za požadavek |
| `KIRO_REQUIRE_CREDITS` | `false` | Odpověď Kiro, která nehlásí žádné měření kreditů, ukončí chybou, místo aby se zaznamenala jako nevyfakturovaná |
| `QODER_USER_AGENT` | `Qoder-Cli` | Když se aktualizuje Qoder CLI |
| `CURSOR_USER_AGENT` | `Cursor/3.3` | Když se aktualizuje Cursor |
> [!TIP]
> Přepsání User-Agent můžete přidat pro **jakéhokoli** poskytovatele pomocí vzoru `{PROVIDER_ID}_USER_AGENT`. Executor název proměnné prostředí sestaví dynamicky.
---
## 13. Kompatibilita otisku CLI
Je-li tato funkce povolena, OmniRoute změní pořadí HTTP hlaviček a polí v těle JSON tak, aby přesně odpovídalo signatuře oficiálních nástrojů CLI. Tím se snižuje riziko označení účtu při zachování vaší proxy IP.
**Zdroj:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts`
### Podle poskytovatele
| Proměnná | Aktivace | Účinek |
| ------------------------ | -------- | --------------------------------------------- |
| `CLI_COMPAT_CODEX` | `=1` | Napodobuje signaturu požadavků Codex CLI |
| `CLI_COMPAT_CLAUDE` | `=1` | Napodobuje signaturu požadavků Claude Code |
| `CLI_COMPAT_GITHUB` | `=1` | Napodobuje signaturu požadavků GitHub Copilot |
| `CLI_COMPAT_ANTIGRAVITY` | `=1` | Napodobuje signaturu požadavků Antigravity |
| `CLI_COMPAT_CURSOR` | `=1` | Napodobuje signaturu požadavků Cursor |
| `CLI_COMPAT_KIMI_CODING` | `=1` | Napodobuje signaturu požadavků Kimi Coding |
| `CLI_COMPAT_KILOCODE` | `=1` | Napodobuje signaturu požadavků Kilo Code |
| `CLI_COMPAT_CLINE` | `=1` | Napodobuje signaturu požadavků Cline |
### Globální nastavení
| Proměnná | Aktivace | Účinek |
| ---------------- | -------- | ----------------------------------------------------------------- |
| `CLI_COMPAT_ALL` | `=1` | Zapne kompatibilitu otisku pro **všechny** poskytovatele zároveň. |
### Přepsání identity Kimi Coding CLI
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ----------------------- | ----------------------------- | ---------------------------------------- | ---------------------------------------------------------------------- |
| `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | Přepíše verzi Kimi CLI odesílanou během volání OAuth/API. |
| `KIMI_CODING_DEVICE_ID` | _(zachycená výchozí hodnota)_ | `src/lib/oauth/providers/kimi-coding.ts` | Přepíše zachycené ID zařízení Kimi používané v klientských hlavičkách. |
> [!NOTE]
> Tato funkce funguje společně s přepsáním User-Agent (§12). Systém otisků zajišťuje pořadí hlaviček a polí v těle, zatímco přepsání User-Agent určuje konkrétní řetězec UA. Obě funkce lze povolit nezávisle.
---
## 14. Poskytovatelé s klíčem API
Klíče API pro poskytovatele, kteří používají přímé ověřování. **Doporučené nastavení:** Dashboard → Providers → Add API Key.
Nastavení prostřednictvím proměnných prostředí představuje alternativu pro nasazení v Dockeru nebo bez grafického rozhraní.
Rozpoznávaný vzor: `{PROVIDER_ID}_API_KEY`
| Proměnná | Poskytovatel |
| ------------------ | ----------------------------------------------------- |
| `DEEPSEEK_API_KEY` | DeepSeek |
| `NVIDIA_API_KEY` | NVIDIA NIM |
| `JINA_AI_API_KEY` | Jina AI (Foundation API + záložní Reader) |
| `JINA_API_KEY` | Jina AI (alias pro `JINA_AI_API_KEY`) |
| `GEMINI_API_KEY` | Gemini (Google AI Studio) – embeddings + záložní chat |
| `GOOGLE_API_KEY` | Gemini (alias pro `GEMINI_API_KEY`) |
> [!NOTE]
> Statické položky `${PROVIDER}_API_KEY` pro Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius a Qianfan byly ve verzi v3.8.0 odstraněny, protože je běhové prostředí již nenačítá — tito poskytovatelé se spoléhají výhradně na Dashboard / `data/provider-credentials.json` / šifrovanou databázi. Postup migrace naleznete v části _Audit: Odstraněné / nefunkční proměnné_ na konci tohoto dokumentu.
> [!TIP]
> Klíče nastavené prostřednictvím Dashboardu jsou v SQLite uloženy šifrovaně a mají přednost před proměnnými prostředí.
>
> **Jina:** Embeddings `jina-ai/…`, změna pořadí, klasifikace, segmentace a `jina-search` **neúčtují** klíč prostředí clusteru, pokud existuje připojení `jina-ai` (nebo sdílené `jina-reader`) z Dashboardu — `getProviderCredentials` nejprve doplňuje již existující hodnoty. `JINA_AI_API_KEY` / `JINA_API_KEY` se použijí pouze tehdy, pokud neexistuje žádný použitelný klíč z Dashboardu. Protokoly volání přiřadí záložní klíč z prostředí jako `connection_id=env:JINA_AI_API_KEY`. Karta Reader (`jina-reader`, `r.jina.ai`) nikdy neobsluhuje `/v1/embeddings` ani `/v1/rerank`.
>
> **Gemini:** `gemini/gemini-embedding-2` (alias `google/gemini-embedding-2`) nejprve používá připojení `gemini` z Dashboardu. `GEMINI_API_KEY` / `GOOGLE_API_KEY` se použijí pouze tehdy, pokud neexistuje žádný použitelný klíč z Dashboardu. Protokoly volání přiřadí záložní klíč z prostředí jako `connection_id=env:GEMINI_API_KEY`. Nativní multimodální provoz používá `x-goog-api-key` vůči `:embedContent` / `:batchEmbedContents` — N položek OpenAI `input` se převede na N vektorů.
---
## 15. Nastavení časových limitů
Všechny hodnoty jsou v **milisekundách**. Centralizované řešení v `src/shared/utils/runtimeTimeouts.ts`.
### Hierarchie časových limitů
```
REQUEST_TIMEOUT_MS (globální přepsání)
├─→ FETCH_TIMEOUT_MS (volání upstream poskytovatele, výchozí: 600000)
│ ├─→ FETCH_HEADERS_TIMEOUT_MS (dědí z FETCH_TIMEOUT_MS)
│ ├─→ FETCH_BODY_TIMEOUT_MS (dědí z FETCH_TIMEOUT_MS)
│ ├─→ TLS_CLIENT_TIMEOUT_MS (dědí z FETCH_TIMEOUT_MS)
│ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (nezávislý, výchozí: 10000)
│ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (nezávislý, výchozí: 15000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (nezávislý, výchozí: 0 = vypnuto, doporučeno: 30000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (nezávislý, výchozí: 2)
│ ├── FETCH_CONNECT_TIMEOUT_MS (nezávislý, výchozí: 30000)
│ └── FETCH_KEEPALIVE_TIMEOUT_MS (nezávislý, výchozí: 4000)
├─→ STREAM_IDLE_TIMEOUT_MS (dědí z REQUEST_TIMEOUT_MS, výchozí: 600000)
├─→ STREAM_ACTIVE_TIMEOUT_MS (nezávislý, výchozí: 1260000; 0 vypíná)
├─→ STREAM_READINESS_TIMEOUT_MS (dědí z REQUEST_TIMEOUT_MS, výchozí: 80000)
├─→ STREAM_READINESS_MAX_TIMEOUT_MS (omezují adaptivní prodloužení připravenosti, výchozí: 180000)
└─→ API_BRIDGE_PROXY_TIMEOUT_MS (dědí z REQUEST_TIMEOUT_MS, výchozí: 30000)
├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (odvozený, výchozí: 300000)
├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (výchozí: 60000)
├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (výchozí: 5000)
└── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (výchozí: 0 = zakázáno)
```
| Proměnná | Výchozí | Popis |
| ----------------------------------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REQUEST_TIMEOUT_MS` | _(nenastaveno)_ | Globální zkratka — přepíše výchozí hodnoty obou `FETCH_TIMEOUT_MS` a `STREAM_IDLE_TIMEOUT_MS`. |
| `FETCH_TIMEOUT_MS` | `600000` | Celkový časový limit HTTP požadavku pro volání upstream poskytovatelů. |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | Maximální doba ticha mezi surovými upstream bajty před přerušením. Modely s rozšířeným přemýšlením (extended-thinking) zřídka dělají pauzu >90 s. |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Maximální celková životnost aktivního SSE streamu; nikdy se neresetuje při příjmu upstream bajtů a je nezávislá na `REQUEST_TIMEOUT_MS`. Odvozeno od největší hodnoty `timeoutMs` pro jednotlivé modely v registru (1200000, Codex) plus rezerva 60000, takže model, kterému je povoleno využít celý svůj rozpočet, není nikdy ukončen uprostřed odpovědi. Nastavte na `0` pro vypnutí. |
| `OMNIROUTE_SSE_COMMENTS` | _(vypnuto)_ | Zda smí OmniRoute vydávat řádky SSE komentářů `:` (např. heartbeat `: keepalive` a trailery metadat `x-omniroute-*`). Ve výchozím nastavení vypnuto (#10524), protože striktní klienti kompatibilní s OpenAI provádějí JSON.parse na každém řádku SSE a na komentářích `:` havarují; heartbeaty `data:` nejsou ovlivněny. Nastavte `on`/`true`/`1`/`yes` pro opětovné přihlášení. Používáno v `open-sse/utils/sseHeartbeat.ts`. |
| `SSE_COALESCE_MS` | `0` (vypnuto) | Opt-in: slučuje po sobě jdoucí události Claude `content_block_delta` (stejný index bloku a typ delty) odesílané klientům Claude, s vyprázdněním alespoň každých N ms. Bezeztrátové; `signature_delta` a hraniční události nejsou nikdy sloučeny. Platí pro každý typ delty, pokud není nastavena některá z proměnných pro konkrétní typ níže. Používáno v `open-sse/utils/sseDeltaCoalesce.ts`. |
| `SSE_COALESCE_THINKING_MS` | `0` (vypnuto) | Přepsání `SSE_COALESCE_MS` pro konkrétní typ `thinking_delta`. |
| `SSE_COALESCE_TEXT_MS` | `0` (vypnuto) | Přepsání `SSE_COALESCE_MS` pro konkrétní typ `text_delta`. |
| `SSE_COALESCE_INPUT_JSON_MS` | `0` (vypnuto) | Přepsání `SSE_COALESCE_MS` pro konkrétní typ `input_json_delta`. |
| `SSE_FRAME_COALESCE_MS` | `0` (vypnuto) | Opt-in: dávkuje SSE rámce přeposlané během N ms do jednoho zápisu klientovi. První rámec a koncové rámce (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) nejsou nikdy zpožděny; se zapnutým dávkováním měří ITL mezery mezi dávkami. Používáno v `open-sse/utils/sseOutputSink.ts`. |
| `SSE_STALL_WATCHDOG` | `timer` | Implementace watchdogu pro zastavení toku bajtů u streamovaných odpovědí. `timer` znovu aktivuje jeden časovač pro každý upstream chunk (spustí se přesně při vyčerpání rozpočtu zastavení); `interval` udržuje jednu kontrolu na stream s periodou `clamp(budget/4, 1s, 5s)`, takže zastavení se detekuje do rozpočtu + periody. Používáno v `open-sse/utils/streamStallWatchdog.ts`. |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | Doba na přijetí první SSE události, která není ping. Dědí `REQUEST_TIMEOUT_MS`, pokud je nastavena. |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Maximální adaptivní okno připravenosti první události pro velké, na nástroje náročné nebo vysoce uvažující (high-reasoning) streamovací požadavky. |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Kill-switch pro heuristiku `/goal`. Nastavte `false`/`0`/`off` pro úplné vypnutí detekce — timeouty připravenosti a obnova streamu pak nejsou nikdy zvyšovány tělem požadavku/hlavičkami, čímž se zmírňuje zesilování timeoutů ovládané klientem. |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Maximální okno připravenosti první události pro detekované běhy agenta `/goal` nebo požadavky vynucené pomocí `x-omniroute-agent-goal`. |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Automaticky povolí včasnou obnovu streamu pro detekované běhy agenta `/goal`. Nastavte `false`/`0`/`off` pro vypnutí tohoto opt-in specifického pro goal. Toto může obnovu pouze PŘIDAT k výchozímu nastavení operátora — nikdy nepřepíše explicitní opt-out v `STREAM_RECOVERY_ENABLED`/nastavení DB. |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Odstraňuje nestandardní SSE události `codex.*` (např. `codex.rate_limits`), které rozbíjejí `responses.stream()` OpenAI SDK chybou 502. Ve výchozím nastavení ZAPNUTO (#11014). Nastavte `0`/`false`/`no`/`off` pro jejich přeposílání. |
| `OMNIROUTE_CODEX_APPSERVER_WS` | _(nenastaveno)_ | Opt-in transport Codex app-serveru. WebSocket endpoint (`ws://`/`wss://`) lokálního sidecaru `codex app-server`. Pokud je nastaven společně s tokenem, požadavky Codex jsou směrovány přes JSON-RPC na sidecar místo HTTP Responses API. Lze nastavit také pro každé připojení přes `providerSpecificData.codexAppServerUrl`. Používáno v `open-sse/executors/codex/appServerConfig.ts`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(nenastaveno)_ | Inline capability/bearer token předkládaný app-serveru. Přepsání pro jednotlivá připojení: `providerSpecificData.codexAppServerToken`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(nenastaveno)_ | Cesta k souboru obsahujícímu capability token app-serveru (z `codex app-server --ws-token-file`). Používá se, když není nastavena `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN`. Přepsání pro jednotlivé připojení: `providerSpecificData.codexAppServerTokenFile`. |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Pracovní adresář, ve kterém běží kolo app-serveru. Přepsání pro jednotlivé připojení: `providerSpecificData.codexAppServerCwd`. |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(nenastaveno)_ | Zásada schvalování předávaná kolu app-serveru (např. `never`, `on-request`). Přepsání pro jednotlivé připojení: `providerSpecificData.codexAppServerApprovalPolicy`. |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(nenastaveno)_ | Zásada sandboxu předávaná kolu app-serveru (např. `read-only`, `workspace-write`, `danger-full-access`). Pokud není nastavena, executor ve výchozím nastavení používá `workspace-write` (zpřísněno; dříve `danger-full-access`). Přepsání pro jednotlivé připojení: `providerSpecificData.codexAppServerSandbox`. |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Automaticky schvalovat vlastní výzvy app-serveru ke schválení (spouštění příkazů/souborů/oprávnění na hostiteli). Ve výchozím nastavení vypnuto — výzvy jsou automaticky zamítány; volání nástrojů harnesse nejsou ovlivněna (procházejí samostatným passthrough `item/tool/call`). Přijímá `true`/`1`/`yes`. Přepsání pro jednotlivé připojení: `providerSpecificData.codexAppServerAutoApprove`. |
| `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Čas na přijetí hlaviček odpovědi. |
| `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | Maximální čekání na hlavičky odpovědi u streamovaných požadavků (ms). `0` tento strop vypíná; explicitní `fetchStartTimeoutCapMs` poskytovatele má přednost. |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30s) | Maximální čekání na začátek odpovědi (ms) pro každý pokus o přímé připojení bez proxy. Při vypršení limitu se pokus jednou zopakuje na novém socketu; nastavením `0` limit vypnete a zachováte předchozí chování. |
| `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 min) | Spodní mez čekání na začátek odpovědi (ms) pro pokusy o přímé připojení bez proxy, jejichž cílový hostitel je privátní/LAN/loopback (například `localhost`, `host.docker.internal`, `192.168.x.x`), aby nativní studený start Ollamy nebyl useknut výše uvedenou výchozí hodnotou 30 s. Funguje jako spodní mez: efektivní čekání je větší z této hodnoty a `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; `0` nebo neplatná hodnota lokální spodní mez odstraní. Vzdálené hostitele neovlivňuje. |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Strop (ms) pro opakovaný pokus na novém socketu po vypršení limitu začátku odpovědi poolovaného pokusu výše (#13703). Platí pouze tehdy, když volající již připojil vlastní signál deadlinu (kaskáda vyhodnoceného připojení/modelu/poskytovatele/`FETCH_TIMEOUT_MS`); tento signál je skutečnou mezí a v zamýšlené cestě se spustí dříve, takže jde o štědrou pojistku, nikoli pevný strop — bez ní by opakovaný pokus znovu použil stejné krátké okno `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` jako poolovaný pokus a zdravé reasoning modely s pomalým TTFB by skončily chybou 504. Nikdy nesmí klesnout pod pevnou spodní mez výše; pokud volající neposkytne žádný signál deadlinu, opakovaný pokus ponechává pevnou spodní mez beze změny. |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Čas na přijetí celého těla odpovědi. |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Časový limit navázání TCP spojení. |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Časový limit nečinnosti keep-alive socketu. |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Časový limit TLS-fingerprint proxy (wreq-js). |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Omezuje čas do prvního bajtu konkrétně u těla TLS-fingerprint transportu wreq-js; samotný `TLS_CLIENT_TIMEOUT_MS` nedokáže zachytit zaseknuté tělo, protože se vyhodnotí, jakmile dorazí hlavičky (#12656). Vypršení limitu zruší wreq čtečku a přepne zpět na přímý/proxy dispatcher; `0` watchdog vypíná. |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Pouze executor OpenCode, a to jen když je zapnutý feature flag `OPENCODE_RESPONSES_STALL_ROTATION` (ve výchozím nastavení vypnutý): omezuje čekání na první bajt těla streamované odpovědi Responses po jejích hlavičkách (#13484). Stream Responses se otevírá událostí `response.created`, takže ticho po uplynutí tohoto okna znamená zaseknutí: účet se ochladí a požadavek se jednou přesune na další účet; druhé zaseknutí rychle selže. `0` ochranu vypíná i při zapnutém flagu. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= vypnuto) | Pouze executor OpenCode: omezuje čekání na hlavičky odpovědi upstreamu u streamovaného volání Responses, když je stále k dispozici jiný účet — zařazený požadavek přestane čekat a pokračuje dál místo držení celého okna hlaviček. Ovlivněna jsou pouze streamovaná volání Responses (stream Responses se otevírá událostí `response.created`, takže ticho tam znamená frontu, ne generování); chat completions a nestreamovaná volání nejsou dotčena a okno pouze zkracuje efektivní strop fetch-start, nikdy jej neprodlužuje. Doporučená hodnota při zapnutí: `30000`. `0` vypíná. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Pouze exekutor OpenCode: kolikrát se během jednoho požadavku může výše uvedená hranice čekání na hlavičky přesunout na další účet. Poslední zbývající účet si vždy ponechá plné okno hlaviček. |
| `OPENCODE_PARK_AND_RESUME` | `false` | Pouze exekutor OpenCode: po opakovaných přechodných chybách 429 (nebo čerstvém markeru zatížení poolu) zaparkuje požadavek se signálem heartbeat a poté přehraje jednu omezenou etapu až 3 po sobě jdoucích účtů, místo rozptýlení na celou flotilu (#13924). Ve výchozím stavu vypnuto: každá chyba 429 se přesměruje na další účet přesně jako dříve. |
| `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Pouze exekutor OpenCode: když je každý účet připravený po cooldownu v etapě přehrávání park-and-resume odložen stranou pamětí odmítnutí proxy, obslouží je přesto, místo aby se nepřehrálo nic (#14851, navazuje na #14750). Ve výchozím stavu vypnuto: etapa přehrávání je v takovém případě prázdná, jako před #14750. |
| `STREAM_READINESS_STALL_RETRY` | `false` | Pouze streamovací chat: když se první upstreamové tělo zasekne dříve, než vydá použitelnou událost, provede jeden omezený druhý pokus stejnou směrovací cestou se stejným rozpočtem připravenosti a bez penalizace účtu. Ve výchozím stavu vypnuto: zaseknuté první tělo způsobí selhání požadavku bez opakování. |
| `OPENCODE_POOL_RESELECT` | `false` | Pouze exekutor OpenCode: po chybě 429 od poskytovatele s egress buckety na účtu bez proxy v kontextu obecného poolu požádá connection pool o jiného člena pro další pokus, místo opakování stejné egress adresy. Pouze řadí, nikdy nevylučuje: vyčerpaný pool si ponechá současné chování. Ve výchozím stavu vypnuto: každá chyba 429 se přesměruje na další účet přesně jako dříve. |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(nenastaveno)_ | Pouze exekutor OpenCode: přepíše cestu markeru zatížení poolu čteného před zaparkováním (`{since, reason, ttl_s}`, výchozí `/tmp/opencode-pool-strain.json`, #13924). Čerstvý marker zaparkuje bez opětovného počítání; chybějící nebo zastaralý se vrátí k čítači návalů. |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Časový limit proxy hopu pro požadavky `/v1` bridge. |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Nasměruje exekutor Firecrawl web-fetch na self-hostovanou instanci (mimo cloud je API klíč volitelný). |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Časový limit jednotlivých požadavků pro exekutor Firecrawl web-fetch. |
| `TAVILY_BASE_URL` | _(nenastaveno)_ | Základní URL pro stahovač kvóty Tavily `/usage` (Provider Limits); ignorováno, pokud ukazuje na `api.tavily.com`. Nenastavená hodnota se vrátí k základní URL připojení. |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Celkový časový limit serverového požadavku pro bridge. |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Čas na odeslání hlaviček odpovědi přes bridge. |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Časový limit nečinnosti keep-alive bridge. |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Časový limit syrového socketu (0 = vypnuto). |
| `SHUTDOWN_TIMEOUT_MS` | `30000` | Lhůta pro řádné ukončení po SIGTERM/SIGINT před vynuceným ukončením. |
| `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | Záložní hodnota používaná souborem `src/shared/utils/fetchTimeout.ts`, když není nastaveno `FETCH_TIMEOUT_MS`. |
| `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Časový limit (ms) pro presety `validationRead` a `modelsProbe` v `src/shared/network/safeOutboundFetch.ts`. U pomalých koncových bodů (Cerebras, Cloudflare AI, Groq) zvyšte, aby se zabránilo přepínání mezi active/error na dashboardu. Pro neplatné (<1000) nebo nečíselné hodnoty se vrátí na 8000 ms. |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Časový limit fetch specifický pro relay v `open-sse/utils/proxyFetch.ts` (#9158). Zaseknutý relay musí selhat před časovým limitem klienta/agenta (~30 s), aby volající viděli selhání specifické pro relay místo obecného upstream timeoutu. Omezeno na `29000`, aby vždy zasáhl jako první. |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Sdílený backoff opakování pro cesty direct/relay/proxy s jedním opakováním v `open-sse/utils/proxyFetch.ts` (#9158). `0` = opakovat okamžitě. |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Nativní časový limit požadavku wreq-js (`claudeTlsClient.ts`). |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Absolutní tolerance pevného deadlinu JS přidaná nad rámec nativního časového limitu. |
| `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Nativní časový limit požadavku wreq-js (`perplexityTlsClient.ts`). |
| `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Absolutní toleranční lhůta pevného JS deadlinu přidaná k nativnímu timeoutu. |
| `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (vypnuto) | Připojí k systémové zprávě volajícího větu "You have built-in web search. Answer questions directly using search results." (`perplexity-web/protocol.ts`). Ve výchozím nastavení vypnuto — Perplexity vyhledává i tak a věta prosakuje do odpovědí jako metakomentář u kódovacích klientů. Pro obnovení nastavte `1`/`true`/`yes`/`on`. |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Nativní timeout požadavku wreq-js (`grokTlsClient.ts`). |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Absolutní toleranční lhůta pevného JS deadlinu přidaná k nativnímu timeoutu. |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Nativní timeout požadavku wreq-js (`notionTlsClient.ts`); `notion-web` jej pro dlouhé generování u jednotlivých požadavků zvyšuje na `180000`. |
| `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Absolutní toleranční lhůta pevného JS deadlinu přidaná k nativnímu timeoutu. |
| `OMNIROUTE_BROWSER_POOL` | `on` | Sdílený pool prohlížečů Playwright pro webový chat s cookies podporovaný prohlížečem (`browserPool.ts`); pro vypnutí nastavte `off`. |
| `OBSCURA_BIN` | `auto-detect` | Cesta k binárnímu souboru `obscura`, který pool prohlížečů a exekutor Cloudflare Playground používají jako primární engine (`open-sse/services/obscura.ts`); pokud není nastavena, detekuje se automaticky ze systémové PATH. |
| `OBSCURA_CDP_ENDPOINT` | _(nenastaveno)_ | Nasměruje na již běžící Obscuru (`http://host:port`) místo spouštění nové instance; modul tento proces nevlastní (`open-sse/services/obscura.ts`). |
| `OBSCURA_PORT` | `random free port` | Explicitní port pro spuštěný `obscura serve`; pokud není nastaven, vybere se volný port automaticky (`open-sse/services/obscura.ts`). |
| `WEB_COOKIE_USE_BROWSER` | `0` | Přesměruje požadavek webového chatu s cookies do cesty podporované prohlížečem (`browserBackedChat.ts`); `1` pro povolení. |
| `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Základní URL pro exekutor Kimi Web (mezinárodní kimi.ai Connect-RPC) (`kimi-web.ts`); přepisujte pouze pro zrcadlové/proxy koncové body. |
| `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Úplný koncový bod chatu pro exekutor Kimi Web (`kimi-web.ts`). |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | _(automaticky detekováno)_ | Cesta ke spustitelnému souboru systémového Chrome/Edge pro interaktivní přihlášení k Adobe Firefly v prohlížeči (`adobeFireflyBrowserLogin.ts`); přepíše automatickou detekci podle OS. |
| `OMNIROUTE_STANDALONE_DIR` | _standalone výstup v .build/_ | Přepsání výstupního adresáře standalone v době sestavení, který spotřebovává krok kolokace po sestavení (`scripts/build/colocate-standalone.mjs`); nástroj sestavení, nikoli runtime. |
Pokusy o cíle v rámci comba dědí vyřešený timeout upstream požadavku (`FETCH_TIMEOUT_MS`, případně
`REQUEST_TIMEOUT_MS`, pokud poskytuje výchozí hodnotu pro fetch). `targetTimeoutMs` nastavte v combu,
ve výchozích hodnotách comba nebo v přepsání poskytovatele pouze pro urychlení fallbacku comba;
hodnoty nad aktuálním upstream timeoutem se oříznou na upstream timeout.
`comboTimeoutMs` je samostatný rozpočet reálného času (wall-clock) celého comba napříč cíli failoveru.
Nechte jej nenastavený nebo `0`, aby iterace zůstala neomezená (stále však platí 10minutové pevně
zakódované zastavení při zavěšení v `comboPredicates.ts`). Kladná hodnota tuto
pojistku pro combo nahradí. Udržujte `comboTimeoutMs` delší než `targetTimeoutMs`, aby failover
měl čas i po pomalém prvním cíli.
### Prahové hodnoty circuit breakeru
Ladění circuit breakeru na úrovni poskytovatele. Výchozí hodnoty odpovídají škálovaným hodnotám používaným od v3.6 pro 500+ připojení.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------------------------------------------------- | --------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | Práh po sobě jdoucích selhání pro OAuth poskytovatele, po jehož dosažení se jistič aktivuje. |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | Okno resetu (ms) pro jistič OAuth poskytovatele. |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | Práh po sobě jdoucích selhání pro poskytovatele s API klíčem. |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | Okno resetu (ms) pro jistič poskytovatele s API klíčem. |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Práh po sobě jdoucích selhání pro lokální poskytovatele (Ollama, LM Studio, ...). |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | Okno resetu (ms) pro jistič lokálního poskytovatele. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: počet selhání v rámci okna, než celý OAuth poskytovatel přejde do cooldownu. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: klouzavé okno počtu selhání (ms) pro OAuth poskytovatele. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: cooldown (ms) po dosažení prahu OAuth poskytovatele. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | OAuth poskytovatel přejde do stavu DEGRADED po tomto počtu selhání. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | Maximální násobitel eskalace resetTimeout pro OAuth poskytovatele. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | OAuth poskytovatel se eskaluje po tomto počtu cyklů otevření. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: počet selhání v rámci okna, než celý poskytovatel s API klíčem přejde do cooldownu. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: klouzavé okno počtu selhání (ms) pro poskytovatele s API klíčem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: cooldown (ms) po dosažení prahu poskytovatele s API klíčem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | Poskytovatel s API klíčem přejde do stavu DEGRADED po tomto počtu selhání. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | Maximální násobitel eskalace resetTimeout pro poskytovatele s API klíčem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | Poskytovatel s API klíčem se eskaluje po tomto počtu cyklů otevření. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: počet selhání, než celý lokální poskytovatel přejde do cooldownu. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: klouzavé okno počtu selhání (ms) pro lokální poskytovatele. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Jistič na úrovni poskytovatele: cooldown (ms) po dosažení prahu lokálního poskytovatele. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Cooldown (ms) na jednotlivý klíč, který se uplatní při rotaci více API klíčů, pokud upstream odpověď 429 neobsahuje `Retry-After` (#14573). Záporné nebo nečíselné hodnoty se přepnou na výchozí hodnotu. |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Hloubka backoffu, při níž je poskytovatel připnutí (pin) kontextové mezipaměti považován za trvale nefunkční a připnutí se zahodí kvůli failoveru. |
| `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Okno proti chvění (anti-flap) v ms, které toleruje krátké přechodné cooldowny před zahozením připnutí kontextové mezipaměti. |
### Scénáře
| Scénář | Konfigurace |
| ------------------------------------------------ | --------------------------------------------------- |
| **Dlouho běžící generování kódu** | `REQUEST_TIMEOUT_MS=900000` (15 min) |
| **Omezená celková životnost streamu** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 min) |
| **Rychlé selhání (fast-fail) pro produkční API** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` |
| **Modely s rozšířeným myšlením** | `STREAM_IDLE_TIMEOUT_MS=300000` (5 min mezi chunky) |
---
## 16. Protokolování
Systém protokolování zapisuje jak na stdout, tak do rotovaných souborů protokolu. Veškerá konfigurace se načítá pomocí `src/lib/logEnv.ts`.
| Proměnná | Výchozí hodnota | Popis |
| ----------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `APP_LOG_LEVEL` | `info` | Minimální úroveň protokolování: `debug`, `info`, `warn`, `error`. |
| `APP_LOG_FORMAT` | `text` | Formát výstupu: `text` (čitelný pro člověka) nebo `json` (strukturovaný). |
| `APP_LOG_TO_FILE` | `true` | Zapisuje protokoly do souboru souběžně se stdout. |
| `APP_LOG_FILE_PATH` | `logs/application/app.log` | Cesta k souboru protokolu (relativní ke kořenovému adresáři projektu nebo `DATA_DIR`). |
| `APP_LOG_MAX_FILE_SIZE` | `50M` | Maximální velikost souboru před rotací. Podporuje: `50M`, `1G`, `512K` nebo prostý počet bajtů. |
| `APP_LOG_RETENTION_DAYS` | `7` | Počet dní uchovávání rotovaných souborů aplikačního protokolu. |
| `APP_LOG_MAX_FILES` | `20` | Maximální počet záloh rotovaných souborů protokolu. |
| `CALL_LOG_RETENTION_DAYS` | `7` | Počet dní uchovávání záznamů protokolu požadavků/volání v databázi. |
| `CALL_LOG_MAX_ENTRIES` | `10000` | Maximální počet záznamů protokolu volání ve vyrovnávací paměti. |
| `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | Maximální počet řádků v tabulce SQLite `call_logs` před pročištěním. |
| `ENABLE_REQUEST_LOGS` | _(nenastaveno)_ | Vynutí zapnutí nebo vypnutí podrobného protokolování požadavků a přepíše nastavení řídicího panelu. |
| `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 hodina) | Maximální stáří osiřelých aktivních záznamů protokolu požadavků před jejich odstraněním z paměti. |
| `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | Ukládá části datového proudu do artefaktů pipeline, když `call_log_pipeline_enabled=true`. Vyžaduje výslovné zapnutí (`true`) — ve výchozím nastavení je vypnuto kvůli úspoře místa na disku. |
| `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | Maximální velikost artefaktu protokolu volání pipeline v KB, když `call_log_pipeline_enabled=true`. |
| `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | Maximální počet řádků v tabulce SQLite `proxy_logs` před pročištěním. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | Zahrne IP adresy klienta/výstupu a prefixy účtů do konzolových protokolů `[ProxyEgress]`. Záznamy protokolu proxy v řídicím panelu/databázi zachovávají úplné podrobnosti. |
| `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | Nastavte na `"true"` nebo `"1"` pro zaznamenávání `first_chunk_ms` (od zahájení odesílání po první použitelný bajt těla) do řádků protokolu proxy. Každé tělo odpovědi nadřazeného serveru obalí do líného průchozího proudu a po doručení bajtu příslušný řádek aktualizuje; ve výchozím nastavení je vypnuto, takže odpovědi procházejí beze změny. |
| `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 minuta) | Jak často `src/lib/logRotation.ts` znovu kontroluje velikost aktivního souboru protokolu. |
| `CHAT_LOG_TEXT_LIMIT` | `65536` | Maximální délka řetězce uchovávaného v artefaktech protokolu chatu (výchozí hodnota 64 KB). |
| `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | Počet položek pole uchovávaných od konce při zkracování dat protokolu chatu. |
| `CHAT_LOG_MAX_DEPTH` | `6` | Maximální hloubka vnoření, po jejímž překročení se data protokolu chatu zkrátí. |
| `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | Maximální počet klíčů objektu uchovávaných v datech protokolu chatu (0 = bez omezení). |
| `CHAT_LOG_MAX_BODY_KB` | `1024` | Velikost celého těla požadavku/odpovědi (KB), po jejímž překročení je úplná kopie nahrazena stručným souhrnem. Zvyšte tuto hodnotu, pokud se u dlouhých agentních konverzací na řídicím panelu místo skutečných zpráv zobrazuje zástupný text. |
| `CHAT_DEBUG_FILE` | `false` | Je-li nastaveno na true, `serializeArtifactForStorage` přeskočí zkracování podle velikosti. Pouze pro ladění. |
---
## 17. Optimalizace paměti
| Proměnná | Výchozí | Popis |
| ----------------------------- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_MEMORY_MB` | _auto_ (bare metal); **`1024` v Docker image** | **Doporučený** limit haldy V8 (MB) pro Docker/standalone. Pokud není nastaven, kalibruje se dynamicky (~35 % systémové RAM, omezeno na rozsah `[512, 4096]`); `512` je pouze spodní hranice pro případ, že nelze přečíst celkovou paměť. V `run-standalone.mjs` (Docker CMD) se **explicitní** hodnota připojí jako `--max-old-space-size` a **vítězí** nad konfliktním příznakem haldy v NODE_OPTIONS (V8 platí poslední příznak). `omniroute serve` stále preferuje existující haldu v NODE_OPTIONS (#5238). Nenastavujte obě hodnoty na různá čísla — proces zaloguje varování, které uvede obě hodnoty i vítěznou. **Oficiální Docker image vždy nastavuje `1024`, takže kalibrace tam nikdy neprobíhá.** Coding-agent `/v1/responses` potřebuje `8192`–`12288` plus rezervu pro cgroup — viz [Průvodce Dockerem — RAM za běhu](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). |
| `OMNIROUTE_RSS_PRESSURE_MB` | _auto_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; vypnuto, pokud `OMNIROUTE_MEMORY_MB` není nastaveno) | `open-sse/utils/resourcePressure.ts` | Absolutní pojistka RSS procesu (MB) pro nativní/externí paměť, kterou V8 `heapUsed` nevidí; po jejím překročení dostávají nové požadavky odpověď 503 `resource_pressure`. RSS po špičce zřídka klesne, proto ji kombinujte s `OMNIROUTE_PRESSURE_SELF_RESTART`. |
| `PROMPT_CACHE_MAX_SIZE` | `50` | Maximální počet položek v mezipaměti systémových promptů. |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Maximální celková velikost mezipaměti promptů. |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 min) | TTL položek mezipaměti promptů. |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | Maximální počet položek v mezipaměti odpovědí s temperature=0. |
| `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Maximální celková velikost sémantické mezipaměti. |
| `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 min) | TTL položek sémantické mezipaměti. |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | Počet kořenů lokálního korpusu, které současně udržují živý index v paměti (`src/lib/localCorpus/configured.ts`). LRU: na limitu se index nejdéle nepoužitého kořene odstraní a při jeho příštím dotazu se znovu sestaví. Omezeno minimálně na `1`; nečíselná hodnota se vrátí k výchozí. |
| `STREAM_HISTORY_MAX` | `50` | Maximální počet nedávných událostí streamu ve vyrovnávací paměti živého náhledu Dashboardu. |
| `CONTEXT_LENGTH_DEFAULT` | _(nenastaveno)_ | Globální přepsání délky kontextu (v tokenech) pro každého poskytovatele, který nemá proměnnou `CONTEXT_LENGTH_`. Je-li nastaveno, **nahrazuje** u těchto poskytovatelů hodnoty z katalogu, přepsání z dashboardu i hodnoty registru; není-li nastaveno, používá OmniRoute svůj vestavěný řetězec, jehož poslední záchranou je `128000`. Viz [Délka kontextu podle poskytovatele](#per-provider-context-length-context_length_provider). |
| `USAGE_TOKEN_BUFFER` | `100` | Dodatečná rezerva tokenů při sledování kvót využití. |
### Délka kontextu podle poskytovatele (`CONTEXT_LENGTH_`)
`open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) čte také
**variantu pro jednotlivé poskytovatele**, jejíž název se za běhu sestavuje z ID poskytovatele,
takže ji nelze vypsat řádek po řádku v tabulce výše ani v `.env.example`.
**Název.** `CONTEXT_LENGTH_`, kde `` je ID poskytovatele převedené na velká písmena, přičemž každý znak mimo `A-Z` / `0-9` je nahrazen znakem `_`. ID poskytovatele je kanonické ID po vyřešení aliasu (část `provider` řetězce `provider/model` poté, co byl krátký alias vyřešen). Vlastní uzly kompatibilní s OpenAI nebo Anthropic používají své vygenerované ID uzlu, takže UUID je součástí názvu proměnné. Hodnota je kladné celé číslo udávající počet tokenů; cokoli jiného (prázdná hodnota, `0`, záporné, nečíselné) se ignoruje a řešení pokračuje dalším krokem.
| ID poskytovatele | Název proměnné |
| ----------------------------------------------------------- | -------------------------------------------------------------------------- |
| agentrouter | CONTEXT_LENGTH_AGENTROUTER |
| openrouter | CONTEXT_LENGTH_OPENROUTER |
| openai-compatible-chat-0f8e2c1a-5b7d-4e3f-9a6c-2d1b8e4f7a90 | CONTEXT_LENGTH_OPENAI_COMPATIBLE_CHAT_0F8E2C1A_5B7D_4E3F_9A6C_2D1B8E4F7A90 |
**Priorita.** Pro dvojici `provider/model` vyhrává první krok, který poskytne hodnotu:
1. `CONTEXT_LENGTH_` pro daného poskytovatele.
2. `CONTEXT_LENGTH_DEFAULT` (globální přepsání prostředím).
3. Okno pro jednotlivé modely: trvalé přepsání kontextu (nastavené v dashboardu nebo automaticky připnuté reconcilerem detekce, viz `CONTEXT_WINDOW_RECONCILE_INTERVAL`), jinak hodnota ze synchronizovaného katalogu / models.dev.
4. Hodnota `defaultContextLength` z registru poskytovatele.
5. Heuristiky podle názvu modelu (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` /
`codex` 400000).
6. Vestavěné výchozí hodnoty pro jednotlivé poskytovatele, poté `128000`.
Oba kroky prostředí platí pro **celého poskytovatele**: každý model tohoto poskytovatele získá stejný limit a mají přednost před přepsáními pro jednotlivé modely v dashboardu. Pokud potřebuje odlišné okno pouze jeden model poskytovatele, použijte místo toho přepsání pro konkrétní model v dashboardu.
**Rozsah.** Tento řetězec řídí kontrolu kontextového okna v době požadavku (odmítnutí `context_length_exceeded` / "Input exceeds context window" v `open-sse/handlers/chatCore.ts`), rozpočty komprese promptů a kontextové limity combo. Hodnota `context_length` uváděná endpointem `GET /v1/models` může stále pocházet z metadat katalogu nebo registru a není zaručeno, že odráží přepsání prostředím.
**Příklad.** Poskytovatel, jehož model přijímá okno 1 050 000 tokenů, zatímco katalog uvádí 128 000:
```dotenv
CONTEXT_LENGTH_AGENTROUTER=1050000
```
Po změně server restartujte: hodnota se čte z prostředí serverového procesu. V **desktopové aplikaci** běží server jako podřízený proces a nevidí systémovou proměnnou nastavenou po spuštění aplikace; vložte řádek do souboru `.env`, který aplikace načítá (pořadí vyhledávání v [Příručka Electron: Vyhledávání souboru prostředí](../guides/ELECTRON_GUIDE.md#environment-file-lookup)), poté aplikaci zcela ukončete a znovu spusťte.
### Komprese
| Proměnná | Výchozí | Popis |
| ------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | nenastaveno | Důvěřovat projektovému souboru `.rtk/filters.json` bez hashe `.rtk/trust.json`. Používejte pouze v kontrolovaném lokálním vývoji. |
### Memory Engine (plán 21)
### Náklady paměti, dovedností a obnovy tokenů na event loop (#10349)
OmniRoute je **jediný proces Node**. Extrakce/načítání paměti, vkládání dovedností a obnova tokenů poskytovatele běží na **stejném event loopu** jako `GET /healthz` a dashboard. Nejde o worker vlákno.
| Úloha | Kód | Výchozí | Ovládání provozovatelem |
| -------------------------- | ---------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Extrakce / načítání paměti | `src/lib/memory/` | Dashboard **memoryEnabled** (ve výchozím stavu zapnuto) | Vypněte v **Nastavení → Paměť**. Kromě vypnutí funkce v nastavení neexistuje žádný samostatný vypínač přes proměnnou prostředí. |
| Vkládání dovedností | `src/lib/skills/injection.ts` | Dashboard **skillsEnabled** (ve výchozím stavu zapnuto) | Vypněte v **Nastavení → Paměť/Dovednosti** (`skillsEnabled`). Níže uvedené parametry sandboxu pouze omezují provádění poté, co je vkládání již zapnuté. |
| Obnova tokenů | `src/sse/services/tokenRefresh.ts` | Zapnuto pro připojené OAuth/webové poskytovatele | Odpojte poskytovatele nebo nechte tokeny v platnosti; proměnná prostředí `TOKEN_REFRESH=0` dnes neexistuje. |
Pokud je `/healthz` pomalý na jinak nezatíženém stroji, nejprve vypněte paměť + dovednosti a poté zkontrolujte zátěž katalogu/komprese (#10303, #9685). Tyto funkce předávají řízení v bodech `await`, ale stále soupeří o jediné vlákno.
Parametry vrstvy embeddingů, vektorového úložiště a rerankingu pro subsystém trvalé paměti (`src/lib/memory/`).
| Proměnná | Výchozí | Popis |
| ------------------------------------ | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 min) | TTL mezipaměti embeddingů v operační paměti (dle signatury zdroj/model/dim). |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Maximální počet LRU položek uchovávaných v mezipaměti embeddingů. |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | ID HF repozitáře pro opt-in lokální MiniLM pipeline `@huggingface/transformers` (~23 MB int8, ~400 MB RAM). |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | ID HF repozitáře pro statický lookup-table embedder potion/Model2Vec. Stahuje se líně do adresáře mezipaměti. |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Adresář používaný k ukládání souborů statického modelu potion do mezipaměti. Při nenastavení se použije podadresář pod `DATA_DIR`. |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | Přepíše základní URL Hugging Face Hub používané souborem `staticPotion.ts` (např. zrcadlový endpoint pro air-gapped prostředí). |
| `MEMORY_VEC_TOP_K` | `20` | Výchozí top-K používané brute-force vektorovým vyhledáváním `sqlite-vec` v `src/lib/memory/vectorStore.ts`. |
| `MEMORY_RRF_K` | `60` | Konstanta `k` Reciprocal Rank Fusion pro hybridní vyhledávání FTS5 + vektorové (recept sqlite-vec). |
| `VECTOR_STORE_DISABLE_VEC` | `false` | Testovací/diagnostický šev v `getVectorStore()` (`src/lib/memory/vectorStore.ts`): při hodnotě `true` vynutí nastavení vektorového úložiště na `null` (simuluje cloud/WASM prostředí bez `sqlite-vec`), čímž degraduje vyhledávání v paměti na klíčové vyhledávání FTS5. V produkci ponechte nenastavené. |
| `NOTION_API_KEY` | _(nenastaveno)_ | API klíč pro backend Notion (používá předvolba známého backendu v `genericBackend.ts`). |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Základní URL pro Notion API (lze přepsat pro self-hosted alternativy Notionu). |
| `OBSIDIAN_API_KEY` | _(nenastaveno)_ | API klíč pro backend Obsidian Vault (používá předvolba známého backendu v `genericBackend.ts`). |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Základní URL pro Obsidian Vault API (lze přepsat pro vzdálený vault). |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | Hlavní vypínač typovaného rozkladu paměti TV6. **Opt-in (ve výchozím stavu vypnuto)** — sweep **maže** rozpadlé vzpomínky. Při vypnutí jsou `access_count`/`last_accessed_at` čistá telemetrie a nic se nikdy nemaže. |
| `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (ve dnech), po kterém se nepoužívaná vzpomínka typu `episodic` rozpadne. `0` činí episodické vzpomínky rovněž imunní. Trvanlivé typy (`factual`/`procedural`/`semantic`) jsou imunní vždy. Hodiny rozkladu se vynulují podle `last_accessed_at`. |
| `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | Vzpomínka vložená `>=` tolikrát se stane imunní vůči rozkladu bez ohledu na typ. `0` imunitu dle přístupů vypíná. |
| `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (disabled) | Interval (v sekundách) volitelného periodického sweepu rozkladu v `src/lib/memory/typedDecay.ts`. `0`/nenastaveno = žádný periodický sweep. Dvojitý opt-in: vyžaduje rovněž `MEMORY_TYPED_DECAY_ENABLED=true`. |
| `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(nenastaveno)_ | Čárkou oddělená ID poskytovatelů (nerozlišuje velikost písmen), kteří přijímají zprávu `system` **pouze na indexu 0** (`src/lib/memory/injection.ts`). U těchto je cache-safe vkládání paměti doprostřed pole v konverzacích s více tahy nebezpečné, takže se paměť místo toho sloučí/vloží před začátek jako úvodní systémová zpráva. Výchozí je pouze `xiaomi-mimo`/`mimo`; rozšiřte o self-hosted OpenAI-kompatibilní endpointy (např. Qwen3.5+/3.6), jejichž šablona chatu vynucuje stejné omezení jediné úvodní systémové zprávy. |
### Příklad Dockeru pro málo RAM
`128` je pouze pro dashboard. Kódovací agenti na této haldě během dlouhých `/v1/responses` skončí na `FATAL ERROR`. Nepoužívejte tento příklad jako bránu pro Claude/Codex/Grok.
```bash
OMNIROUTE_MEMORY_MB=128
PROMPT_CACHE_MAX_SIZE=20
PROMPT_CACHE_MAX_BYTES=524288 # 512 KB
SEMANTIC_CACHE_MAX_SIZE=25
SEMANTIC_CACHE_MAX_BYTES=1048576 # 1 MB
STREAM_HISTORY_MAX=10
```
---
## 18. Synchronizace cen
Automatická synchronizace dat o cenách modelů z externích zdrojů.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ----------------------- | --------------- | ------------------------ | --------------------------------------- |
| `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | Volitelná pravidelná synchronizace cen. |
| `PRICING_SYNC_INTERVAL` | `86400` (24h) | `src/lib/pricingSync.ts` | Interval synchronizace v sekundách. |
| `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | Zdroje dat oddělené čárkami. |
---
## Synchronizace ELO arény
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------- | --------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Pravidelná synchronizace ELO z žebříčku Arena AI, konfigurovatelná v příznacích funkcí na řídicím panelu nebo deaktivovatelná pomocí hodnoty `false`. |
| `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | Forma prefixu používaná pro ID modelů v `GET /v1/models`. Hodnota `dual` zveřejňuje pro každý model jak prefix krátkého aliasu, tak kanonický prefix poskytovatele (zpětná kompatibilita — přibližně zdvojnásobuje katalog); `alias` vrací jedno ID na model; `canonical` vrací pouze úplný prefix ID poskytovatele (poskytovatelé, jejichž alias je již kanonickým ID, si zachovají jedinou položku). Klienti mohou nastavení pro jednotlivé požadavky přepsat pomocí `?prefix=alias`. Viz [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). |
| `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | Interval synchronizace v sekundách. |
---
## Poskytovatel PromptQL Playground (neoficiální/experimentální)
Reverzně analyzovaný most relací GraphQL pro prompt.ql.app (`src/shared/constants/providers/web-cookie.ts`). Všechny možnosti jsou volitelné — výchozí hodnoty odkazují na veřejné koncové body playgroundu; přepište je pouze pro vlastní nebo alternativní nasazení PromptQL.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | Koncový bod GraphQL používaný pro operace s chaty a relacemi. |
| `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | Koncový bod GraphQL používaný k dotazování na zůstatek/využití kreditů. |
| `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | Koncový bod používaný pro pokus o obnovení tokenu. |
| `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | Maximální doba (ms) dotazování `thread_events` před vypršením časového limitu. |
---
## Webový poskytovatel HyperAgent (neoficiální/experimentální)
Zpětně analyzovaný relační most pro hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). Volitelné — výchozí nastavení odkazuje na veřejný koncový bod pro fakturaci/využití; přepište jej pouze pro vlastní/alternativní nasazení HyperAgent.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------- | --------------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------- |
| `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | Koncový bod používaný k načítání bloků kreditů pro fakturaci/využití. |
---
## Kvóty využití Kilo Code
Vyhledávání osobního zůstatku v USD a využití Kilo Pass pro poskytovatele Kilo Code. Volitelné — výchozí nastavení odkazuje na veřejné API Kilo; přepište jej pouze pro relay/testovací fixture. Ověřování používá stávající přístupový token OAuth daného připojení.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| -------------- | --------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
| `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | Základní URL používaná k načítání osobního zůstatku Kilo Code a využití Kilo Pass. |
---
## Webový poskytovatel Adobe Firefly (neoficiální/experimentální)
Obnovení relace řízené prohlížečem pro webového poskytovatele Adobe Firefly
(`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`,
`open-sse/services/adobeFireflyClient.ts`). Volitelné — všechny výchozí hodnoty jsou vyladěny pro běžnou
desktopovou instalaci.
> **Odstraněno v #9255.** Staré běhové prostředí Chrome připojené přes CDP (adobeFireflyChromeRuntime.ts) bylo
> nahrazeno službou přihlašování v prohlížeči Playwright a jeho konfigurační volby již neexistují. Proměnné
> ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART spolu s
> ADOBE_FIREFLY_LOGIN_WAIT_MS a ADOBE_FIREFLY_FORTER_WAIT_MS se nikde ve
> zdrojovém kódu nenačítají — jejich nastavení nemá žádný účinek.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------ | --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Nastavte na `1` pro skutečně bezhlavý Chrome (pro generování nefunguje; pouze pro ladění). |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | Zapnutí/vypnutí proaktivního zahřátí prohlížeče. Hodnota `0` jej zakáže (obnova po chybě 408 uprostřed dávky zůstává aktivní). |
| `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Nastavte na `0`, chcete-li zakázat ukládání relace Adobe Firefly na disk. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(nenastaveno)_ | `open-sse/services/adobeFireflySession.ts` | Minimální rozestup (ms) vynucený mezi po sobě jdoucími odesláními, který přepisuje vestavěnou výchozí hodnotu. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(nenastaveno)_ | `open-sse/services/adobeFireflySession.ts` | Dodatečný rozestup (ms) přidaný po úspěšné dávce, který přepisuje vestavěnou výchozí hodnotu. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(nenastaveno)_ | `open-sse/services/adobeFireflyClient.ts` | Základní prodleva (ms) před odesláním požadavku na generování, která přepisuje vestavěnou výchozí hodnotu. |
---
## 19. Synchronizace modelů (vývoj)
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ----------------------------------- | --------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MODELS_DEV_SYNC_ENABLED` | _(nenastaveno)_ | `src/lib/modelsDevSync.ts` | Pevné přepsání nastavení synchronizace cen z models.dev. Nenastaveno = respektovat Nastavení > AI (`modelsDevSyncEnabled`). `0`/`false`/`off`/`no` **má přednost před DB** a přeskočí jak pravidelnou synchronizaci, tak SQL/JSON prohledávání pomocí `getModelsDevPricing()` (obnovení v případě, že se řídicí panel zasekne ve stejné smyčce událostí). `1`/`true`/`on`/`yes` vynutí zapnutí synchronizace. Uložení/vymazání cen nadále volá `backupDbFile("pre-write")`, které při 60minutovém omezení frekvence nebo `DISABLE_SQLITE_AUTO_BACKUP` neprovede žádnou operaci. |
| `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 h) | `src/lib/modelsDevSync.ts` | Interval synchronizace katalogu modelů během vývoje v sekundách. |
| `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 h) | `src/lib/contextWindowResolver.ts` | Interval (v sekundách) pro samoopravný proces sjednocování kontextových oken (5004): připíná okna deklarovaná poskytovatelem a zjištěná prostřednictvím `/models` jako přepsání `auto:discovery`, pokud se liší od katalogu. Nastavením na `0` jej zakážete. Znovu používá již synchronizovaná data (bez nového načítání); nikdy nepřepisuje `manual` přepsání. |
---
## 20. Nastavení specifická pro poskytovatele
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 h) | `src/lib/catalog/openrouterCatalog.ts` | TTL mezipaměti katalogu modelů OpenRouter. |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Zahrne uživatelsky přívětivá pole `name` do odpovědí `/v1/models`. Vypněte pro klienty, kteří očekávají pouze ID. |
| `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 s) | `src/app/api/v1/models/catalogCache.ts` | Horní mez čekání ve studené cestě při sloučeném sestavení katalogu `GET /v1/models` (#12627). Při vypršení časového limitu se vrátí poslední platná odpověď 200, pokud existuje. |
| `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 dní) | `src/lib/db/models/activeSyncedCatalog.ts` | Stáří, po kterém synchronizovaný seznam modelů připojení přestane být směrodatný pro směrování a při selhání otevřeně přejde na registr (#12849). Řádky, které nikdy nedostaly časové razítko, se počítají jako zastaralé. |
| `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 s) | `src/lib/usage/analyticsResponseCache.ts` | Jak dlouho se pomalá odpověď `GET /api/usage/analytics` znovu používá pro stejný řetězec dotazu (#15629). `0` mezipaměť vypíná. |
| `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1 s) | `src/lib/usage/analyticsResponseCache.ts` | Do mezipaměti se ukládají pouze odpovědi analytiky, jejichž sestavení trvalo alespoň takto dlouho, takže malé instance vždy vidí čerstvá data. |
| `OMNIROUTE_CACHE_METRICS_MIN_COMPUTE_MS` | nenastaveno (vypnuto) | `src/app/api/cache/route.ts` via `src/lib/usage/analyticsResponseCache.ts` | Aktivace na vyžádání (#16361). Je-li nastavena na nezáporné celé číslo N, část historie využití odpovědi `GET /api/cache` (součty prompt-cache + trend) se poskytuje ze sdílené mezipaměti odpovědí analytiky, pokud její sestavení trvalo alespoň N ms, pro každé oříznuté okno `trendHours`, po dobu `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` (historie může zaostávat až o toto TTL; `DELETE /api/cache` ji zneplatní). Nenastavená nebo neplatná hodnota = historie se čte živě při každém požadavku. |
| `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Maximální čekání na úlohy generování obrázků NanoBanana. |
| `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Frekvence dotazování úloh NanoBanana. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Základní zpoždění exponenciálního backoffu pro opakování odeslání upscale v Adobe Firefly. |
| `AWS_REGION` | _(nenastaveno)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Oblast používaná k sestavení koncových bodů AWS Bedrock (Kiro, audio). |
| `AWS_DEFAULT_REGION` | _(nenastaveno)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Záložní hodnota pro případ, že `AWS_REGION` není nastavena. |
| `CLOUDFLARE_ACCOUNT_ID` | _(nenastaveno)_ | `open-sse/executors/cloudflare-ai.ts` | ID účtu pro Cloudflare Workers AI. |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(nenastaveno)_ | `open-sse/executors/cloudflare-playground.ts` | Úplná cesta k binárnímu souboru desktopového Chrome pro exekutor Cloudflare AI Playground, používaná, když kontrola fingerprintu headless prohlížeče blokuje Chromium dodávané s Playwrightem. |
| `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) — _(nenastaveno = bez limitu délky)_ | `open-sse/executors/codebuddy/shared.ts` | Volitelný limit délky systémových promptů volajícího odesílaných do CodeBuddy (CN a International). Ve výchozím nastavení se pouze prompt nesoucí značku identity kódovacího agenta nahradí neutrálním (obsahový filtr Tencentu je odmítá); dlouhé prompty se zachovají. Celé číslo > 0 nahradí také jakýkoli systémový prompt delší než tento počet znaků; nenastavená hodnota, `0` nebo neceločíselná hodnota limit vypíná. Každá náhrada zaznamená, které pravidlo se aktivovalo (značka identity nebo délka). |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Přepíše základ Cloudflare REST API používaný nasazovačem Workers relay proxy-poolu (#4640 / 9router#1360). |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Výchozí název projektu workeru navrhovaný v modálním okně „Nasadit relay“ fondu proxy. |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Nastavte na `false` pro skrytí možnosti relay Cloudflare Workers na kartě fondu proxy. |
| `CLOUDFLARED_BIN` | automatická detekce | `src/lib/cloudflaredTunnel.ts` | Vlastní cesta k binárnímu souboru `cloudflared`. |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Přenosový protokol tunelu: `http2` (výchozí), `quic` nebo `auto`. |
| `CLOUDFLARED_CONFIG` | _(nenastaveno)_ | `src/lib/cloudflaredTunnel.ts` | Cesta k lokálně spravovanému souboru `config.yml` pro cloudflared (s `tunnel:`, `credentials-file:`, `ingress:`). Pokud je nastavena, OmniRoute spustí `tunnel --config run` (pojmenovaný tunel) místo dočasného rychlého tunelu. |
| `CLOUDFLARED_HOSTNAME` | _(z ingress v konfiguraci)_ | `src/lib/cloudflaredTunnel.ts` | Přepsání veřejného hostname pojmenovaného tunelu (např. `ai.example.com`), hlášeného jako `publicUrl`/`apiUrl`. Pokud není nastaveno, načte se z prvního hostname `ingress` v konfiguraci. |
| `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | Přepíše základ REST API Deno Deploy používaný nástrojem pro nasazení relay fondu proxy (#4643 / 9router#1437). |
| `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Výchozí název aplikace Deno Deploy navrhovaný v modálním okně „Nasadit relay“ fondu proxy. |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Nastavte na `false` pro skrytí možnosti relay Deno Deploy na kartě fondu proxy. |
| `SEARCH_CACHE_TTL_MS` | `300000` (5 min) | `open-sse/services/searchCache.ts` | TTL pro ukládání odpovědí vyhledávacích API (Perplexity, Brave atd.) do mezipaměti. |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Zobrazí experimentální uživatelské rozhraní poskytovatele kompatibilního s CC pro relay určené pouze pro Claude Code. |
| `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | Přepíše hostitele, na kterém naslouchá vestavěná instance 9router. |
| `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | Přepíše port, na kterém naslouchá vestavěná instance 9router. |
| `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | Hostitel pro vázání WebSocket proxy vestavěné služby (ve výchozím nastavení pouze loopback). |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Port serveru WebSocket proxy vestavěné služby. |
| `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | Hostitel mostu CLIProxyAPI (starší integrace). |
| `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | Port mostu CLIProxyAPI. |
| `CLIPROXYAPI_API_KEY` | _(prázdné)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | Záložní klíč datové roviny pro případ, že chybí nastavení `cliproxyapi_api_key`. |
| `CLIPROXYAPI_MANAGEMENT_KEY` | _(prázdné)_ | `src/lib/services/cliproxyAccountHealth.ts` | Správcovský klíč pro čtení stavu účtů z externě spravované instance CLIProxyAPI. |
| `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | Konfigurační adresář CLIProxyAPI. |
| `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Hostitelské rozhraní, na kterém docker-compose publikuje sidecar `cliproxyapi` (#12578). Jeho datový svazek obsahuje OAuth/API přihlašovací údaje poskytovatele a připnutý obraz nemá žádné přepsání `api-keys` datové roviny pomocí proměnných prostředí (pouze připojený `config.yaml`), takže `0.0.0.0` vystaví službu nesoucí přihlašovací údaje celé LAN. |
| `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | Přepíše port, na kterém naslouchá vestavěný démon Mux (coder/mux) pro orchestraci agentů (vždy 127.0.0.1). |
| `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | Přepíše port, na kterém naslouchá vestavěný démon open-wa (automatizace WhatsApp Web) (vždy 127.0.0.1). |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Hostitel pro bind/connect vestavěné služby Dario (ve výchozím nastavení pouze loopback). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port vestavěné služby Dario. |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Hostitel pro bind/connect vestavěné služby Dario (ve výchozím nastavení pouze loopback). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port vestavěné služby Dario. |
| `LOCAL_HOSTNAMES` | _(prázdné)_ | `open-sse/config/providerRegistry.ts` | Další názvy hostitelů oddělené čárkou, které mají být považovány za „místní“ (názvy služeb Dockeru atd.). |
`ENABLE_CC_COMPATIBLE_PROVIDER` je určeno pouze pro relaye třetích stran, které přijímají výhradně klienty Claude Code. OmniRoute přepisuje požadavky tak, aby je tyto relaye přijaly. Pokud chcete používat pouze Claude Code CLI, nebo si nejste jisti, co tyto relaye jsou, nechte tuto volbu vypnutou a místo toho přidejte běžného poskytovatele kompatibilního s Anthropic.
---
## 21. Stav proxy
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------------------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Časový limit kontroly stavu s rychlým selháním (fast-fail). |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Časové okno (v hodinách) pro výpočet průměrné latence kandidátních proxy serverů ve strategii poolu optimalizované pro latenci. |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL mezipaměti výsledků kontrol stavu. |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL mezipaměti pro neúspěšné sondy stavu proxy. Udržujte tuto hodnotu kratší než `PROXY_HEALTH_CACHE_TTL_MS`, aby se přechodné časové limity proxy při vysoké souběžnosti rychle opakovaly, aniž by se vypínalo rychlé selhání pro skutečně mrtvé proxy servery. |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Nastavte na `false` pro zakázání plánovače stavu proxy na pozadí, který pravidelně sonduje registrované proxy servery. |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval průběhu plánovače stavu na pozadí v ms (minimum `60000`). |
| `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Interval sond v ms pro edge-relay proxy (`deno`/`vercel`/`cloudflare`), jejichž sondy probouzejí účtovaný serverless izolát (minimum `60000`). |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval průchodu obnovy na pozadí v ms: jak často jsou dříve nezdravé proxy znovu sondovány, aby se obnovená proxy vrátila do rotace bez restartu. Hodnoty pod `60000` se vrátí k výchozí hodnotě. |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Cíl sondy dosažitelnosti používaný plánovačem a endpointem `/api/settings/proxies/auto-test`. Nasměrujte jej na interní/self-hosted URL, abyste se vyhnuli veřejné výchozí hodnotě. |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Počet sond spuštěných najednou v rámci dávky, sdílený plánovačem a endpointem `/api/settings/proxies/auto-test`. Spodní hranice je 1 a horní limit 50. |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Zpoždění v ms mezi dvěma odchody sond uvnitř dávky. Bez něj celá dávka odchází ve stejný okamžik a sdílená odchozí IP může narazit na rate-limitovaný cíl. Nastavte na `0` pro vypnutí rozestupů; horní limit je 5000. |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Nastavte "false", aby se přestalo sondovat skutečného hostitele poskytovatele přiřazeného k proxy (`GET /models`, bez API klíče), a vždy se místo toho použila `PROXY_HEALTH_TEST_URL`. |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Když je `false` (výchozí), automatické sondy dosažitelnosti (plánovač + tlačítko "Test All" endpointu `/api/settings/proxies/auto-test`) jsou **pouze pro čtení** a nikdy nezapisují stav proxy — pouze operátor nastavuje aktivní/neaktivní, takže nestabilní sonda nemůže uvěznout přiřazenou proxy (#6246). Nastavte `true` pro obnovení původního chování test-and-set. |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepis z databáze dashboardu má přednost). `true` (nebo `1`, `yes`) zopakuje prázdné přeložené streamovací tahy přes běžnou cestu přihlašovacích údajů (až `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` pokusů) místo vrácení prázdné odpovědi 200 nebo 502 s prázdným obsahem. |
| `EMPTY_STREAM_SIBLING_RECOVERY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepis z databáze dashboardu má přednost). `true` (nebo `1`, `yes`) aktivuje sondu obsahu prázdného streamu pro Claude/Codex a po tahu `empty_content` využije existující omezený počet opakování na jiné vhodné připojení, bez cooldownu nebo uzamčení modelu. |
| `STREAM_LATE_OUTPUT_PROBE_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepis z databáze dashboardu má přednost). `true` (nebo `1`, `yes`) pokračuje ve vzorkování jednoho přeposlaného chunku z 16 po prvních 64, takže pozdní viditelný výstup stále označí stream jako takový, který vydal výstup (osamělá chyba 5xx po výstupu zůstane v rozsahu požadavku místo uzamčení pouze modelu). |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepsání v databázi dashboardu má přednost). `true` (nebo `1`, `yes`) zobrazí v dashboardu pod proxy poolem pouze pro čtení pozorování egressu poolu (odlišné egress IP adresy, připojení a nejčastější výskyt za jednou IP za posledních 24 hodin, z proxy logu). Nikdy se nepoužívá pro směrování. |
| `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in příznak funkce (viz [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); přepsání v databázi dashboardu má přednost). `true` (nebo `1`, `yes`) přijímá operátorem odeslané datované pozorované adresy pro každého člena poolu a slučuje je s čtením žurnálu pro zobrazení a pořadí poolu. |
| `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Pozorovací okno v hodinách pro řádky egressu odesílané operátorem (načítá se při každém čtení; restart není potřeba). Omezeno na 1..168; hodnota mimo rozsah, nečíselná nebo prázdná se vrátí na 24 s jediným procesně celkovým varováním, nikdy vyvoláním výjimky. |
| `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Nastavte `true`, aby plánovač automaticky odebíral proxy po opakovaných po sobě jdoucích selháních. |
| `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Počet po sobě jdoucích selhání, než plánovač proxy automaticky odebere (když `PROXY_AUTO_REMOVE=true`). |
| `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Nastavte `true`, aby plánovač po opakovaných po sobě jdoucích selháních proxy měkce deaktivoval (stav `dead`, nikdy nesmazána) místo jejího odebrání. Nedestruktivní alternativa k `PROXY_AUTO_REMOVE`: proxy okamžitě vypadne z řešení poolu/rotace (filtr stavu alive používaný při řešení scope-poolu ji již vylučuje) a automaticky se znovu aktivuje, jakmile opět začne procházet sondami. Sdílí práh `PROXY_AUTO_REMOVE_AFTER`. Pokud jsou oba příznaky `true`, má přednost `PROXY_AUTO_REMOVE`. |
| `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Opt-in pasivní přeskočení: když `true`, plánovač přeskočí živou sondu pro koncový bod, jehož funkčnost již prokázal nedávný produkční provoz (alespoň jeden úspěch a žádné připisované selhání proxy v okně, pozorován přesně jeden poskytovatel). Ve výchozím nastavení vypnuto: každá proxy je sondována. |
| `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Okno produkčního provozu v ms, které pasivní přeskočení zkoumá (omezeno `60000..599999`). Kratší než 10minutový interval kontroly, aby nedávné selhání dominovalo místo toho, aby bylo zředěno. |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Umožní tokům OAuth a validacím poskytovatele obejít připnutou proxy a připojit se přímo, když předběžné kontroly dostupnosti proxy selžou. Efektivní priorita je: přepsání v DB Feature Flags > proměnná prostředí > výchozí hodnota. |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 s) | `src/lib/resilience/settings.ts` | Výchozí rozpočet pro **čekání ve frontě**: jak dlouho může požadavek čekat na slot poskytovatele a zůstat ve frontě, než je odmítnut, aniž by se dostal k upstreamu. Časovač se vymaže, jakmile úloha začne vykonávat — doba vykonávání je omezena samostatně pomocí `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Proměnná prostředí nastavuje pouze výchozí hodnotu: nejprve ji přebíjí persistovaná hodnota `resilienceSettings.requestQueue.maxWaitMs` a poté hodnota `rateLimitOverrides.maxWaitMs` pro konkrétní připojení. |
| `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 min) | `open-sse/services/rateLimitManager.ts` | Horní limit, jak dlouho může přijatý požadavek zůstat ve vykonávání, než jeho rezervace rate-limitu vyprší — odděleno od rozpočtu čekání ve frontě, aby pomalý start fetch na neinkrementálních branách nevypršel časový limit (#12027). |
| `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (vypnuto) | `open-sse/services/rateLimitManager.ts` | Limit přijímání do fronty: jakmile je ve frontě již tolik požadavků, odmítni s 429 `queue_full`. `0` = bez omezení (výchozí). |
| `RATE_LIMIT_AUTO_ENABLE` | _(nenastaveno)_ | `open-sse/services/rateLimitManager.ts` | Vynutí zapnutí/vypnutí automatické záchranné sítě pro rate limit bez ohledu na persistované nastavení v Dashboardu (`resilienceSettings.requestQueue.autoEnableApiKeyProviders`). Přijímá `true`/`1`/`on` pro vynucení zapnutí, `false`/`0`/`off` pro vynucení vypnutí. Pokud je aktivní (výchozí), aktivní připojení s API klíči jsou automaticky chráněna rate limitem. Nastavení `rateLimitProtection: false` pro konkrétní připojení vypne explicitní ochranu, ale neznamená odhlášení z této záchranné sítě; nastavení této proměnné prostředí na `false` je globální mechanisms, jak provozovat připojení s API klíči bez front rate-limitu. |
| `PROVIDER_COOLDOWN_ENABLED` | _(nenastaveno → vypnuto)_ | `open-sse/services/providerCooldownTracker.ts` | Opt-in globální sledování cool-downu poskytovatele/připojení napříč požadavky. Vypnuto ve výchozím nastavení (překrývá se s Connection Cooldown / Provider Circuit Breaker). Přijímá `true`/`1`/`on` pro zapnutí. |
| `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | Minimální cool-down (ms), než je selhaný poskytovatel/připojení znovu vyzkoušen. Škáluje se exponenciálně s počtem po sobě jdoucích selhání. Používá se pouze při `PROVIDER_COOLDOWN_ENABLED`. |
| `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 min) | `open-sse/services/providerCooldownTracker.ts` | Maximální horní limit cool-downu (ms), než je selhaný poskytovatel/připojení znovu vyzkoušen bez ohledu na počet selhání. Používá se pouze při `PROVIDER_COOLDOWN_ENABLED`. |
| `STREAM_RECOVERY_ENABLED` | _(nenastaveno → vypnuto)_ | `src/lib/resilience/settings.ts` (seed) → `open-sse/services/streamRecovery.ts` (logika) | **Co:** transparentní obnovení zkrácených upstream streamů (port free-claude-code). Podrží úvodní SSE okno až po `STREAM_RECOVERY.HOLDBACK_MS` (750 ms), aby přerušení _před potvrzením_ — tedy takové, které nastane dříve, než se k klientovi dostane jakýkoli bajt — bylo znovu otevřeno a neviditelně zopakováno. **Kdy zapnout:** u nespolehlivých upstreamů, které na začátku streamu často zkracují na 0 bajtů; ponechte VYPNUTO, pokud si nemůžete dovolit až 750 ms navýšení času do prvního tokenu u každého streamu. Přijímá `true`/`1`/`on`. Inicializuje persistované nastavení Resilience; jakmile je nastavení v Dashboardu nastaveno, má přednost. |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(nenastaveno → vypnuto)_ | `src/lib/resilience/settings.ts` (výchozí definice) → `open-sse/services/streamRecovery.ts` (logika) | **Co:** pokračování uprostřed streamu (Fáze 4.4) — po zkrácení _post-commit_ (bajty již dorazily ke klientovi) se odešle nový požadavek s částečným textem jako prefill asistenta a připojí se chybějící přípona. Pouze čistě textové streamy kompatibilní s OpenAI; nikdy se nespustí, pokud probíhá volání nástroje. **Kdy povolit:** dlouhé generování, které se utne uprostřed odpovědi, a akceptujete, že obnovený konec dorazí najednou jako dávka místo token po tokenu. Nezávislé na `STREAM_RECOVERY_ENABLED` (jiný rizikový profil). Přijímá `true`/`1`/`on`. |
| `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(nenastaveno → vypnuto)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | Dobrovolný (opt-in) watchdog užitečného výstupu aktivního streamu. Detekuje streamy, které stále odesílají chunky, ale zůstávají pod nakonfigurovanou rychlostí výstupu asistenta; heartbeaty, události využití, prázdné delty a fáze nástrojů/uvažování se nevydávají za pokrok. Oddělené od časových limitů nečinnosti a pevného deadlinu. |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Ochranná doba před vyhodnocením propustnosti, omezená na 0–600000 ms. |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Klouzavé okno užitečného výstupu, omezené na 1000–600000 ms; před přerušením je vyžadováno jedno kompletní okno. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Minimální rychlost výstupu asistenta v bajtech UTF-8 (konzervativní aproximace tokenů), omezená na 1–1000000. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Minimální nenulový vzorek užitečného výstupu považovaný za měřitelný, omezený na 1–1000000 bajtů. |
| `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Interval rozestupu (ms) mezi kontrolami stavu tokenů poskytovatelů při spuštění. |
| `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Minimální randomizovaný jitter (ms) přidaný k `HEALTHCHECK_STAGGER_MS` mezi kontrolami stavu tokenů poskytovatelů, aby se zabránilo nárazovému zatížení (Issue #1220). |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Maximální randomizovaný jitter (ms) přidaný k `HEALTHCHECK_STAGGER_MS` mezi kontrolami stavu tokenů poskytovatelů, aby se zabránilo nárazovému zatížení (Issue #1220). |
| `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Velikost dávky souběžných kontrol při úvodním průchodu kontrolami stavu tokenů; větší hodnoty kontrolují více připojení paralelně, menší hodnoty snižují nárazové zatížení (Issue #7875, regrese #7719). |
| `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Počet automatických opakování při odpovědích cooldownu vázaných na model před vrácením chyby klientovi. |
| `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Maximální backoff interval (v sekundách) mezi opakovanými pokusy po cooldownu. Tato hodnota je stropem bez ohledu na `Retry-After` od upstream serveru. |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL proxy Headroom pro úsporu tokenů. Životní cyklus dashboardu (`api/headroom/*`) ve výchozím nastavení spouští lokální CLI `headroom-ai` na loopbacku; přepište pouze v případě, že chcete směřovat na externí Docker sidecar proxy. |
### Konstanty pro ladění obnovy streamu
Chování podržení (holdback) při obnově ladí pevně zakódované konstanty v
`open-sse/config/constants.ts` (`STREAM_RECOVERY`), uvedené zde pro referenci —
jejich změna vyžaduje úpravu kódu, nikoli proměnnou prostředí:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — jak dlouho se úvodní okno SSE podrží,
aby bylo možné zopakovat předčasné uříznutí dříve, než je klientovi potvrzen jakýkoli bajt.
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — pevný strop podrženého okna; potvrzení
(flush + passthrough) nastane, jakmile se nashromáždí tolik bajtů, bez ohledu na časovač.
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — maximální počet transparentních znovuotevření
upstream streamu, dokud je podržení dosud nepotvrzené.
> **Rate limit posuvného okna pro jednotlivé poskytovatele (bez proměnné prostředí):**
> záložní (_fallback_) rate limit posuvného okna pro jednotlivé poskytovatele, přenesený z FCC,
> v kódu existuje (`open-sse/services/providerDefaultRateLimit.ts`, zapojen přes
> `open-sse/services/rateLimitManager.ts`), ale dodává se s **prázdnou výchozí mapou**
> a dnes **nemá žádnou provozní proměnnou prostředí** — povolí se pouze pomocí testovacího hooku /
> úpravy kódu. V tabulce výše záměrně uveden není. Relay limiter pro dvojici `(token, IP)`,
> který ovládací prvek _má_, je `RELAY_IP_PER_MINUTE` (§3 Síť a porty).
---
## 22. Ladění
> [!CAUTION]
> Tyto proměnné vytvářejí **podrobný výstup** a mohou odhalit citlivá data. **Nikdy je nepovolujte v produkčním prostředí.**
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CURSOR_DEBUG` | _(nenastaveno)_ | `open-sse/executors/cursor.ts` | Nastavením na `1` povolíte podrobné protokoly exekutoru Cursor (dekódované bloky SSE atd.). |
| `CURSOR_STREAM_DEBUG` | _(nenastaveno)_ | `open-sse/executors/cursor.ts` | Zpětně kompatibilní alias proměnné `CURSOR_DEBUG`. |
| `CURSOR_DUMP_FILE` | _(nenastaveno)_ | `open-sse/executors/cursor.ts` | Volitelná cesta k souboru, do kterého se při `CURSOR_DEBUG=1` zapisují nezpracované dekódované bloky Cursor. |
| `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Časový limit nečinnosti streamu (ms) pro exekutor Cursor. |
| `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Dodatečné časové okno (ms) po měkkém ukončovači `composer kv_after_text`, pokud ve vyrovnávací paměti zbývají bajty — poskytuje následnému volání nástroje `exec_mcp` čas na dokončení jeho rámce. |
| `CURSOR_TOOL_DIRECTIVE` | povoleno (`!== "0"`) | `open-sse/executors/cursor.ts` | Direktiva potvrzení nástroje, která zajišťuje, že composer-2.5 spolehlivě provádí volání nástrojů. Nastavením na `0` ji zakážete. |
| `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(nenastaveno)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | Text systémového promptu definovaný operátorem, který se připojí k systémové zprávě PO překladu (injekce po překladu) a dostane se do cest codex/Responses a `/v1/messages`. Používá se také jako prefix direktivy odstraňovaný z bloků zopakované systémové preambule. Ponecháním bez nastavení tuto funkci zakážete. |
| `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (vypnuto) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | Nastavením na `1` odstraníte bloky zopakované preambule systémového promptu ze začátku streamu openai→claude. Ve výchozím nastavení je tato funkce vypnutá — heuristiky jsou přizpůsobeny anglické próze a mění datový obsah odpovědi, takže odpověď, která legitimně začíná takovou sekcí, by o ni přišla. |
| `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Časový limit načtení jednoho obrázku (ms) pro vzdálený vizuální vstup `image_url`. |
| `CURSOR_STATE_DB_PATH` | _(zjišťováno)_ | `open-sse/utils/cursorVersionDetector.ts` | Přepíše vyhledávání stavové databáze IDE Cursor používané ke zjištění verze IDE. |
| `CURSOR_AGENT_CLI_VERSION` | _(zjistit / připnout)_ | `open-sse/utils/cursorAgentCliVersion.ts` | ID sestavení Agent CLI (`YYYY.MM.DD-`) pro `x-cursor-client-version: cli-…` při spuštění agenta. |
| `CURSOR_AGENT_BIN` | _(nenastaveno)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Cesta k binárnímu souboru Cursor Agent používanému ke generování obrázků. Pokud není nastavena, obslužná rutina použije `providerSpecificData.agentBin` a poté PATH. |
| `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Maximální reálná doba na obrázek (ms) pro úlohy generování obrázků pomocí Cursor Agent. |
| `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Omezení souběžnosti sdíleného slotu pro úlohy generování obrázků Cursor. |
| `CURSOR_IMG_MODEL` | požadavek / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Přepíše model Cursor CLI zadaný pomocí `--model` pro úlohy generování obrázků. |
| `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Interval dotazování na výsledek generování obrázků UC (uncensored.com) (ms). |
| `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Maximální reálná doba dotazování na výsledek generování obrázků UC (ms). |
| `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Interval dotazování na výsledek generování videí UC (uncensored.com) (ms). |
| `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Maximální reálná doba dotazování na výsledek generování videí UC (ms). |
| `CURSOR_DATA_DIR` | _(zjišťováno)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Přepíše datový adresář Cursor Agent CLI (`…/versions/`); jde o stejnou proměnnou, jakou používá oficiální agent. |
| `CURSOR_TOKEN` | _(nenastaveno)_ | `scripts/ad-hoc/cursor-tap.cjs` | Přímý bearer token Cursor používaný vývojářskými nástroji. |
| `OMNIROUTE_LOG_REQUEST_SHAPE` | zakázáno (volitelně přes `"1"`) | `src/app/api/v1/chat/completions/route.ts` | Pokud je nastavena hodnota `"1"`, zaznamenává značky typu a délky obsahu u velkých datových obsahů chatu. Ve výchozím nastavení je vypnuto, aby se omezil šum v protokolech. |
| `DEBUG_RESPONSES_SSE_TO_JSON` | _(nenastaveno)_ | `open-sse/handlers/responseTranslator.ts` | Nastavením na `true` povolíte protokolování podrobností překladu SSE→JSON rozhraní Responses API. |
| `DEBUG_CLAUDE_NONSTREAM` | _(nenastaveno)_ | `open-sse/handlers/responseTranslator.ts` | Nastavením na `true` zobrazíte prázdné bloky `textContent` v cestě překladu odpovědi Claude (pouze pro ladění). |
| `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(nenastaveno)_ | Testovací infrastruktura E2E | Nastavením na `true` povolíte testovací režim E2E (zmírněné ověřování, testovací hooky). |
---
## 23. Integrace s GitHubem
Umožňuje uživatelům hlásit problémy přímo z Dashboardu.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| --------------------- | --------------- | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GITHUB_ISSUES_REPO` | _(nenastaveno)_ | `src/app/api/v1/issues/report/route.ts` | Repozitář ve formátu `owner/repo`. |
| `GITHUB_ISSUES_TOKEN` | _(nenastaveno)_ | `src/app/api/v1/issues/report/route.ts` | Osobní přístupový token GitHubu s oprávněním `issues:write`. |
| `GITHUB_TOKEN` | _(nenastaveno)_ | třídění problémů / pomocné nástroje cloudového agenta | Obecný přístupový token GitHubu používaný jako záložní hodnota pro `GITHUB_ISSUES_TOKEN` a pomocnými nástroji cloudového agenta v `src/lib/cloudAgent/*`. |
---
## Scénáře nasazení
Pokyny pro SRE týkající se backendu relay (chování ts/bifrost/auto, umístění 9router oproti CLIProxyAPI a záložní strategie pro vysokou propustnost) naleznete v dokumentu [Strategie backendu relay](/docs/reference/RELAY_BACKEND_STRATEGY.md).
### Minimální lokální vývoj
```bash
JWT_SECRET=$(openssl rand -base64 48)
API_KEY_SECRET=$(openssl rand -hex 32)
INITIAL_PASSWORD=dev123
PORT=20128
NODE_ENV=development
```
### Produkční prostředí Docker
```bash
JWT_SECRET=
API_KEY_SECRET=
INITIAL_PASSWORD=
STORAGE_ENCRYPTION_KEY=
DATA_DIR=/data
PORT=20128
API_PORT=20129
NODE_ENV=production
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
NEXT_PUBLIC_BASE_URL=https://omniroute.example.com
BASE_URL=http://localhost:20128
OMNIROUTE_MEMORY_MB=8192
CORS_ORIGIN=https://your-frontend.example.com
```
### Izolované prostředí / CI
```bash
JWT_SECRET=test-jwt-secret-for-ci
API_KEY_SECRET=test-api-key-secret-for-ci
INITIAL_PASSWORD=testpass
NODE_ENV=production
OMNIROUTE_DISABLE_BACKGROUND_SERVICES=true
APP_LOG_TO_FILE=false
```
### VPS s reverzní proxy (nginx + Cloudflare)
```bash
JWT_SECRET=
API_KEY_SECRET=
STORAGE_ENCRYPTION_KEY=
PORT=20128
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
NEXT_PUBLIC_BASE_URL=https://omniroute.example.com
BASE_URL=http://127.0.0.1:20128
CORS_ORIGIN=https://omniroute.example.com
ENABLE_TLS_FINGERPRINT=true
CLI_COMPAT_ALL=1
```
---
## 24. Sandbox dovedností (v3.8.0+)
Omezení a bezpečnostní nastavení používaná při spouštění uživatelsky definovaných automatizací systémem dovedností (`src/lib/skills/`) v izolovaném prostředí.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| --------------------------------- | --------------------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 s) | `src/lib/skills/builtins.ts` | Časový limit reálného času pro každé spuštění kódu dovednosti v sandboxu. Pevný limit; vše, co trvá déle, je ukončeno. |
| `SKILLS_EXECUTION_TIMEOUT_MS` | _(použije `SKILLS_SANDBOX_TIMEOUT_MS`)_ | `src/lib/skills/` | Časový limit orchestrace dovednosti na vysoké úrovni. Pro vícekrokové pracovní postupy nastavte vyšší hodnotu než `SKILLS_SANDBOX_TIMEOUT_MS`. |
| `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | Maximální počet bajtů, které může dovednost načíst z jednoho souboru v sandboxu. |
| `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | Maximální počet bajtů zachycených z jedné odpovědi HTTP v rámci dovednosti. |
| `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | Pevný limit počtu znaků stdout/stderr vrácených z jednoho spuštění sandboxu. |
| `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | Nastavením na `1`/`true` povolíte odchozí síťová připojení ze sandboxu. Kvůli bezpečnosti je ve výchozím nastavení **izolován**. |
| `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(prázdné)_ | `src/lib/skills/builtins.ts` | Čárkami oddělený seznam povolených obrazů kontejnerů pro spouštění v sandboxu. Prázdná hodnota povoluje pouze vestavěný výchozí obraz. |
| `SKILLS_SANDBOX_DOCKER_IMAGE` | _(vestavěná výchozí hodnota)_ | `src/lib/skills/` | Obraz kontejneru použitý při vytváření sandboxu založeného na Dockeru. Přepište jej, chcete-li připnout vlastní zabezpečený základní obraz. |
| `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | Běhové prostředí kontejneru pro sandbox dovedností: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. Režim `auto` vybere nejlepší nainstalované běhové prostředí podle hostitelského OS (Apple Container/OrbStack v macOS, WSL Container ve Windows, Podman v Linuxu) a jako záložní možnost použije Docker. |
> [!CAUTION]
> Povolení `SKILLS_SANDBOX_NETWORK_ENABLED=true` otevírá cestu pro odchozí připojení z libovolného kódu dovednosti. Ve sdílených nasazeních jej kombinujte s `OUTBOUND_SSRF_GUARD_ENABLED=true` a striktní zásadou `CORS_ORIGIN`/proxy.
---
## 25. Kvóty poskytovatelů, tunely, zálohy a různé prvky runtime
Koncové body kvót poskytovatelů, síťové tunely (Tailscale, Ngrok, ladící proxy MITM), odchozí (egress) pool 1Proxy, zálohy databáze a drobná přepsání jednotlivých funkcí, na která odkazuje vrstva executoru nebo skripty.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | Připojovací řetězec Redis pro backend rate limiteru. |
| `ALIBABA_CODING_PLAN_HOST` | _(produkční hostitel)_ | `open-sse/services/bailianQuotaFetcher.ts` | Přepsání hostitele používaného k načítání kvót coding planu Alibaba Bailian. |
| `ALIBABA_CODING_PLAN_QUOTA_URL` | odvozeno z hostitele | `open-sse/services/bailianQuotaFetcher.ts` | Úplné přepsání URL kvóty pro Alibaba Bailian. |
| `QWEN_CLOUD_COOKIE` | _(nenastaveno)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Cookie relace konzole pro bránu kvót osobního Token Planu Qwen Cloud / Model Studio (inference API klíč ji nedokáže načíst). Zkopírujte celou hlavičku požadavku `Cookie` — obsahuje `login_qwencloud_ticket` — z libovolného volání `api.json` na `cs-data.qwencloud.com` na stránce home.qwencloud.com › Billing › Subscription (F12 › Network). Citlivý údaj vázaný na relaci; preferujte pole `qwenCloudCookie` v Dashboardu, nastavované pro jednotlivá připojení. |
| `QWEN_CLOUD_SEC_TOKEN` | _(nenastaveno)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Ruční přepsání `sec_token` pro konzolovou bránu Token Planu. Citlivý údaj; pokud není nastaven, fetcher jej získá z HTML dashboardu pomocí cookie. |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Přepsání hostitele brány pro fetcher kvót osobního Token Planu (např. `bailian-singapore-cs.alibabacloud.com` pro konzoli Model Studio). |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | URL dashboardu používaná k získání `sec_token` z HTML po přihlášení. |
| `XIAOMI_MIMO_CONSOLE_COOKIE` | _(nenastaveno)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Cookie relace konzole pro API kvót Token Planu Xiaomi MiMo (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — inference API klíč je nedokáže načíst). Zkopírujte celou hlavičku požadavku `Cookie` — obsahuje `api-platform_serviceToken` a `userId` — z libovolného požadavku na `platform.xiaomimimo.com` na stránce Token Plan (F12 › Network). Citlivý údaj vázaný na relaci; preferujte pole `xiaomiMimoConsoleCookie` v Dashboardu, nastavované pro jednotlivá připojení. |
| `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Měsíční rozpočet (kredity) pro fallback Xiaomi MiMo sledovaný službou OmniRoute, používaný v případě, že není nakonfigurována žádná cookie konzole. Výchozí hodnota odpovídá tarifu Lite, tedy 4,1 mld.; nastavte ji na kredity daného plánu (Standard 11 mld. / Pro 38 mld. / Max 82 mld.). Přepsání `providerSpecificData.monthlyTokenLimit` na úrovni jednotlivého připojení má přednost před touto proměnnou prostředí. |
| `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Přepsání cesty front-endu konzole pro načítání kvóty free-tier pro vision/média Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Přepsání cesty front-endu konzole pro načítání multimodální kvóty free-tier Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Přepsání cesty front-endu konzole pro načítání audio kvóty free-tier Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(nenastaveno)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Volitelná cesta k lokálnímu JSON přepsání vestavěného allowlistu textových modelů Alibaba free-tier. Pokud není nastavena, použije se `$DATA_DIR/alibaba-free-tier-allowlist.json` a poté `config/alibaba-free-tier-allowlist.json`. |
| `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Tokeny rezervované pro výstup dokončení při výpočtu rozpočtů promptů. |
| `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Kolik nejnovějších vložených obrázků zachovat při prořezávání starších, aby se obsah vešel do kontextového okna (#8560). |
| `MODEL_ALIAS_COMPAT_ENABLED` | povoleno | `open-sse/services/model.ts` | Přepíná vrstvu kompatibility starších aliasů modelů používanou staršími klienty. |
| `OMNIROUTE_EMERGENCY_FALLBACK` | povoleno | `open-sse/services/emergencyFallback.ts` | Nastavte `false` (nebo `0`) pro zakázání nouzového fallbacku při vyčerpání rozpočtu, který přesměrovává neúspěšné požadavky na bezplatný model `nvidia`/`openai/gpt-oss-120b`. Skutečná priorita je: přepsání v databázi Feature Flags > proměnná prostředí > výchozí hodnota; pokud není dostupná, služba použije přímou hodnotu proměnné prostředí. |
| `COMMAND_CODE_CALLBACK_PORT` | _(nenastaveno)_ | `src/app/api/providers/command-code/auth/shared.ts` | Místní port používaný pro zpětná volání ve stylu OAuth z pomocníka Command Code CLI. |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Hodnota odesílaná jako hlavička `x-command-code-version` upstreamu Command Code. Přepište pro navýšení verze CLI. |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Základní URL upstreamu využití/kvót Command Code, který používá telemetrie pro získávání kvót ze smartphonu. Přepište pro self-hosted/alternativní API Command Code. |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Lokální port, na který se váže MITM ladící proxy. |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Nastavte `1` pro vypnutí ověřování upstream TLS (pouze pro vývoj). |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Časový limit nečinnosti soketu (ms) pro proxyovaná spojení; nečinné sokety se po uplynutí této doby ukončí, aby nedocházelo k úniku napůl otevřených tunelů. |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Port, na kterém naslouchá Antigravity MITM most. |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Koncový bod routeru, na který most předává provoz Antigravity. |
| `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Přepisuje adresář, ze kterého most načítá svůj TLS materiál. Model certifikátů se vybírá stejně jako u serveru AgentBridge: `server.crt`/`server.key` pro instalaci se starším koncovým certifikátem, jinak `ca.crt`/`ca.key` (kořenová CA, koncový certifikát pro každého zachyceného hostitele; vynuceno pomocí `MITM_ROOT_CA_ENABLED=true`). Most se při spuštění ukončí, pokud soubory pro aktivní model chybí. |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Podrobnost protokolování rozhodnutí o směrování: `0` umlčí, vyšší hodnoty protokolují více rozhodnutí o obcházení/směrování. |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Nastavte `true` pro přihlášení k modelu certifikátů kořenové CA + koncového certifikátu pro každého hostitele (#6684). Čisté instalace jej získají automaticky; instalace s již existujícím důvěryhodným starším koncovým certifikátem si ponechají starší certifikát s pevným SAN, pokud se nepřihlásí. |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Nastavuje MITM manažer pro spuštěný proces proxy (`root-ca` \| `legacy`) — odráží rozhodnutí o migraci certifikátů; není určena k ručnímu nastavení. |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Nastavte `1` (pravdivá hodnota) pro odstranění úvodního `sudo` z MITM příkazů pro důvěryhodnost certifikátů — pro nasazení bez roota / v uživatelském jmenném prostoru, kde operátor důvěřuje CA ručně (např. pomocí mechanismu extra-CA-certs v Node). |
| `SKIP_ANTIGRAVITY_DNS` | _(nenastaveno)_ | `src/mitm/dns/provision.ts` | Nastavte `true` pro úplné přeskočení zřizování DNS záznamů v `/etc/hosts` pro hostnames Antigravity proxy — pro kontejnery bez dostupného sudo/root. |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(nenastaveno)_ | `src/mitm/dns/dnsConfig.ts` | Nastavte `1` pro přeskočení zápisu do souboru hosts při přidávání/odebírání DNS záznamů — pro sandboxovaná nebo read-only testovací prostředí. |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Pojistka pouze pro testy/CI: nastavte `1`, aby se instalace/odinstalace důvěryhodnosti certifikátů stala prázdnou operací (no-op) a testovací sada nikdy neměnila úložiště důvěryhodnosti OS. Nastavuje se automaticky testovacím setupem a CI workflow. |
| `CHANGELOG_BASE_REF` | _(automaticky)_ | `scripts/check/check-changelog-integrity.mjs` | Explicitní základní ref pro bránu proti „pozření“ CHANGELOGu (výchozí je základní větev PR v CI, nebo nejvyšší `release/v*`). |
| `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Nastavte `true` pro povolení plánovače automatické synchronizace poolu bezplatných proxy na pozadí. Opt-in, ve výchozím stavu vypnuto. |
| `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | Interval automatické synchronizace v milisekundách (výchozí 30 min). |
| `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | Povolí zdroj bezplatných proxy 1proxy. Pro zakázání nastavte `false`. |
| `FREE_PROXY_1PROXY_API_URL` | _(viz oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Přepsání URL API 1proxy. |
| `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Maximální počet proxy načtených při jedné synchronizaci z 1proxy. |
| `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | Minimální prahová hodnota skóre kvality pro importy z 1proxy. |
| `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Povolí zdroj bezplatných proxy Proxifly. Nastavením na `false` jej zakážete. |
| `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Počet proxy, které se načtou při každé synchronizaci Proxifly. |
| `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | Filtr úrovně anonymity pro Proxifly (`elite`, `anonymous`, `transparent`). |
| `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | Povolí zdroj bezplatných proxy IPLocate. Pouze na explicitní zapnutí (opt-in). |
| `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Přepsání základní URL seznamu proxy IPLocate. |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Povolí zdroj poolu proxy Webshare. Nastavením na `false` jej zakážete; vyžaduje také nastavenou proměnnou `FREE_PROXY_WEBSHARE_API_KEY`. |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(žádný)_ | `src/lib/freeProxyProviders/webshare.ts` | API token účtu Webshare (`Authorization: Token `). Povinný — bez něj zůstane poskytovatel zakázaný. |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Přepsání URL API seznamu proxy Webshare. |
| `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Maximální počet proxy importovaných při jedné synchronizaci Webshare. |
| `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Zobrazí/skryje tlačítko pro nasazení Vercel Relay na kartě fondu proxy. |
| `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Přepsání základní URL Vercel API (pro testování). |
| `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Výchozí název projektu předvyplněný v modálním okně nasazení Vercel Relay. |
| `TAILSCALE_BIN` | _(automatická detekce)_ | `src/lib/tailscaleTunnel.ts` | Explicitní cesta k binárnímu souboru `tailscale`. |
| `TAILSCALED_BIN` | _(automatická detekce)_ | `src/lib/tailscaleTunnel.ts` | Explicitní cesta k binárnímu souboru démona `tailscaled`. |
| `TAILSCALE_AUTHKEY` | _(nenastaveno)_ | `src/lib/tailscaleTunnel.ts` | Předsdílený autorizační klíč Tailscale pro neinteraktivní / headless spuštění `tailscale up` (předává se přes `--auth-key=`). Pokud není nastaven, přihlášení se vrátí k interaktivní autorizační URL v prohlížeči. |
| `NGROK_AUTHTOKEN` | _(nenastaveno)_ | `src/lib/ngrokTunnel.ts` | Autentizuje odchozí tunely ngrok. |
| `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Maximální počet souborů záloh SQLite ponechaných při ručním/plánovaném čištění záloh. Migrační snímky jsou adresovány podle obsahu a při identickém stavu databáze se znovu používají; uvnitř okna souběžné migrace se nepromazávají. Přepisuje hodnotu uloženou z Nastavení → Uchovávání záloh databáze. |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Maximální stáří (ve dnech) ponechané při ručním/plánovaném čištění záloh. Hodnota `0` vypíná promazávání podle stáří. Migrační snímky se uvnitř okna souběžné migrace nepromazávají. Přepisuje hodnotu uloženou z Nastavení → Uchovávání záloh databáze. |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Interval cyklu (v ms) úlohy na straně serveru, která vykonává `backup-schedule.json`. Musí zůstat výrazně pod minutovou granularitou cronu; hodnoty nižší než `5000` nebo neparsovatelné hodnoty se vrátí na `30000`. |
| `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Nápověda kontejnerového runtime pro kontrolu oprávnění entrypointu. Nastavte na `podman` pro libovolnou topologii Podmanu. Protože kontejner nemůže určit, zda je engine lokální, nebo dosažený přes Podman Machine, zůstává varování neutrální vůči topologii a odkazuje na `contrib/podman/README.md`. |
| `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Backend úložiště spotřeby sdílené kvóty: `sqlite` (výchozí) nebo `redis`. |
| `QUOTA_STORE_REDIS_URL` | _(nenastaveno)_ | `src/lib/quota/storeFactory.ts` | Připojovací řetězec Redis používaný při `QUOTA_STORE_DRIVER=redis` (např. `redis://localhost:6379`). |
| `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | Poměr saturace poolu (0..1); při dosažení/překročení této hodnoty pool přechází do striktního režimu (bez půjčování). |
| `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Násobitel skóre (0..1) aplikovaný na cíl, když jej zásada měkké kvóty deprioritizuje. |
| `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Násobitel skóre (0..1) aplikovaný na vyčerpaného poskytovatele (`credits_exhausted`/`rate_limited`) při hodnocení auto-comba, když je předběžný limit kvóty (preflight cutoff) VYPNUTÝ (#4540). |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Retenční okno (dny) pro buckety `quota_consumption` před GC (`gcQuotaConsumption`). |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Opt-in (výchozí VYPNUTO): povoluje tvrdý limit kvóty automatického směrování, který před hodnocením zahazuje kandidáty s nízkou kvótou. |
| `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Opt-in (výchozí VYPNUTO): když filtr `auto/:` neodpovídá žádným připojeným kandidátům, obnoví starší chování fallbacku na plný (nefiltrovaný) pool místo vrácení prázdného poolu. Výchozí VYPNUTO způsobuje, že `:free` znamená „pouze bezplatná úroveň". |
| `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Strop velikosti panelu (omezeno na 1–10) pro broadcast variantu `auto/*:chaos` — jeden požadavek se rozvětví na maximálně tolik modelů od různých poskytovatelů. |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(výchozí hodnota enginu)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Minimální ladění velikosti panelu předávané handleru chaos broadcastu; při nenastavení se použije výchozí hodnota enginu. |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(výchozí hodnota enginu)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Pevný timeout (ms) pro celý fan-out chaos panelu; při nenastavení se použije výchozí hodnota enginu. |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Cesta k souboru `auth.json` Grok CLI používanému k získání týdenní kvóty grok-web; přepište pro testy nebo nestandardní instalaci CLI. |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(nenastaveno)_ | `src/mitm/manager.ts` | Další CA certifikát (PEM), kterému se důvěřuje pro upstream TLS připojení AgentBridge. |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Maximální počet zachycených požadavků držených v kruhovém bufferu Traffic Inspectoru. |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Maximální velikost těla zachyceného požadavku/odpovědi (KB) před zkrácením. |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Lokální port pro HTTP proxy Traffic Inspectoru. |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Automaticky spustit HTTP proxy inspectoru při startu. |
| `INSPECTOR_LLM_HOSTS_EXTRA` | _(nenastaveno)_ | `src/lib/inspector/captureState.ts` | Další názvy hostitelů (oddělené čárkou), které se považují za LLM endpointy pro zachycování. |
| `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | Maskovat tajné údaje (autentizační hlavičky / API klíče) v zachyceném provozu. |
| `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | Počet minut, po kterých ochrana system-proxy automaticky vrátí nastavení proxy operačního systému. |
| `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(automaticky)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Token ověřující interní příjem zachycených dat do inspektoru. |
| `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Maximální počet sloupců vedle sebe v režimu porovnání v Playgroundu. |
| `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(nenastaveno)_ | `src/app/(dashboard)/dashboard/playground/` | Výchozí model pro akci „vylepšit prompt" v Playgroundu (při nenastavení se použije aktivní model). |
| `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Hlavní vypínač (kill switch) pro sidecar proxy bifrost. Při nastavení na `0` vrací route kód 503 s hlavičkou `X-Bifrost-Killswitch` a operátor je přesměrován na cestu TS. Slouží k vypnutí sidecaru bez nového nasazení (incident routeru tier-1, rotace klíčů). |
| `BIFROST_BASE_URL` | _(nenastaveno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Pokud je nastaveno, route sidecar proxy Bifrost přeposílá provoz `/v1/chat/completions` na tuto bránu Go místo TS relay handleru. Nenastaveno → 503-s-fallback. Koncové lomítko je odstraněno. |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Port, na který se váže supervizovaná vestavěná služba Bifrost (`127.0.0.1:`), když OmniRoute spravuje životní cyklus sidecaru Bifrost. Výchozí hodnota je `8080`. |
| `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Port, na který se váže supervizovaná kompresní služba LLMLingua (`127.0.0.1:`). Výchozí hodnota je `20135`. |
| `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | Základní URL pro lokální daemon HTTP kompresní mikroslužby LLMLingua. Výchozí hodnota je `http://127.0.0.1:20135`. |
| `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | ID modelu Hugging Face, který supervizovaný sidecar LLMLingua načítá (předává se do prostředí podřízeného procesu). |
| `BIFROST_API_KEY` | _(nenastaveno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | API klíč pro bránu Bifrost (odesílán jako `Authorization: Bearer ...`). Pokud není nastaven, route očekává, že požadavek nese platný API klíč OmniRoute; tento klíč slouží pouze pro autentizaci na straně brány. |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Je-li nastaveno na `true`, route sidecaru Bifrost streamuje odpovědi zpět přes SSE skrze gateway namísto TS streaming executoru. Nastavením na `0` vynutíte nestreamované JSON odpovědi skrze gateway. |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Timeout jednotlivého požadavku při proxyování na Bifrost gateway (ms). Při vypršení timeoutu route vrací cestu TS relay prostřednictvím hlavičky `X-Bifrost-Fallback`. |
| `OMNIROUTE_BIFROST_KEY` | _(nenastaveno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Alias pro `BIFROST_API_KEY` (používají ho skripty, které čtou prostředí přes `OMNIROUTE_*`). Pokud jsou nastaveny obě, má přednost `BIFROST_API_KEY`. |
| `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Relay backend pro `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript relay (výchozí, když Bifrost není nakonfigurován); `auto` zvolí Bifrost, pokud je nastaveno `BIFROST_BASE_URL` a `BIFROST_ENABLED` ≠ `0`, s automatickým fallbackem na TS, je-li sidecar nedostupný; `bifrost` vynutí Bifrost (striktní, bez fallbacku). Auth/rate-limit/injection-guard/allowlist se vždy spustí nejprve v Next route. Odpovědi nesou hlavičky `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. |
| `RELAY_ROUTING_BACKEND` | _(nenastaveno)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Akceptovaný alias pro `OMNIROUTE_RELAY_BACKEND` (stejné hodnoty `ts \| bifrost \| auto`). Pokud jsou nastaveny obě, má přednost `OMNIROUTE_RELAY_BACKEND`. |
| `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | Cooldown (ms) po selhání skoku na sidecar Bifrost v režimu `auto`, než relay zkusí sidecar znovu; po dobu trvání cooldownu směruje přímo na TS cestu a poté sidecar opět testuje. `0` cooldown vypíná. Platí pouze při `OMNIROUTE_RELAY_BACKEND=auto`. |
| `OMNIROUTE_TLS_CERT` | _(nenastaveno)_ | `bin/cli/commands/serve.mjs` | Cesta k PEM TLS certifikátu pro obsluhu `omniroute serve` přes HTTPS (ekvivalent `--tls-cert`). Musí být spárováno s `OMNIROUTE_TLS_KEY`; samostatný server pak ukončuje TLS na stejném listeneru (`wss://` funguje beze změny). Nenastaveno → obyčejné HTTP. Zadání pouze jedné položky z dvojice cert/key, nebo nečitelné cesty, zapíše varování a server zůstane na HTTP. |
| `OMNIROUTE_TLS_KEY` | _(nenastaveno)_ | `bin/cli/commands/serve.mjs` | Cesta k privátnímu klíči PEM TLS pro HTTPS v `omniroute serve` (ekvivalent `--tls-key`). Musí být spárováno s `OMNIROUTE_TLS_CERT`. Viz `OMNIROUTE_TLS_CERT`. |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Hlavní vypínač pro routy `/api/local/*`. Pokud není nastaven nebo je `0`, všechny routy `/api/local/*` vrací v produkci 503. V nasazeních mimo loopback musí být `1`, aby se povolil Redis launcher a podobné spouštěče lokálních služeb na jedno kliknutí. Dvojitá pojistka spolu s klasifikací route-guard `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` v `src/server/authz/routeGuard.ts`). |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(nenastaveno)_ | `src/lib/security/localEndpoints.ts` | Bearer token pro volající `/api/local/*`, kteří nejsou na loopbacku (např. desktopová aplikace). Je-li nastaven, musí požadavky z IP adres mimo loopback nést hlavičku `Authorization: Bearer `. Vyžadováno při `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` v nasazeních mimo loopback. |
| `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Název kontejneru pro spouštěč Redis na jedno kliknutí (`omniroute redis up`). Používá ho CLI i grafický panel `RedisLauncherPanel`. |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Port hostitele pro spouštěč Redis na jedno kliknutí. Změňte, pokud hostitel již port 6379 obsazuje. Interní port kontejneru zůstává 6379. |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Rozhraní hostitele, na kterém spouštěč Redis na jedno kliknutí publikuje port. Spouštěč startuje Redis BEZ hesla, takže vazba na `0.0.0.0` zpřístupní neověřovaný Redis každému hostiteli ve vaší LAN — rozšiřte tuto vazbu pouze tehdy, pokud na instanci sami nastavíte heslo. |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Rozhraní hostitele, na kterém docker-compose publikuje sidecar Redis (#9286). Redis v compose běží bez `requirepass`; aplikační kontejnery k němu přistupují přes síť compose (`redis:6379`) — publikovaný port existuje pouze pro nástroje na straně hostitele. `0.0.0.0` vystaví neověřovaný Redis celé síti LAN. |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | Port hostitele pro sidecar Redis v compose. |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Rozhraní hostitele, na kterém docker-compose publikuje vlastní porty aplikace pro dashboard/API/live-WS (#12568). Protože `REQUIRE_API_KEY=false` je výchozí hodnotou dodávanou v `.env.example`, `0.0.0.0` vystaví anonymní LLM proxy `/v1` celé síti LAN/WAN — rozšiřte až poté, co platí `REQUIRE_API_KEY=true`, nebo když reverzní proxy před aplikací vynucuje vlastní autentizaci. |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Rozhraní hostitele, na kterém docker-compose publikuje sidecar paměti Qdrant (#12578). Stejné zdůvodnění vystavení v LAN jako u `REDIS_BIND_HOST`. |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Rozhraní hostitele, na kterém docker-compose publikuje sidecar routeru Bifrost (#12578). Stejné zdůvodnění vystavení v LAN jako u `REDIS_BIND_HOST`. |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Prefix jmenného prostoru používaný pro každý Redis klíč OmniRoute (rate limiter, auth cache, úložiště kvót, warmup circuit breaker). Zabraňuje kolizím klíčů, když je instance Redis sdílena s jinými aplikacemi (#11042). |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(není nastaveno — mechanismus je vypnutý)_ | `src/lib/api/internalServiceAuth.ts` | Sdílené tajemství pro interní REST skoky se zachováním identity (#9260): komponenty OmniRoute, které volají jiné lokální routy OmniRoute, ho odesílají jako `x-omniroute-internal-service-token`, aby byla zachována identita původního volajícího. Porovnává se pomocí `timingSafeEqual`. |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(nenastaveno)_ | `src/lib/api/internalServiceAuth.ts` | Varianta interního služebního tokenu ze souboru s tajemstvím: cesta k souboru, jehož oříznutý obsah představuje token. Použije se pouze tehdy, když není nastavena přímá (inline) proměnná. |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Obohatí seznam poskytovatelů na dashboardu o týdenní žebříčkové statistiky OpenRouter (#9324). Ve výchozím nastavení zapnuto; nastavte `false`, pokud chcete načítání na pozadí zcela přeskočit (neblokující, nikdy nezpůsobí fatální chybu). |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | TTL mezipaměti pro snímek statistik poskytovatelů OpenRouter, v milisekundách. |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Image Redis používaný spouštěčem Redis jedním kliknutím. Podle potřeby přepište na `redis:8-alpine` nebo zrcadlo soukromého registru. |
| `QDRANT_HOST` | `qdrant` | _(volitelný profil clusteru)_ | Hostname sidecaru Qdrant, když je aktivní `--profile memory`. Výchozí hodnota ukazuje na název služby qdrant v interní síti; pro externí nasazení přepište. Použije se pouze tehdy, když je v kódu `qdrantEnabled` nastaveno na `true` (`src/lib/memory/vectorStore.ts:108`). |
| `QDRANT_PORT` | `6333` | _(volitelný profil clusteru)_ | REST port sidecaru Qdrant. |
| `QDRANT_GRPC_PORT` | `6334` | _(volitelný profil clusteru)_ | gRPC port sidecaru Qdrant. Používají ho klientské knihovny, které pro streamovací operace preferují gRPC před RESTem. |
| `QDRANT_API_KEY` | _(nenastaveno)_ | _(volitelný profil clusteru)_ | Volitelný API klíč pro Qdrant Cloud nebo autentizovanou on-prem instanci. Prázdný → hlavička `api-key` se neodešle. |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(volitelný profil clusteru)_ | Název kolekce pro embeddingy konverzační paměti OmniRoute. Při prvním spuštění se vytvoří s počtem dimenzí `QDRANT_VECTOR_SIZE`. |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(volitelný profil clusteru)_ | Výchozí název embeddingového modelu zaznamenaný v metadatech kolekce Qdrant. Skutečné embeddingy generuje poskytovatel, na kterého odkazuje pole `embeddingModel` v nastavení OmniRoute. |
| `QDRANT_VECTOR_SIZE` | `1536` | _(opt-in profil clusteru)_ | Dimenze vektoru embeddingu. Musí odpovídat modelu, kterým embeddujete (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). |
| `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(opt-in profil clusteru)_ | Přesnost indexu HNSW při jeho sestavování. Vyšší hodnota = pomalejší sestavení, rychlejší vyhledávání. |
| `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Hlavní přepínač operátorem konfigurovatelné rotace účtů. Když je `false`, žádná z níže uvedených tříd `OMNIROUTE_ROTATE_*` nespustí přepnutí na záložní účet (vypnutý hlavní přepínač blokuje i ve výchozím stavu zapnuté třídy 429/500/502). Umožňuje nadřízenému frontendu (např. desktopové aplikaci VibeProxy) zrcadlit vlastní pravidla rotace do backendového enginu pro přepínání účtů. |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Prodleva (v sekundách) uplatněná na rychlostně omezený účet, když upstream neposkytne explicitní nápovědu pro reset. `0` = použít výchozí prodlevu enginu místo pevného přepsání. |
| `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Zrcadlení frontendové předvolby „neoznačovat jako rychlostně omezený bez času resetu". |
| `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | Zapnutí fallbacku pro chyby `429` podle stavového kódu. Když je `false` (a `OMNIROUTE_ROTATION_ENABLED=true`), chyba `429` již nespustí rotaci účtu a místo toho se vrátí klientovi. |
| `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Počet chyb `429` během `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` potřebný k rotaci účtu. `1` (výchozí) rotuje okamžitě a zachovává historické chování. |
| `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Posuvné okno (v sekundách), během kterého se chyby `429` počítají do `OMNIROUTE_ROTATE_429_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | Zapnutí fallbacku podle stavového kódu pro serverové chyby `5xx` (kromě `502`, která má vlastní třídu). Když je `false`, tyto chyby již nespustí rotaci účtu. |
| `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Počet chyb `5xx` během `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` potřebný k rotaci účtu. `1` (výchozí) rotuje okamžitě. |
| `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klouzavé okno (v sekundách), během kterého se chyby `5xx` počítají do `OMNIROUTE_ROTATE_500_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | Zapnutí záložního mechanismu (fallbacku) podle stavového kódu pro chyby `502` (bad gateway). Při hodnotě `false` chyby `502` již nespouštějí rotaci účtu. |
| `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Počet chyb `502` během `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` potřebný k rotaci účtu. Hodnota `1` (výchozí) rotuje okamžitě. |
| `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klouzavé okno (v sekundách), během kterého se chyby `502` počítají do `OMNIROUTE_ROTATE_502_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | Opt-in (ve výchozím nastavení VYPNUTO): při hodnotě `true` obyčejná chyba `400` (bad request) také spustí rotaci účtu. Toto je pouze doplňkové chování — nikdy neblokuje stávající chování enginu, kdy chyba `400` obsahující text o rate-limitu/kvótě způsobí přepnutí bez ohledu na tento příznak. |
| `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Počet chyb `400` během `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` potřebný k rotaci účtu (bere se v úvahu pouze při `OMNIROUTE_ROTATE_ON_400=true`). |
| `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klouzavé okno (v sekundách), během kterého se chyby `400` počítají do `OMNIROUTE_ROTATE_400_THRESHOLD`. |
### Plánovač zahřívání (warmup) Claude
Cronem řízené zahřívání pro výslovně zapnutá (opt-in) Anthropic OAuth připojení, takže se 5hodinové okno rate-limitu otevře triviálním naplánovaným požadavkem místo prvním skutečným (#8848). Plánovač je vypnutý, pokud `OMNIROUTE_WARMUP_ENABLED` není pravdivá **a** připojení není označené v `settings.claudeWarmup.connections`; prázdný seznam připojení znamená, že se nic nezahřívá, i když je proměnná prostředí zapnutá.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------------------ | --------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_WARMUP_ENABLED` | _(nenastaveno → vypnuto)_ | `src/lib/warmupScheduler.ts` | Hlavní přepínač plánovače zahřátí. Přijímá `1`/`true`/`yes`/`on` (nerozlišuje velikost písmen, oříznuto). Jakákoli jiná hodnota nebo nenastavení ponechá plánovač vypnutý. |
| `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Pětipolíčkový cron výraz pro tik zahřátí, vyhodnocovaný v `America/Los_Angeles` (časová zóna resetu Anthropicu) bez ohledu na hodiny hostitele. |
| `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | Kolik připojení se zahřívá paralelně během jednoho tiku. Omezeno na `1`-`10`; nečíselná hodnota se vrátí na `3`. |
| `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | Model použitý pro požadavek zahřátí. Přepište pouze v případě, že je výchozí model ve vašem tarifu nedostupný; zvolte nejlevnější model, který stále okno otevře. |
### VNC relace přihlášení přes prohlížeč a alias Data-Dir
Kontejnerizované Chromium+VNC používané pro interaktivní zachycení přihlašovacích údajů přes prohlížeč (`/api/vnc-session`), plus starší alias `DATA_DIR`. Vše je volitelné — výchozí hodnoty VNC cílí na přibalený obraz `omniroute-vnc-chromium:local` a přepisují se pouze pro vlastní obraz kontejneru, porty nebo ladění životního cyklu.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Tag Docker obrazu pro přihlašovací kontejner Chromium+VNC. Sestavte `docker/vnc-browser/chromium` nebo nasměrujte na vlastní obraz. |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Binárka kontejnerového runtime použitá ke spuštění VNC kontejneru (např. nastavte na `podman`). |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC/noVNC port vystavený uvnitř kontejneru. |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Port Chrome DevTools Protocol uvnitř kontejneru. |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Cesta k adresáři profilu Chromium uvnitř kontejneru. |
| `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | Adresář na hostiteli obsahující perzistentní profily přihlášení prohlížeče. |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 min) | `src/lib/vncSession/manifest.ts` | Časový limit nečinnosti (ms), po kterém je neaktivní VNC relace ukončena. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 min) | `src/lib/vncSession/manifest.ts` | Pevný limit (ms) životnosti jedné VNC relace. |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Maximální počet souběžných VNC relací. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Časový limit (ms) čekání, než bude kontejnerizovaný prohlížeč připraven pro CDP. |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Časový limit (ms) pro sklizení zachycené relace/cookies po dokončení přihlášení. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | Další příznaky příkazového řádku předávané kontejnerizovanému Chromium. |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Dedikovaná Docker síť, ke které se přihlašovací VNC kontejner připojuje (#12571) místo výchozího bridge, aby sousední kontejnery nemohly dosáhnout jeho CDP bridge portu. |
| `VIBEPROXY_DATA_DIR` | _(nenastaveno)_ | `open-sse/services/notionThreadSessions.ts` | **Starší alias** pro `DATA_DIR`, kontrolovaný až poté, co jsou `DATA_DIR` i `OMNIROUTE_DATA_DIR` nenastaveny. Určuje umístění mezipaměti relací Notion web-thread (`/notion-web-thread-sessions.json`). |
---
## 26. Testovací a E2E harness
Používají soubory `scripts/dev/run-next-playwright.mjs`, `scripts/dev/smoke-electron-packaged.mjs`,
`scripts/dev/run-ecosystem-tests.mjs` a `scripts/build/uninstall.mjs`. Všechny níže uvedené
hodnoty ponechte v produkčních nasazeních nenastavené.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| -------------------------------------- | ------------------------------ | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | Režim E2E bootstrapu (`auth`, `fresh`, `reuse`) pro runner Playwright. |
| `OMNIROUTE_E2E_PASSWORD` | použije se `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Heslo správce vložené do prostředí Playwright. |
| `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Vypne lokální dotazování healthcheck během běhů Playwright. |
| `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Vypne smyčku kontroly OAuth tokenů během testů. |
| `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(nenastaveno)_ | `src/lib/tokenHealthCheck.ts` | Poskytovatelé oddělení čárkou, kteří jsou vyloučeni z proaktivního obnovování tokenů (např. `codex,openai`). Cílená alternativa k úplnému vypnutí healthchecku — poskytovatelé s krátkým TTL se nadále obnovují, zatímco kaskádoví poskytovatelé zůstávají pouze reaktivní. |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Potlačí hluk healthchecku ve výstupu stdout Playwright. |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Přeskočí produkční build Next.js před spuštěním Playwright (optimalizace CI). |
| `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Přeskočí uninstall hook OmniRoute (CI ho používá, aby zůstal `node_modules` neporušený). |
| `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | Doba čekání (ms), než bude server v pořádku, před spuštěním testů ekosystému/protokolu. |
| `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | URL, na které smoke harness Electronu očekává, že bude zabalená aplikace poskytovat obsah. |
| `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Celkový časový limit (ms), než smoke harness vzdá. |
| `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | Časové okno na ustálení (ms) po načtení stránky. |
| `ELECTRON_SMOKE_APP_EXECUTABLE` | _(automaticky)_ | `scripts/dev/smoke-electron-packaged.mjs` | Explicitní cesta ke spustitelnému souboru zabalené aplikace Electron. |
| `ELECTRON_SMOKE_DATA_DIR` | _(dočasný adresář)_ | `scripts/dev/smoke-electron-packaged.mjs` | Datový adresář pro smoke běh Electronu. |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Nastavte `1` pro zachování adresáře smoke dat po dokončení běhu. |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Nastavte `1` pro streamování logů Electronu na stdout během běhu. |
| `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: opětovné spuštění se stejným datovým adresářem a ověření, že druhé spuštění vybere nativní ovladač SQLite. |
| `CLI_DEVIN_BIN` | _(vyhledání v PATH)_ | `open-sse/executors/devin-cli.ts` | Přepíše cestu k binárnímu souboru Devin CLI. |
### Pipeline překladu dokumentace
Používáno souborem `scripts/i18n/run-translation.mjs` (příkaz `npm run i18n:run`).
Všech šest proměnných je ve výchozím stavu nenastaveno — nastavte je v `.env` pouze na strojích,
které mají být schopny spouštět překladač dokumentace.
| Proměnná | Výchozí | Zdrojový soubor | Popis |
| ---------------------------------------- | --------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_TRANSLATION_API_URL` | _(nenastaveno)_ | `scripts/i18n/run-translation.mjs` | Základní URL kompatibilní s OpenAI pro překladový backend. |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(nenastaveno)_ | `scripts/i18n/run-translation.mjs` | Bearer token pro překladový backend (nikdy se nezaznamenává). |
| `OMNIROUTE_TRANSLATION_MODEL` | _(nenastaveno)_ | `scripts/i18n/run-translation.mjs` | ID modelu, např. `gpt-4o-mini` nebo `cx/gpt-5.4-mini`. |
| `OMNIROUTE_TRANSLATION_FALLBACK_MODELS` | _(nenastaveno)_ | `scripts/i18n/lib/translate-backend.mjs` | Volitelný řetězec modelů oddělený čárkami, který se zkouší v daném pořadí, když primární model selže (kvóta 429, 401/402, 5xx, časový limit, síť); chybně sestavený požadavek (400/413/422) se jinde znovu nezkouší. |
| `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Časový limit jednoho požadavku v milisekundách. |
| `OMNIROUTE_TRANSLATION_REASONING_EFFORT` | _(nenastaveno)_ | `scripts/i18n/lib/translate-backend.mjs` | Volitelné řízení uvažování (reasoning), při nastavení se odesílá beze změny na backend. |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Paralelní překladové požadavky při běhu nad více soubory / lokalizacemi. |
---
## 27. Radar Feed (vlastní hosting)
Volitelný doplněk řízený příznakem funkce RADAR_ENABLED (ve výchozím nastavení vypnuto — jde o příznak funkce přepínaný prostřednictvím nastavení/databáze, nikoli o proměnnou prostředí; viz
[docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)).
První čtyři níže uvedené proměnné představují volitelná přepsání pro vlastní nebo odvozený feed a
procesy s klíči podporovatelů. Pátá proměnná, `RADAR_ADMIN_URL`, je samostatný odkaz bez výchozí hodnoty na soukromý
provozní panel vlastníka. Úplnou dokumentaci modulu a jeho
[kompletní sekvenci aktivace a průvodce nastavením](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup) naleznete v souboru [docs/frameworks/RADAR.md](../frameworks/RADAR.md).
Obecná čtečka oznámení na domovské stránce / v přehledu změn není konfigurována pomocí proměnné
prostředí a nezávisí na příznaku funkce RADAR_ENABLED. Načítá veřejnou URL souboru
`news.json` repozitáře deklarovanou v `src/shared/utils/releaseNotes.ts`, a to
pouze metodou GET; ID zavřených oznámení zůstávají v místním úložišti prohlížeče.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | Základní URL sdílená samostatně podepsanými feedy katalogu, doporučení, nabídek pro podporovatele a Intel. Přepište ji, chcete-li použít vlastní nebo odvozenou službu. |
| `RADAR_FEED_PUBKEY` | _(připnutý výchozí klíč)_ | `src/lib/radar/pinnedKeys.ts` | Veřejný klíč Ed25519 (SPKI v DER kódovaném pomocí base64 nebo PEM) používaný k ověřování podpisů feedu z vlastního zdroje. |
| `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | URL, kterou otevře tlačítko „Jsem přispěvatel“ na řídicím panelu (proces získání klíče podporovatele prostřednictvím GitHub OAuth). |
| `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | URL, kterou otevře tlačítko „Podpořit projekt“ na řídicím panelu (stránka s platbou a plány). |
| `RADAR_ADMIN_URL` | _(nenastaveno)_ | `src/lib/radar/links.ts` | Odkaz na soukromý provozní panel určený pouze vlastníkovi. Vyžaduje se HTTPS s výjimkou HTTP loopbacku přesměrovaného přes SSH; při nenastavené nebo neplatné hodnotě se nevytvoří žádná navigační položka. |
---
## Audit: Odstraněné / nepoužívané proměnné
Následující proměnné se objevovaly v předchozích verzích souboru `.env.example`, ale v aktuální kódové základně na ně **neexistují žádné odkazy za běhu**. Byly odstraněny:
| Proměnná | Důvod |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `STORAGE_DRIVER=sqlite` | Není čtena žádným zdrojovým souborem. SQLite je jediný podporovaný ovladač — není nutný žádný výběr. |
| `INSTANCE_NAME=omniroute` | Je uvedena ve staré dokumentaci a šablonách prostředí, ale za běhu se nepoužívá. Může se vrátit v budoucí funkci pro více instancí. |
| `SQLITE_MAX_SIZE_MB=2048` | Ve zdrojovém kódu se na ni neodkazuje. Velikost databáze není uměle omezena. |
| `SQLITE_CLEAN_LEGACY_FILES=true` | Ve zdrojovém kódu se na ni neodkazuje. Čištění starších souborů bylo pravděpodobně odstraněno. |
| `CLI_ROO_BIN` | Není registrována v `src/shared/services/cliRuntime.ts`. |
| `CLI_KIMI_CODING_BIN` | Není registrována v `src/shared/services/cliRuntime.ts` (Kimi Coding používá OAuth, nikoli binární soubor CLI). |
| `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | Ve zdrojovém kódu se na ně nikde neodkazuje. |
| `CEREBRAS_API_KEY` / `COHERE_API_KEY` / `FIREWORKS_API_KEY` / `GROQ_API_KEY` / `MISTRAL_API_KEY` / `NEBIUS_API_KEY` / `PERPLEXITY_API_KEY` / `TOGETHER_API_KEY` / `XAI_API_KEY` | Odstraněny ve verzi v3.8.0. Běhové prostředí již tyto proměnné prostředí nečte — přihlašovací údaje pocházejí z Dashboardu / `data/provider-credentials.json` / šifrované databáze. |
| `CURSOR_PROTOBUF_DEBUG` | Odstraněna ve verzi v3.8.0. Vykonavatel Cursor používá `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (viz §22). |
| `CLI_COMPAT_KIRO` | Odstraněna ve verzi v3.8.0. Kiro je uvedeno v `CLI_COMPAT_OMITTED_PROVIDER_IDS` — jeho přepínač nemá žádný účinek. |
| `QIANFAN_API_KEY` | Odstraněna spolu s dalšími nepoužívanými zástupnými klíči API poskytovatelů ve verzi v3.8.0. |
### Opravy výchozích hodnot
| Proměnná | Stará hodnota v `.env.example` | Skutečná výchozí hodnota v kódu | Oprava |
| ------------------------- | ------------------------------ | ------------------------------- | ------------------------------------------------------------- |
| `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Zavádějící hodnota odstraněna; jako výchozí je uvedeno `7` |
| `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Zavádějící hodnota odstraněna; jako výchozí je uvedeno `7` |
### Regenerování konfigurace OpenCode (nástroje ad hoc)
Používá se ve skriptu `scripts/ad-hoc/regen-opencode-config.ts` k regenerování souboru `opencode.json`
s přesnými hodnotami `limit.context` a `limit.output` načtenými z běžící
instance OmniRoute. Žádná z nich není vyžadována pro běžný provoz — skript
slouží pouze jako vývojářský nástroj.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------ | ------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | Základní URL instance OmniRoute, která se dotazuje na `/v1/models`. |
| `OMNIROUTE_KEY` | _(nenastaveno)_ | `scripts/ad-hoc/regen-opencode-config.ts` | Klíč API pro ověření vůči koncovému bodu OmniRoute `/v1/models`. Pokud není nastaven, použije se `OPENCODE_API_KEY`. |
| `OPENCODE_API_KEY` | _(nenastaveno)_ | `scripts/ad-hoc/regen-opencode-config.ts` | Klíč API ve stylu OpenCode (`sk-...`) zapsaný do znovu vygenerovaného souboru `opencode.json`. Pokud není nastaven, použije se `OMNIROUTE_KEY`. |
### Nástroj pro offline vyhodnocení komprese (ad hoc)
Používá jej `scripts/compression-eval/index.ts`, rozhraní CLI pro offline vyhodnocení komprese.
Pro běžný provoz není vyžadován — je určen pouze pro vývojáře.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------- | --------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (prázdné) | `scripts/compression-eval/index.ts` | Přihlašovací údaje JSON poskytnuté operátorem pro poskytovatele používaného rozhraním CLI pro offline vyhodnocení komprese (zpracované pomocí `JSON.parse`). Pro zkušební běh ponechte nenastavené. |
### Relace prohlížeče VNC
Používá je `src/lib/vncSession/manifest.ts` ke konfiguraci relací bezobslužného prohlížeče Chromium založených na Dockeru pro poskytovatele automatizace prohlížeče. Všechny jsou volitelné — výchozí hodnoty jsou uvedeny níže.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------- | ------------------------------ | ------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Cesta k binárnímu souboru Dockeru používanému ke spouštění kontejnerů VNC. |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Obraz Dockeru pro kontejner VNC Chromium. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(vestavěné příznaky)_ | `src/lib/vncSession/manifest.ts` | Dodatečné argumenty CLI pro Chromium předávané prohlížeči uvnitř kontejneru. |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | Port VNC uvnitř kontejneru. |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Port protokolu Chrome DevTools uvnitř kontejneru. |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Adresář profilu uvnitř kontejneru. |
| `OMNIROUTE_VNC_PROFILE_DIR` | _(nenastaveno)_ | `src/lib/vncSession/manifest.ts` | Adresář na hostiteli pro trvalé profily prohlížeče. |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | Časový limit nečinnosti (ms), po kterém je relace VNC ukončena a vyčištěna. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | Maximální délka relace (ms). |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Maximální počet souběžných relací VNC. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Časový limit připravenosti prohlížeče (ms). |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Časový limit pro ukončení a vyčištění (ms). |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Vyhrazená síť Dockeru, ke které se kontejner připojí (#12571), mimo výchozí síť typu bridge. |
| `VIBEPROXY_DATA_DIR` | _(nenastaveno)_ | `open-sse/services/notionThreadSessions.ts` | Adresář pro trvalé ukládání relací vláken Notion. |
### Ověřování interních služeb
| Proměnná | Výchozí hodnota | Popis |
| --------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | Token vložený přímo do proměnné pro ověřování komunikace mezi službami v rovině správy. |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | Cesta k souboru obsahujícímu token interní služby (preferováno v kontejnerech; přepisuje přímo zadanou proměnnou). |
### Statistiky poskytovatelů OpenRouter
| Proměnná | Výchozí hodnota | Popis |
| ----------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | Nastavte na `false`, chcete-li přeskočit načítání statistik jednotlivých poskytovatelů OpenRouter pro obohacení katalogu. |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | Doba platnosti mezipaměti (ms) pro načtené statistiky poskytovatelů OpenRouter. |
### Integrovaná vazba Redis
| Proměnná | Výchozí hodnota | Popis |
| --------------------------- | --------------- | ------------------------------------------------------------------------- |
| `REDIS_BIND_HOST` | `127.0.0.1` | Adresa pro naslouchání vestavěné služby Redis. |
| `REDIS_PORT` | `6379` | Port vestavěné služby Redis. |
| `OMNIROUTE_REDIS_BIND_HOST` | – | Přepsání adresy pro naslouchání vestavěné služby Redis v rámci OmniRoute. |
---
## 24. Dodatky verze v3.8.50
Tato nastavení byla zavedena po předchozím snímku kontraktu proměnných prostředí.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Maximální čekání na slot přijetí náročného chatového požadavku před opakovatelnou chybou `503`; krátké omezené čekání serializuje nárazy agentů místo okamžitého `503`. Hodnota `0` obnovuje okamžité odmítnutí. |
| `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Rozpočet bajtů ve frontě pro čekání na přijetí: omezuje celkový počet bufferovaných bajtů těl požadavků odložených v rámci celého procesu, aby čekání nemohlo nafukovat haldu (#4380). Čekání nad rozpočet okamžitě obdrží opakovatelnou chybu `503`. |
| `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | Zastaralé, bez účinku (no-op) od #10110: přijímací pruhy pro jednotlivé relace byly odstraněny ve prospěch jednoho rozpočtu pro celý proces. Akceptováno z důvodu kompatibility konfigurace; ignorováno. |
| `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Zastaralé, bez účinku (no-op) od #10110: přijímací pruhy pro jednotlivé relace byly odstraněny ve prospěch jednoho rozpočtu pro celý proces. Akceptováno z důvodu kompatibility konfigurace; ignorováno. |
| `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (vypnuto) | `open-sse/services/admission/runtime.ts` | Adaptivní virtuální přijímací pruhy za běhu (#9654): hlavní vypínač adaptivní brány pro jednotlivé tenanty (systém 2). Odlišné od zastaralých proměnných pruhů pro jednotlivá připojení výše (TTL_MS / MAX_SESSIONS, bez účinku od #10110). Příznak funkce v dashboardu se stejným názvem; proměnná prostředí má přednost před přepsáním z dashboardu; vyžaduje restart. |
| `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | Omezuje, jak dlouho volání run-now čeká na právě zpracovávanou úlohu, než spustí běh čekající ve frontě. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | zapnuto | `open-sse/services/adobeFireflySession.ts` | Udržuje stav IMS a browser-risk aktuální prostřednictvím relací Chrome CDP vázaných na účet; nastavte `0` pro vypnutí. |
| `ADOBE_FIREFLY_SESSION_DISK` | zapnuto | `open-sse/services/adobeFireflySession.ts` | Uchovává opravené relace Adobe pod `DATA_DIR`; nastavte `0` pro stav pouze v paměti. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Minimální rozestup mezi odesláními požadavků na generování Adobe Firefly. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Dodatečná doba klidu po každém třetím úspěšném odeslání Adobe. |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Režim true-headless pouze pro ladění; Adobe colligo obvykle výslednou rizikovou relaci odmítá. |
| `CHROME_PATH` | automatická detekce | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Volitelná absolutní cesta ke spustitelnému souboru Chrome, kterou používají executory řízené prohlížečem, když automatická detekce platformy nestačí. |
| `TELEGRAM_BOT_TOKEN` | _(nenastaveno)_ | `src/lib/telegram/config.ts` | Token BotFather, který povoluje příchozí webhook a podepisuje `initData` Mini App. |
| `TELEGRAM_WEBHOOK_SECRET` | _(nenastaveno)_ | `src/lib/telegram/config.ts` | Sdílené tajemství registrované pomocí `setWebhook` a ověřované vůči hlavičce `X-Telegram-Bot-Api-Secret-Token` při každém doručení webhooku. Vyžadováno pro cestu webhooku; nenastavení znamená, že doručení webhooků jsou odmítána s chybou 503. |
| `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Model používaný pro odpovědi v chatu Telegramu. |
| `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Přepsání základní URL Bot API pro proxy nebo self-hosted servery Bot API. |
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Časový limit v milisekundách pro odchozí volání Bot API. |
| `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (zapnuto) | `scripts/build/optionalPackStaging.mjs` | Nastavením `0` přeskočíte generování archivů `.tar.gz` při přípravě volitelných ML/browser balíčků pro samostatný strom Electronu (adresáře balíčků a `optional-packs.index.json` se stále vytvářejí). Používá workflow vydání desktopové verze ke zmenšení velikosti nahrávaných artefaktů. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Povoluje registraci tras obrázků předplatného xAI; ve výchozím stavu vypnuto, aby cesta obrázků pomocí API klíče zůstala nezměněna. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Cooldown pro jednotlivé klíče v milisekundách, když odpověď `429` nemá použitelný údaj `Retry-After`. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | zapnuto | `open-sse/services/estimatorCalibration.ts` | Nastavením na `off`, `0` nebo `false` vypnete záznam a uplatňování kalibrace estimátoru v paměti. |
| `NEXT_MANUAL_SIG_HANDLE` | _(interní)_ | `scripts/dev/standalone-server-ws.mjs` | Interní přepsání obsluhy signálů samostatného serveru; obvykle jej nastavuje a ruší spouštěč, nikoli operátoři. |
### ChatGPT Web (Codex)
Globální výchozí hodnoty pro headless prohlížeč a odchozí tunel nástrojů. Hodnoty připojení nastavené v dashboardu mají přednost.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(automatická detekce)_ | `open-sse/executors/chatgpt-web-codex.ts` | Explicitní cesta ke Chrome/Chromium pro provoz s npm, systemd a PM2. |
| `CHROME_PATH` | _(automatická detekce)_ | `open-sse/executors/chatgpt-web-codex.ts` | Sdílený fallback pro explicitní cestu ke Chrome/Chromium. |
| `CHATGPT_WEB_CODEX_CDP_URL` | _(nenastaveno)_ | `open-sse/executors/chatgpt-web-codex.ts` | Interní CDP endpoint; Docker používá sidecar na portu `9223`. |
| `CHATGPT_WEB_CODEX_USE_CDP_PROFILE` | _(nenastaveno — vypnuto)_ | `open-sse/vendor/codex-chatgpt-web/persistent-cdp-context.ts` | Nastavte na `1` (s nakonfigurovaným CDP endpointem), aby se místo izolovaného kontextu pro každé kolo znovu použila stávající stránka ChatGPT z externě spravovaného přihlášeného profilu prohlížeče; zároveň omezí počet souběžných karet ChatGPT na 1. Ve výchozím nastavení vypnuto. Viz [perzistentní CDP profil](../guides/CHATGPT-WEB-PERSISTENT-CDP.md). |
| `CDP_PROXY_TOKEN` | _(nenastaveno)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Je-li nastaven, musí každý požadavek na CDP proxy sidecar odesílat tuto hodnotu v hlavičce `X-Omni-Cdp-Token` (#13679). Bez hodnoty proxy předává požadavky neautentizovaně — pak chrání pouze síťová izolace Compose sítě `chatgpt-web-codex-net`. Vygenerujte pomocí `openssl rand -hex 32`. |
| `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(nenastaveno)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globální ID OpenAI tunelu pro lokální kola nástrojů Codex. |
| `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(nenastaveno)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globální runtime klíč tunelu; nikdy nevypisovat do logů. |
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | Přesný název nově vytvořeného vlastního konektoru ChatGPT pro MCP můstek. |
| `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | Vyhrazený adresář pro stav prohlížeče, brokera a tunelu. |
| `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | Při hodnotě `1` se v každém kontrolním bodu zaznamenávají diagnostické snímky prohlížeče. |
| `CODEX_CHATGPT_WEB_LAUNCHER` | _(nenastaveno)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Volitelná absolutní cesta k trvalému binárnímu souboru launcheru. |
| `CODEX_CHATGPT_WEB_BUN` | _(automatická detekce)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Volitelná absolutní cesta k binárnímu souboru runtime Bun. |
| `CODEX_WEB_GPT_BUN` | _(nenastaveno)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Legacy fallback pro `CODEX_CHATGPT_WEB_BUN`; nové instalace používají kanonický název. |
---
## OmniConductor Bridge
Dlouho běžící SSE konzument, který zrcadlí úlohy OmniConductor hubu do lokálního A2A TaskManageru (`src/lib/conductor/`). Volitelné (opt-in) — můstek se spustí pouze tehdy, když je nastavena proměnná `CONDUCTOR_HUB_URL`. Pouze na straně serveru: token hubu se nesmí nikdy dostat do prohlížeče.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ------------------------------ | ----------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `CONDUCTOR_HUB_URL` | _(prázdné)_ | `src/lib/conductor/boot.ts` | Základní URL OmniConductor hubu (např. `http://127.0.0.1:7910`). Nenastaveno = můstek vypnut. |
| `CONDUCTOR_HUB_TOKEN` | _(prázdné)_ | `src/lib/conductor/boot.ts` | Přihlašovací údaj hubu pro SSE feed — na hubu vytvořte peer typu `spokesperson` (`POST /v1/peers`, admin). |
| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(prázdné)_ | `src/lib/conductor/hubProxy.ts` | Přihlašovací údaj pro příchozí delegování úloh A2A→hub (`POST /v1/tasks`); pokud není nastaven, použije se `CONDUCTOR_HUB_TOKEN`. |
| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Základní URL služby spokesperson (Faro) za proxy chatu dashboardu (`/api/conductor/ask`). |
### Plánování s ohledem na kvóty
Používají soubory `open-sse/services/combo.ts` a `src/lib/quota/quotaScheduler.ts` pro kontroly tokenového rozpočtu před odesláním požadavku. Volitelné (opt-in) — není-li nastaveno, výchozí chování směrování zůstává nezměněno.
| Proměnná | Výchozí hodnota | Zdrojový soubor | Popis |
| ---------------------------------- | --------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Když je `1`, přeskočí se připojení, jejichž tokenový rozpočet na okno (`rateLimitOverrides.tpm`, tabulka `provider_quota_state`) nedokáže před odesláním pokrýt odhadované náklady požadavku. Pokud není nastaven žádný rozpočet, chová se režim fail-open (požadavek projde). |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(zapnuto)_ | `open-sse/services/estimatorCalibration.ts` | Zpětnovazební kalibrace odhazovače tokenů context-guardu (#14931): EMA poměru `usage.prompt_tokens` / odhad pro každou kombinaci (poskytovatel, model, přítomnost nástrojů), omezená na 0,15–2,0, pouze v paměti. Hodnoty `off`, `0` nebo `false` vypínají záznam i aplikaci. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Registruje trasy obrázků `xai-oauth` (`xao`) a `grok-cli`. Feature flag dashboardu stejného názvu; přepis z DB má přednost před touto hodnotou. |