# Environment Variables Reference (Български) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/ENVIRONMENT.md) · 🇪🇹 [am](../../../am/docs/reference/ENVIRONMENT.md) · 🇸🇦 [ar](../../../ar/docs/reference/ENVIRONMENT.md) · 🇦🇿 [az](../../../az/docs/reference/ENVIRONMENT.md) · 🇧🇩 [bn](../../../bn/docs/reference/ENVIRONMENT.md) · 🇧🇦 [bs](../../../bs/docs/reference/ENVIRONMENT.md) · 🇨🇿 [cs](../../../cs/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) --- > Пълна справка за всяка променлива на средата, разпознавана от OmniRoute. > За шаблон за бързо стартиране вижте [`.env.example`](../../.env.example). > [!IMPORTANT] > Всяка променлива, документирана тук, трябва да присъства и в `.env.example`, а > всяка променлива в `.env.example` трябва да присъства тук. `npm run check:env-doc-sync` > налага това при commit и в CI. За да пропуснете умишлено дадена променлива, добавете я към > списъка с разрешени изключения в `scripts/check/check-env-doc-sync.mjs`. --- ## Съдържание - [1. Задължителни тайни](#1-задължителни-тайни) - [2. Хранилище и база данни](#2-хранилище-и-база-данни) - [3. Мрежа и портове](#3-мрежа-и-портове) - [4. Сигурност и удостоверяване](#4-сигурност-и-удостоверяване) - [5. Санитизация на входните данни и защита на PII](#5-санитизация-на-входните-данни-и-защита-на-pii) - [6. Политики за инструменти и маршрутизиране](#6-политики-за-инструменти-и-маршрутизиране) - [7. URL адреси и облачна синхронизация](#7-url-адреси-и-облачна-синхронизация) - [8. Изходящ прокси сървър](#8-изходящ-прокси-сървър) - [9. Интеграция с CLI инструменти](#9-интеграция-с-cli-инструменти) - [10. Интеграции с вътрешни агенти и MCP](#10-интеграции-с-вътрешни-агенти-и-mcp) - [11. Идентификационни данни за OAuth доставчици](#11-идентификационни-данни-за-oauth-доставчици) - [12. Заместващи стойности за User-Agent на доставчиците](#12-заместващи-стойности-за-user-agent-на-доставчиците) - [13. Съвместимост на CLI отпечатъка](#13-съвместимост-на-cli-отпечатъка) - [14. Доставчици с API ключове](#14-доставчици-с-api-ключове) - [15. Настройки за изчакване](#15-настройки-за-изчакване) - [16. Регистриране](#16-регистриране) - [17. Оптимизация на паметта](#17-оптимизация-на-паметта) - [18. Синхронизиране на цените](#18-синхронизиране-на-цените) - [19. Синхронизиране на моделите (разработка)](#19-синхронизиране-на-моделите-разработка) - [20. Настройки, специфични за доставчика](#20-настройки-специфични-за-доставчика) - [21. Състояние на прокси сървъра](#21-състояние-на-прокси-сървъра) - [22. Отстраняване на грешки](#22-отстраняване-на-грешки) - [23. Интеграция с GitHub](#23-интеграция-с-github) - [24. Изолирана среда за умения (v3.8.0+)](#24-изолирана-среда-за-умения-v380) - [27. Поток Radar (самостоятелно хостване)](#27-поток-radar-самостоятелно-хостване) - [Сценарии за внедряване](#сценарии-за-внедряване) - [Одит: премахнати / неизползвани променливи](#одит-премахнати--неизползвани-променливи) --- ## 1. Задължителни тайни Незададените тайни, маркирани с **Да**, се генерират автоматично при първото стартиране (`JWT_SECRET`, `API_KEY_SECRET`) и се съхраняват в `server.env` в директорията за данни — задайте ги изрично, когато тази директория е ефимерна. Изключение е `OMNIROUTE_WS_BRIDGE_SECRET`: тя не се съхранява в `server.env` — входните точки на сървъра (entrypoints) генерират ефимерна стойност за всяко стартиране, която може да използва само мостът в самия процес, затова външните клиенти на моста трябва да я зададат изрично. | Променлива | Задължителна | По подразбиране | Изходен файл | Описание | | ---------------------------- | ----------------------------- | ------------------------------------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `JWT_SECRET` | **Да** | _(няма)_ | `src/lib/auth` | Подписва/проверява всички бисквитки за сесии на таблото за управление (JWT). Генерирайте с `openssl rand -base64 48`. | | `API_KEY_SECRET` | **Да** | _(няма)_ | `src/lib/db/apiKeys.ts` | AES ключ за криптиране на стойностите на API ключовете при съхранение в SQLite. Генерирайте с `openssl rand -hex 32`. | | `INITIAL_PASSWORD` | Не | _(не е зададена)_ | `src/lib/auth/managementPassword.ts` | Задава паролата на таблото за управление при стартиране, докато все още няма запазена парола; игнорира се, след като парола е запазена. Инсталациите чрез npm и от изходен код копират `.env.example` в `.env`, така че стартират с публично известния му заместител `CHANGEME`: заменете го преди първото стартиране или задайте `INITIAL_PASSWORD=` (празна) в този `.env`, за да се създаде паролата в помощника за първоначална настройка при първо посещение — както прави и незададената стойност (по подразбиране в Docker образа). Запазена парола променяйте в Табло за управление → Настройки → Сигурност, или изпълнете `omniroute reset-password` (`node bin/reset-password.mjs` в копие на изходния код) с `DATA_DIR`, зададена към директорията за данни на сървъра. | | `OMNIROUTE_WS_BRIDGE_SECRET` | **Да** (в продукционна среда) | _(не е зададена)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Споделена тайна за вътрешния WebSocket мост на Codex Responses. Удостоверява заявките към моста между WS препредаването на Electron/браузъра и OmniRoute. ⚠️ **ЗАДЪЛЖИТЕЛНА в продукционна среда — когато не е зададена, всички заявки към WS моста се отхвърлят.** Генерирайте с `openssl rand -base64 32`. | | `OMNIROUTE_SW_BUILD_ID` | Не | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Изричен идентификатор за анулиране на кеша на service worker за PWA обвивката (#11779); първи във веригата за определяне на стойността. | | `SOURCE_VERSION` | Не | _(не е зададена)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Втори във веригата — задава се от PaaS системи за изграждане (напр. от типа на Heroku) като внедрения commit. | | `NEXT_PUBLIC_SW_BUILD_ID` | Не | _(изведена)_ | `src/shared/components/PwaRegister.tsx` | Публична стойност от етапа на изграждане, която клиентът използва, за да регистрира `/sw.js?v=…`; извежда се от двете стойности по-горе, а след това от git SHA. | | `OMNIROUTE_PEER_STAMP_TOKEN` | Не (автоматично) | _(автоматично при всяко стартиране)_ | `src/server/authz/policies/management.ts` | Тайна за всеки процес, доказваща, че довереният печат за IP адреса на отсрещната страна идва от собствения HTTP сървър на OmniRoute (`scripts/dev/peer-stamp.mjs`). Междинният софтуер за authz се доверява на локалността на заявката (ограничаване на маршрутите LOCAL_ONLY до loopback/LAN) само когато печатът съдържа този токен. Генерира се автоматично при всяко стартиране — оставете я незададена; задавайте фиксирана стойност само при конфигурации с множество процеси, които трябва да споделят печата. | | `OMNIROUTE_TRUSTED_PROXIES` | Не | _(не е зададена)_ | `scripts/dev/peer-stamp.mjs` | Разделени със запетаи IP адреси или CIDR диапазони на обратни прокси сървъри, чиито `X-Forwarded-For` / `X-Real-IP` списъкът за разрешаване/забраняване на IP адреси може да приема за достоверни, в допълнение към loopback адресите, адресите от частни мрежи и периферните сървъри на Cloudflare, които винаги са доверени. Необходимо е само за прокси на друг публичен адрес; в противен случай филтърът оценява собствения адрес на това прокси. | ### Команди за генериране ```bash # Генериране на всичките четири тайни наведнъж: 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] > Никога не добавяйте `.env` файлове с реални тайни във version control. `.gitignore` вече изключва `.env`, но проверете, преди да изпратите промените. --- ## 2. Хранилище и база данни OmniRoute използва **SQLite** (чрез `better-sqlite3`) за цялото постоянно съхранение. Тези променливи управляват местоположението, шифроването и жизнения цикъл на данните. | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Основна директория за базата данни на SQLite, резервните копия и файловете с данни. Задайте друга стойност за Docker томове или персонализирани пътища. | | `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(не е зададена)_ | `src/lib/dataPaths.ts` | Аварийна опция за защитата на DATA_DIR при тестове/оценяване (#10428). Тестовете и Node сондите за оценяване/извеждане (`-e`/`--eval`/`-p`/`--print`, включително формите `--eval=`/`--print=`) без `DATA_DIR` се пренасочват към временна директория за еднократна употреба, така че да не могат да отворят реалната база данни на оператора; задайте стойност `1`, за да разрешите отново използването на реалната директория. | | `OMNIROUTE_BUILD_SHA` | _(не е зададена)_ | `src/lib/monitoring/buildSha.ts` | Git SHA на изпълнявания артефакт. Поставя се от `npm run build:release`; може да бъде подаден в контейнери, разпространявани без контролния файл `dist/BUILD_SHA`. Показва се като `system.buildSha` в `/api/monitoring/health`. | | `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Референцията, спрямо която проверката за произход на пакетирания артефакт проверява SHA на компилацията (#10427). | | `OMNIROUTE_ALLOW_CANARY_BUILD` | _(не е зададена)_ | `scripts/build/buildProvenance.ts` | Задайте стойност `1`, за да разрешите пакетирането на компилация, чийто SHA не е в линията за издания, като тя бъде записана като умишлена канарейна версия, вместо проверката да завърши неуспешно (#10427). | | `OMNIROUTE_SMOKE_API_KEY` | _(не е зададена)_ | `scripts/ops/deploy-canary.mjs` | API ключ за базовата проверка при внедряване на канарейна версия, изпращан като `Authorization: Bearer` към `/v1/chat/completions`. Използва се само от скрипта за внедряване (#10429), никога от сървъра. Не е свързан с променливите `OMNIROUTE_SMOKE_*` на CLI механизма за базови проверки с изрично включване (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` в `tests/integration/upstream-cli-smoke.int.test.ts`) — вижте [CLI интеграции → Реална поредица от базови проверки](../guides/CLI-INTEGRATIONS.md). | | `OMNIROUTE_BUILDING` | _(не е зададена)_ | `src/lib/buildPhase.ts` | Сигнал за фазата на компилация (#10060): задава се на `1` от `scripts/build/build-next-isolated.mjs` и се наследява от всеки стартиран процес за компилация, така че слоят на базата данни да връща нефункционална заглушка, вместо да зарежда нативната добавка better-sqlite3 (която прекратява процеса при излизане). Никога не се задава за работещия сървър. | | `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Задайте стойност `1`, за да пропуснете незадължителната проверка преди компилация за нативни зависимости при нестандартни включени в дистрибуцията дървета. Това не прави компилацията възможна при липсваща зависимост; използвайте само когато нативните зависимости се предоставят по външен начин. | | `OMNIROUTE_DATA_DIR` | _(не е зададена)_ | `open-sse/executors/promptql/threadSticky.ts` | **Резервен псевдоним** за `DATA_DIR`, който се проверява само когато `DATA_DIR` не е зададена. Използва се за намиране на дисковия кеш на PromptQL изпълнителя за сесии, фиксирани към нишка (`/promptql-thread-sessions.json`); ако нито една от променливите не е зададена, кешът остава само в паметта (не се запазва между рестартиранията). | | `OMNIROUTE_PLUGINS_DIR` | _(не е зададена)_ | `src/lib/plugins/scanner.ts` | Директорията, която **скенерът за плъгини по време на изпълнение** прочита — и основната директория, в която мениджърът на плъгини инсталира — като заменя подразбиращата се стойност, извлечена от домашната директория (#11827). Насочете я към монтираното чрез bind дърво с плъгини в Docker/K8s, вместо да променяте HOME само за да преместите пътя за сканиране (HOME управлява и всяко друго поведение, свързано с домашната директория). Незададена = `~/.omniroute/plugins` или `/tmp/.omniroute/plugins`, когато процесът изобщо не експортира домашна директория — тази променлива премахва произтичащото тихо неоткриване. Определената директория се записва веднъж при стартиране като `scanner.dir_resolved`, заедно с входната стойност, която е взела превес. Само от страна на сървъра: плъгините за CLI команди продължават да използват собствената си `OMNIROUTE_PLUGIN_PATH` (раздел 9). | | `STORAGE_ENCRYPTION_KEY` | _(празно = деактивирано)_ | `src/lib/db/encryption.ts` | AES ключ за пълно криптиране на SQLite базата данни при съхранение. Генерирайте с `openssl rand -hex 32`. | | `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | Етикет за версията на ключа за криптиране. Увеличавайте го при ротация на ключа, за да поддържате декриптирането на стари резервни копия. | | `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | Когато е `true`, пропуска рутинните резервни копия на SQLite файловете и тези преди запис (запазване/изчистване на цените от models.dev, записване на настройки). Ръчните резервни копия и тези преди възстановяване продължават да се изпълняват. Това **не** деактивира задължителната трайна защитна моментна снимка на механизма за миграции или предпазителя за масови миграции при съществуваща постоянна БД. Неръчните резервни копия се ограничават до най-много едно на всеки 60 минути. **Настройки → Съхранение** в таблото за управление може независимо да деактивира рутинното автоматично архивиране. | | `OMNIROUTE_CRYPT_KEY` | _(не е зададено)_ | `src/lib/db/encryption.ts` | **Остарял псевдоним** за `STORAGE_ENCRYPTION_KEY`. Приема се като резервна стойност, когато основната променлива липсва. | | `OMNIROUTE_API_KEY_BASE64` | _(не е зададено)_ | `src/lib/db/encryption.ts` | **Остарял псевдоним** (форма, кодирана с Base64), който се приема като резервна стойност. Декодира се автоматично преди употреба. | | `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(не е зададено)_ | `src/lib/db/core.ts` | Заменя интервала за периодична проверка на състоянието на SQLite (ms). Когато не е зададен, стойностите по подразбиране се извеждат от `NODE_ENV`. | | `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(премахнато)_ | `src/lib/db/walMaintenance.ts` | **Премахнато.** Периодичното изпълнение на `wal_checkpoint(TRUNCATE)` в работеща система може да направи невалидно споделеното съпоставяне на wal-index и да срине процеса със SIGBUS (#13973), затова планировчикът вече не съществува. Променливата е неактивна: положителна стойност записва еднократно предупреждение за оттегляне, а `0` или незададена стойност не генерира съобщение. WAL се поддържа чрез контролни точки PASSIVE (по-долу) и се съкращава от контролната точка при изключване. | | `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5m) | `src/lib/db/walMaintenance.ts` | Заменя интервала за често изпълнение на `wal_checkpoint(PASSIVE)` (ms). Поддържа малък броя на чакащите WAL кадри, така че контролните точки да остават бързи, а размерът на WAL файла да остава ограничен между съкращаванията при изключване. `0` деактивира функцията. | | `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Когато PASSIVE проверка установи, че WAL файлът надвишава този размер, изпълнява `wal_checkpoint(RESTART)`, така че WAL да започне отначало, без да се презаписва съпоставеният wal-index. Контролните точки в режим на съкращаване при работеща система са премахнати (вижте реда `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). | | `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Задайте на `1`/`true`/`yes`/`on`, за да прекратите процеса, след като критичният натиск върху ресурсите се задържи за `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, позволявайки на надзорна система (systemd `Restart=always`, политика за рестартиране на Docker) да стартира отново чист процес, вместо да връща 503 отговори за неопределено време. | | `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2m) | `open-sse/utils/resourcePressure.ts` | Колко дълго трябва да се задържи критичният натиск, преди да се задейства изходът за самостоятелно рестартиране. | | `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Задайте на `1`/`true`/`yes`/`on`, за да игнорирате общосистемния `/proc/pressure/memory` (`psi_some` / `psi_full`), когато шумен съсед предизвиква 503 отговори, въпреки че този процес работи нормално (#13124). Предпазителите за cgroup и V8 heap остават активни. PSI също престава да се отчита като доказателство за ограничаване от ядрото при `cgroup_high`: тогава обща стойност на cgroup над `memory.high` става критична само при увеличение на `high`/`max` в `memory.events`. Без `memory.events` се запазва необработеното съотношение. | | `OMNIROUTE_SQLJS_WASM_PATH` | _(автоматично откриване)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Изричен път (абсолютен или относителен спрямо текущата работна директория) до `sql-wasm.wasm` при използване на резервния WASM адаптер `sql.js`. Когато не е зададен, се открива автоматично чрез зависимостите на пакетите и възможните структури. | | `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Броят дни, през които контролните точки, реферираните входни/изходни файлове и файлове с грешки, както и редът на завършена (успешна/неуспешна/отменена/изтекла) задача на Batch API, се съхраняват от автоматичното почистване преди изтриване. Влиза в сила само след активиране на `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`; съответства на собствения период на OpenAI за съхранение на изходните данни от Batch API. Не засяга задействания от оператор маршрут `DELETE /api/v1/batches/delete-completed`, който по замисъл остава безусловен (без филтър по възраст). | | `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Когато е `true`, позволява на автоматичното почистване да изтрива приключилите задания на Batch API (и техните контролни точки) след изтичането на `OMNIROUTE_BATCH_RETENTION_DAYS` и да изчиства BLOB съдържанието на качените файлове след собствената им стойност `expires_at`. По подразбиране е изключено: всяка съществуваща инсталация запазва тези данни точно както преди, докато оператор не активира функцията. Това е и флаг за функционалност, който може да се редактира от таблото за управление — вижте `docs/reference/FEATURE_FLAGS.md` → Среда на изпълнение. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Задайте `1`, за да пропуснете изцяло проверката на състоянието на базата данни при стартиране. Полезно за краткотрайни задачи и интеграционни тестове. | | `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Задайте `1`, за да включите принудително цикъла за проверка на състоянието на базата данни дори когато обикновено би бил пропуснат (напр. при краткотрайни задачи). | | `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Задайте `1`, за да пропуснете предварителното зареждане на нативната среда за изпълнение по време на `npm install`. Полезно при CI/инсталации без графичен интерфейс, където sqlite вече е компилиран. | | `OMNIROUTE_MIGRATIONS_DIR` | _(автоматично откриване)_ | `src/lib/db/migrationRunner.ts` | Заменя директорията, която се сканира от механизма за миграции. Полезно при разпространяване на пакетирани миграции в персонализирани компилации. | | `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(незададено)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Допълнителни директории с миграции като записи `namespace=dir`, разделени с разделителя за пътища на платформата (напр. `ee=/opt/app/enterprise/db/migrations`). Намерените там файлове се записват като `-`, така че дистрибуция със собствени миграции никога да не влиза в конфликт с числовите позиции на основния проект. Неправилно форматиран запис, невалидно пространство от имена или липсваща директория предизвиква грешка при стартиране, вместо схемата да бъде пропусната без предупреждение. | | `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Предпазен праг за голям брой чакащи миграции (#3416). Стартирането се прекратява, ако в съществуваща база данни чакат повече миграции от тази стойност (предпазва от изтрита таблица за проследяване). Увеличете стойността, за да възстановите по-старо резервно копие; задайте `0`, за да деактивирате проверката. | | `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Работна директория за проверката при издание `check:install-upgrade`. Необходими са приблизително 12 GB (две инсталационни дървета от по ~3 GB плюс tarball архива), затова тя не трябва да се изпълнява върху малка tmpfs — на самостоятелно хоствания runner `/tmp` е 12 GB tmpfs в RAM и проверката я запълни, повреждайки пакета чрез отрязване. | | `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(по подразбиране в кода)_ | `src/lib/spend/batchWriter.ts` | Интервал за запис (ms) за пакетния механизъм за запис на разходи/себестойност. По-ниските стойности намаляват обединяването на записите; по-високите стойности намаляват конкуренцията за достъп до базата данни. | | `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(по подразбиране в кода)_ | `src/lib/spend/batchWriter.ts` | Максимален брой буферирани записи за разходи преди принудителен запис. Увеличете стойността при внедрявания с много заявки в секунда; намалете я, когато ограниченото използване на памет е по-важно. | | `OMNIROUTE_PROXY_FETCH_DEBUG` | _(незададено)_ | `open-sse/utils/proxyFetch.ts` | Задайте `"true"`, за да извеждате диагностични съобщения `[ProxyFetch]` по пътя на Vercel relay. По подразбиране е изключено, за да се избегне разкриването на насоки за маршрутизиране. | | `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(незададено)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Абсолютен път до локалния двоичен файл на ядрото на проксито (файл с име `sing-box`), който проверява генерирана конфигурация на ядрото, преди тя да замени възприетия файл. Когато не е зададено, само записва `.generated` до възприетия файл. Само за средата на хоста: никога не се съхранява в базата данни и не се приема чрез API за управление, тъй като двоичният файл се изпълнява. | | `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(незададено)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Начинът, по който локалното ядро на проксито се презарежда след проверена замяна на конфигурацията: масив от JSON аргументи, изпълнен без shell, или точно `external`, когато външен наблюдател прилага файла. Никога не се съхранява в базата данни и не се излага чрез API. | | `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Задайте `"true"` или `"1"`, за да включите IP адресите на клиента/изходящата връзка и префикса на акаунта в подробния ред `[ProxyEgress]` на журнала на процеса. По подразбиране остава ИЗКЛЮЧЕНО, така че журналът на процеса да не разкрива IP адреси или префикса на акаунта. | | `OMNIROUTE_DEBUG` | _(не е зададено)_ | `bin/cli/commands/quota.mjs` | Задайте на `1`, за да извеждате диагностична информация за времето на всяка заявка (`[omniroute] GET completed in Nms`) от CLI командите за квоти към stderr. | | `OMNIROUTE_HEALTHCHECK_PATH` | _(автоматично)_ | `scripts/dev/healthcheck.mjs` | Изричен път, проверяван от контейнерната проверка на състоянието. Ако не е зададен, проверката го извежда от `OMNIROUTE_BASE_PATH`; задаването му включва отново задълбочената крайна точка за наблюдение. | | `OMNIROUTE_DEBUG_COMPLETION` | _(не е зададено)_ | `bin/cli/commands/completion.mjs` | Задайте произволна непразна стойност, за да извеждате диагностична информация с `[omniroute completion]` от пътищата на кеша за автоматично допълване в обвивката на CLI (четене/опресняване/запис). По подразбиране е изключено — тези кешове се повреждат безшумно, така че липсващ или повреден кеш никога да не нарушава допълването с Tab. | | `BATCH_RETRY_DURATION_MS` | `86400000` (24 ч.) | `open-sse/services/batchProcessor.ts` | Максимален период за повторни опити за отделни елементи от партида (мс). Елементите, надвишаващи тази продължителност, се маркират като неуспешни. | | `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Базово забавяне (мс) за експоненциално изчакване при повторни опити за елементи от партида. | | `BATCH_BACKOFF_MAX_MS` | `3600000` (1 ч.) | `open-sse/services/batchProcessor.ts` | Горна граница (мс) за експоненциалното изчакване между повторните опити за елементи от партида. | | `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Максимален брой партиди, обработвани едновременно. Увеличете стойността за по-висока пропускателна способност; поддържайте я ниска, за да избегнете лавина от ограничения на честотата. | > [!IMPORTANT] > Преди промяна на съществуваща постоянна база данни инструментът за миграции публикува пълна, > адресирана по съдържание моментна снимка в `DATA_DIR/db_backups/`. Публикуването изисква файлова > система, която поддържа твърди връзки в рамките на една и съща файлова система без презаписване, > както и надеждна синхронизация на файловете. POSIX хостовете изискват и синхронизация на директориите; > в Windows Node може да отхвърли манипулаторите на директории, затова OmniRoute записва съдържанието > на публикувания файл и третира синхронизацията на записа в директорията като действие с максимално > възможно усилие. > Ако монтираната `DATA_DIR` не може да предостави тези гаранции, стартирането се прекратява безопасно, > преди да бъде приложена миграция. Преместете `DATA_DIR` на том с тези възможности; не използвайте > `DISABLE_SQLITE_AUTO_BACKUP`, за да заобикаляте безопасността на миграциите. ### Сценарии | Сценарий | Конфигурация | | ---------------------------- | --------------------------------------------------------------------------------------------------- | | **Локална разработка** | Оставете всички стойности по подразбиране. Базата данни се намира в `~/.omniroute/omniroute.db`. | | **Docker** | `DATA_DIR=/data` + монтирайте том в `/data`. | | **Шифроване при съхранение** | Задайте `STORAGE_ENCRYPTION_KEY` + пазете резервни копия на ключа! Загубата му = загуба на данните. | | **CI/Тестване** | `DATA_DIR=/tmp/omniroute-test` — временно хранилище, не е необходимо шифроване. | --- ## 3. Мрежа и портове | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | Основен порт както за потребителския интерфейс на таблото за управление, така и за API крайните точки (режим с един порт). | | `OMNIROUTE_BASE_PATH` | _(празно = корен)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | URL подпът за обслужване на OmniRoute зад обратен прокси сървър (задава `basePath` на Next.js; пренасочванията за удостоверяване отчитат `basePath`). Например `/omniroute`. В Docker стойността се вгражда по време на `docker build` (`ARG OMNIROUTE_BASE_PATH`); предварително изградените коренови образи могат еднократно да приложат различна стойност по време на изпълнение при стартирането на контейнера, преди Next.js да се зареди. Задайте `NEXT_PUBLIC_BASE_URL` на публичния източник, включително същия подпът. | | `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(празно = корен)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Видимо за браузъра огледално копие на `OMNIROUTE_BASE_PATH`, вградено по време на компилация, така че показваната крайна точка в таблото за управление да бъде `https://host/omniroute/v1` вместо `https://host/v1`. Когато не е зададено, използва `OMNIROUTE_BASE_PATH`. Изградете наново след промяна (`basePath` на Next се задава по време на компилация). | | `DASHBOARD_ALLOW_EMBED` | _(незададено = никога не може да се вгражда в рамка)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Изрично разрешаване на вграждането на HTML страниците чрез iframe. Когато не е зададено, всеки маршрут се предоставя с `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Задайте на `vscode`, за да предоставяте страниците (табло за управление, вход, документация, начална страница) с `frame-ancestors 'self' vscode-webview:` и без `X-Frame-Options`, така че VS Code Simple Browser да може да ги визуализира (режимът `dashboardOpen: "editor"` на OmniCopilot). API повърхността (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, псевдоними на кореново ниво) запазва строгите заглавки и в двата случая. Разпознава се само `vscode` — `1`/`true` не го активират. Задава се по време на компилация: изградете наново след промяна (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` за образи; задаването му при предварително изградена инсталация няма ефект). | | `API_PORT` | _(незададено)_ | `src/lib/runtime/ports.ts` | Когато е зададено, обслужва прокси API `/v1/*` на този отделен порт. | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Адрес за обвързване на API порта. | | `DASHBOARD_PORT` | _(незададено)_ | `src/lib/runtime/ports.ts` | Когато е зададено, обслужва потребителския интерфейс на таблото за управление на този отделен порт. | | `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(деактивирано)_ | `src/sse/utils/backpressure.ts` | Ограничава едновременните активни чат връзки; заявките над ограничението получават `503` с `Retry-After`. Положително цяло число активира защитата; незададена стойност/`0` я деактивира. | | `OMNIROUTE_INSTANCE_ID` | _(незададено)_ | `src/shared/resilience/peerRouting.ts` | Стабилен уникален идентификатор за този шлюз при свързване на OmniRoute инстанции във верига. Активира проверки за входящи цикли между равноправни възли. Разрешени знаци: букви, цифри, `.`, `_`, `:` и `-`; максимум 64 знака. | | `OMNIROUTE_PEER_URLS` | _(не е зададено)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | Разделени със запетаи базови URL адреси на OmniRoute, които могат да получават `X-OmniRoute-Peer-Trace`. Метаданни за равноправни възли получават само изрично включените в списъка с разрешени upstream URL адреси; всички останали доставчици остават незасегнати. | | `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | Максимален брой посетени преди това инстанции на OmniRoute, приемани във верижна заявка (`1`-`32`). Повторно срещнати инстанции или изчерпан лимит връщат HTTP `508 Loop Detected`. | | `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Публикуван порт от страната на хоста за таблото за управление в производствен режим на Docker. | | `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Публикуван порт от страната на хоста за API в производствен режим на Docker. | | `OMNIROUTE_PORT` | _(не е зададено)_ | `src/lib/runtime/ports.ts` | Има предимство пред `PORT` при изпълнение в Electron или други обвивки. | | `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Порт за WebSocket сървъра за наблюдение в реално време. | | `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Адрес за обвързване на WebSocket сървъра в реално време. Задайте `0.0.0.0`, за да го изложите в LAN (конфигурирайте също `LIVE_WS_ALLOWED_ORIGINS`). | | `LIVE_WS_ALLOWED_ORIGINS` | _(не е зададено)_ | `src/server/ws/liveServer.ts` | Допълнителни източници, разделени със запетаи, на които е разрешено да отварят WebSocket връзка в реално време. Източниците на таблото за управление през loopback са разрешени по подразбиране. | | `LIVE_WS_ALLOWED_HOSTS` | _(не е зададено)_ | `src/server/ws/liveServerAllowList.ts` | Допълнителни имена на хостове, разделени със запетаи, разрешени за източници на WebSocket връзки в реално време. За разлика от `LIVE_WS_ALLOWED_ORIGINS` (пълни URL адреси на източници), съпоставя само частта за хоста — полезно при конфигурации с LAN/Tailscale. | | `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(не е зададено)_ | `src/hooks/useLiveDashboard.ts` | Публичен URL адрес за WebSocket връзката на таблото за управление в реално време (от страната на браузъра). Задайте го, когато пред WS сървъра има обратен прокси сървър или Cloudflare Tunnel (напр. `wss://ws.my-ai.com/live-ws`); браузърът се свързва там вместо с `ws://hostname:20132`. Частта с пътя се използва и като път за надграждане до WebSocket (по подразбиране: `/live-ws`). | | `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` и `scripts/start-ws-server.mjs` | Задайте `0` или `false`, за да деактивирате WebSocket сървъра в реално време (активиран по подразбиране и обвързан към loopback). Превключвател за CI/тестова среда, който деактивира самостоятелния помощен скрипт за WebSocket връзки в реално време. | | `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Ограничение на честотата на relay заявките за всяка двойка (токен, IP), в заявки/минута. Съхранява се в паметта и е отделно за всяка инстанция. `0` или отрицателна стойност деактивира ограничението по IP (ограничението за токен в базата данни продължава да се прилага). | | `NODE_ENV` | `production` | Ядро на Next.js | Контролира подробността на логовете, кеширането, разкриването на детайли за грешките и оптимизациите на Next.js. | | `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — стойност по подразбиране в кода) | `package.json` / Next.js 16 | Turbopack е пакетиращият инструмент по подразбиране за `npm run dev` и `npm run build` (2–3 пъти по-бързи компилации според бенчмаркове). Задайте `0`, за да се върнете към webpack под Windows, при несъвместимости с нативни обвързвания или пакетиращия инструмент, **или на машини с ограничена RAM** — известно е, че продукционните компилации с Turbopack в тази версия на Next.js (16.2.x) достигат много по-високи пикови стойности на използваната памет от webpack при големи графи от модули (корекцията за освобождаване на памет на Turbopack в Next 16.3 все още не е стабилна); резервният вариант с webpack достига много по-ниски пикови стойности. Вижте #6409. **Компилациите на Docker образи използват по подразбиране `0` (webpack)**: `Dockerfile` декларира `ARG OMNIROUTE_USE_TURBOPACK=0`, така че обикновена команда `docker build .` (Railway и други хостинг услуги с настройване с едно щракване, както и самостоятелно хоствани инсталации според нуждите) да не бъде прекратена поради недостиг на памет в среда за компилация с ограничена памет; подайте `--build-arg OMNIROUTE_USE_TURBOPACK=1`, за да компилирате образа с Turbopack. Вижте `docs/guides/DOCKER_GUIDE.md` → Ресурси по време на компилация. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(не е зададено)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Задайте `1`, за да пропуснете проверката на целостта на SQLite при стартиране. Полезно за по-бързо стартиране при големи бази данни. | | `NOTIFY_SOCKET` | _(не е зададено)_ | systemd (протокол sd_notify) | Задава се от systemd, когато процесът се изпълнява под услуга с интеграция на sd_notify; OmniRoute го прочита (вижте `OMNIROUTE_DISABLE_SD_NOTIFY`), за да изпраща известия READY/WATCHDOG. Никога не се задава от потребителя. | | `OMNIROUTE_DISABLE_SD_NOTIFY` | _(не е зададено)_ | `scripts/dev/systemd-notify.mjs` | Задайте `1`, за да деактивирате sd_notify на systemd (Type=notify / WatchdogSec=), дори когато приложението се изпълнява под услуга на systemd. Извън systemd инструментът за известяване не извършва никакви действия независимо от настройката. | | `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Интервал (в мс) за фоновия планировчик за проверка на състоянието на идентификационните данни. Минимум: 10000 (10 сек). | | `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (в мс) за кешираното състояние на идентификационните данни. | | `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Задайте `1` или `true`, за да деактивирате периодичното фоново тестване на връзките с доставчиците. Доставчиците за търсене (SEARCH_VALIDATOR_CONFIGS в `src/lib/providers/validation/searchProviders.ts`, напр. `tavily-search`) винаги се изключват от обхождането — тяхното „валидиране“ е реална таксувана заявка към външната услуга, затова никога не се подлагат на периодична проверка на състоянието (#9970). | | `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Задайте `1`, за да позволите на удостоверен заявител да извика `/api/monitoring/health?deep=1`, което взема проба от интерфейса за completions веднъж за всеки TTL период. Анонимните заявители никога не задействат проверката. | | `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Адрес за свързване на сървъра за разработка/стартиране на Next.js. Когато е зададен, заменя стойността по подразбиране `0.0.0.0`. | | `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Адрес за свързване, използван от Playwright runner при стартиране на Next.js. По подразбиране е `127.0.0.1` за изолирани тестове. **Не използвайте за `omniroute serve`** — вместо това използвайте `OMNIROUTE_SERVER_HOST` (POSIX обвивките автоматично задават `HOSTNAME` като името на машината; `.env` не може да го замени). | | `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Адрес за обвързване за `omniroute serve`. Избягва конфликт с променливата `HOSTNAME` на POSIX обвивката (винаги задавана от bash/zsh като името на машината). Ако не е зададена, използва `0.0.0.0`. (#6194) | ### Режими на портовете ``` ┌──────────────────────── Един порт (по подразбиране) ────────────────────────┐ │ PORT=20128 │ │ → Табло: http://localhost:20128 │ │ → API: http://localhost:20128/v1/chat/completions │ └─────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────── Разделени портове ──────────────────────────────┐ │ DASHBOARD_PORT=20128 │ │ API_PORT=20129 │ │ API_HOST=0.0.0.0 │ │ → Табло: http://localhost:20128 │ │ → API: http://0.0.0.0:20129/v1/chat/completions │ │ Приложение: API е достъпен в LAN, а таблото — само през localhost. │ └─────────────────────────────────────────────────────────────────────────────┘ ┌────────────────────────── Docker в продукция ───────────────────────────────┐ │ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │ │ → Съпоставя портовете на контейнера с портовете на хоста в │ │ docker-compose.prod.yml. │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 4. Сигурност и удостоверяване | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Сол, комбинирана с хардуерни идентификатори за създаване на машинен отпечатък. Променяйте я за всяко внедряване с цел изолация. | | `OMNIROUTE_CLI_SALT` | _(незададена = произволна сол за всяка инсталация, съхранявана в `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | HMAC сол за извеждане на локалния CLI токен за удостоверяване. Задаването на тази стойност подменя всички CLI токени на машината и винаги има приоритет пред съхранената сол. Вижте `docs/security/CLI_TOKEN.md`. | | `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Задава флага `Secure` на сесийните бисквитки. **Трябва да бъде `true`** при работа зад HTTPS. | | `REQUIRE_API_KEY` | `false` | API междинен софтуер | Когато е `true`, всички прокси заявки към `/v1/*` трябва да включват валиден API ключ. **Този флаг не ограничава `GET /v1/models`**, който вместо това следва настройката за вход в таблото за управление (`requireAuthForModels`) — следователно отговор `401` от `/v1/models` НЕ означава, че изпълнението на заявки към модела е защитено. Вижте `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). | | `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Позволява показването на пълните стойности на API ключовете в потребителския интерфейс на таблото за управление. Конфигурира се от функционалните флагове в таблото за управление; представлява риск за сигурността при споделени инстанции. | | `NO_LOG_API_KEY_IDS` | _(празно)_ | `src/lib/compliance/index.ts` | Разделени със запетаи идентификатори на API ключове, за които не се извършва регистриране на заявки (съответствие с GDPR). | | `DEFAULT_RATE_LIMIT_PER_DAY` | _(незададена = неограничено)_ | `src/shared/utils/apiKeyPolicy.ts` | Резервен дневен бюджет за заявки, прилаган към API ключове, чиято колона `rate_limits` е null. Незададена или празна стойност: без неявно ограничение (#2289, #11017). `0` означава същото (неограничено). Положително цяло число N разрешава N/ден, 5N/седмица, 20N/месец. Невалидните непразни стойности се връщат към старите интервали от 1000/ден, 5000/седмица и 20000/месец. | | `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | Максимално разрешеният размер на тялото на заявката. Отхвърля полезни товари, надвишаващи това ограничение. | | `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | Действителните тела на заявки с размер, равен на или по-голям от този праг, придобиват атомарния локален за процеса пропуск за тежки заявки преди анализа на JSON (път BYTE, включително `POST /v1/responses`). Същият механизъм за избягване при достатъчен свободен капацитет от [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437), както при структурно тежките заявки; все още е ограничен от `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), така че [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) да не се повтори. | | `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Твърд лимит за маршрутите за чат, прилаган спрямо прочетените байтове по време на ограниченото приемане, включително за заявки с липсващ, невалиден или подвеждащ `Content-Length`; при превишаване се връща `413`. | | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(не е зададено — няма лимит за броя заявки)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** този наследен лимит за БРОЯ заявки вече се прилага само когато е изрично зададен. Когато не е зададен (по подразбиране), приемането на тежки чат заявки вместо това се ограничава от `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — автоматично изчислен БАЙТОВ бюджет, оразмерен спрямо реалния лимит на паметта на процеса в **един процес** (една V8 heap памет). Две припокриващи се заявки към `/v1/responses` с ~750 хил. токена сриват heap памети от ~12 GiB (#7849) — това е предупреждение за **бюджета на паметта**, а не твърд продуктов максимум от 2. Изправен процес (с heap памет под коефициента за отхвърляне) МОЖЕ да приема повече едновременни дълги заявки към `/v1/responses` чрез `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Десетки дълги SSE клиенти (40–50) зависят от heap паметта + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, а не от „максимум 2“. Безразборното увеличаване на тази стойност с цел „използване на хоста“ отново въвежда #7849. Умножавайте **heap паметите** чрез **N независими `DATA_DIR`** (#11024); никога не използвайте `replicas>1` с един SQLite файл. | | `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(автоматично изчислено)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** замества автоматично изчисления байтов бюджет за приемане (25% от по-строгия лимит на паметта между V8 и cgroup, разделени на 8-кратно временно увеличение). Изчислените и изрично зададените стойности се ограничават до диапазона 8 MiB–2 GiB. Тяло, по-голямо от ефективния бюджет, се отхвърля незабавно с `413 body_exceeds_budget`; конкуренцията между тела, които поотделно могат да бъдат обслужени, продължава да връща допускаща повторен опит грешка `503`. 40–50 едновременни дълги SSE клиенти зависят от този бюджет + heap паметта, а не от твърд „максимум 2“. Проверете `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` в `/api/monitoring/health`, преди да правите настройки. | | `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Коефициент за отхвърляне при натоварване на heap паметта (`heapUsed / heap_size_limit`) за приемане на тежки заявки според БАЙТОВЕ и СТРУКТУРА (#10183, #10268, #10437). Едновременна тежка заявка над `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` се отхвърля с допускащата повторен опит грешка `503` само когато heap паметта СЪЩО е достигнала или надвишила този коефициент; при нормално натоварена heap памет тя се приема чрез допълнителния капацитет за нормално състояние. | | `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (по подразбиране `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Ограничен допълнителен капацитет за бързия път при нормално натоварена heap памет (#10437) както за СТРУКТУРА, така и за БАЙТОВЕ (`admitChatRequest`, включително тела ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Без тази граница всяка заявка при натоварена, но нормално функционираща heap памет заобикаляше контрола на приемането без никакъв лимит. След като толкова едновременни разрешения станат активни чрез пътя за нормално натоварена heap памет, следващите заявки при натоварване преминават към СЪЩИЯ път за ограничено изчакване/отхвърляне, използван при реално натоварване на heap паметта. `0` деактивира изцяло заобикалянето. | | `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Брой съобщения, при който дадена чат заявка се класифицира като тежка дори когато тялото ѝ е под байтовия праг. | | `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Брой инструменти, при който дадена чат заявка се класифицира като тежка дори когато тялото ѝ е под байтовия праг. | | `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Консервативна оценка на броя токени според размера на низа, при която заявката се класифицира като тежка; това е приблизителен показател за разхода при приемане, а не токенизацията за таксуване от доставчика. | | `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (деактивирано) | `src/shared/middleware/chatBodyAdmission.ts` | Незадължителен лимит за историята на чата, активиран само при изричен избор. По подразбиране е деактивиран: броят на съобщенията е политика на внедряването, а не универсално свойство на заявката, и налагането на лимит тук отхвърля разговорите с окончателна грешка `413`, преди конвейерът за компресиране да може да ги направи обслужваеми. Нарастването на heap паметта се ограничава от `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` и отхвърлянето при натоварване на heap паметта. Задайте положителна стойност при внедрявания с ограничена памет, които се нуждаят от твърда горна граница; при превишаване тогава се връща структурирана грешка `413`, изискваща съкращаване. | | `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Твърд лимит за нестриймван отговор от услуга нагоре по веригата, който се буферира изцяло в паметта. При превишаването му четенето от услугата нагоре по веригата се отменя и заявката незабавно се прекратява с грешка, вместо да се разраства неограничен низ до изчерпване на heap паметта. | | `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Максимален брой байтове при пренос, препращани от заглавките на отговора от източника. Когато бюджетът бъде надвишен, заглавките с по-нисък приоритет (напр. персонализирани `x-codex-*`, `x-oai-request-id`) се премахват, за да се остане в рамките на обичайните ограничения за размера на заглавките при обратни прокси сървъри. Задайте по-висока стойност, за да препращате повече метаданни от източника за сметка на по-голям размер на заглавките на отговора. | | `CORS_ORIGIN` | _(не е зададено)_ | `src/server/cors/origins.ts` | Остарял списък с разрешени източници за CORS, поддържащ само един източник. За нови внедрявания предпочитайте `CORS_ALLOWED_ORIGINS`. CORS е предназначен само за браузърни API клиенти от различен източник; удостоверените операции за запис от таблото използват вместо това заявки от същия източник и обвързана със сесията CSRF защита. | | `CORS_ALLOWED_ORIGINS` | _(не е зададено)_ | `src/server/cors/origins.ts` | Разделен със запетаи списък с разрешени източници за CORS. Не се изпраща заместващ символ, освен ако `CORS_ALLOW_ALL=true` не е конфигурирано изрично. | | `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Аварийна възможност само за разработка, която връща всеки браузърен `Origin`. Не я активирайте при споделени или производствени внедрявания. | | `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Остарял псевдоним. Неговият превключвател в таблото (заместваща настройка в БД) се прочита преди тази стойност на средата; `false`, `0`, `no` или `off` в което и да е от двете места изключва проверките на хостовете по същия начин като `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, дори когато превключвателят за този флаг в таблото е записан като изключен; другите стойности оставят управлението на защитата на двата флага по-долу. | | `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Изключва проверките на хостовете от защитата за изходящи URL адреси, включително блокирането на облачни крайни точки за метаданни (целия диапазон 169.254.0.0/16, metadata.google.internal), по пътищата на доставчиците, които следват режима на защита: валидиране на URL адреси, откриване на модели, базови URL адреси на възли на доставчици (включително отдалечени възли за повторно класиране) и теста за резервното прокси, наред с други изходящи пътища, свързани с доставчици, като извличане на отдалечени изображения/мултимедия. Освен това разрешава частни цели за уеб куки, с изключение на облачните крайни точки за метаданни и локалните за връзката крайни точки, които остават блокирани дори при включен флаг. Заявките за чат, изпратени чрез `BaseExecutor.execute()`, запазват проверката си за облачни метаданни. Локалните доставчици работят с настройките по подразбиране: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (по подразбиране `true`) вече разрешава локални и LAN URL адреси по пътищата за валидиране, откриване и възли на доставчици; тестът за резервното прокси и частните цели за уеб куки вземат предвид само този флаг и блокират локални/LAN хостове, докато той е изключен. Има предимство пред `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. Стойност, записана чрез превключвателя в таблото, има предимство пред тази променлива. | | `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Разрешава URL адреси на доставчици с локални/частни адреси (127.0.0.1, localhost, LAN, частни диапазони) за валидиране на доставчици, откриване на модели, чат и другите свързани с доставчици изходящи пътища, управлявани от режима на защита. **По подразбиране `true`** (с приоритет на локалната среда): тогава защитата блокира облачните крайни точки за метаданни — целия диапазон 169.254.0.0/16 плюс известните имена на хостове за метаданни (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Задайте `false` за режим само с публични адреси, който блокира и частните хостове, и хостовете за обратна връзка. Защитата проверява името на хоста или IP литерала във вида, в който е записан, преди каквато и да е DNS заявка; в режим само с публични адреси обвивката за безопасно извличане допълнително разрешава името на хоста и отхвърля всеки частен адрес в отговора. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` изключва тези проверки по пътищата, изброени в неговия ред. Вградените локални доставчици, като LM Studio, Ollama, vLLM, Llamafile и Triton, пропускат всички проверки на хостове при валидиране на ключове и чат. Стойност, записана чрез превключвателя в таблото, има предимство пред тази променлива. (#5066) | | `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Позволява на маршрутите `/v1/audio/*` (транскрипции, реч, преводи) да използват съвместим с OpenAI възел на доставчик, хостван извън localhost. Изключено е по подразбиране — маршрутизирането на аудио към отдалечен хост променя идентичността на изходящия трафик и трябва да бъде изрично решение на оператора. Възлите с адреси за обратна връзка/частни адреси (localhost, 127.0.0.1, 172.16-31.x) винаги са разрешени и не се влияят от тази настройка. (#3963) | | `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Позволява на `POST /v1/rerank` (и на стъпката за повторно класиране чрез обратна връзка на механизма за памет) да използва съвместим с OpenAI възел на доставчик, хостван извън localhost — машина в LAN или Tailscale партньор, изпълняващ TEI, Infinity, vLLM и др. Изключено е по подразбиране — маршрутизирането към отдалечен хост променя идентичността на изходящия трафик и трябва да бъде изрично решение на оператора. Възлите за обратна връзка (localhost, 127.0.0.1, 172.16-31.x) винаги са разрешени и не се влияят от тази настройка. Базовият URL адрес на отдалечения възел трябва също да отговаря на правилата за изходящи URL адреси на доставчици (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). | | `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(празно)_ | `src/shared/network/localNodeHosts.ts` | Имена на хостове (разделени със запетаи или интервали), които маршрутизирането към възли на доставчици третира като локални — обикновено името на Docker/Compose услугата на модул за преранжиране, TEI или спомагателен аудиоконтейнер в собствената Docker мрежа на OmniRoute (`http://reranker:8080/v1`), така че възелът да не се нуждае от твърдо зададен IP адрес на контейнер. Изброените хостове могат да се използват за `/v1/rerank`, `/v1/audio/*` и локалната проверка на изправността, без да се включват `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` за всеки отдалечен възел, и се извикват директно — никога чрез `HTTP(S)_PROXY` или фиксираното прокси на дадена връзка. Те продължават да изпращат API ключа на връзката. Приемат се само едносегментни имена и имена с `.internal`/`.local`; публични FQDN имена, IP литерали и имена на услуги за облачни метаданни се игнорират с предупреждение. (#14635) | | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Когато OIDC е активиран, деактивира влизането с парола, така че потребителите да могат да се удостоверяват само чрез OIDC еднократно влизане. Приема се и краткият псевдоним `OIDC_DISABLE_PASSWORD_LOGIN`; функционалният флаг в таблото за управление със същия ключ е с по-висок приоритет. (#10889) | | `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Кратък псевдоним на `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). | ### Контролен списък за повишаване на сигурността ```bash # Минимални изисквания за сигурност в продукционна среда: AUTH_COOKIE_SECURE=true # Изисква HTTPS REQUIRE_API_KEY=true # Удостоверяване на всички прокси заявки ALLOW_API_KEY_REVEAL=false # Никога не показвайте ключовете в потребителския интерфейс CORS_ALLOWED_ORIGINS=https://your.domain.com MAX_BODY_SIZE_BYTES=5242880 # Ограничение от 5 MB ``` --- ## 5. Санитизация на входните данни и защита на личните данни OmniRoute осигурява двуслойна защита: сканиране за инжекции от страна на заявката и премахване на лични данни от страна на отговора. > **⚠️ Ограничения:** Тези защитни механизми представляват откриване чрез евристики с _максимално възможно старание_, а не цялостна защитна стена срещу инжектиране в подкани или DLP система за лични данни. Те могат да генерират фалшиви положителни резултати (маркиране на безобидни подкани за персони/ролеви игри) и фалшиви отрицателни резултати (лийтспийк, интервали, шаблони на езици, различни от английски). Сами по себе си те не са достатъчни за осигуряване на съответствие. Настройте режимите и ги тествайте спрямо трафика си, преди да разчитате на тях. ### От страна на заявката: защита срещу инжектиране в подкани | Променлива | По подразбиране | Файл източник | Описание | | --------------------------------- | ----------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | Активира сканирането на входящите съобщения за шаблони за инжектиране в подкани. | | `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Политика за инжекции: `warn` = само регистриране в дневника, `block` = отхвърляне на заявката с 400. Остарелият режим `redact` **не** премахва текста на инжекцията; използвайте `PII_REDACTION_ENABLED` за пренаписване на лични данни в заявката. | | `INJECTION_GUARD_MODE` | _(не е зададено)_ | `src/middleware/promptInjectionGuard.ts` | Остарял псевдоним на `INPUT_SANITIZER_MODE` — същото поведение. | | `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | Минималната степен на сериозност, която `MODE=block` отхвърля: `high` (по подразбиране), `medium` или `low`. Шаблоните със средна сериозност са само за наблюдение, освен ако прагът не бъде понижен. | | `INJECTION_GUARD_BLOCK_THRESHOLD` | _(не е зададено)_ | `src/shared/utils/injectionSeverity.ts` | Остарял псевдоним на `INPUT_SANITIZER_BLOCK_THRESHOLD` — същото поведение. | | `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | Когато е `true`, редактира личните данни във входящите заявки (независимо от режима за инжекции). | | `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | Редактира добре познати шаблони за API ключове/секретни токени в съдържанието на заявките и отговорите. Активира се по желание; аналогично на `PII_REDACTION_ENABLED`. | ### От страна на отговора: санитизатор на лични данни | Променлива | По подразбиране | Файл източник | Описание | | -------------------------------- | --------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------- | | `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | Сканира отговорите на LLM за изтекли лични данни, преди да ги върне на клиента. | | `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = маскиране на личните данни, `warn` = само регистриране в дневника, `block` = премахване на целия отговор. | ### Санитизатор на контекста за токенизирани маршрути във VS Code | Променлива | По подразбиране | Файл източник | Описание | | ----------------------------------- | --------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | Премахва неявния контекст на активния редактор (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) от заявките към `/v1/vscode/[token]/*` и редактира съдържанието на изрично прикачените чувствителни файлове. Защитено по подразбиране; задайте `0`, за да го деактивирате. | ### Сценарии | Сценарий | Конфигурация | | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Корпоративно съответствие** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (блокиране на инжекции + редактиране на лични данни в заявките/отговорите; режимите са независими) | | **Само наблюдение** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — регистрира в дневника, но никога не блокира | | **Лична употреба** | Оставете всички деактивирани — нулево допълнително натоварване | --- ## 6. Политики за инструменти и маршрутизиране | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ----------------------------------------------------------- | ----------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | Управлява достъпа на LLM до извикване на инструменти/функции. `allowlist` = само изброените инструменти, `denylist` = всички с изключение на изброените, `disabled` = без ограничения. | | `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | Път до JSON файла с правила за манипулиране на полезния товар (специфични за модела/протокола корекции към доставчика нагоре по веригата). | | `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Интервал за презареждане (в ms) на файла с правила за полезния товар без рестартиране. Минимум `1000`. | | `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Опционална настройка: маршрутизира идентификатори на модели без префикс `claude-*` от клиенти на Claude Code през OAuth акаунта на Claude Code, вместо да изисква префикс на доставчик. Изричните префикси на доставчик продължават да имат предимство. Може да се конфигурира и чрез превключвател в таблото на страницата на доставчика Claude. | | `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Остаряло поведение на `resolveBareModelToConnectionDefault` (#4825): заменя всяко име на модел без префикс с `defaultModel` на избраната връзка. По подразбиране е изключено; заменя се само `auto` или празен модел; когато е включено, се записва по едно предупреждение за всяка двойка. | | `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Ограничение за едновременност за всеки модел при комбинации с циклично разпределение (#9100). Семафорът за комбинации с циклично разпределение беше твърдо ограничен до 3 едновременни заявки на модел без възможност за промяна, което сериализираше трафика с по-висока едновременност зад това ограничение. Валидира се да е `>= 1` и се ограничава до `<= 32`. | | `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Опасна опционална настройка, която пропуска локалната проверка на OmniRoute за контекстния прозорец/максималния брой входни токени при директни заявки към един модел. Доставчиците нагоре по веригата продължават да налагат действителните си ограничения; компресирането на подканата и собственото ограничение на модела за изходни токени остават активни. Ефективният приоритет е замяна от БД за флагове на функционалности > променлива на средата > стойност по подразбиране; не се изисква рестартиране. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(не е зададено)_ | `open-sse/services/selfHostedEntry.ts` | Вграден YAML документ `providers:` (RIC-738, D4). Когато е зададен (със или без блок `strategy:`), `/v1/chat/completions` се пренасочва към унифицираната самостоятелно хоствана входна точка, съвместима с OpenAI, вместо към облачния конвейер. Когато не е зададено (по подразбиране), маршрутът преминава директно към съществуващия облачен конвейер. Вижте `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(не е зададено)_ | `open-sse/services/selfHostedEntry.ts` | Път до YAML файл, съдържащ същия документ `providers:` като `OMNIROUTE_SELF_HOSTED_PROVIDERS`, за внедрявания, които предпочитат файл пред вградена променлива на средата. Всеки от двата варианта активира самостоятелно хостваната входна точка. | | `OMNIROUTE_SELF_HOSTED_API_KEY` | _(не е зададено — отворен маршрут)_ | `open-sse/services/selfHostedEntry.ts` | Незадължителен споделен API ключ за унифицираната самостоятелно хоствана входна точка (базова реализация D5, запазена за системата за квоти по ключове). Когато е зададен, заявките трябва да включват `Authorization: Bearer `. Когато не е зададен: маршрутът е отворен, в съответствие със съществуващия модел за самостоятелно хоствани локални доставчици (внедряване в loopback/доверена мрежа). | | `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(не е зададено)_ | `open-sse/services/routingStrategies.ts` | Вграден YAML документ `strategy:` за детерминистичния механизъм за маршрутизиране (M2/RIC-740, D3) — черен/бял списък, прекъсвач с период на изчакване, приоритизиране по цена, отчитане на латентността, верига за резервно превключване. Има предимство пред вграден блок `strategy:`, вложен в `OMNIROUTE_SELF_HOSTED_PROVIDERS`, за всеки ключ. Вижте `docs/routing/DETERMINISTIC_ROUTING.md`. | | `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(не е зададено)_ | `open-sse/services/routingStrategies.ts` | Път до YAML файл, съдържащ същия документ `strategy:` като `OMNIROUTE_SELF_HOSTED_STRATEGY`, за внедрявания, при които се предпочита файл вместо вградена променлива на средата. | | `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(не е зададено)_ | `open-sse/services/conversationTracker.ts` | Задайте `1`, за да спрете събирането на историята на разговорите. `resolveConversationId()` връща непроследяван резултат, преди да прочете SQLite или да анализира историята на съобщенията; това важи и за предоставените от клиента идентификатори на сесии. Обработката на сесиите за маршрутизиране остава непроменена, а съществуващите записи не се изтриват. Предназначено за внедрявания, които не използват изгледа за разговори на таблото и искат да спрат нарастването на таблицата с реплики. | | `OMNIROUTE_NADIR_API_KEY` | _(не е зададено)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | API ключ за незадължителната стратегия `nadir` на маршрутизатора за автоматично комбиниране, използван, когато собствената стойност `config.nadir.apiKey` на комбинацията не е зададена. Незадължителен: заявките без ключ попадат в анонимното ниво на Nadir, което е с ограничение на честотата за всеки IP адрес и следователно не е използваемо зад споделен шлюз. Поверителна стойност; предпочитайте полето за отделната комбинация, когато комбинациите използват различни акаунти. | | `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Базов адрес на API за вземане на решения на Nadir, използван, когато собствената стойност `config.nadir.baseUrl` на комбинацията не е зададена. Необходим е само за самостоятелно хостван Nadir, който запазва началните части на подканите във вашата собствена мрежа. Завършващият `/v1` се допуска и премахва. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Седмичен прозорец за ограниченията на използването в USD за всеки API ключ (прилагане при заявки, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: седмицата приключва при най-ранното седмично нулиране сред връзките към доставчици, до които ключът има достъп, или представлява плъзгащ се период от 7 дни, когато не е известно такова нулиране. `calendar`: местната седмица от понеделник 00:00 ч. до следващия понеделник 00:00 ч., еднаква за всеки ключ. `calendar` се препоръчва, когато един набор от акаунти при доставчици се споделя от много ключове с индивидуални бюджети. При невалидни стойности се използва `provider`. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(часовата зона на процеса)_ | `src/lib/usage/apiKeyUsageLimits.ts` | Часова зона от IANA (например `Asia/Shanghai`), която определя понеделник 00:00 ч. за седмичния прозорец `calendar`. Ако не е зададена или е невалидна: часовата зона на процеса OmniRoute (`TZ` на хоста или контейнера, която често не е зададена в образите на контейнери, т.е. координирано универсално време). Игнорира се в режим `provider`. | | `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Максималният брой инструменти по подразбиране, разрешени в една заявка (стойността по подразбиране на OpenAI). Разрешени са само положителни цели числа; ако стойността не е зададена или е невалидна, се запазва `128`. Доставчик с известно/предварително зададено ограничение (`grok-cli` 200, `nvidia` 1536) продължава да прилага собствената си горна граница — тази настройка променя само стандартния максимум. | | `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(включено)_ | `open-sse/executors/syntxChat.ts` | Извикване на инструменти чрез емулация в подкана на SYNTX.ai: ако не е зададено или е `1`/`true`/`on`/`yes`, локалният каталог с инструменти се вмъква в подканата; всяка друга стойност (напр. `0`) пропуска това вмъкване. | --- ## 7. URL адреси и облачна синхронизация | Променлива | Стойност по подразбиране | Файл източник | Описание | | ---------------------------------------- | --------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL адрес от страна на сървъра, чрез който вътрешните задачи за синхронизация извикват `/api/sync/cloud`. Запазете го като URL адрес за loopback/контейнер дори когато приложението е публично достъпно чрез прокси. | | `CLOUD_URL` | _(празно)_ | `src/lib/cloudSync.ts` | URL адрес на крайна точка за облачно препредаване (платена функционалност). | | `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | Време за изчакване на HTTP заявките за облачна синхронизация. | | `OMNIROUTE_BUILD_PROFILE` | `full` | Конфигурация за компилиране на Webpack | Профил по време на компилиране (задайте `minimal`, за да изключите физически привилегированите модули от пакета). | | `OMNIROUTE_STANDALONE_DIR` | _самостоятелен изход в .build/_ | `scripts/build/colocate-standalone.mjs` | Замяна по време на компилиране на директорията за самостоятелния изход, използвана от стъпката за съвместно разполагане след компилирането. Това не е настройка по време на изпълнение. | | `OMNIROUTE_CLOUD_SYNC_SECRET` | _(празно)_ | `src/lib/cloudSync.ts` | Споделена тайна, използвана за проверка на HMAC-SHA256 подписа на отговорите от Cloud Sync. | | `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Задайте `true`, за да позволите на крайната точка на Cloud Sync да презаписва локалните идентификационни данни. Стойността по подразбиране е `false`. | | `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Задайте `true`, за да отхвърлите неподписан отговор от Cloud Sync, когато не е конфигурирана локална тайна (#13679). Наличният подпис винаги се проверява — и винаги се отхвърля, когато `OMNIROUTE_CLOUD_SYNC_SECRET` не е зададена — независимо от този флаг. От v3.9 стойността по подразбиране налага проверката. | | `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Задайте `true`, за да се върнете към едностъпковото поведение „импортиране на всичко“ от v3.8.5 без потвърждение от потребителя. | | `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, табло за управление, синхронизация | Публично достъпен URL адрес за OAuth redirect_uri, връзките в таблото за управление и генерираните публични URL адреси. Задайте го на стабилния публичен URL адрес, когато OAuth обратните извиквания или генерираните връзки за браузър трябва да използват каноничен хост на обратното прокси. | | `NEXT_PUBLIC_CLOUD_URL` | _(празно)_ | От страна на клиента | Клиентско огледално копие на `CLOUD_URL`. | | `NEXT_PUBLIC_APP_URL` | _(не е зададено)_ | `src/shared/services/cloudSyncScheduler.ts` | Остарял резервен вариант за `NEXT_PUBLIC_BASE_URL`. | | `NEXT_PUBLIC_PORT` | _(не е зададено — използва се `PORT`)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Резервен порт от страна на клиента за показваните URL адреси, когато не е известен origin (SSR/тестове); прочита се преди `PORT`. | | `OMNIROUTE_PUBLIC_BASE_URL` | _(не е зададено)_ | Резолвер за публичен origin, URL адреси на изображения | OmniRoute origin с най-висок приоритет, достъпен от браузъра, който се използва за генериране на публични URL адреси и валидиране на браузърния origin извън таблото за управление. Задайте това, когато OpenWebUI или друго препращащо приложение достига до OmniRoute чрез вътрешен URL адрес, но браузърът на потребителя трябва да извлича генерираната мултимедия от LAN, тунел или публичен origin. **Не** включвайте `/v1`. | | `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(не е зададено)_ | `open-sse/config/providerPluginManifestUrl.ts` | Абсолютен URL адрес на манифеста на приставката за доставчика, обявяван на sidecar клиентите. Когато не е зададено, OmniRoute извежда `/api/v1/provider-plugin-manifest` от origin на заявката или от HOST/PORT. | | `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Протокол, използван при извеждане на URL адреса на манифеста на приставката за доставчика от HOST/PORT без origin на заявката. Задайте го на `https` зад публично прокси, което прекратява TLS, когато не е зададен изрично `OMNIROUTE_PROVIDER_MANIFEST_URL`. | | `OMNIROUTE_TRUST_PROXY` | _(не е зададено)_ | `src/server/origin/publicOrigin.ts` | Незадължителен режим на доверие за препратените заглавки за публичен origin. Ако не е зададено, на `Forwarded` / `X-Forwarded-*` не се вярва при решения за сигурност. `true` / `loopback` се доверява на препратения хост/протокол само от loopback прокси, маркирано с токен. `private` / `lan` се доверява също на прокси партньори в частна LAN и позволява на моста `API_PORT` да запази `X-Forwarded-For` на такъв партньор. В продукционна среда предпочитайте изрично зададен `NEXT_PUBLIC_BASE_URL`. | | `KIE_CALLBACK_URL` | _(не е зададено)_ | `open-sse/utils/kieTask.ts` | Публичен URL адрес за обратно извикване при асинхронни задачи на kie.ai. Замяна с най-висок приоритет преди `OMNIROUTE_KIE_CALLBACK_URL` и `OMNIROUTE_PUBLIC_URL`. | | `OMNIROUTE_KIE_CALLBACK_URL` | _(не е зададено)_ | `open-sse/utils/kieTask.ts` | Алтернативно изписване на `KIE_CALLBACK_URL`. Използва се като резервен вариант, когато основната променлива не е зададена. | | `OMNIROUTE_PUBLIC_URL` | _(не е зададено)_ | `open-sse/utils/kieTask.ts` | Публичен origin, използван за съставяне на URL адреси за асинхронно обратно извикване. Резервен вариант с най-нисък приоритет за обратни извиквания на kie.ai; използва се и като общ публичен URL адрес за други препращащи приложения. | | `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Крайна точка за проверка на квотата на CrofAI, използвана от страницата Usage. Заменете я за препращащи приложения / тестови фикстури. | | `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Крайна точка за 5-часовата / седмичната / месечната квота на ClinePass, използвана от страницата Usage. Заменете я за препращащи приложения / тестови фикстури. | | `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Официална крайна точка за използването на OpenCode Go с удостоверяване чрез API ключ, използвана от страницата Usage. Заменете я за препращащи приложения / тестови фикстури. | | `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Синтезира заглавките за идентичност на OpenCode CLI (User-Agent, x-opencode-client/project, UUID идентификатори на заявката/сесията) при upstream заявки към opencode-go/zen, когато клиентът не ги е изпратил, така че Cloudflare да ги приема при изходящ трафик от VPS (#6210/#5997). Активирано по подразбиране от #10571; деактивирайте с `false`/`0`/`no`/`off`. | | `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | Потребителският агент по подразбиране, използван, когато `OPENCODE_SYNTHESIZE_CLI_HEADERS` е включена и не е зададено специфично за доставчика заместване чрез `_USER_AGENT`. Прилага се само към изпълнители на opencode. При заявка без ключ, която се проверява от сървъра нагоре по веригата, конфигурирана стойност, която не съдържа `opencode/= 1.17>`, се заменя с тази стойност по подразбиране, вместо заявката да бъде отказана. | | `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (включено) | `open-sse/utils/opencodeHeaders.ts` | Препраща заглавките за приписване на клиентското приложение (`x-session-id`, `x-title`, `http-referer`) към доставчиците нагоре по веригата, така че заявка, която започва в посочен инструмент, да запази идентичността си при преминаването през маршрутизатора (проверките на издателите в OpenRouter разчитат на тях). `0`/`false`/`no`/`off` запазва идентичността на регистъра/оператора и премахва предоставените от клиента стойности. Персонализираните заглавки, конфигурирани от оператора, винаги имат предимство пред стойностите на клиента. | | `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | Стойност за синтезираната заглавка `x-opencode-client`, когато `OPENCODE_SYNTHESIZE_CLI_HEADERS` е включена. | | `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | Стойност за синтезираната заглавка `x-opencode-project`, когато `OPENCODE_SYNTHESIZE_CLI_HEADERS` е включена. | | `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(не е зададено)_ | `open-sse/config/providerErrorRules.ts` | Ефективният набор от доставчици, чиито грешки нагоре по веригата се групират по изходящ IP адрес (една грешка 429 блокира всяка друга връзка, споделяща същия IP адрес). Ако не е зададено, се използва стойността по подразбиране за безплатния план `opencode,opencode-go,opencode-cli`; `none`/`off`/`false`/`0` деактивира изцяло каскадното действие; списък, разделен със запетаи, заменя набора. Платените планове се групират по акаунт нагоре по веригата и могат безопасно да го деактивират (#9611). | | `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(не е зададено)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Задайте `off`, за да спрете коригирането на тялото на OpenCode заявки без ключ (флага за поточно предаване и списъка с инструменти). Заглавките продължават да се прилагат. Стойността се прочита при всяка заявка, така че промяната влиза в сила незабавно. | | `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(не е зададено)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Разделени със запетаи имена на инструменти, които да бъдат декларирани в OpenCode заявка без ключ и без инструменти, когато за този модел все още не е наблюдавано нищо. При празна стойност се използва един заместващ инструмент, който моделът е инструктиран да не извиква. Най-много 32 записа, `[A-Za-z_][A-Za-z0-9_-]{0,63}`; невалидните записи се игнорират. | | `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | URL адрес на настройките на Ollama Cloud, използван за извличане на данни за квотата. Може да бъде заменен за междинни сървъри/тестови конфигурации. | | `OLLAMA_USAGE_COOKIE` | _(не е зададено)_ | `open-sse/services/usage.ts` | Бисквитка `__Secure-session` на Ollama Cloud, използвана за извличане на данни за квотата от страницата с настройки. Поверителна стойност; когато са конфигурирани няколко акаунта, предпочитайте полето за отделната връзка в таблото за управление. | | `OLLAMA_CLOUD_USAGE_COOKIE` | _(не е зададено)_ | `open-sse/services/usage.ts` | Алтернативна променлива на средата за бисквитката `__Secure-session` на Ollama Cloud. Поверителна стойност; когато са конфигурирани няколко акаунта, предпочитайте полето за отделната връзка в таблото за управление. | | `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(не е зададено)_ | `open-sse/services/usage.ts` | Алтернативна променлива на средата за бисквитката `__Secure-session` на Ollama Cloud, използвана преди по-кратките псевдоними. Поверителна стойност; когато са конфигурирани няколко акаунта, предпочитайте полето за отделната връзка в таблото за управление. | | `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | Крайна точка на CodeWhisperer (AWS Kiro) за ограниченията на потреблението. Може да бъде заменена за междинни сървъри/тестови конфигурации. | > [!IMPORTANT] > При внедряване зад обратен прокси сървър (nginx, Caddy) задайте `NEXT_PUBLIC_BASE_URL` на вашия стабилен публичен URL адрес (напр. `https://omniroute.example.com`), когато OAuth обратните извиквания или генерираните публични връзки трябва да използват това име на хост. Без тази настройка OAuth обратните извиквания може да са неуспешни, защото `redirect_uri` няма да съвпада, а генерираните публични връзки може да сочат към вътрешния origin на контейнера. > > Запазете `BASE_URL` като вътрешен loopback URL адрес или URL адрес на контейнера за задачи от сървър към сървър. Не използвайте браузърен `Origin` или публично име на хост за вътрешни самостоятелни заявки, съдържащи идентификационни данни. > > Удостоверените операции за запис от таблото за управление не изискват статичен публичен базов URL адрес: таблото за управление изпраща към същия origin небезопасни заявки с CSRF токен, обвързан със сесията. OmniRoute продължава да централизира валидирането на публичния origin за браузърни интеграции извън таблото за управление: изрично зададените чрез променливи на средата публични URL адреси се считат за доверени с приоритет; необработените заглавки `Forwarded` / `X-Forwarded-*` се игнорират, освен ако `OMNIROUTE_TRUST_PROXY` не е активирана и непосредственият прокси партньор не е маркиран с токен като доверен. Не използвайте настройките на CORS за коригиране на заявки от таблото за управление към същия origin; CORS е предназначен само за браузърни клиенти от друг origin. --- ## 8. Изходящо прокси Маршрутизирайте заявките към външни LLM доставчици през HTTP или SOCKS5 прокси за контрол на изходящия трафик, географско маршрутизиране или маскиране на IP адреса. `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` по подразбиране е `true`. Задайте го на `false`, `0`, `no` или `off`, за да наложите използването на HTTP/1.1 от диспечерите Undici в `open-sse/utils/proxyDispatcher.ts` и `open-sse/utils/proxyFetch.ts`: директен изходящ трафик, HTTP(S)/SOCKS проксита, междинни сървъри и техните повторни опити с нов сокет. Това запазва проверката на TLS сертификатите, удостоверяването пред прокси сървъра, ограниченията на връзките и настройките за поддържане на връзката активна. Рестартирайте OmniRoute след промяната, тъй като диспечерите се кешират, а агентите за междинните сървъри се създават при стартиране. Този превключвател не управлява TLS отпечатъците на wreq или специфичните за доставчика транспортни механизми. | Променлива | По подразбиране | Файл източник | Описание | | ---------------------------------------- | ----------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Активира SOCKS5 прокси агент за изходящи заявки. Деактивирайте го с `false`. | | `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | От страна на клиента | Информира клиентската страна за наличността на SOCKS5. | | `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Функционален флаг, активиран по подразбиране (вижте [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); заместваща стойност от БД на таблото за управление има приоритет). Прокси пуловете и ротацията за отделните акаунти спират повторното избиране за определен период на участник, който току-що е претърпял неуспех (отказана TCP проверка или 429 през него); периодът се удвоява при всяко повторение до достигане на горна граница. `false` възстановява обикновения избор. | | `SELECTOR_CONTROL_ALLOWLIST` | _(не е зададена)_ | `src/lib/proxySubscription/selectorGuard.ts` | Списък с разрешени цели за управление на селектора на локалното ядро извън loopback (хостове или IP адреси, разделени със запетаи/интервали; `*` разрешава LAN/частни мрежи, но никога адреси за метаданни/link-local). Loopback през http/https е разрешен по подразбиране. Стойност от БД на таблото за управление има приоритет пред тази променлива, когато е зададена и не е празна. | | `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Базов период (ms) за временното изключване при 429, удвояван при всяко повторение. Прочита се веднъж при стартиране. Ограничен е до `1000..3600000`; стойност извън диапазона или нечетима стойност води до използване на стойността по подразбиране с предупреждение. | | `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Горна граница (ms) за временното изключване при 429. Прочита се веднъж при стартиране. Ограничена е до `1000..3600000`; стойност извън диапазона или нечетима стойност води до използване на стойността по подразбиране с предупреждение. Когато горната граница е под базовата стойност, се използва стойността по подразбиране. Намаляването на горната граница също съкращава периода за забравяне на поредицата: записите се изчистват `2 x max` след изтичането. | | `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Функционален флаг с изрично активиране (вижте [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); заместваща стойност от БД на таблото за управление има приоритет). За доставчици, чиято квота е групирана по изходящ адрес, участник в пула, който споделя наблюдавания изходящ адрес на наскоро отказан участник, се класира непосредствено след изправните участници. Влияе само върху реда — никога не води до изключване. Изисква `PROXY_SKIP_RECENTLY_FAILED`, който генерира използвания сигнал за отказ. | | `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Прозорец за ограничаване на повторенията (ms), който ограничава повтарящите се webhook известия `proxy.set_aside` за всеки участник в пула, така че поредица от откази да изпраща едно събитие. Прочита се при всяко изпращане. Ограничен е до `1000..3600000`; стойност извън диапазона или нечетима стойност води безшумно до използване на стойността по подразбиране. | | `HTTP_PROXY` | _(не е зададена)_ | Стандарт на Node.js | HTTP прокси за изходящи заявки. | | `HTTPS_PROXY` | _(не е зададена)_ | Стандарт на Node.js | HTTPS прокси за изходящи заявки. | | `ALL_PROXY` | _(не е зададена)_ | Стандарт на Node.js | Универсално прокси (поддържа `socks5://`). | | `OMNIROUTE_PROXY_ECHO_URL` | _(не е зададено)_ | `src/lib/proxyEchoTarget.ts` | Фиксира целта за установяване на изходящия IP адрес, използвана от проверките на прокси изходящия трафик, към един URL адрес. Когато не е зададено, проверката опитва първо `api64.ipify.org`, а след това `api4.ipify.org`, така че тунелите само с IPv4 да не бъдат погрешно отчетени като неработещи (#9694). | | `NO_PROXY` | _(не е зададено)_ | Стандарт на Node.js | Разделени със запетаи имена на хостове/IP адреси, за които проксито да бъде заобикаляно. | | `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Максимален брой едновременни сокети за всеки кеширан диспечер на HTTP/SOCKS прокси. Дълготрайните SSE потоци, като Codex `/v1/responses`, се нуждаят от повече от една връзка, когато няколко заявки използват едно и също прокси на ниво акаунт. Стойностите над `256` се ограничават до тази стойност. | | `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Време за изчакване в ms за установяване на SOCKS5 връзка. Увеличете го, когато един хост на жилищен шлюз е подложен на висока едновременност (напр. 100 едновременни заявки) — действителното установяване на връзка може да отнеме над 10s при претоварен пул, въпреки че проксито е достъпно, което иначе се проявява като погрешно съобщение `[Proxy Fast-Fail] Proxy unreachable`. Ограничено до `120000`. | | `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Когато е `false` (по подразбиране), заявка, чието зададено прокси не може да бъде разрешено, се **отказва (затворен режим при грешка)**, вместо да преминава към директна връзка — това предотвратява изтичането на реалния IP адрес. Задайте `true`, за да възстановите наследения резервен режим DIRECT. | | `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Имитира TLS отпечатък чрез wreq-js (имитира Chrome 124). Противодейства на блокирането чрез JA3/JA4. | | `TLS_FINGERPRINT_PROVIDERS` | _(не е зададено)_ | `open-sse/utils/proxyFetch.ts` | Разделен със запетаи списък с разрешени доставчици за новото прокси TLS маршрутизиране (`open-sse/utils/proxyFetch.ts`). Директният TLS запазва наследеното си поведение, когато стойността не е зададена; само тези доставчици се маршрутизират през моста за отпечатък на Chrome 124. Groq (`api.groq.com`) е изключен дори когато списъкът с разрешени доставчици не е зададен, тъй като Chrome JA3 задейства Cloudflare 1010, докато нативният undici достига API. | | `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Позволява на браузърния контекст на Playwright за Claude Turnstile да игнорира грешки в HTTPS сертификатите. | ### Сценарии | Сценарий | Конфигурация | | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **SOCKS5 през SSH тунел** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` | | **Корпоративно HTTP прокси** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` | | **Защита срещу снемане на отпечатък** | `ENABLE_TLS_FINGERPRINT=true` — изисква `wreq-js` (включен) | | **Контролиран изходящ трафик / без директен достъп** | Оставете `PROXY_FAIL_OPEN=false` (по подразбиране). Заявките завършват с твърда грешка, когато проксито е недостъпно, вместо да изтичат през директна връзка. | | **Наследен режим / разработка — разрешаване на директна резервна връзка** | `PROXY_FAIL_OPEN=true`. Възстановява поведението отпреди усилването на защитата: използва се директна връзка, когато разрешаването на проксито е неуспешно. | > **Бележка (заобикаляне на валидирането на NVIDIA — #3226):** Крайната точка за валидиране на API ключове на NVIDIA > блокира, когато е маршрутизирана през глобалното извличане с прокси/TLS корекция (undici dispatcher → 504). > `src/lib/providers/validation.ts::directHttpsRequest()` умишлено заобикаля > прокси корекцията за това единствено валидиращо извикване чрез `safeOutboundFetch({ bypassProxyPatch: true })`. > Това е документирано изключение с ограничен обхват — то **не** засяга изходящия трафик за чат/употреба. > Обхватът на заобикалянето е фиксиран чрез `tests/unit/proxy-bypass-scope-guard-3226.test.ts`. --- ## 9. Интеграция на CLI инструменти Управлява начина, по който OmniRoute открива и стартира спомагателни CLI процеси (Claude Code, Codex и др.). | Променлива | По подразбиране | Файл източник | Описание | | --------------------------------- | -------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = търсене в системния PATH; `manual` = използване само на изрично зададени пътища. | | `CLI_EXTRA_PATHS` | _(не е зададено)_ | `src/shared/services/cliRuntime.ts` | Допълнителни записи в PATH за откриване на изпълними CLI файлове (разделени с двоеточие). | | `CLI_CONFIG_HOME` | _(не е зададено)_ | `src/shared/services/cliRuntime.ts` | Замества началната директория за четене на CLI конфигурации (`~/.claude`, `~/.codex`). Трябва да е абсолютен път в началната директория на процеса — **или**, в контейнер, bind-mounted път (така работи `/host-home`). Всичко останало използва началната директория като резервен вариант. | | `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Позволява на OmniRoute да записва CLI конфигурационни файлове (обновяване на токени, данни за сесии). Задайте `false`, за да може всеки опит за запис в CLI конфигурация да завършва с изрична грешка „записването е деактивирано“. | | `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Claude CLI. | | `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Codex CLI. | | `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Droid CLI. | | `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на OpenClaw CLI. | | `CLI_CURSOR_BIN` | `agent`, след това `cursor` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Cursor agent. Ако не е зададен, откриването първо опитва `agent`, а след това използва `cursor` като резервен вариант. | | `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Cline CLI. | | `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на 5dive CLI. | | `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | Директорията за системното състояние на 5dive (профили за удостоверяване, притежавани от root); съответства на собствената стойност по подразбиране на STATE_DIR в 5dive. | | `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Continue CLI. | | `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Qoder CLI. | | `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Qwen Code CLI. | | `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Aider CLI. | | `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Goose CLI. | | `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Google Gemini CLI — само за откриване от страна на сървъра и проверки на изправността; `omniroute run gemini` намира изпълнимия файл `gemini` чрез системния PATH. | | `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на Kilo Code CLI. | | `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | Персонализиран път до изпълнимия файл на OpenCode CLI. | | `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Hermes. Споделя се от двата записа в каталога (`hermes` и `hermes-agent`). | | `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на ForgeCode CLI. | | `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на jcode CLI. | | `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на DeepSeek TUI. | | `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на CodeWhale CLI. | | `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Smelt CLI. | | `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Pi (pi-coding-agent). | | `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Crush CLI. | | `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на агента Oh My Pi (`omp`). | | `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Letta CLI. | | `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Prime Agent (Prime Intellect). | | `CLI_WINDSURF_BIN` | _(няма)_ | `src/shared/services/cliRuntime.ts` | Персонализиран път до двоичния файл на Windsurf. Windsurf се предоставя **без команда по подразбиране** — откриването на двоичния файл остава деактивирано, докато тази стойност не бъде зададена. | | `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Персонализиран път до двоичния файл на Devin CLI (v3.8.0). Използва се от изпълнителя Windsurf/Devin. | | `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | `ide_version` на Devin Desktop. Заместващите стойности трябва да използват формат `x.y.z`; при невалидни стойности се използва проверената стойност по подразбиране. | | `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | Вградената `extension_version` на Codeium/language-server, която е различна от `ide_version` на Desktop. Заместващите стойности трябва да използват формат `x.y.z`; при невалидни стойности се използва вградената стойност по подразбиране. | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Заместваща стойност за Devin CLI само за агентния мост. Изпълнителят приема единствено локалния ACP stdio източник. | | `DEVIN_AGENTIC_HOME` | _(задължително)_ | `open-sse/executors/devin-cli-agentic.ts` | Абсолютен изолиран път до началната директория за агентния подпроцес на Devin; приеманите пътища на моста са `/home/bridge` и локални за задачата пътища `.sandbox` (в Windows — `C:\...\.sandbox\...`). | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Максимална продължителност на един ACP ход на Devin, преди мостът да прекрати дъщерния процес и да върне изрично съобщение за изтекло време. | | `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | Основен псевдоним на модела Claude Code за изолирания мост. Активната тестова среда заменя примера с модел, върнат от текущия акаунт в Devin. | | `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Псевдоним на изолирания мост, използван, когато Claude Code заяви своя модел Sonnet по подразбиране. | | `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Псевдоним на изолирания мост, използван, когато Claude Code заяви своя модел Opus по подразбиране. | | `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Псевдоним на изолирания мост, използван, когато Claude Code заяви своя модел Haiku по подразбиране. | | `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Псевдоним на изолирания мост, използван за подагентите на Claude Code. | | `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Незадължително заместване на API за управление на места на Codeium, използван от квотата на Devin CLI (`GetUserStatus`). | | `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Заместване с абсолютен път до изпълнимия файл на Augment (Auggie) CLI, използван от локалния доставчик `auggie`. Ако не е зададено, се използва `CLI_AUGGIE_BIN`, а след това се извършва търсене в PATH. | | `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Алтернативно заместване на пътя до изпълнимия файл на Augment (Auggie) CLI (проверява се след `AUGGIE_BIN`). | | `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Изпълним файл, използван за stdio клиента на локалния доставчик `zcode`. Ако не е зададен, се използва `zcode` от PATH. | | `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | JSON масив (≤16 низа) с допълнителни аргументи, подавани към изпълнимия файл `zcode` при стартиране чрез `cliTools`. | | `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Работна директория за подпроцеса на сървъра на приложението ZCode. | | `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Заместване на идентификатора на доставчика, изпращан към сървъра на приложението. | | `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Коренова директория на средата за изпълнение на сървъра на приложението ZCode (където се намират включените `node` и `zcode-server.cjs`). | | `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Изпълним файл на Node, използван за хостване на сървъра на приложението ZCode. | | `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Входен скрипт на сървъра на приложението, използван за хостване на сървъра ZCode. | | `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Време за изчакване при стартиране (ms), след което стартирането на сървъра на приложението ZCode се счита за неуспешно. | | `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | Време за изчакване на RPC за всяка заявка (ms) при извикване на сървъра на приложението ZCode. | | `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Максимална продължителност (ms) на един ход на ZCode, преди надзорният процес да прекрати изпълнението поради изтичане на времето. | | `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Интервал на проверка (ms) за завършването на ход на ZCode. | | `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Начална директория на Hermes Agent, в която OmniRoute чете/записва конфигурацията на Hermes CLI. Съответства на променливата на средата, задавана от инсталатора на Hermes за PowerShell под Windows (`%LOCALAPPDATA%\hermes`). | ### Автоматично синхронизиране на CLI профили Тези флагове за функционалности се активират изрично и по подразбиране са изключени. Те могат също да се превключват от таблото за управление на CLI Code. | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------------- | --------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | След синхронизиране на моделите на доставчик автоматично презаписва профилните файлове `~/.codex/*.config.toml` от актуалния каталог. Изисква `CLI_ALLOW_CONFIG_WRITES`; никога не променя активната/подразбиращата се конфигурация на Codex, удостоверяването, настройките на Codex-lb или избора на доставчик. | | `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | След синхронизиране на моделите на доставчик автоматично презаписва профилните файлове на Claude Code `~/.claude/profiles//settings.json` от актуалния каталог. Изисква `CLI_ALLOW_CONFIG_WRITES`; никога не променя активната/подразбиращата се конфигурация на Claude, удостоверяването или избора на доставчик. | ### Пример с Docker ```bash # Монтирайте изпълнимите файлове на хоста в контейнера и укажете на OmniRoute къде се намират: 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` влиза в сила само когато пътят действително е монтиран от хоста чрез bind mount — използвайте го с монтирания от типа `~/.codex:/host-home/.codex:rw` (вижте профила `host` в `docker-compose.yml`). Път, който не се намира нито в домашната директория на потребителя в контейнера, нито в bind mount, се игнорира, защото записаното там ще бъде изгубено при повторното създаване на контейнера. Образът се изпълнява като `USER node`, затова немонтирана директория `/root` **не** е валидна замяна. | Променлива | По подразбиране | Файл източник | Описание | | ---------------------------------------- | --------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CONTAINER` | _(автоматично)_ | `src/shared/utils/containerEnv.ts` | Принудително включване (`1`/`true`) или изключване (`0`/`false`) на откриването на контейнер. Необходимо е само при среди за изпълнение, които автоматичното откриване пропуска. | | `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Разрешава записването на конфигурацията на CLI инструмента в немонтиран път в контейнера. Еквивалентът в CLI е `--allow-container-write`. | ### Помощни променливи за CLI изпълнимия файл (`omniroute`) Тези променливи настройват поведението на самия CLI изпълним файл `omniroute` (а не откриването на страничния контейнер по-горе). | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------------- | --------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_LANG` | _(системна стойност)_ | `bin/cli/i18n.mjs` | Принудително задава езика на изхода от CLI. Локал по BCP-47 (напр. `en`, `pt-BR`). Има предимство пред системните променливи за локала (LC_ALL, LC_MESSAGES). | | `OMNIROUTE_SHOW_LOG` | _(незададено)_ | `bin/cli/runtime/processSupervisor.mjs` | Задайте `1`, за да препратите stdout/stderr на сървъра към терминала в контролиран режим. Еквивалентно на флага `--log` за `omniroute serve`. | | `OMNIROUTE_CLI_TOKEN` | _(незададено)_ | `bin/cli/api.mjs` | Токен за машинно удостоверяване, добавян като заглавка `x-omniroute-cli-token`. Генерира се автоматично в задача 8.12. | | `GEMINI_CLI_HOME` | _(незададено)_ | `bin/cli/commands/setup-gemini.mjs` | Постоянна коренова домашна директория на Gemini; еднократното изпълнение използва временна изолирана домашна директория. | | `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Гратисен период в милисекунди преди принудителното прекратяване на дъщерен CLI процес, към който е изпратен сигнал. | | `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(незададено)_ | `bin/omniroute.mjs` | Задайте на 1 заедно с изрично зададена DATA_DIR, за да пропуснете файла с променливи на средата за директорията с данни на потребителя по подразбиране. | | `OMNIROUTE_SYNC_TOKEN` | _(незададено)_ | `bin/cli/commands/sync.mjs` | Токен за синхронизиране за `omniroute sync bundle` (`GET /api/sync/bundle` приема само токен за синхронизиране, а не API ключ). Еквивалентно на `--token`. | | `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | HTTP интервал за изчакване (ms) за всеки опит при заявки от CLI → сървъра. | | `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Максималното време (ms), през което CLI изчаква крайната точка за проверка на състоянието на сървъра, преди да изведе предупреждение за изтекло време. Полезно при бавно първоначално стартиране (напр. Windows). Може да се зададе и чрез `--ready-timeout`. | | `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | Задайте `1`, за да извеждате диагностична информация за повторните опити и забавянията към stderr по време на CLI команди. | | `OMNIROUTE_PLUGIN_PATH` | _(незададено)_ | `bin/cli/plugins.mjs` | Персонализирана директория за откриване на CLI приставки (пакети `omniroute-cmd-*`). Когато не е зададена, по подразбиране се използва `~/.omniroute/plugins/`. Само за CLI — тя никога не достига до сървърния скенер за приставки, който се задава чрез `OMNIROUTE_PLUGINS_DIR` (раздел 2). | | `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(незададено)_ | `bin/omniroute.mjs` | Потиска известието на CLI за актуализация при приключване на процеса, когато е зададена произволна непразна стойност. Известието остава независимо деактивирано в CI, тих режим и режими с нетекстов изход. | | `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(изведено)_ | `bin/cli/commands/doctor.mjs` | URL адрес за проверка на активността, проверяван от `omniroute doctor`. Програмната опция `livenessUrl` има предимство; в противен случай тази стойност се използва дословно. Ако не е зададена, CLI извежда крайната точка `/api/health/degradation` на локалното табло. | | `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Път до каталога с доставчици, използван от CLI командите за доставчици. Програмната опция `catalogPath` има предимство. Абсолютните пътища се използват без промяна; относителните пътища се разрешават спрямо корена на проекта. Ако не е зададена, CLI използва директорията с константи за доставчиците, като остарелият файл `providers.ts` служи като резервен вариант. | | `OMNIROUTE_PROVIDER_TEST_MODEL` | _(по подразбиране за доставчика)_ | `bin/cli/provider-test.mjs` | Глобален резервен модел за CLI тестове на връзката с доставчика. Редът на приоритет е: конфигурираният модел на връзката, специфичната за доставчика замяна на модела, тази стойност и след това вграденият тестов модел на доставчика. | --- ## 10. Интеграции с вътрешен агент и MCP | Променлива | Стойност по подразбиране | Файл източник | Описание | | ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_BASE_URL` | автоматично откриване | `open-sse/mcp-server/server.ts` | Изричен URL, чрез който инструментите MCP/A2A достигат до OmniRoute. Заменя автоматичното откриване на localhost. | | `OMNIROUTE_API_KEY` | _(не е зададена)_ | Модули MCP/A2A | API ключ за извиквания към вътрешния MCP инструмент и A2A уменията. | | `OMNIROUTE_API_KEY_ID` | _(не е зададена)_ | `open-sse/mcp-server/audit.ts` | Идентификатор на ключа за приписване на записи в одитния журнал на MCP. | | `ROUTER_API_KEY` | _(не е зададена)_ | Наследена функционалност | Наследен псевдоним за `OMNIROUTE_API_KEY`. | | `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | Брой дни, за които историята на A2A задачите се съхранява в локалната база данни, преди ежедневното изчистване да изтрие даден ред. Незададена, нечислова стойност или `<= 0` води до използване на `30`. | | `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | Авариен прекъсвач за функцията за наблюдаемост на попаденията в паметта на A2A. Задайте `0`, за да пропуснете изцяло търсенето в паметта за дадена задача; всяка друга стойност (включително незадана) запазва функцията активирана. | | `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Активира офлайн/локалната крайна точка на Issue Agent за записана класификация. Оставете я деактивирана, освен ако изрично не изпълнявате локални работни процеси за записана класификация. | | `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(не е зададена)_ | `src/lib/issueAgent/execution.ts` | Време за изчакване (ms) за еднократно изпълнение на записана класификация от Issue Agent. Ограничава се до вътрешен максимум; при незадана или невалидна стойност се използва вградената стойност по подразбиране. | | `OMNIROUTE_CONTEXT` | _(активен контекст)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Контекст/профил за отдалечен режим на CLI за командите `omniroute`; заменя активния контекст в локалното хранилище за контексти. Еквивалентно на `--context `. | | `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Деактивира незадължителния бекенд `keytar` на системното хранилище за ключове за идентификационните данни на CLI контекста. Когато е активирано, идентификационните данни остават в `config.json` с режим `0600`, а CLI извежда еднократно предупреждение за използвания резервен вариант; предназначено е за целенасочена работа в среди без графичен интерфейс или в контейнери. | | `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Налага контрол на достъпа въз основа на обхвати при извиквания на MCP инструменти. | | `OMNIROUTE_MCP_SCOPES` | _(всички)_ | `open-sse/mcp-server/server.ts` | Обхвати, разделени със запетаи: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | Компресира описанията на MCP инструментите преди сериализирането на манифеста. Стойности за активиране: `1`, `true`, `on`. | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | Алгоритъм/профил за компресиране. Стойности за деактивиране: `0`, `false`, `off`. | | `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | Лимит за прекъсване (ms) за вътрешните управленски заявки за четене на MCP сървъра (състояние, устойчивост, комбинации, квота, използване). | | `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Бюджет за прекъсване (ms) за MCP преходи, които изчакват доставчик (`route_request`, `web_search`, `web_fetch`). | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | Максимален брой екземпляри на индекса на локалния корпус, кеширани в паметта (LRU, по един за всяка индексирана основна директория). Ограничава се до минимум `1`. | | `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | Интервал за синхронизиране на каталога с модели в часове. | | `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | Интервал за проверка на ограниченията на честотата и квотите на доставчика. | | `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Интервал (ms) между последователни извличания на OAuth квоти при групово синхронизиране; OAuth връзките се извличат една по една, за да се избегне претоварване на услугата нагоре по веригата. `0` изключва това поведение (едновременно изпълнение). | | `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Минимален интервал (ms) между последователни извличания на квоти от услугата нагоре по веригата по пътя за предварителна проверка/наблюдение на всяка заявка; разпределя едновременните мрежови повиквания във времето, така че множество акаунти от един IP да не претоварват услугата нагоре по веригата. Свързано е с механизмите за извличане на квоти на Codex (`/wham/usage`), DeepSeek, Bailian (и двете места за извличане), OpenCode и Crof (#6009, #6911). Общият път за диспечиране `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/и др.) все още не е обхванат — проследява се отделно. Попаденията в кеша не се засягат. `0` деактивира; ограничава се в диапазона `0..5000`. | | `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Забавяне (ms) преди обновяване на ограниченията на доставчика след действително събитие на използване, което дава време на API за квоти нагоре по веригата да регистрира потреблението. | | `OMNIROUTE_LOGIN_BROWSER_PATH` | автоматично откриване | `open-sse/services/adobeFireflyBrowserLogin.ts` | Абсолютен път до изпълним файл на системния Chrome или Edge, използван за интерактивно влизане в Adobe Firefly и фоново подновяване извън екрана. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | активирано | `open-sse/services/adobeFireflySession.ts` | Поддържа актуално състоянието на IMS и риска на браузъра чрез Chrome CDP сесии, обвързани с акаунта. Задайте `0`, за да деактивирате подновяването чрез браузъра. | | `ADOBE_FIREFLY_SESSION_DISK` | активирано | `open-sse/services/adobeFireflySession.ts` | Запазва възстановените Adobe сесии в `DATA_DIR` между рестартиранията на процеса. Задайте `0`, за да съхранявате сесиите само в паметта. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Минимален интервал в милисекунди между изпращанията на заявки за генериране към Adobe Firefly; `0` деактивира интервала. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Допълнителен период на изчакване в милисекунди след всяко трето успешно изпращане към Adobe. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | Базово изчакване в милисекунди след временни отговори 408 от Adobe; комбинира се с интервала между изпращанията за максимум пет опита. | | `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Деактивира всички фонови услуги (синхронизиране, ценообразуване, обновяване на моделите). Полезно за CI/тестове. | | `OMNIROUTE_HEADLESS` | _(не е зададено)_ | `src/lib/system/headless.ts` | Стартиране само на прокси механизма: пропуска незадължителните подсистеми, `/dashboard` → 404. Същото като `omniroute serve --headless`. Вижте [HEADLESS.md](../guides/HEADLESS.md). | | `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(не е зададено)_ | `src/lib/config/runtimeSettings.ts` | Принудително активира фоновите задачи при откриване на автоматизиран тест. Задайте `1`, за да замените тестовата евристика. | | `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | Честота на проверката за нулиране на бюджета (ms). Минимум `10000`. | | `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | Честота за проактивно възстановяване след временно блокиране на връзката (ms): валидира повторно връзките, чийто преходен период `rate_limited_until` е изтекъл, извън критичния път на заявката. Минимум `5000`. | | `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | Деактивира планировчика за проактивно възстановяване след временно блокиране на връзката (отложеното възстановяване в `getProviderCredentials` продължава да се прилага). | | `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Честота на почистване на кеша за разсъждения (ms). Минимум `60000`. | | `OMNIROUTE_REASONING_MIN_BUDGET` | _не е зададено_ (деактивирано) | `open-sse/services/reasoningTokenBuffer.ts` | Незадължителен минимум за бюджетите на изхода на модели за мислене: подадената от извикващия страна стойност `max_tokens` в `[256, минимум)` се увеличава до минимума (ограничена от максималния изход на модела). Незададена стойност = клиентските бюджети никога не се увеличават (#9507). | | `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _не е зададено_ (деактивирано) | `open-sse/services/learnedReasoningEffortCaps.ts` | Незадължителен списък от идентификатори на доставчици, разделени със запетаи (или `*`): когато грешка 400/422 за `reasoning_effort` не посочва приет набор, прави еднократен повторен опит с едно ниво по-ниско (никога под `low`) и запомня това ниво само ако пробната заявка получи отговор (#14895). | | `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Cron израз (UTC) за задачата за експортиране на регистрите на извикванията, която обработва всяко активирано местоназначение за експортиране на регистри. | | `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Интервал на проверка (ms) за горещо презареждане на конфигурацията. Стойности под `1000` се отхвърлят. | | `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(активирано)_ | `src/lib/db/apiKeys.ts` | Задайте `1`, за да заобиколите поддържания от Redis кеш за удостоверяване с API ключове (принуждава четене от БД). | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | Доверява се на управляваните от потребителя правила за филтриране на RTK проекти без строги проверки на подписа. | | `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | Ограничение на броя знаци за проактивното съкращаване на резултатите от инструменти в Lite, когато `lite.maxToolLength` не е зададено. Диапазон 256–1000000. Настройката от таблото за управление има предимство пред тази променлива на средата. | | `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | Максимален брой едновременно работещи синхронни RTK/Caveman работници; излишните задачи изчакват по FIFO. | | `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Време за изчакване за всяка задача в милисекунди. Работниците, надхвърлили това време, се прекратяват и заявката продължава без промени. | | `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | Продължителност на неактивност в милисекунди, след която неизползван работник за компресиране се прекратява. | | `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Ограничение в MB за купчината от старото поколение на V8 за всеки работник за компресиране във всички режими (минимум `128`). Задача, която го надхвърли, продължава без компресиране, вместо да увеличава купчината на шлюза. | | `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Главен превключвател за прекъсвача на веригата за всяка машина в съставния конвейер T02. **Незадължително (изключено по подразбиране)** — когато е включен, машина, която многократно хвърля изключения при различни заявки, се пропуска (продължава без промени) за период на изчакване; изключено = поведение, идентично байт по байт с предишната реализация. | | `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Брой последователни неуспехи при различни заявки, преди прекъсвачът на дадена машина да се отвори. | | `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Брой милисекунди, през които отворен модул се пропуска, преди да бъде направена проба в полуотворено състояние. | | `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | Нарастване на обратната връзка при извличане за T08/H8 CCR: всяко предходно извличане на съхранен блок увеличава линейно ефективната му стойност на `minChars` (често извличаното съдържание се компресира по-малко; `>=3` извличания = никога не се компресира). `1` деактивира нарастването (само двоично пропускане при прага). | | `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | Устойчиво хранилище за блокове на CCR (#9061). Архивира хранилището в паметта чрез SQLite, така че даден блок да оцелее след изваждане от LRU кеша, изтичане на TTL, рестартиране или извличане, попаднало на друг екземпляр. Задайте `false`, за да съхранявате блоковете само в паметта. Блоковете над 512KB и облачните среди за изпълнение остават само в паметта независимо от настройката. | | `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Главен превключвател за замразяване на префикс според наблюдаваната употреба в T08/H5. **С изрично включване (изключено по подразбиране)** — когато е включено, системна подкана, наблюдавана `>=` прага, се третира като стабилен кешируем префикс и се запазва от компресиране дори при доставчици, които статичната евристика за кеширане пропуска (замразяването само _запазва_, никога не променя). | | `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Брой наблюдения на системна подкана, преди тя да бъде третирана като замразен стабилен префикс. | | `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Задава се на `true` от скрипта за първоначална настройка след нейното завършване. Управлява видимостта на съветника за настройка. | | `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Аварийна опция: позволява на тялото на заявката да замени полето за проект на Antigravity. | | `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Политика за кредитите на Google One AI: `off` никога не добавя кредити, `retry` ги добавя веднъж след отговаряща на условията грешка 429 за квота, а `always` ги добавя при първата заявка. | | `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Позволява на преобразувателя на заявки на Antigravity да пропусне строгата проверка на подписа на CLI заявката, когато отдалечената услуга отхвърля реални подписи (режим за отстраняване на грешки/остарял CLI). Стойност, различна от нула, активира заобикалянето. | | `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | Заменя пътя до файла с токен на Antigravity CLI (agy) за автоматичното откриване и импортиране на локално влизане. | ### OAuth CLI мост (вътрешен) | Променлива | По подразбиране | Файл източник | Описание | | ------------------- | ----------------- | ------------------------------- | ---------------------------------------------------------------------- | | `OMNIROUTE_SERVER` | auto-detect | `src/lib/oauth/config/index.ts` | URL адрес на сървъра за моста за удостоверяване между CLI и OmniRoute. | | `OMNIROUTE_TOKEN` | _(не е зададено)_ | `src/lib/oauth/config/index.ts` | Токен за удостоверяване за CLI моста. | | `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | Потребителски идентификатор за сесиите на CLI моста. | | `SERVER_URL` | _(не е зададено)_ | `src/lib/oauth/config/index.ts` | Остарял псевдоним за `OMNIROUTE_SERVER`. | | `CLI_TOKEN` | _(не е зададено)_ | `src/lib/oauth/config/index.ts` | Остарял псевдоним за `OMNIROUTE_TOKEN`. | | `CLI_USER_ID` | _(не е зададено)_ | `src/lib/oauth/config/index.ts` | Остарял псевдоним за `OMNIROUTE_USER_ID`. | --- ## 11. Идентификационни данни за OAuth доставчици Вградени идентификационни данни за **разработка на localhost**. За отдалечени внедрявания регистрирайте собствени данни в конзолата за разработчици на всеки доставчик. | Променлива | Доставчик | Бележки | | ------------------------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Публичен клиент — не е необходима тайна. | | `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Заменя URI адреса за пренасочване. По подразбиране: `https://platform.claude.com/oauth/code/callback` | | `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Публичен клиент. | | `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Изисква съответстваща стойност за `_SECRET`. | | `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — | | `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | Публичен клиент. | | `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | Незадължителна заместваща стойност за идентификатора на публичния клиент на Muse CLI за потока за устройства. Оставете ненастроено, за да използвате вградения публичен клиент. | | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Изисква съответстваща стойност за `_SECRET`. | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Публичен клиент. | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Незадължителна заместваща стойност за идентификатора на OAuth клиента на GitHub Enterprise Copilot. Ако не е зададена, се използва публичната стойност по подразбиране на `GITHUB_OAUTH_CLIENT_ID`. | | `COPILOT_INTEGRATION_ID` | GitHub Copilot | Незадължителна заместваща стойност за идентификатора на клиентската интеграция на GitHub Copilot, изпращан в заглавките `Copilot-Integration-Id` и `Editor-Plugin-Version`. По подразбиране е `copilot-developer-cli`. | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | Резервен API ключ, използван от `open-sse/executors/devin-cli.ts`, когато няма налични идентификационни данни за конкретната връзка. Незадължителен. | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Персонализиран път до изпълнимия файл на Devin CLI (`devin`). Разпознава се от `open-sse/executors/devin-cli.ts`. | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Идентификатор на OAuth клиент за GitLab Duo. Регистрирайте приложение на `https://gitlab.com/-/profile/applications` с URI за пренасочване `/callback` и обхвати `api, read_user, openid, profile, email`. Ако не е зададен, се използва `GITLAB_OAUTH_CLIENT_ID`. | | `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Тайна на OAuth клиента за GitLab Duo. Незадължителна — потокът PKCE не изисква тайна. Ако не е зададена, се използва `GITLAB_OAUTH_CLIENT_SECRET`. | | `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Заменя базовия URL адрес на GitLab (самостоятелно хостван GitLab). По подразбиране е `https://gitlab.com`. Ако не е зададен, се използва `GITLAB_BASE_URL`. | | `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Остаряла резервна стойност за `GITLAB_DUO_BASE_URL`. Използва се, когато вариантът с `_DUO_` не е зададен. | | `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Остаряла резервна стойност за `GITLAB_DUO_OAUTH_CLIENT_ID`, използвана от `src/lib/oauth/constants/oauth.ts`. | | `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Остаряла резервна стойност за `GITLAB_DUO_OAUTH_CLIENT_SECRET`, използвана от `src/lib/oauth/constants/oauth.ts`. | | `QODER_OAUTH_CLIENT_SECRET` | Qoder | — | | `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Задайте, за да активирате Qoder OAuth. | | `QODER_OAUTH_TOKEN_URL` | Qoder | — | | `QODER_OAUTH_USERINFO_URL` | Qoder | — | | `QODER_OAUTH_CLIENT_ID` | Qoder | — | | `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Резервен директен API ключ (заобикаля OAuth). | | `QODER_CLI_WORKSPACE` | Qoder | Идентификатор на работното пространство за Qoder CLI. | | `OMNIROUTE_QODER_WORKSPACE` | Qoder | Псевдоним за `QODER_CLI_WORKSPACE`. | | `QODER_CLI_CONFIG_DIR` | Qoder | Замества директорията за конфигурация на Qoder CLI (изолирана PAT сесия, предотвратява презаписването на вход през браузър). | | `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Frontend `tk` токен, който да се изпраща като `validated` към `/api/chat`. Задължителен е, когато Blackbox налага съвпадение на токените; в противен случай OmniRoute използва като резервен вариант случаен UUID. Вижте проблем #2252. | | `VISION_BRIDGE_BASE_URL` | Предпазен механизъм Vision Bridge | Съвместим с OpenAI базов URL адрес за извиквания към vision-bridge, които не са към Anthropic. По подразбиране се използва URL адресът от остарялата променлива на средата за OpenAI или api.openai.com. Насочете го към собствения `/v1` цикъл на OmniRoute или към произволна крайна точка, съвместима с OpenAI (Gemini OpenAI-compat, OpenRouter). Проблем #2232. Когато URL адресът е собственият `/v1` на OmniRoute, подзаявката за описание изпраща `x-omniroute-admission-bypass: internal` и се удостоверява с определените идентификационни данни за собствения цикъл (маркерът `sk_omniroute` в локален режим или `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350), така че внедряванията с `REQUIRE_API_KEY=true` да работят. | | `VISION_BRIDGE_API_KEY` | Предпазен механизъм Vision Bridge | API ключ за URL адреса по-горе. Има предимство пред специфичните за доставчика променливи на средата за OpenAI / Google при извиквания към vision-bridge, които не са към Anthropic. Моделите на Anthropic запазват своя отделен път за Anthropic ключ. Проблем #2232. | | `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Предпазен механизъм Vision Bridge | Колко дълго резултат от маршрутизиране „няма използваем кандидат“ се кешира, в ms (по подразбиране `30000`). Невалидните или отрицателните стойности се заменят със стойността по подразбиране; `0` деактивира отрицателния кеш. Източник: `src/lib/guardrails/visionBridgeRouter.ts`. | > [!WARNING] > > 1. Отидете в [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) > 2. Създайте OAuth 2.0 Client ID (тип: „Уеб приложение“) > 3. Добавете URL адреса на сървъра си като оторизиран URI за пренасочване > 4. Заменете стойностите на идентификационните данни в `.env`. --- ## 12. Замяна на User-Agent за доставчици Заменете заглавката `User-Agent`, изпращана към всеки външен доставчик. Тя се определя динамично по време на изпълнение от базовия клас на изпълнителя: ``` process.env[`${PROVIDER_ID}_USER_AGENT`] ``` > **Източник:** `open-sse/executors/base.ts` → `buildHeaders()` | Променлива | Стойност по подразбиране | Кога да се актуализира | | -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Когато Anthropic пусне нова версия на CLI | | `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Задайте на `1`/`true`, за да препращате дословно към Anthropic имената на инструменти от платформи на трети страни и по двата пътя към Anthropic (вграден OAuth и CLIProxyAPI). По подразбиране изпълнителят детерминистично задава псевдоними на имената на инструменти, които не са от Claude Code (канонично съпоставяне на Claude Code, когато съществува такова, в противен случай PascalCase), и ги възстановява в отговора чрез `_toolNameMap`, така че платформи с инструменти в snake_case да не бъдат отхвърляни като разпознати клиенти на трети страни. Само за отстраняване на грешки. | | `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | Когато OpenAI актуализира Codex CLI | | `CODEX_CLIENT_VERSION` | `0.155.0` | Заменете версията на клиента Codex независимо от пълния низ на UA | | `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | Заменете обявената версия на Claude Code независимо от `CLAUDE_USER_AGENT`. Anthropic ограничава достъпа до някои модели въз основа на тази стойност (#12417). | | `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Заменете 3-знаковия суфикс, който OmniRoute добавя към `cc_version=` в блока за таксуване на Claude. Увеличавайте го заедно с `CLAUDE_CODE_CLIENT_VERSION` — фиксирането само на версията обявява двойка `version.revision`, която не се генерира от нито един реален двоичен файл. | | `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | Заменете обявената версия на Copilot CLI независимо от `GITHUB_USER_AGENT` | | `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | Когато GitHub Copilot Chat бъде актуализиран | | `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | Когато Antigravity IDE бъде актуализирана | | `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | Когато Kiro IDE бъде актуализирана | | `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | Заменете `clientId` (публичен идентификатор) за социалния поток с код на устройство на Kiro | | `KIRO_VERIFY_FULL_CRC` | `false` | По избор: пълна проверка на CRC за всеки кадър в потока от събития на Kiro (за отстраняване на грешки при повредени потоци) | | `QODER_USER_AGENT` | `Qoder-Cli` | Когато Qoder CLI бъде актуализиран | | `CURSOR_USER_AGENT` | `Cursor/3.3` | Когато Cursor бъде актуализиран | > [!TIP] > Можете да добавяте замени на User-Agent за **всеки** доставчик, като използвате шаблона `{PROVIDER_ID}_USER_AGENT`. Изпълнителят динамично конструира името на променливата на средата. --- ## 13. Съвместимост на CLI отпечатъка Когато е активирано, OmniRoute пренарежда HTTP заглавките и полетата в JSON тялото така, че да съответстват на точния подпис на официалните CLI инструменти. Това намалява риска акаунтът ви да бъде маркиран, като същевременно запазва IP адреса на прокси сървъра ви. **Източник:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts` ### По доставчик | Променлива | Активиране | Ефект | | ------------------------ | ---------- | --------------------------------------------- | | `CLI_COMPAT_CODEX` | `=1` | Имитира подписа на заявките на Codex CLI | | `CLI_COMPAT_CLAUDE` | `=1` | Имитира подписа на заявките на Claude Code | | `CLI_COMPAT_GITHUB` | `=1` | Имитира подписа на заявките на GitHub Copilot | | `CLI_COMPAT_ANTIGRAVITY` | `=1` | Имитира подписа на заявките на Antigravity | | `CLI_COMPAT_CURSOR` | `=1` | Имитира подписа на заявките на Cursor | | `CLI_COMPAT_KIMI_CODING` | `=1` | Имитира подписа на заявките на Kimi Coding | | `CLI_COMPAT_KILOCODE` | `=1` | Имитира подписа на заявките на Kilo Code | | `CLI_COMPAT_CLINE` | `=1` | Имитира подписа на заявките на Cline | ### Глобално | Променлива | Активиране | Ефект | | ---------------- | ---------- | ------------------------------------------------------------------------ | | `CLI_COMPAT_ALL` | `=1` | Активира съвместимостта на отпечатъка за **всички** доставчици наведнъж. | ### Замени на идентичността на Kimi Coding CLI | Променлива | По подразбиране | Файл източник | Описание | | ----------------------- | -------------------- | ---------------------------------------- | -------------------------------------------------------------------------- | | `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | Заменя версията на Kimi CLI, изпращана при OAuth/API извиквания. | | `KIMI_CODING_DEVICE_ID` | _(уловена стойност)_ | `src/lib/oauth/providers/kimi-coding.ts` | Заменя уловения идентификатор на Kimi устройството в клиентските заглавки. | > [!NOTE] > Тази функция работи съвместно със замените на User-Agent (§12). Системата за отпечатъци управлява реда на заглавките и полетата в тялото, а замените на User-Agent управляват конкретния UA низ. Двете могат да бъдат активирани независимо. --- ## 14. Доставчици с API ключове API ключове за доставчици, които използват директно удостоверяване. **Предпочитана настройка:** Табло за управление → Доставчици → Добавяне на API ключ. Задаването чрез променливи на средата е алтернатива за внедрявания с Docker или без графичен интерфейс. Разпознаван шаблон: `{PROVIDER_ID}_API_KEY` | Променлива | Доставчик | | ------------------ | -------------------------------------------------------------- | | `DEEPSEEK_API_KEY` | DeepSeek | | `NVIDIA_API_KEY` | NVIDIA NIM | | `JINA_AI_API_KEY` | Jina AI (Foundation API + резервен вариант Reader) | | `JINA_API_KEY` | Jina AI (псевдоним на `JINA_AI_API_KEY`) | | `GEMINI_API_KEY` | Gemini (Google AI Studio) вграждания + резервен вариант за чат | | `GOOGLE_API_KEY` | Gemini (псевдоним на `GEMINI_API_KEY`) | > [!NOTE] > Статичните записи `${PROVIDER}_API_KEY` за Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius и Qianfan бяха премахнати във v3.8.0, тъй като средата за изпълнение вече не ги чете — тези доставчици разчитат изключително на Таблото за управление / `data/provider-credentials.json` / шифрованата БД. Вижте раздела _Одит: премахнати / неизползвани променливи_ в края на този документ за пътя за миграция. > [!TIP] > Ключовете, зададени чрез Таблото за управление, се съхраняват шифровано в SQLite и имат предимство пред променливите на средата. > > **Jina:** Вгражданията `jina-ai/…`, пренареждането, класифицирането, сегментирането и `jina-search` **не** таксуват ключ на средата на клъстера, когато съществува връзка `jina-ai` (или споделена `jina-reader`) от таблото за управление — `getProviderCredentials` първо попълва наличните стойности. `JINA_AI_API_KEY` / `JINA_API_KEY` се използват само когато няма използваем ключ от таблото за управление. Дневниците на извикванията обозначават резервния вариант от средата като `connection_id=env:JINA_AI_API_KEY`. Картата Reader (`jina-reader`, `r.jina.ai`) никога не обслужва `/v1/embeddings` или `/v1/rerank`. > > **Gemini:** `gemini/gemini-embedding-2` (псевдоним `google/gemini-embedding-2`) първо използва връзката `gemini` от таблото за управление. `GEMINI_API_KEY` / `GOOGLE_API_KEY` се използват само когато няма използваем ключ от таблото за управление. Дневниците на извикванията обозначават резервния вариант от средата като `connection_id=env:GEMINI_API_KEY`. Нативният мултимодален трафик използва `x-goog-api-key` към `:embedContent` / `:batchEmbedContents` — N елемента на OpenAI `input` се преобразуват в N вектора. --- ## 15. Настройки за изчакване Всички стойности са в **милисекунди**. Централизирано определяне в `src/shared/utils/runtimeTimeouts.ts`. ### Йерархия на изчакванията ``` REQUEST_TIMEOUT_MS (глобално презаписване) ├─→ FETCH_TIMEOUT_MS (заявки към външни доставчици, по подразбиране: 600000) │ ├─→ FETCH_HEADERS_TIMEOUT_MS (наследява от FETCH_TIMEOUT_MS) │ ├─→ FETCH_BODY_TIMEOUT_MS (наследява от FETCH_TIMEOUT_MS) │ ├─→ TLS_CLIENT_TIMEOUT_MS (наследява от FETCH_TIMEOUT_MS) │ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (независима, по подразбиране: 10000) │ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (независима, по подразбиране: 15000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (независима, по подразбиране: 0 = изключена, препоръчително: 30000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (независима, по подразбиране: 2) │ ├── FETCH_CONNECT_TIMEOUT_MS (независима, по подразбиране: 30000) │ └── FETCH_KEEPALIVE_TIMEOUT_MS (независима, по подразбиране: 4000) ├─→ STREAM_IDLE_TIMEOUT_MS (наследява от REQUEST_TIMEOUT_MS, по подразбиране: 600000) ├─→ STREAM_ACTIVE_TIMEOUT_MS (независима, по подразбиране: 1260000; 0 я деактивира) ├─→ STREAM_READINESS_TIMEOUT_MS (наследява от REQUEST_TIMEOUT_MS, по подразбиране: 80000) ├─→ STREAM_READINESS_MAX_TIMEOUT_MS (ограничава адаптивните удължавания на изчакването за готовност, по подразбиране: 180000) └─→ API_BRIDGE_PROXY_TIMEOUT_MS (наследява от REQUEST_TIMEOUT_MS, по подразбиране: 30000) ├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (производна, по подразбиране: 300000) ├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (по подразбиране: 60000) ├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (по подразбиране: 5000) └── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (по подразбиране: 0 = деактивирана) ``` | Променлива | По подразбиране | Описание | | ----------------------------------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | _(не е зададено)_ | Глобална съкратена настройка — замества стойностите по подразбиране както на `FETCH_TIMEOUT_MS`, така и на `STREAM_IDLE_TIMEOUT_MS`. | | `FETCH_TIMEOUT_MS` | `600000` | Общото време за изчакване на HTTP заявките към доставчика нагоре по веригата. | | `STREAM_IDLE_TIMEOUT_MS` | `600000` | Максималният период без необработени байтове от източника нагоре по веригата, преди операцията да бъде прекратена. Моделите с разширено разсъждение рядко правят пауза >90s. | | `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Максимална обща продължителност на активен SSE поток; никога не се нулира при получаване на байтове от източника нагоре по веригата и не зависи от `REQUEST_TIMEOUT_MS`. Изведена е от най-голямата стойност `timeoutMs` за отделен модел в регистъра (1200000, Codex), плюс резерв от 60000, така че модел, на който е разрешено да използва целия си бюджет, никога да не бъде прекъсван по средата на отговора. Задайте `0`, за да я деактивирате. | | `OMNIROUTE_SSE_COMMENTS` | _(деактивирано)_ | Дали OmniRoute може да изпраща редове за SSE коментари с `:` (например периодичния сигнал `: keepalive` и завършващите метаданни `x-omniroute-*`). Деактивирано по подразбиране (#10524), тъй като стриктните клиенти, съвместими с OpenAI, изпълняват JSON.parse за всеки SSE ред и се сриват при коментари с `:`; периодичните сигнали `data:` не са засегнати. Задайте `on`/`true`/`1`/`yes`, за да го активирате отново. Използва се от `open-sse/utils/sseHeartbeat.ts`. | | `SSE_COALESCE_MS` | `0` (изключено) | Активира се по желание: обединява последователни събития `content_block_delta` на Claude (с еднакъв индекс на блока и тип на делтата), изпратени към клиенти на Claude, като извежда натрупаното поне на всеки N ms. Без загуби; събитията `signature_delta` и граничните събития никога не се обединяват. Прилага се за всеки тип делта, освен ако не е зададена променлива за съответния тип по-долу. Използва се от `open-sse/utils/sseDeltaCoalesce.ts`. | | `SSE_COALESCE_THINKING_MS` | `0` (изключено) | Замяна според типа на `SSE_COALESCE_MS` за `thinking_delta`. | | `SSE_COALESCE_TEXT_MS` | `0` (изключено) | Замяна според типа на `SSE_COALESCE_MS` за `text_delta`. | | `SSE_COALESCE_INPUT_JSON_MS` | `0` (изключено) | Замяна според типа на `SSE_COALESCE_MS` за `input_json_delta`. | | `SSE_FRAME_COALESCE_MS` | `0` (изключено) | Активира се по желание: групира SSE кадрите, препратени в рамките на N ms, в едно записване към клиента. Първият кадър и завършващите кадри (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) никога не се забавят; при включено групиране ITL измерва интервалите между групите. Използва се от `open-sse/utils/sseOutputSink.ts`. | | `SSE_STALL_WATCHDOG` | `timer` | Реализация на механизма за наблюдение за застой на байтовете при поточни отговори. `timer` настройва отново отделен таймер за всеки фрагмент от източника нагоре по веригата (задейства се точно при достигане на допустимото време за застой); `interval` поддържа една проверка за всеки поток с период `clamp(budget/4, 1s, 5s)`, така че застоят се отчита в рамките на допустимото време плюс периода. Използва се от `open-sse/utils/streamStallWatchdog.ts`. | | `STREAM_READINESS_TIMEOUT_MS` | `80000` | Време за получаване на първото SSE събитие, което не е ping. Наследява `REQUEST_TIMEOUT_MS`, когато е зададена. | | `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Максимален адаптивен интервал за готовност до първото събитие при големи поточни заявки, заявки с интензивно използване на инструменти или такива с висока степен на разсъждение. | | `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Авариен прекъсвач за евристиката `/goal`. Задайте `false`/`0`/`off`, за да деактивирате напълно откриването — времената за изчакване за готовност и възстановяването на потока никога не се увеличават въз основа на тялото/заглавките на заявката, което ограничава управляваното от клиента увеличаване на времето за изчакване. | | `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Максимален интервал за готовност до първото събитие за открити изпълнения на агент с `/goal` или заявки, принудително обозначени чрез `x-omniroute-agent-goal`. | | `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Автоматично активира ранно възстановяване на потока за открити изпълнения на агент с `/goal`. Задайте `false`/`0`/`off`, за да деактивирате специфичното за целта включване. Това може само да ДОБАВИ възстановяване към настройката по подразбиране на оператора — никога не отменя изрично отказване чрез настройките на `STREAM_RECOVERY_ENABLED`/БД. | | `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Премахва нестандартните SSE събития `codex.*` (например `codex.rate_limits`), които нарушават работата на `responses.stream()` от OpenAI SDK с грешка 502. Включено по подразбиране (#11014). Задайте `0`/`false`/`no`/`off`, за да ги препращате. | | `OMNIROUTE_CODEX_APPSERVER_WS` | _(не е зададено)_ | Активиран по желание транспорт чрез Codex app-server. WebSocket крайна точка (`ws://`/`wss://`) на локална придружаваща услуга `codex app-server`. Когато е зададена заедно с токен, заявките към Codex се маршрутизират чрез JSON-RPC към придружаващата услуга вместо към HTTP Responses API. Може да се задава и за отделна връзка чрез `providerSpecificData.codexAppServerUrl`. Използва се от `open-sse/executors/codex/appServerConfig.ts`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(не е зададено)_ | Вграден токен за възможности/удостоверяване тип bearer, предоставян на app-server. Замяна за отделна връзка: `providerSpecificData.codexAppServerToken`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(не е зададено)_ | Път до файл, съдържащ токена за права на app-server (от `codex app-server --ws-token-file`). Използва се, когато `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` не е зададена. Замяна за отделна връзка: `providerSpecificData.codexAppServerTokenFile`. | | `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Работна директория, в която се изпълнява ходът на app-server. Замяна за отделна връзка: `providerSpecificData.codexAppServerCwd`. | | `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(не е зададено)_ | Политика за одобрение, предавана на хода на app-server (напр. `never`, `on-request`). Замяна за отделна връзка: `providerSpecificData.codexAppServerApprovalPolicy`. | | `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(не е зададено)_ | Политика за пясъчника, предавана на хода на app-server (напр. `read-only`, `workspace-write`, `danger-full-access`). Когато не е зададена, изпълнителят по подразбиране използва `workspace-write` (с повишена сигурност; преди `danger-full-access`). Замяна за отделна връзка: `providerSpecificData.codexAppServerSandbox`. | | `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Автоматично одобряване на собствените подкани за одобрение на app-server (изпълнение на команди/файлове/разрешения на хоста). По подразбиране е изключено — подканите се отказват автоматично; извикванията на инструменти от тестовата среда не се засягат (те преминават през отделното директно препредаване `item/tool/call`). Приема `true`/`1`/`yes`. Замяна за отделна връзка: `providerSpecificData.codexAppServerAutoApprove`. | | `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Време за получаване на заглавките на отговора. | | `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | Максимално изчакване за заглавките на отговора при поточни заявки (ms). `0` деактивира това ограничение; изрично зададената стойност `fetchStartTimeoutCapMs` за доставчика има предимство. | | `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 сек.) | Максимално изчакване за начало на отговора (ms) за всеки директен опит без прокси. При изтичане на времето се прави един повторен опит през нов сокет; задайте `0`, за да деактивирате ограничението и да запазите предишното поведение. | | `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 мин.) | Долна граница за изчакването до начало на отговора (ms) при директни опити без прокси, чийто целеви хост е частен/LAN/loopback (например `localhost`, `host.docker.internal`, `192.168.x.x`), така че първоначално стартиране на локален Ollama да не бъде прекъснато от горната стойност по подразбиране от 30 сек. Действа като долна граница: ефективното изчакване е по-голямата от тази стойност и `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; `0` или невалидна стойност премахва локалната долна граница. Отдалечените хостове не се засягат. | | `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 мин.) | Горна граница (ms) за ПОВТОРНИЯ опит през нов сокет след изтичане на времето за начало на отговора при опит през споделена връзка по-горе (#13703). Прилага се само когато извикващата страна вече е прикачила собствен сигнал за краен срок (веригата от разрешените стойности за връзка/модел/доставчик/`FETCH_TIMEOUT_MS`); този сигнал е реалното ограничение и се задейства първи в предвидения път, така че това е щедра предпазна мярка, а не фиксиран лимит — без нея повторният опит използваше същия кратък прозорец `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` като опита през споделена връзка и връщаше 504 за изправни модели за разсъждение с бавно време до първия байт (TTFB). Никога не може да бъде под фиксираната долна граница по-горе; когато извикващата страна изобщо не предоставя сигнал за краен срок, повторният опит запазва фиксираната долна граница непроменена. | | `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Време за получаване на цялото тяло на отговора. | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Време за изчакване при установяване на TCP връзка. | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Време за изчакване при неактивност на keep-alive сокета. | | `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Време за изчакване на проксито за TLS отпечатък (wreq-js). | | `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Ограничава конкретно времето до първия байт от тялото при транспорта за TLS отпечатък на wreq-js; само `TLS_CLIENT_TIMEOUT_MS` не може да засече блокирало тяло, тъй като приключва веднага щом пристигнат заглавките (#12656). При изтичане на времето четецът на wreq се отменя и се преминава към директния/прокси диспечер; `0` деактивира наблюдението. | | `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Само за изпълнителя OpenCode и само докато флагът за функционалност `OPENCODE_RESPONSES_STALL_ROTATION` е включен (по подразбиране е изключен): ограничава изчакването за първия байт от тялото на поточен отговор от Responses след неговите заглавки (#13484). Потокът на Responses започва с `response.created`, затова липсата на данни след този прозорец означава блокиране: акаунтът временно се поставя в период на изчакване и заявката се пренасочва еднократно към следващия акаунт; при второ блокиране възниква незабавна грешка. `0` деактивира защитата дори когато флагът е включен. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= изключено) | Само за изпълнителя OpenCode: ограничава изчакването за заглавките на отговора от източника при поточно извикване на Responses, когато все още е наличен друг акаунт — заявка в опашката спира да чака и продължава нататък, вместо да заема целия прозорец за заглавките. Засягат се само поточните извиквания на Responses (потокът на Responses започва с `response.created`, така че липсата на данни там означава изчакване в опашка, а не генериране); chat completions и непоточните извиквания остават непроменени, а прозорецът само съкращава ефективната горна граница за започване на извличането и никога не я удължава. Препоръчителна стойност при активиране: `30000`. `0` деактивира. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Само за изпълнителя на OpenCode: колко пъти на заявка горната граница за изчакване на заглавките може да премине към следващия акаунт. Последният оставащ акаунт винаги запазва целия прозорец за заглавките. | | `OPENCODE_PARK_AND_RESUME` | `false` | Само за изпълнителя на OpenCode: поставя заявката в режим на изчакване с периодичен сигнал след повтарящи се временни грешки 429 (или при нов маркер за претоварване на пула), след което изпълнява повторно един ограничен етап с до 3 последователни акаунта, вместо да разпраща заявката към целия набор (#13924). Изключено по подразбиране: всяка грешка 429 превключва към следващия акаунт точно както преди. | | `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Само за изпълнителя на OpenCode: когато всеки акаунт с изтекъл период на изчакване в етапа за повторно изпълнение след поставяне в режим на изчакване е отделен от паметта за откази на проксито, използва тези акаунти въпреки това, вместо да не изпълнява нищо повторно (#14851, продължение на #14750). Изключено по подразбиране: в този случай етапът за повторно изпълнение е празен, както преди #14750. | | `STREAM_READINESS_STALL_RETRY` | `false` | Само за поточен чат: когато първото тяло от източника блокира, преди да създаде използваемо събитие, извършва един ограничен втори опит по същия маршрут, със същия бюджет за готовност и без санкция за акаунта. Изключено по подразбиране: блокирало първо тяло води до неуспех на заявката без повторен опит. | | `OPENCODE_POOL_RESELECT` | `false` | Само за изпълнителя на OpenCode: след грешка 429 от доставчик, групиран по изходящ адрес, при акаунт без прокси в контекста на общ пул, изисква от пула за връзки друг член за следващия опит, вместо да опитва отново със същия изходящ адрес. Подрежда, но никога не изключва: изчерпан пул запазва текущото поведение. Изключено по подразбиране: всяка грешка 429 превключва към следващия акаунт точно както преди. | | `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(не е зададено)_ | Само за изпълнителя на OpenCode: заменя пътя до маркера за претоварване на пула, който се прочита преди поставяне в режим на изчакване (`{since, reason, ttl_s}`, по подразбиране `/tmp/opencode-pool-strain.json`, #13924). Нов маркер поставя заявката в режим на изчакване без повторно преброяване; липсващ или остарял маркер води до използване на брояча за поредицата от заявки. | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Време на изчакване за прехода през прокси при мостови заявки към `/v1`. | | `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Насочва изпълнителя на Firecrawl за извличане на уеб съдържание към самостоятелно хоствана инстанция (API ключът е незадължителен извън облака). | | `FIRECRAWL_TIMEOUT_MS` | `30000` | Време на изчакване за всяка заявка за изпълнителя на Firecrawl за извличане на уеб съдържание. | | `TAVILY_BASE_URL` | _(не е зададено)_ | Базов URL адрес за модула на Tavily за извличане на квотата от `/usage` (ограничения на доставчика); игнорира се, когато сочи към `api.tavily.com`. Ако не е зададен, се използва базовият URL адрес на връзката. | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Общо време на изчакване за сървърна заявка към моста. | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Време за изпращане на заглавките на отговора чрез моста. | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Време на изчакване при неактивност на поддържаната връзка към моста. | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Време на изчакване за необработения сокет (0 = изключено). | | `SHUTDOWN_TIMEOUT_MS` | `30000` | Гратисен период при SIGTERM/SIGINT преди принудително прекратяване. | | `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | Резервна стойност, използвана от `src/shared/utils/fetchTimeout.ts`, когато `FETCH_TIMEOUT_MS` не е зададена. | | `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Време на изчакване (ms) за предварителните настройки `validationRead` и `modelsProbe` в `src/shared/network/safeOutboundFetch.ts`. Увеличете го за бавни крайни точки (Cerebras, Cloudflare AI, Groq), за да предотвратите колебания между активно състояние и грешка в таблото за управление. При невалидни (<1000) или нечислови стойности се използва резервна стойност от 8000ms. | | `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Специфично за препредаването време на изчакване при извличане в `open-sse/utils/proxyFetch.ts` (#9158). Блокирало препредаване трябва да завърши с неуспех преди времето на изчакване на клиента/агента (~30s), така че извикващите страни да виждат специфична за препредаването грешка вместо общо изтичане на времето за изчакване от източника. Ограничено до `29000`, за да се задейства винаги първо. | | `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Споделено изчакване преди повторен опит за пътищата с еднократен повторен опит през директна връзка/препредаване/прокси в `open-sse/utils/proxyFetch.ts` (#9158). `0` = незабавен повторен опит. | | `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Време на изчакване за собствена заявка на wreq-js (`claudeTlsClient.ts`). | | `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Абсолютен гратисен период за твърдия краен срок на JS, добавен към собственото време на изчакване. | | `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Време на изчакване за собствена заявка на wreq-js (`perplexityTlsClient.ts`). | | `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Абсолютен допълнителен период за твърдия краен срок на JS, добавен към нативното време за изчакване. | | `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (изключено) | Добавя „Разполагате с вградено уеб търсене. Отговаряйте директно на въпросите, като използвате резултатите от търсенето.“ към системното съобщение на извикващия (`perplexity-web/protocol.ts`). По подразбиране е изключено — Perplexity така или иначе търси, а изречението се появява в отговорите като метакоментар за клиенти за програмиране. Задайте `1`/`true`/`yes`/`on`, за да го възстановите. | | `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Нативно време за изчакване на заявка в wreq-js (`grokTlsClient.ts`). | | `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Абсолютен допълнителен период за твърдия краен срок на JS, добавен към нативното време за изчакване. | | `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Нативно време за изчакване на заявка в wreq-js (`notionTlsClient.ts`); `notion-web` го увеличава до `180000` за всяка заявка при продължителни генерирания. | | `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Абсолютен допълнителен период за твърдия краен срок на JS, добавен към нативното време за изчакване. | | `OMNIROUTE_BROWSER_POOL` | `on` | Споделен пул от браузъри на Playwright за чат с уеб бисквитки, работещ чрез браузър (`browserPool.ts`); задайте `off`, за да го деактивирате. | | `OBSCURA_BIN` | `auto-detect` | Път до двоичния файл `obscura`, използван като основна машина от пула от браузъри и изпълнителя Cloudflare Playground (`open-sse/services/obscura.ts`); когато не е зададен, се открива автоматично от системния PATH. | | `OBSCURA_CDP_ENDPOINT` | _(не е зададено)_ | Насочва към вече работещ екземпляр на Obscura (`http://host:port`), вместо да стартира нов; модулът не притежава този процес (`open-sse/services/obscura.ts`). | | `OBSCURA_PORT` | `случаен свободен порт` | Изричен порт за стартирания `obscura serve`; когато не е зададен, автоматично се избира свободен порт (`open-sse/services/obscura.ts`). | | `WEB_COOKIE_USE_BROWSER` | `0` | Включва заявка за чат с уеб бисквитки в пътя, работещ чрез браузър (`browserBackedChat.ts`); задайте `1`, за да го активирате. | | `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Основен URL адрес за изпълнителя Kimi Web (международен kimi.ai Connect-RPC) (`kimi-web.ts`); променяйте го само за огледални/прокси крайни точки. | | `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Пълен адрес на крайната точка за чат за изпълнителя Kimi Web (`kimi-web.ts`). | | `OMNIROUTE_LOGIN_BROWSER_PATH` | _(автоматично открит)_ | Път до системен изпълним файл на Chrome/Edge за интерактивно влизане в Adobe Firefly чрез браузър (`adobeFireflyBrowserLogin.ts`); има предимство пред автоматичното откриване за съответната операционна система. | | `OMNIROUTE_STANDALONE_DIR` | _.build/ самостоятелен изход_ | Замяна по време на компилиране на директорията за самостоятелния изход, използвана от стъпката за съвместно разполагане след компилирането (`scripts/build/colocate-standalone.mjs`); за инструментите за компилиране, не за средата на изпълнение. | Опитите за цели в комбинация наследяват определеното време за изчакване на заявката към източника (`FETCH_TIMEOUT_MS` или `REQUEST_TIMEOUT_MS`, когато то задава стойността по подразбиране за извличане). Задайте `targetTimeoutMs` в комбинация, в стойностите по подразбиране за комбинацията или в замяната за доставчика само за да ускорите резервното превключване на комбинацията; стойностите над текущото време за изчакване на източника се ограничават до него. `comboTimeoutMs` е отделен общ времеви бюджет за цялата комбинация, измерен по стенния часовник и обхващащ целите за резервно превключване. Оставете го без стойност или задайте `0`, за да запазите неограниченото обхождане (в `comboPredicates.ts` все пак се прилага твърдо зададено 10-минутно аварийно прекратяване при блокиране). Положителна стойност заменя тази защитна мярка за комбинацията. Задайте `comboTimeoutMs` на стойност, по-голяма от `targetTimeoutMs`, така че за резервното превключване да остане време след бавна първа цел. ### Прагове на прекъсвача на веригата Настройване на прекъсвача на веригата на ниво доставчик. Стойностите по подразбиране отразяват мащабираните стойности, използвани от v3.6 насам за над 500 връзки. | Променлива | По подразбиране | Изходен файл | Описание | | ------------------------------------------------------------- | --------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | Праг на последователните неуспехи за OAuth доставчици, преди прекъсвачът да се задейства. | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | Прозорец за нулиране (ms) на прекъсвача за OAuth доставчици. | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | Праг на последователните неуспехи за доставчици с API ключ. | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | Прозорец за нулиране (ms) на прекъсвача за доставчици с API ключ. | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Праг на последователните неуспехи за локални доставчици (Ollama, LM Studio, ...). | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | Прозорец за нулиране (ms) на прекъсвача за локални доставчици. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: брой неуспехи в рамките на прозореца, преди целият OAuth доставчик да премине в период на изчакване. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: плъзгащ се прозорец за броя на неуспехите (ms) за OAuth доставчици. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: период на изчакване (ms), след като бъде достигнат прагът за OAuth доставчика. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | OAuth доставчикът преминава в състояние DEGRADED при този брой неуспехи. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | Максимален множител за увеличаване на resetTimeout за OAuth доставчика. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | OAuth доставчикът преминава към по-високо ниво след този брой цикли на отваряне. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: брой неуспехи в рамките на прозореца, преди целият доставчик с API ключ да премине в период на изчакване. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: плъзгащ се прозорец за броя на неуспехите (ms) за доставчици с API ключ. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: период на изчакване (ms), след като бъде достигнат прагът за доставчика с API ключ. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | Доставчикът с API ключ преминава в състояние DEGRADED при този брой неуспехи. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | Максимален множител за увеличаване на resetTimeout за доставчика с API ключ. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | Доставчикът с API ключ преминава към по-високо ниво след този брой цикли на отваряне. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: брой неуспехи, преди целият локален доставчик да премине в период на изчакване. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: плъзгащ се прозорец за броя на неуспехите (ms) за локални доставчици. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Прекъсвач на ниво доставчик: период на изчакване (ms), след като бъде достигнат прагът за локалния доставчик. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Период на изчакване за отделен ключ (ms), прилаган при ротация на множество API ключове, когато отговор 429 от услугата нагоре по веригата не съдържа `Retry-After` (#14573). Неположителните или нечисловите стойности се заменят със стойността по подразбиране. | | `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Дълбочина на отстъплението, при която доставчикът на закачен запис в кеша на контекста се счита за трайно неизправен и закачването се премахва за превключване към резервен доставчик. | | `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Прозорец против често превключване (ms), който допуска кратки преходни периоди на изчакване, преди да бъде премахнато закачване в кеша на контекста. | ### Сценарии | Сценарий | Конфигурация | | ---------------------------------------------------- | --------------------------------------------------------- | | **Продължително генериране на код** | `REQUEST_TIMEOUT_MS=900000` (15 мин) | | **Ограничаване на общата продължителност на потока** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 мин) | | **Бърз отказ за производствен API** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` | | **Модели с разширено мислене** | `STREAM_IDLE_TIMEOUT_MS=300000` (5 мин между фрагментите) | --- ## 16. Логване Системата за логване записва както в stdout, така и в ротирани лог файлове. Цялата конфигурация се прочита от `src/lib/logEnv.ts`. | Променлива | По подразбиране | Описание | | ----------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `APP_LOG_LEVEL` | `info` | Минимално ниво на логване: `debug`, `info`, `warn`, `error`. | | `APP_LOG_FORMAT` | `text` | Формат на изхода: `text` (четим от хора) или `json` (структуриран). | | `APP_LOG_TO_FILE` | `true` | Записва логовете във файл заедно със stdout. | | `APP_LOG_FILE_PATH` | `logs/application/app.log` | Път до лог файла (спрямо корена на проекта или `DATA_DIR`). | | `APP_LOG_MAX_FILE_SIZE` | `50M` | Максимален размер на файла преди ротация. Приема: `50M`, `1G`, `512K` или обикновен брой байтове. | | `APP_LOG_RETENTION_DAYS` | `7` | Брой дни за съхранение на ротираните лог файлове на приложението. | | `APP_LOG_MAX_FILES` | `20` | Максимален брой резервни копия на ротирани лог файлове. | | `CALL_LOG_RETENTION_DAYS` | `7` | Брой дни за съхранение на записите в логовете на заявките/извикванията в базата данни. | | `CALL_LOG_MAX_ENTRIES` | `10000` | Максимален брой записи в лога на извикванията в буфера в паметта. | | `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | Максимален брой редове в SQLite таблицата `call_logs` преди прочистване. | | `ENABLE_REQUEST_LOGS` | _(не е зададена)_ | Принудително включва или изключва подробното логване на заявки, като заменя настройката от таблото за управление. | | `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 час) | Максимална възраст на осиротели активни записи в лога на заявките преди почистване от паметта. | | `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | Съхранява поточните фрагменти в артефактите на конвейера, когато `call_log_pipeline_enabled=true`. Активира се изрично (`true`) — по подразбиране е изключено за пестене на дисково пространство. | | `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | Максимален размер в KB на артефакта от лога на извикванията в конвейера, когато `call_log_pipeline_enabled=true`. | | `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | Максимален брой редове в SQLite таблицата `proxy_logs` преди прочистване. | | `PROXY_LOG_INCLUDE_IPS` | `false` | Включва IP адресите на клиента/изходящата връзка и префиксите на акаунта в конзолните логове `[ProxyEgress]`. Записите в логовете на проксито в таблото за управление/базата данни запазват пълните подробности. | | `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | Задайте на `"true"` или `"1"`, за да записвате `first_chunk_ms` (от началото на изпращането до първия полезен байт от тялото) в редовете на лога на проксито. Обвива всяко тяло от сървъра нагоре по веригата в ленив директно препредаващ поток и актуализира реда, щом байтът пристигне; по подразбиране е изключено, така че отговорите да преминават непроменени. | | `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 мин) | Колко често `src/lib/logRotation.ts` проверява повторно размера на активния лог файл. | | `CHAT_LOG_TEXT_LIMIT` | `65536` | Максимална дължина на низовете, запазвани в артефактите на чат логовете (по подразбиране 64 KB). | | `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | Брой елементи от края на масива, които се запазват при съкращаване на полезните данни на чат лога. | | `CHAT_LOG_MAX_DEPTH` | `6` | Максимална дълбочина на влагане, след която полезните данни на чат лога се съкращават. | | `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | Максимален брой ключове на обекти, запазвани в полезните данни на чат лога (0 = неограничено). | | `CHAT_LOG_MAX_BODY_KB` | `1024` | Размер на цялото тяло на заявката/отговора (KB), над който то се заменя с кратко обобщение вместо с пълното копие. Увеличете стойността, ако дългите агентни разговори показват заместител вместо действителните съобщения в таблото за управление. | | `CHAT_DEBUG_FILE` | `false` | Когато е true, `serializeArtifactForStorage` пропуска съкращаването въз основа на размера. Само за отстраняване на грешки. | --- ## 17. Оптимизация на паметта | Променлива | Стойност по подразбиране | Описание | | ----------------------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_MEMORY_MB` | _автоматично_ (на физическа машина); **`1024` в Docker образа** | **Препоръчителен** лимит на V8 heap паметта (MB) за Docker/самостоятелно изпълнение. Когато не е зададен, се калибрира динамично (~35% от системната RAM, ограничено до `[512, 4096]`); `512` е само долната граница, когато общата памет не може да бъде прочетена. При `run-standalone.mjs` (Docker CMD) **изрично зададената** стойност се добавя като `--max-old-space-size` и има **предимство** пред конфликтен флаг за heap паметта в NODE_OPTIONS (последният V8 флаг има предимство). `omniroute serve` все още предпочита съществуващ флаг за heap паметта в NODE_OPTIONS (#5238). Не задавайте и двете с различни стойности — процесът регистрира предупреждение, което посочва и двете стойности и коя има предимство. **Официалният Docker образ винаги задава `1024`, така че калибрирането никога не се изпълнява в него.** `/v1/responses` за агенти за програмиране изисква `8192`–`12288` плюс резерв за cgroup — вижте [Ръководство за Docker — RAM по време на изпълнение](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). | | `OMNIROUTE_RSS_PRESSURE_MB` | _автоматично_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; изключено, когато `OMNIROUTE_MEMORY_MB` не е зададено) | `open-sse/utils/resourcePressure.ts` | Абсолютен предпазен праг за RSS на процеса (MB) за нативна/външна памет, която V8 `heapUsed` не може да отчете; над него новите заявки получават 503 `resource_pressure`. RSS рядко намалява след пиково натоварване, затова го комбинирайте с `OMNIROUTE_PRESSURE_SELF_RESTART`. | | `PROMPT_CACHE_MAX_SIZE` | `50` | Максимален брой кеширани записи за системни подкани. | | `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Максимален общ размер на кеша за подкани. | | `PROMPT_CACHE_TTL_MS` | `300000` (5 мин) | TTL на записите в кеша за подкани. | | `SEMANTIC_CACHE_MAX_SIZE` | `100` | Максимален брой кеширани отговори с temperature=0. | | `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Максимален общ размер на семантичния кеш. | | `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 мин) | TTL на записите в семантичния кеш. | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | Корени на локални корпуси, които едновременно поддържат активен индекс в паметта (`src/lib/localCorpus/configured.ts`). LRU: при достигане на лимита индексът на най-отдавна използвания корен се премахва и се изгражда отново при следващата заявка към него. Ограничено до минимална стойност `1`; нечислова стойност води до използване на стойността по подразбиране. | | `STREAM_HISTORY_MAX` | `50` | Максимален брой скорошни събития от потока в буфера за изгледа на живо в таблото за управление. | | `CONTEXT_LENGTH_DEFAULT` | _(незададено)_ | Глобално заместване на дължината на контекста (в токени) за всеки доставчик, който няма променлива `CONTEXT_LENGTH_`. Когато е зададено, то **заменя** стойностите от каталога, заместването от таблото за управление и регистъра за тези доставчици; когато не е зададено, OmniRoute използва вградената си верига, чиято последна резервна стойност е `128000`. Вижте [Дължина на контекста за отделен доставчик](#per-provider-context-length-context_length_provider). | | `USAGE_TOKEN_BUFFER` | `100` | Допълнителен резерв от токени при проследяване на квотите за използване. | ### Дължина на контекста за отделен доставчик (`CONTEXT_LENGTH_`) `open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) прочита и форма **за отделен доставчик**, чието име се изгражда от идентификатора на доставчика по време на изпълнение, така че тя не може да бъде изброена ред по ред в таблицата по-горе или в `.env.example`. **Име.** `CONTEXT_LENGTH_`, където `` е ID на доставчика, преобразуван в главни букви, като всеки знак извън `A-Z` / `0-9` е заменен с `_`. ID на доставчика е каноничният ID след разрешаване на псевдонима (`provider` частта от низ `provider/model`, след като е разрешен кратък псевдоним). Персонализираните възли, съвместими с OpenAI или Anthropic, използват своя генериран ID на възел, така че UUID е част от името на променливата. Стойността е положително цяло число токени; всичко останало (празна стойност, `0`, отрицателна или нечислова стойност) се игнорира и разрешаването продължава към следващата стъпка. | ID на доставчик | Име на променлива | | ----------------------------------------------------------- | -------------------------------------------------------------------------- | | 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 | **Приоритет.** За двойка `provider/model` първата стъпка, която връща стойност, има предимство: 1. `CONTEXT_LENGTH_` за съответния доставчик. 2. `CONTEXT_LENGTH_DEFAULT` (глобално заместване чрез променлива на средата). 3. Прозорецът за конкретния модел: запазено заместване на контекста (зададено в таблото за управление или автоматично фиксирано от механизма за съгласуване при откриване, вижте `CONTEXT_WINDOW_RECONCILE_INTERVAL`), а в противен случай — синхронизираната стойност от каталога / models.dev. 4. `defaultContextLength` от регистъра на доставчика. 5. Евристики според името на модела (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` / `codex` 400000). 6. Вградени стойности по подразбиране за всеки доставчик, след което `128000`. И двете стъпки с променливи на средата се прилагат за **целия доставчик**: всеки модел на този доставчик получава един и същ лимит и те имат предимство пред заместванията за конкретни модели в таблото за управление. Когато само един модел на даден доставчик се нуждае от различен прозорец, вместо това използвайте заместване за конкретния модел в таблото за управление. **Обхват.** Тази последователност управлява проверката на контекстния прозорец при заявка ( отхвърлянето `context_length_exceeded` / „Входните данни надвишават контекстния прозорец“ в `open-sse/handlers/chatCore.ts`), бюджетите за компресиране на подкани и комбинираните лимити на контекста. `context_length`, обявяван от `GET /v1/models`, все още може да идва от метаданните на каталога или регистъра и не е гарантирано, че отразява заместването чрез променлива на средата. **Пример.** Доставчик, чийто модел приема прозорец от 1 050 000 токена, докато каталогът посочва 128 000: ```dotenv CONTEXT_LENGTH_AGENTROUTER=1050000 ``` Рестартирайте сървъра след промяната: стойността се чете от средата на сървърния процес. В **настолното приложение** сървърът работи като дъщерен процес и не вижда системна променлива, зададена след стартирането на приложението; добавете реда във файла `.env`, който приложението зарежда (редът за търсене е описан в [Ръководство за Electron: търсене на файл със стойности на средата](../guides/ELECTRON_GUIDE.md#environment-file-lookup)), след което затворете напълно и стартирайте отново приложението. ### Компресиране | Променлива | По подразбиране | Описание | | ------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | не е зададено | Доверяване на проектния `.rtk/filters.json` без хеш в `.rtk/trust.json`. Използвайте само в контролирана локална среда за разработка. | ### Механизъм за памет (план 21) ### Натоварване на цикъла на събитията от паметта, уменията и обновяването на токени (#10349) OmniRoute е **един процес на Node**. Извличането/получаването от паметта, инжектирането на умения и обновяването на токените на доставчика се изпълняват в **същия цикъл на събитията** като `GET /healthz` и таблото за управление. Те не са работна нишка. | Дейност | Код | По подразбиране | Управление от оператора | | --------------------------------- | ---------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Извличане / получаване от паметта | `src/lib/memory/` | **memoryEnabled** в таблото за управление (включено по подразбиране) | Изключете **Настройки → Памет**. Няма отделен превключвател за изключване чрез променлива на средата, освен деактивирането на функцията в настройките. | | Инжектиране на умения | `src/lib/skills/injection.ts` | **skillsEnabled** в таблото за управление (включено по подразбиране) | Изключете **Настройки → Памет/Умения** (`skillsEnabled`). Настройките на изолираната среда по-долу само ограничават изпълнението, след като инжектирането вече е включено. | | Обновяване на токени | `src/sse/services/tokenRefresh.ts` | Включено за свързани OAuth/уеб доставчици | Прекъснете връзката с доставчика или оставете токените валидни; в момента няма променлива на средата `TOKEN_REFRESH=0`. | Ако `/healthz` е бавен на ненатоварена машина, първо деактивирайте паметта и уменията, след което проверете натоварването от каталога/компресирането (#10303, #9685). Тези функции отстъпват изпълнението в точките с `await`, но въпреки това се конкурират за единствената нишка. Настройки на слоя за вграждания, векторното хранилище и повторното класиране за подсистемата за постоянна памет (`src/lib/memory/`). | Променлива | Стойност по подразбиране | Описание | | ------------------------------------ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 мин) | TTL за кеша на embedding в паметта (за всяка комбинация източник/модел/размерност). | | `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Максимален брой LRU записи, съхранявани в кеша за embedding. | | `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | Идентификатор на HF хранилището за локалния MiniLM pipeline с включване по избор чрез `@huggingface/transformers` (~23 MB int8, ~400 MB RAM). | | `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | Идентификатор на HF хранилището за статичния potion/Model2Vec embedding модул с таблица за търсене. Изтегля се отложено в директорията на кеша. | | `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Директория, използвана за кеширане на файловете на статичния potion модел. Ако не е зададена, по подразбиране е в `DATA_DIR`. | | `HF_HUB_ENDPOINT` | `https://huggingface.co` | Замества основния URL адрес на Hugging Face Hub, използван от `staticPotion.ts` (напр. огледална крайна точка за изолирани среди). | | `MEMORY_VEC_TOP_K` | `20` | Стойност по подразбиране за top-K, използвана от векторното търсене с пълно обхождане на `sqlite-vec` в `src/lib/memory/vectorStore.ts`. | | `MEMORY_RRF_K` | `60` | Константа `k` за Reciprocal Rank Fusion при хибридно извличане чрез FTS5 + вектори (рецепта на sqlite-vec). | | `VECTOR_STORE_DISABLE_VEC` | `false` | Механизъм за тестване/диагностика в `getVectorStore()` (`src/lib/memory/vectorStore.ts`): когато е `true`, принудително задава векторното хранилище на `null` (симулира cloud/WASM среда без `sqlite-vec`), свеждайки извличането от паметта до търсене по ключови думи чрез FTS5. Оставете променливата незададена в production среда. | | `NOTION_API_KEY` | _(незададено)_ | API ключ за Notion backend (използван от предварително зададената позната backend конфигурация в `genericBackend.ts`). | | `NOTION_API_URL` | `https://api.notion.com/v1` | Основен URL адрес за Notion API (може да бъде заменен за самостоятелно хоствани алтернативи на Notion). | | `OBSIDIAN_API_KEY` | _(незададено)_ | API ключ за Obsidian Vault backend (използван от предварително зададената позната backend конфигурация в `genericBackend.ts`). | | `OBSIDIAN_API_URL` | `http://localhost:27123` | Основен URL адрес за Obsidian Vault API (може да бъде заменен за отдалечено хранилище). | | `MEMORY_TYPED_DECAY_ENABLED` | `false` | Главен превключвател за типизирано остаряване на паметта TV6. **Включва се по избор (по подразбиране е изключено)** — почистването **изтрива** остарелите спомени. Когато е изключено, `access_count`/`last_accessed_at` са само телеметрични данни и нищо не се изтрива. | | `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (в дни), след който неизползван спомен от тип `episodic` остарява. `0` прави и епизодичните спомени защитени. Устойчивите типове (`factual`/`procedural`/`semantic`) винаги са защитени. Часовникът за остаряване се преизчислява спрямо `last_accessed_at`. | | `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | Спомен, инжектиран `>=` толкова пъти, става защитен от остаряване независимо от типа. `0` деактивира защитата въз основа на достъпа. | | `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (деактивирано) | Интервал (в секунди) за незадължителното периодично почистване на остарели спомени в `src/lib/memory/typedDecay.ts`. `0`/незададено = без периодично почистване. Изисква двойно включване: необходимо е също `MEMORY_TYPED_DECAY_ENABLED=true`. | | `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(незададено)_ | Разделени със запетаи идентификатори на доставчици (без значение от регистъра), които приемат съобщение `system` **само на индекс 0** (`src/lib/memory/injection.ts`). При тях безопасното за кеша вмъкване на памет по средата на масива не е безопасно в разговори с множество ходове, затова паметта се обединява/добавя отпред като водещо системно съобщение. По подразбиране включва само `xiaomi-mimo`/`mimo`; разширете списъка за самостоятелно хоствани крайни точки, съвместими с OpenAI (напр. Qwen3.5+/3.6), чийто шаблон за чат налага същото ограничение за единствено водещо системно съобщение. | ### Пример за Docker с малко RAM `128` е само за dashboard. При coding agents с такъв heap възниква `FATAL ERROR` по време на продължителни заявки към `/v1/responses`. Не използвайте този пример като gateway за 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. Синхронизиране на цените Автоматично синхронизиране на данните за цените на моделите от външни източници. | Променлива | По подразбиране | Файл източник | Описание | | ----------------------- | --------------- | ------------------------ | --------------------------------------------- | | `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | Периодично синхронизиране на цените по избор. | | `PRICING_SYNC_INTERVAL` | `86400` (24 ч.) | `src/lib/pricingSync.ts` | Интервал за синхронизиране в секунди. | | `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | Източници на данни, разделени със запетаи. | --- ## Синхронизиране на Arena ELO | Променлива | По подразбиране | Файл източник | Описание | | ---------------------------- | --------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Периодично синхронизиране на ELO от класацията на Arena AI, конфигурируемо от флаговете за функционалност на таблото за управление или чрез `false` за отказ. | | `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | Формата на префикса, използвана за идентификаторите на модели в `GET /v1/models`. `dual` представя както краткия префикс на псевдонима, така и каноничния префикс на доставчика за всеки модел (обратна съвместимост — приблизително удвоява каталога); `alias` извежда по един идентификатор за всеки модел; `canonical` извежда само пълния префикс с идентификатора на доставчика (доставчиците, чийто псевдоним вече е каноничният идентификатор, запазват единствения си запис). Клиентите могат да заменят настройката за всяка заявка чрез `?prefix=alias`. Вижте [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). | | `ARENA_ELO_SYNC_INTERVAL` | `86400` (24 ч.) | `src/lib/arenaEloSync.ts` | Интервал за синхронизиране в секунди. | --- ## Доставчик за PromptQL Playground (неофициален/експериментален) Мост за GraphQL сесии, разработен чрез обратно инженерство, за prompt.ql.app (`src/shared/constants/providers/web-cookie.ts`). Всички настройки са незадължителни — стойностите по подразбиране сочат към публичните крайни точки на експерименталната среда; заменяйте ги само при самостоятелно хоствано/алтернативно внедряване на PromptQL. | Променлива | По подразбиране | Файл източник | Описание | | ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | Крайна точка на GraphQL, използвана за операции с чатове/сесии. | | `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | Крайна точка на GraphQL, използвана за заявяване на кредитния баланс/употребата. | | `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | Крайна точка, използвана за опит за обновяване на токена. | | `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | Максимално време (ms) за проверка на `thread_events` преди изтичане на времето. | --- ## Уеб доставчик HyperAgent (неофициален/експериментален) Обратно проектиран мост за сесии за hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). Незадължително — стойността по подразбиране сочи към публичната крайна точка за таксуване/използване; променяйте я само за самостоятелно хоствано/алтернативно внедряване на HyperAgent. | Променлива | По подразбиране | Изходен файл | Описание | | ---------------------- | --------------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------- | | `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | Крайна точка, използвана за извличане на блокове с кредити за таксуване/използване. | --- ## Квоти за използване на Kilo Code Проверка на личния баланс в USD и използването на Kilo Pass за доставчика Kilo Code. Незадължително — стойността по подразбиране сочи към публичния Kilo API; променяйте я само за междинен сървър/тестова конфигурация. Удостоверяването използва съществуващия OAuth токен за достъп на връзката. | Променлива | По подразбиране | Изходен файл | Описание | | -------------- | --------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------- | | `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | Базов URL адрес, използван за извличане на личния баланс в Kilo Code и използването на Kilo Pass. | --- ## Уеб доставчик Adobe Firefly (неофициален/експериментален) Опресняване на сесията чрез браузър за уеб доставчика Adobe Firefly (`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`, `open-sse/services/adobeFireflyClient.ts`). Незадължително — всички стойности по подразбиране са настроени за нормална инсталация на настолен компютър. > **Премахнато в #9255.** Старото Chrome изпълнение, свързано чрез CDP (adobeFireflyChromeRuntime.ts), беше > заменено от услуга за влизане чрез браузър с Playwright и неговите настройки вече не съществуват. Променливите > ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART, както и > ADOBE_FIREFLY_LOGIN_WAIT_MS и ADOBE_FIREFLY_FORTER_WAIT_MS, не се четат никъде в > кодовата база — задаването им няма ефект. | Променлива | По подразбиране | Изходен файл | Описание | | ------------------------------------ | ----------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Задайте `1` за истински безглавен Chrome (известно е, че не работи за генериране; само за отстраняване на грешки). | | `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | Включване/изключване на проактивното предварително подгряване на браузъра. `0` деактивира проактивното подгряване (възстановяването от 408 по средата на пакет продължава да се прилага). | | `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Задайте `0`, за да деактивирате запазването на сесията на Adobe Firefly на диска. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(не е зададено)_ | `open-sse/services/adobeFireflySession.ts` | Минимален интервал (ms), налаган между последователни изпращания, който заменя вградената стойност по подразбиране. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(не е зададено)_ | `open-sse/services/adobeFireflySession.ts` | Допълнителен интервал (ms), добавян след успешен пакет, който заменя вградената стойност по подразбиране. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(не е зададено)_ | `open-sse/services/adobeFireflyClient.ts` | Базово забавяне (ms) преди изпращане на заявка за генериране, което заменя вградената стойност по подразбиране. | --- ## 19. Синхронизиране на модели (разработка) | Променлива | По подразбиране | Файл източник | Описание | | ----------------------------------- | ----------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MODELS_DEV_SYNC_ENABLED` | _(не е зададено)_ | `src/lib/modelsDevSync.ts` | Безусловно заместване на настройката за синхронизиране на цените от models.dev. Ако не е зададено = спазва Настройки > AI (`modelsDevSyncEnabled`). `0`/`false`/`off`/`no` **има предимство пред БД** и пропуска както периодичното синхронизиране, така и SQL/JSON сканиранията на `getModelsDevPricing()` (за възстановяване, когато таблото е блокирало в същия цикъл на събитията). `1`/`true`/`on`/`yes` принудително включва синхронизирането. Записването/изчистването на цените все пак извиква `backupDbFile("pre-write")`, което не извършва нищо при 60-минутното ограничаване на честотата или при `DISABLE_SQLITE_AUTO_BACKUP`. | | `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 ч.) | `src/lib/modelsDevSync.ts` | Интервал в секунди за синхронизиране на каталога с модели по време на разработка. | | `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 ч.) | `src/lib/contextWindowResolver.ts` | Интервал (в секунди) за самокоригиращия механизъм за съгласуване на контекстния прозорец (5004): фиксира декларираните от доставчика прозорци, открити чрез `/models`, като замествания `auto:discovery`, когато се различават от каталога. Задайте `0`, за да го деактивирате. Използва повторно вече синхронизираните данни (без ново извличане); никога не презаписва заместванията `manual`. | --- ## 20. Настройки, специфични за доставчика | Променлива | По подразбиране | Файл източник | Описание | | ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 ч.) | `src/lib/catalog/openrouterCatalog.ts` | TTL на кеша на каталога с модели на OpenRouter. | | `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Включва удобни за показване полета `name` в отговорите от `/v1/models`. Деактивирайте за клиенти, които очакват само идентификатори. | | `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 сек.) | `src/app/api/v1/models/catalogCache.ts` | Максимално време за изчакване при студено изпълнение за обединено повторно изграждане на каталога чрез `GET /v1/models` (#12627). При изтичане на времето се връща последният успешен отговор 200, ако съществува такъв. | | `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 дни) | `src/lib/db/models/activeSyncedCatalog.ts` | Възрастта, след която синхронизираният списък с модели на дадена връзка престава да бъде авторитетен за маршрутизирането и при грешка се използва регистърът (#12849). Редовете, на които никога не е задаван времеви печат, се считат за остарели. | | `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 сек.) | `src/lib/usage/analyticsResponseCache.ts` | Колко дълго бавен отговор от `GET /api/usage/analytics` се използва повторно за същия низ на заявката (#15629). `0` деактивира кеша. | | `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1 сек.) | `src/lib/usage/analyticsResponseCache.ts` | Кешират се само аналитични отговори, чието генериране е отнело поне толкова време, така че малките инсталации винаги да получават актуални данни. | | `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Максимално време за изчакване на задачите за генериране на изображения от NanoBanana. | | `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Честота на проверяване на задачите на NanoBanana. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Базово забавяне за експоненциалното отстъпване при повторен опит за изпращане на заявка за мащабиране чрез Adobe Firefly. | | `AWS_REGION` | _(не е зададено)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Регион, използван за конструиране на крайните точки на AWS Bedrock (Kiro, аудио). | | `AWS_DEFAULT_REGION` | _(не е зададено)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Резервна стойност, когато `AWS_REGION` не е зададена. | | `CLOUDFLARE_ACCOUNT_ID` | _(не е зададено)_ | `open-sse/executors/cloudflare-ai.ts` | Идентификатор на акаунта за Cloudflare Workers AI. | | `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(не е зададено)_ | `open-sse/executors/cloudflare-playground.ts` | Пълен път до изпълнимия файл на настолната версия на Chrome за изпълнителя на Cloudflare AI Playground, използван, когато проверката на цифровия отпечатък в режим без графичен интерфейс блокира пакетирания с Playwright Chromium. | | `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) | `open-sse/executors/codebuddy/shared.ts` | Незадължително ограничение на дължината за системните подкани на извикващата страна, изпращани към CodeBuddy (CN и International). По подразбиране само подкана, съдържаща маркер за идентичност на програмен агент, се заменя с неутрална подкана (филтърът за съдържание на Tencent ги отхвърля); дългите подкани се запазват. Цяло число > 0 също заменя всяка системна подкана, по-дълга от посочения брой знаци; незададена стойност, `0` или стойност, която не е цяло число, деактивира ограничението. При всяка замяна се записва кое правило е задействано (маркер за идентичност или дължина). | | `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Заменя базовия адрес на REST API на Cloudflare, използван от инструмента за внедряване на Workers relay за пула от прокси сървъри (#4640 / 9router#1360). | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Име по подразбиране на worker проекта, предлагано в модалния прозорец „Внедряване на relay“ за пула от прокси сървъри. | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Задайте `false`, за да скриете опцията за Cloudflare Workers relay от раздела „Пул от прокси сървъри“. | | `CLOUDFLARED_BIN` | автоматично откриване | `src/lib/cloudflaredTunnel.ts` | Персонализиран път до изпълнимия файл `cloudflared`. | | `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Транспортен протокол на тунела: `http2` (по подразбиране), `quic` или `auto`. | | `CLOUDFLARED_CONFIG` | _(не е зададено)_ | `src/lib/cloudflaredTunnel.ts` | Път до локално управляван `config.yml` на cloudflared (с `tunnel:`, `credentials-file:`, `ingress:`). Когато е зададен, OmniRoute изпълнява `tunnel --config run` (именуван тунел) вместо временен бърз тунел. | | `CLOUDFLARED_HOSTNAME` | _(от ingress в конфигурацията)_ | `src/lib/cloudflaredTunnel.ts` | Замества публичното име на хост на именувания тунел (напр. `ai.example.com`), което се отчита като `publicUrl`/`apiUrl`. Когато не е зададено, се прочита от първото име на хост в `ingress` на конфигурацията. | | `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | Замества основния URL на REST API на Deno Deploy, използван от инструмента за внедряване на реле за прокси пула (#4643 / 9router#1437). | | `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Име по подразбиране на приложението в Deno Deploy, предлагано в модалния прозорец „Deploy Relay“ на прокси пула. | | `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Задайте `false`, за да скриете опцията за реле на Deno Deploy от раздела „Proxy Pool“. | | `SEARCH_CACHE_TTL_MS` | `300000` (5 мин.) | `open-sse/services/searchCache.ts` | TTL за кеширане на отговорите от API за търсене (Perplexity, Brave и др.). | | `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Показва експерименталния интерфейс за доставчик, съвместим с CC, за релета, предназначени само за Claude Code. | | `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | Замества хоста, на който слуша вградената инстанция на 9router. | | `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | Замества порта, на който слуша вградената инстанция на 9router. | | `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | Хост за обвързване на WebSocket проксито на вградената услуга (по подразбиране само loopback). | | `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Порт за WebSocket прокси сървъра на вградената услуга. | | `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | Хост на моста към CLIProxyAPI (наследена интеграция). | | `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | Порт на моста към CLIProxyAPI. | | `CLIPROXYAPI_API_KEY` | _(празно)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | Резервен ключ за равнината на данните, когато настройката `cliproxyapi_api_key` липсва. | | `CLIPROXYAPI_MANAGEMENT_KEY` | _(празно)_ | `src/lib/services/cliproxyAccountHealth.ts` | Ключ за управление за четене на състоянието на акаунта от външно управлявана инстанция на CLIProxyAPI. | | `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | Конфигурационна директория на CLIProxyAPI. | | `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Хост интерфейс, на който docker-compose публикува съпътстващия контейнер `cliproxyapi` (#12578). Неговият том с данни съдържа OAuth/API идентификационни данни на доставчика, а фиксираният образ няма заместване чрез променлива на средата за `api-keys` на равнината на данните (поддържа се само монтиран `config.yaml`), така че `0.0.0.0` излага услуга, съдържаща идентификационни данни, пред цялата LAN мрежа. | | `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | Замества порта, на който слуша вграденият демон Mux (coder/mux) за оркестрация на агенти (винаги 127.0.0.1). | | `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | Замества порта, на който слуша вграденият демон open-wa (автоматизация на WhatsApp Web) (винаги 127.0.0.1). | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Хост за обвързване/свързване на вградената услуга Dario (по подразбиране само loopback). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Порт на вградената услуга Dario. | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Хост за обвързване/свързване на вградената услуга Dario (по подразбиране само loopback). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Порт на вградената услуга Dario. | | `LOCAL_HOSTNAMES` | _(празно)_ | `open-sse/config/providerRegistry.ts` | Допълнителни имена на хостове, разделени със запетаи, които се третират като „локални“ (имена на Docker услуги и т.н.). | `ENABLE_CC_COMPATIBLE_PROVIDER` е предназначена само за релейни услуги на трети страни, които приемат единствено клиенти на Claude Code. OmniRoute пренаписва заявките, така че тези релейни услуги да ги приемат. Ако искате само да използвате Claude Code CLI или не сте сигурни какво представляват тези релейни услуги, оставете тази опция деактивирана и вместо това добавете обикновен доставчик, съвместим с Anthropic. --- ## 21. Състояние на прокситата | Променлива | Стойност по подразбиране | Файл източник | Описание | | ------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Време за изчакване в милисекунди за бърза проверка на състоянието. | | `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Времеви прозорец (в часове) за изчисляване на средната латентност на кандидат-прокситата при стратегия за избор от пула, оптимизирана за латентност. | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL на кеша за резултатите от проверките на състоянието. | | `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL на кеша за неуспешни проверки на състоянието на проксито. Поддържайте тази стойност по-кратка от `PROXY_HEALTH_CACHE_TTL_MS`, така че временните изтичания на времето за изчакване на проксито при висока конкурентност да се проверяват отново бързо, без да се деактивира механизмът за бърз отказ при действително неработещи проксита. | | `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Задайте `false`, за да деактивирате фоновия планировчик за проверка на състоянието на прокситата, който периодично проверява регистрираните проксита. | | `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Интервал в милисекунди между циклите на фоновия планировчик за проверка на състоянието (минимум `60000`). | | `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Интервал за проверка в ms за edge-relay проксита (`deno`/`vercel`/`cloudflare`), чиито проверки активират таксуван сървърлес изолат (минимум `60000`). | | `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Интервал в ms за фоново възстановително преминаване: колко често прокситата, които преди са били неработоспособни, се проверяват повторно, така че възстановено прокси да се върне в ротацията без рестартиране. Стойности под `60000` се връщат към стойността по подразбиране. | | `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Цел за проверка на достъпността, използвана от планировчика и крайната точка `/api/settings/proxies/auto-test`. Насочете я към вътрешен/самостоятелно хостван URL, за да избегнете публичната стойност по подразбиране. | | `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Брой проверки, стартирани едновременно за всяка партида, споделен от планировчика и крайната точка `/api/settings/proxies/auto-test`. Закръгля се надолу до цяло число, като минималната стойност е 1, а максималната — 50. | | `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Закъснение в ms между изпращанията на две проверки в рамките на една партида. Без него цялата партида се изпраща в един и същи момент и споделен изходящ IP адрес може да задейства ограничение на честотата на заявките на целта. Задайте `0`, за да деактивирате интервала; максималната стойност е 5000. | | `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Задайте „false“, за да спрете проверките към реалния хост на доставчика, назначен на проксито (`GET /models`, без API ключ), и вместо това винаги да използвате `PROXY_HEALTH_TEST_URL`. | | `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Когато е `false` (по подразбиране), автоматизираните проверки на достъпността (планировчикът + бутонът „Тестване на всички“ на `/api/settings/proxies/auto-test`) са **само за четене** и никога не променят състоянието на проксито — само операторът задава активно/неактивно състояние, така че нестабилна проверка да не може да блокира назначено прокси (#6246). Задайте `true`, за да възстановите предишното поведение за тестване и задаване на състоянието. | | `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Флаг за функция с изрично включване (вижте [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); заместваща стойност от БД на таблото има предимство). `true` (или `1`, `yes`) изпълнява повторни опити за празни преведени поточни ходове чрез нормалния път за идентификационни данни (до `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` повторни опита), вместо да връща празен отговор 200 или 502 с празно съдържание. | | `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Флаг за функция с изрично включване (вижте [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); заместваща стойност от БД на таблото има предимство). `true` (или `1`, `yes`) показва наблюдението само за четене на изходящия трафик на пула под съответния прокси пул в таблото (различни изходящи IP адреси, връзки и най-често срещания брой зад един IP адрес през последните 24 h според журнала на проксито). Никога не се използва за маршрутизиране. | | `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Флаг за функция с изрично включване (вижте [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); заместващата стойност от БД на таблото за управление е с приоритет). `true` (или `1`, `yes`) приема изпратени от оператора наблюдавани адреси с дата за всеки член на пула и ги обединява с прочетените от журнала за визуализация и подреждане на пула. | | `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Прозорец за наблюдение в часове за изпратените от оператора редове за изходящ трафик (прочита се при всяко четене; не е необходимо рестартиране). Ограничен е до 1..168; стойност извън диапазона, нечислова или празна стойност води до използване на 24 с еднократно предупреждение за целия процес, без да се хвърля изключение. | | `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Задайте `true`, за да позволите на планировчика автоматично да премахва проксита след повтарящи се последователни неуспехи. | | `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Брой последователни неуспехи, преди планировчикът автоматично да премахне прокси (когато `PROXY_AUTO_REMOVE=true`). | | `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Задайте `true`, за да позволите на планировчика да деактивира временно (състояние `dead`, без изтриване) прокси след повтарящи се последователни неуспехи, вместо да го премахва. Неразрушителна алтернатива на `PROXY_AUTO_REMOVE`: проксито незабавно отпада от определянето на пул/ротация (филтърът за активно състояние, използван при определянето на пул според обхвата, вече го изключва) и автоматично се активира отново, щом започне отново да преминава проверките. Използва същия праг `PROXY_AUTO_REMOVE_AFTER`. Ако и двата флага са `true`, `PROXY_AUTO_REMOVE` е с приоритет. | | `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Пасивно пропускане с изрично включване: когато е `true`, планировчикът пропуска проверката в реално време за крайна точка, чийто скорошен производствен трафик вече доказва изправността ѝ (поне един успех и нито един приписан на проксито неуспех в рамките на прозореца, като е наблюдаван точно един доставчик). По подразбиране е изключено: всяко прокси се проверява. | | `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Прозорец в ms за производствения трафик, анализиран от пасивното пропускане (ограничен до `60000..599999`). По-кратък е от 10-минутния интервал на обхождане, така че скорошен неуспех да има превес, вместо влиянието му да бъде размивано. | | `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Позволява на потоците за OAuth и валидиране на доставчик да заобикалят фиксирано прокси и да се свързват директно, когато предварителните проверки за достъпност на проксито са неуспешни. Действителният ред на приоритет е: заместваща стойност от БД за флагове за функции > променлива на средата > стойност по подразбиране. | | `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 сек.) | `src/lib/resilience/settings.ts` | Бюджет по подразбиране за **изчакване на опашката**: колко дълго една заявка може да чака свободен слот при доставчика и да остане на опашката, преди да бъде отхвърлена, без изобщо да достигне до upstream услугата. Таймерът се изчиства, след като задачата започне да се изпълнява — изпълнението се ограничава отделно чрез `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Променливата на средата задава само стойността по подразбиране: персистираната `resilienceSettings.requestQueue.maxWaitMs`, а след това `rateLimitOverrides.maxWaitMs` за конкретната връзка имат предимство пред нея. | | `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 мин.) | `open-sse/services/rateLimitManager.ts` | Горна граница за това колко дълго една допусната заявка може да остане в процес на изпълнение, преди резервацията ѝ за ограничаване на честотата да изтече — отделена от бюджета за изчакване на опашката, така че бавното начало на извличането при неинкрементални шлюзове да не води до изтичане на времето (#12027). | | `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (деактивирано) | `open-sse/services/rateLimitManager.ts` | Ограничение за допускане до опашката: отхвърляне с 429 `queue_full`, когато толкова заявки вече са на опашката. `0` = без ограничение (по подразбиране). | | `RATE_LIMIT_AUTO_ENABLE` | _(незададено)_ | `open-sse/services/rateLimitManager.ts` | Принудително включва/изключва предпазния механизъм за автоматично активиране на ограничаването на честотата независимо от персистираната настройка в таблото за управление. Приема `true`/`1`/`on` за принудително включване и `false`/`0`/`off` за принудително изключване. | | `PROVIDER_COOLDOWN_ENABLED` | _(незададено → изключено)_ | `open-sse/services/providerCooldownTracker.ts` | Глобално проследяване между заявки на периода за изчакване за доставчик/връзка, което се включва по желание. По подразбиране е ИЗКЛЮЧЕНО (припокрива се с Connection Cooldown / Provider Circuit Breaker). Приема `true`/`1`/`on` за активиране. | | `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | Минимален период за изчакване (ms), преди неуспешен доставчик/връзка да бъде изпробван повторно. Увеличава се експоненциално при последователни неуспехи. Използва се само когато `PROVIDER_COOLDOWN_ENABLED` е активирано. | | `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 мин.) | `open-sse/services/providerCooldownTracker.ts` | Максимална горна граница на периода за изчакване (ms), след която неуспешен доставчик/връзка се изпробва повторно независимо от останалото. Използва се само когато `PROVIDER_COOLDOWN_ENABLED` е активирано. | | `STREAM_RECOVERY_ENABLED` | _(незададено → изключено)_ | `src/lib/resilience/settings.ts` (начална стойност) → `open-sse/services/streamRecovery.ts` (логика) | **Какво представлява:** прозрачно възстановяване на прекъснати upstream потоци (порт от free-claude-code). Задържа началния SSE прозорец до `STREAM_RECOVERY.HOLDBACK_MS` (750 ms), така че прекъсване _преди потвърждаването_ — настъпило, преди какъвто и да е байт да достигне до клиента — да бъде отворено отново и опитано повторно незабележимо. **Кога да се активира:** при нестабилни/upstream услуги, които често прекъсват с 0 байта в началото на потока; оставете ИЗКЛЮЧЕНО, ако не можете да си позволите до 750 ms допълнително време до първия токен за всеки поток. Приема `true`/`1`/`on`. Задава началната стойност на персистираната настройка за устойчивост; веднъж зададена, настройката в таблото за управление има предимство. | | `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(не е зададено → изключено)_ | `src/lib/resilience/settings.ts` (начална стойност) → `open-sse/services/streamRecovery.ts` (логика) | **Какво:** продължаване по средата на потока (Фаза 4.4) — след прекъсване _след потвърждаване_ (байтовете вече са достигнали до клиента) заявката се изпраща отново с частичния текст като предварително попълнен отговор на асистента и липсващият суфикс се добавя към него. Само за съвместими с OpenAI потоци с обикновен текст; никога не се задейства, докато се изпълнява извикване на инструмент. **Кога да се активира:** при дълги генерирания, които се прекъсват по средата на отговора, и когато приемате възстановената крайна част да пристигне наведнъж, вместо токен по токен. Не зависи от `STREAM_RECOVERY_ENABLED` (различен рисков профил). Приема `true`/`1`/`on`. | | `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(не е зададено → изключено)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | Незадължителен сторожев механизъм за полезния изход на активния поток. Открива потоци, които продължават да изпращат фрагменти, но остават под конфигурираната скорост на изхода от асистента; сигналите за активност, събитията за употреба, празните делти и фазите на използване на инструменти/разсъждение не се представят за напредък. Отделен е от изчакванията при неактивност и абсолютните крайни срокове. | | `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Гратисен период преди оценката на пропускателната способност, ограничен до 0–600000 ms. | | `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Плъзгащ се прозорец за полезния изход, ограничен до 1000–600000 ms; преди прекъсване е необходим един пълен прозорец. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Минимална скорост в байтове за UTF-8 изхода от асистента (консервативен заместител за токените), ограничена до 1–1000000. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Минимална ненулева извадка от полезния изход, считана за измерима, ограничена до 1–1000000 байта. | | `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Интервал на разместване (ms) между проверките на състоянието на токените на доставчиците при стартиране. | | `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Минимално случайно отклонение (ms), добавяно към `HEALTHCHECK_STAGGER_MS` между проверките на състоянието на токените на доставчиците, за да се предотврати изпращането на много заявки наведнъж (Проблем #1220). | | `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Максимално случайно отклонение (ms), добавяно към `HEALTHCHECK_STAGGER_MS` между проверките на състоянието на токените на доставчиците, за да се предотврати изпращането на много заявки наведнъж (Проблем #1220). | | `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Размер на пакета за едновременни проверки при първоначалното обхождане за проверка на състоянието на токените; по-големите стойности проверяват повече връзки паралелно, а по-малките намаляват пиковото натоварване (Проблем #7875, регресия на #7719). | | `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Брой автоматични повторни опити при отговори за период на изчакване, ограничен до модела, преди връщане на грешка към клиента. | | `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Максимален интервал на изчакване (секунди) между повторните опити след период на изчакване. Ограничава се до тази стойност независимо от `Retry-After` от upstream услугата. | | `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL адрес на проксито Headroom за пестене на токени. Жизненият цикъл на таблото за управление (`api/headroom/*`) по подразбиране стартира локален CLI `headroom-ai` на loopback интерфейса; променяйте тази стойност само за да сочи към външно прокси Docker sidecar. | ### Константи за настройване на възстановяването на потока Поведението за задържане при възстановяване се настройва чрез твърдо зададени константи в `open-sse/config/constants.ts` (`STREAM_RECOVERY`), показани тук за справка — промяната им изисква редакция на кода, а не променлива на средата: - `STREAM_RECOVERY.HOLDBACK_MS = 750` — колко дълго се задържа началният SSE прозорец, така че при ранно прекъсване да може да се направи повторен опит, преди към клиента да бъде изпратен който и да е байт. - `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — твърд лимит на задържания прозорец; извършва се изпращане (flush + passthrough) веднага щом се натрупат толкова байтове, независимо от таймера. - `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — максимален брой прозрачни повторни отваряния на upstream потока, докато задържаните данни все още не са изпратени. > **Ограничение на честотата с плъзгащ се прозорец за всеки доставчик (без променлива на средата):** пренесеният от FCC > резервен механизъм за ограничаване на честотата с плъзгащ се прозорец за всеки доставчик съществува в кода > (`open-sse/services/providerDefaultRateLimit.ts`, свързан чрез > `open-sse/services/rateLimitManager.ts`), но се доставя с **празна карта по подразбиране** > и към момента **няма променлива на средата за оператори** — активира се само чрез тестова кука / > редакция на кода. Умишлено не е включен в таблицата по-горе. Ограничителят на relay заявките за всеки `(token, IP)`, > който _има_ настройка, е `RELAY_IP_PER_MINUTE` (§3 Мрежа и портове). --- ## 22. Отстраняване на грешки > [!CAUTION] > Тези променливи генерират **подробен изход** и може да разкрият чувствителни данни. **Никога не ги активирайте в продукционна среда.** | Променлива | Стойност по подразбиране | Файл източник | Описание | | ------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CURSOR_DEBUG` | _(не е зададена)_ | `open-sse/executors/cursor.ts` | Задайте `1`, за да активирате подробните регистрационни записи на Cursor executor (декодирани SSE фрагменти и др.). | | `CURSOR_STREAM_DEBUG` | _(не е зададена)_ | `open-sse/executors/cursor.ts` | Обратно съвместим псевдоним на `CURSOR_DEBUG`. | | `CURSOR_DUMP_FILE` | _(не е зададена)_ | `open-sse/executors/cursor.ts` | Незадължителен файлов път, в който се записват необработените декодирани Cursor фрагменти, когато `CURSOR_DEBUG=1`. | | `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Време на изчакване при неактивност на потока (ms) за Cursor executor. | | `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Допълнителен период (ms) след мек терминатор composer kv_after_text, когато в буфера остават байтове — дава време на последващо извикване на инструмента exec_mcp да завърши своя кадър. | | `CURSOR_TOOL_DIRECTIVE` | активирана (`!== "0"`) | `open-sse/executors/cursor.ts` | Директива за потвърждаване на инструмент, която кара composer-2.5 надеждно да изпълнява извиквания на инструменти. Задайте `0`, за да я деактивирате. | | `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(не е зададена)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | Дефиниран от оператора текст за системната подкана, който се добавя към системното съобщение СЛЕД превода (инжектиране след превода) и достига до пътищата codex/Responses и `/v1/messages`. Използва се също като префикс на директивата, премахван от повторените блокове на системния преамбюл. Оставете променливата незадана, за да деактивирате тази функция. | | `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (изключено) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | Задайте `1`, за да премахвате повторените блокове на преамбюла на системната подкана от началото на поток openai→claude. Изключено е по подразбиране — евристиките са съобразени с английска проза и променят полезния товар на отговора, така че отговор, който действително започва с такъв раздел, би го загубил. | | `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Време на изчакване за извличане на всяко изображение (ms) за отдалечен визуален вход `image_url`. | | `CURSOR_STATE_DB_PATH` | _(открива се автоматично)_ | `open-sse/utils/cursorVersionDetector.ts` | Заменя търсенето на базата данни за състоянието на Cursor IDE, използвана за откриване на версията на IDE. | | `CURSOR_AGENT_CLI_VERSION` | _(откриване / фиксиране)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Идентификатор на компилацията на Agent CLI (`YYYY.MM.DD-`) за `x-cursor-client-version: cli-…` при Agent Run. | | `CURSOR_AGENT_BIN` | _(не е зададена)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Път до изпълнимия файл на Cursor Agent, използван за генериране на изображения. Ако не е зададен, обработчикът използва `providerSpecificData.agentBin`, а след това PATH. | | `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Максимално реално време за всяко изображение (ms) за задачите на Cursor Agent за изображения. | | `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Ограничение на конкурентността за задачи за изображения на Cursor при споделено работно място. | | `CURSOR_IMG_MODEL` | заявка / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Заменя `--model` на Cursor CLI за задачите за изображения. | | `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Интервал за проверка на резултата от генерирането на изображения в UC (uncensored.com) (ms). | | `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Максимално реално време за проверка на резултата от генерирането на изображения в UC (ms). | | `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Интервал за проверка на резултата от генерирането на видео в UC (uncensored.com) (ms). | | `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Максимално реално време за проверка на резултата от генерирането на видео в UC (ms). | | `CURSOR_DATA_DIR` | _(открива се автоматично)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Заменя директорията с данни на Cursor Agent CLI (`…/versions/`); същата променлива се използва от официалния агент. | | `CURSOR_TOKEN` | _(не е зададена)_ | `scripts/ad-hoc/cursor-tap.cjs` | Директен bearer токен за Cursor, използван от инструментите за разработчици. | | `OMNIROUTE_LOG_REQUEST_SHAPE` | деактивирана (активира се изрично чрез `"1"`) | `src/app/api/v1/chat/completions/route.ts` | Регистрира маркери за типа и дължината на съдържанието при големи полезни товари за чат, когато е зададено `"1"`. Изключено е по подразбиране, за да се намали излишният шум в регистрационните записи. | | `DEBUG_RESPONSES_SSE_TO_JSON` | _(не е зададена)_ | `open-sse/handlers/responseTranslator.ts` | Задайте `true`, за да регистрирате подробности за преобразуването на Responses API от SSE→JSON. | | `DEBUG_CLAUDE_NONSTREAM` | _(не е зададена)_ | `open-sse/handlers/responseTranslator.ts` | Задайте `true`, за да показвате празни фрагменти textContent в пътя за преобразуване на отговори от Claude (само за отстраняване на грешки). | | `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(не е зададена)_ | Среда за E2E тестове | Задайте `true`, за да активирате режима за E2E тестове (облекчено удостоверяване, тестови механизми). | --- ## 23. Интеграция с GitHub Позволява на потребителите да съобщават за проблеми директно от таблото за управление. | Променлива | Стойност по подразбиране | Файл източник | Описание | | --------------------- | ------------------------ | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `GITHUB_ISSUES_REPO` | _(не е зададена)_ | `src/app/api/v1/issues/report/route.ts` | Хранилище във формат `owner/repo`. | | `GITHUB_ISSUES_TOKEN` | _(не е зададена)_ | `src/app/api/v1/issues/report/route.ts` | GitHub Personal Access Token с обхват `issues:write`. | | `GITHUB_TOKEN` | _(не е зададена)_ | сортиране на проблеми / помощни инструменти на облачния агент | Общ токен за достъп до GitHub, използван като резервен вариант за `GITHUB_ISSUES_TOKEN` и от помощните инструменти на облачния агент в `src/lib/cloudAgent/*`. | --- ## Сценарии за разгръщане За насоки за SRE на релейния бекенд (поведение на ts/bifrost/auto, разполагане на 9router спрямо CLIProxyAPI и стратегия за резервен режим при висока пропускателна способност) вижте [Стратегия за релейния бекенд](/docs/reference/RELAY_BACKEND_STRATEGY.md). ### Минимална локална разработка ```bash JWT_SECRET=$(openssl rand -base64 48) API_KEY_SECRET=$(openssl rand -hex 32) INITIAL_PASSWORD=dev123 PORT=20128 NODE_ENV=development ``` ### Продукционна среда с 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 ``` ### Изолирана среда / 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 с обратен прокси сървър (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. Изолирана среда за Skills (v3.8.0+) Ограничения и настройки за безопасност, прилагани, когато рамката Skills (`src/lib/skills/`) изпълнява дефинирани от потребителя автоматизации в изолирана среда. | Променлива | Стойност по подразбиране | Файл източник | Описание | | --------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 сек.) | `src/lib/skills/builtins.ts` | Ограничение на реалното време за всяко изпълнение на код на умение в изолирана среда. Твърд лимит; всичко, което го надхвърли, се прекратява. | | `SKILLS_EXECUTION_TIMEOUT_MS` | _(използва `SKILLS_SANDBOX_TIMEOUT_MS` като резервна стойност)_ | `src/lib/skills/` | Ограничение на времето за оркестриране на умения от високо ниво. Задайте по-висока стойност от `SKILLS_SANDBOX_TIMEOUT_MS`, за да позволите работни процеси с множество стъпки. | | `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | Максималният брой байтове, които едно умение може да прочете от отделен файл в изолираната среда. | | `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | Максималният брой байтове, улавяни от отделен HTTP отговор в рамките на умение. | | `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | Твърд лимит за броя знаци от stdout/stderr, връщани от извикване в изолираната среда. | | `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | Задайте `1`/`true`, за да разрешите изходяща мрежова комуникация от изолираната среда. По подразбиране е **изолирана** с цел безопасност. | | `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(празно)_ | `src/lib/skills/builtins.ts` | Разделен със запетаи списък с разрешени образи на контейнери за изпълнение в изолираната среда. Празна стойност означава само вградения образ по подразбиране. | | `SKILLS_SANDBOX_DOCKER_IMAGE` | _(вградена стойност по подразбиране)_ | `src/lib/skills/` | Образът на контейнер, използван при стартиране на изолирана среда, базирана на Docker. Заменете стойността, за да фиксирате персонализиран укрепен базов образ. | | `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | Среда за изпълнение на контейнери за изолиране на умения: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. `auto` избира най-подходящата инсталирана среда за съответната операционна система на хоста (Apple Container/OrbStack при macOS, WSL Container при Windows, Podman при Linux), като използва Docker като резервен вариант. | > [!CAUTION] > Активирането на `SKILLS_SANDBOX_NETWORK_ENABLED=true` отваря път за изходящ трафик от произволен код на умение. Комбинирайте го с `OUTBOUND_SSRF_GUARD_ENABLED=true` и строга политика за `CORS_ORIGIN`/прокси сървъра при споделени внедрявания. --- ## 25. Квоти на доставчика, тунели, резервни копия и други аспекти на средата за изпълнение Крайни точки за квоти на доставчика, мрежови тунели (Tailscale, Ngrok, MITM прокси за отстраняване на грешки), изходният пул 1Proxy, резервни копия на базата данни и малки настройки за отделни функционалности, използвани от слоя за изпълнение или скриптовете. | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | Низ за връзка с Redis за бекенда на ограничителя на честотата на заявките. | | `ALIBABA_CODING_PLAN_HOST` | _(продукционен хост)_ | `open-sse/services/bailianQuotaFetcher.ts` | Заменя хоста, използван за извличане на квотите за coding plan на Alibaba Bailian. | | `ALIBABA_CODING_PLAN_QUOTA_URL` | извлечен от хоста | `open-sse/services/bailianQuotaFetcher.ts` | Заменя пълния URL адрес за квотите на Alibaba Bailian. | | `QWEN_CLOUD_COOKIE` | _(не е зададено)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Бисквитка за конзолна сесия за шлюза за квоти на личния Token Plan в Qwen Cloud / Model Studio (API ключът за инференция не може да ги прочете). Копирайте цялата заглавка `Cookie` на заявката — тя съдържа `login_qwencloud_ticket` — от което и да е извикване на `api.json` към `cs-data.qwencloud.com` в home.qwencloud.com › Billing › Subscription (F12 › Network). Чувствителна и ограничена до сесията; предпочитайте полето `qwenCloudCookie` за отделната връзка в Dashboard. | | `QWEN_CLOUD_SEC_TOKEN` | _(не е зададено)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Ръчно заменя стойността на `sec_token` за конзолния шлюз на Token Plan. Стойността е чувствителна; когато не е зададена, модулът за извличане я определя от HTML кода на Dashboard чрез бисквитката. | | `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Заменя хоста на шлюза за модула за извличане на квотата на личния Token Plan (напр. `bailian-singapore-cs.alibabacloud.com` за конзолата на Model Studio). | | `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | URL адрес на Dashboard, използван за определяне на `sec_token` от HTML кода на вписаната сесия. | | `XIAOMI_MIMO_CONSOLE_COOKIE` | _(не е зададено)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Бисквитка за конзолна сесия за API за квоти на Xiaomi MiMo Token Plan (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — API ключът за инференция не може да ги прочете). Копирайте цялата заглавка `Cookie` на заявката — тя съдържа `api-platform_serviceToken` и `userId` — от която и да е заявка към `platform.xiaomimimo.com` на страницата Token Plan (F12 › Network). Чувствителна и ограничена до сесията; предпочитайте полето `xiaomiMimoConsoleCookie` за отделната връзка в Dashboard. | | `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Месечен бюджет (Credits) за проследявания от OmniRoute резервен вариант Xiaomi MiMo, използван, когато не е конфигурирана конзолна бисквитка. По подразбиране е 4,1 млрд. за ниво Lite; задайте го на броя Credits за плана (Standard 11 млрд. / Pro 38 млрд. / Max 82 млрд.). Заместващата стойност `providerSpecificData.monthlyTokenLimit` за отделна връзка има предимство пред тази променлива на средата. | | `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Заместващ път за интерфейса на конзолата за извличане на квотата за изображения/медия от безплатното ниво на Alibaba Model Studio. | | `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Заместващ път за интерфейса на конзолата за извличане на мултимодалната квота от безплатното ниво на Alibaba Model Studio. | | `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Заместващ път за интерфейса на конзолата за извличане на аудиоквотата от безплатното ниво на Alibaba Model Studio. | | `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(не е зададено)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Незадължителен път до локален JSON файл, който заменя вградения списък с разрешени текстови модели за безплатното ниво на Alibaba. Ако не е наличен, се използва `$DATA_DIR/alibaba-free-tier-allowlist.json`, а след това `config/alibaba-free-tier-allowlist.json`. | | `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Токени, запазени за изходните данни от завършването при изчисляване на бюджетите за подканите. | | `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Броят на най-новите вградени изображения, които да се запазят при премахване на по-старите, за да се вместят в контекстния прозорец (#8560). | | `MODEL_ALIAS_COMPAT_ENABLED` | активирано | `open-sse/services/model.ts` | Превключва наследения слой за съвместимост с псевдоними на модели, използван от по-стари клиенти. | | `OMNIROUTE_EMERGENCY_FALLBACK` | активирано | `open-sse/services/emergencyFallback.ts` | Задайте `false` (или `0`), за да деактивирате аварийния резервен механизъм при изчерпване на бюджета, който пренасочва неуспешните заявки към безплатния модел `nvidia`/`openai/gpt-oss-120b`. Ефективният приоритет е: заместваща стойност от базата данни Feature Flags > променлива на средата > стойност по подразбиране; ако не е налична, услугата използва директната стойност на променливата на средата. | | `COMMAND_CODE_CALLBACK_PORT` | _(не е зададено)_ | `src/app/api/providers/command-code/auth/shared.ts` | Локален порт, използван за обратни извиквания в стил OAuth от помощния инструмент Command Code CLI. | | `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Стойност, изпращана като заглавката `x-command-code-version` към отдалечената услуга Command Code. Задайте друга стойност, за да актуализирате версията на CLI. | | `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Базов URL за отдалечената услуга на Command Code за потребление/квоти, използвана от телеметрията за извличане на квоти за смартфони. Задайте друга стойност за самостоятелно хостван или алтернативен API на Command Code. | | `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Локален порт за свързване на MITM проксито за отстраняване на грешки. | | `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Задайте `1`, за да деактивирате TLS проверката на отдалечената услуга (само за разработка). | | `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Време на изчакване при неактивност на сокета (ms) за проксирани връзки; сокетите, които останат неактивни след този период, се прекратяват, за да се избегне изтичане на полуотворени тунели. | | `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Портът, на който слуша MITM мостът на Antigravity. | | `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Крайна точка на маршрутизатора, към която мостът препраща трафика на Antigravity. | | `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Заменя директорията, от която мостът чете своите TLS материали. Моделът на сертификатите се избира по същия начин, както при сървъра AgentBridge: `server.crt`/`server.key` за наследена инсталация с краен сертификат; в противен случай — `ca.crt`/`ca.key` (главен CA и отделен краен сертификат за всеки прихванат хост; налага се чрез `MITM_ROOT_CA_ENABLED=true`). Мостът се прекратява при стартиране, ако липсват файловете за активния модел. | | `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Подробност на регистрационните съобщения за решенията при маршрутизиране: `0` ги изключва, а по-високите стойности регистрират повече решения за заобикаляне/маршрутизиране. | | `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Задайте `true`, за да включите модела с главен CA и отделен краен сертификат за всеки хост (#6684). Новите инсталации го получават автоматично; инсталациите с предварително съществуващ доверен наследен краен сертификат запазват наследения сертификат с фиксирани SAN, освен ако моделът не бъде изрично включен. | | `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Задава се ОТ MITM мениджъра за стартирания прокси процес (`root-ca` \| `legacy`) — отразява решението за миграция на сертификатите и не е предназначено за ръчно задаване. | | `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Задайте `1` (истинна стойност), за да премахнете началното `sudo` от командите за доверяване на MITM сертификата — за внедрявания без root достъп / с потребителски пространства от имена, при които операторът се доверява на CA ръчно (напр. чрез механизма на Node за допълнителни CA сертификати). | | `SKIP_ANTIGRAVITY_DNS` | _(не е зададено)_ | `src/mitm/dns/provision.ts` | Задайте `true`, за да пропуснете изцяло създаването на DNS записи в `/etc/hosts` за имената на хостове на Antigravity проксито — за контейнери без наличен sudo/root достъп. | | `OMNIROUTE_SKIP_DNS_WRITE` | _(не е зададено)_ | `src/mitm/dns/dnsConfig.ts` | Задайте `1`, за да пропуснете записването във файла hosts при добавяне/премахване на DNS записи — за изолирани тестови среди или такива само за четене. | | `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Предпазна мярка само за тестове/CI: задайте `1`, за да не извършват никакво действие инсталирането/деинсталирането на доверие към сертификата, така че тестовият пакет никога да не променя хранилището за доверие на ОС. Задава се автоматично от конфигурацията на тестовете и работните процеси на CI. | | `CHANGELOG_BASE_REF` | _(автоматично)_ | `scripts/check/check-changelog-integrity.mjs` | Изрична базова референция за защитата срещу изтриване на CHANGELOG (по подразбиране е базовият клон на PR в CI или най-високият `release/v*`). | | `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Задайте `true`, за да активирате фоновия планировчик за автоматична синхронизация на пула от безплатни проксита. Активира се по избор и е изключен по подразбиране. | | `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | Интервал за автоматична синхронизация в милисекунди (по подразбиране 30 мин). | | `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | Активира източника на безплатни проксита 1proxy. Задайте `false`, за да го деактивирате. | | `FREE_PROXY_1PROXY_API_URL` | _(вижте oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Заместващ URL адрес за API на 1proxy. | | `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Максимален брой проксита, извличани от 1proxy при всяка синхронизация. | | `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | Минимален праг за оценка на качеството при импортиране от 1proxy. | | `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Активира безплатния източник на прокси сървъри Proxifly. Задайте на `false`, за да го деактивирате. | | `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Брой прокси сървъри, които да се извличат при всяка синхронизация с Proxifly. | | `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | Филтър за ниво на анонимност за Proxifly (`elite`, `anonymous`, `transparent`). | | `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | Активира безплатния източник на прокси сървъри IPLocate. Само с изрично включване. | | `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Замества основния URL адрес на списъка с прокси сървъри на IPLocate. | | `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Активира източника на прокси сървъри Webshare. Задайте на `false`, за да го деактивирате; необходимо е също да бъде зададена променливата `FREE_PROXY_WEBSHARE_API_KEY`. | | `FREE_PROXY_WEBSHARE_API_KEY` | _(няма)_ | `src/lib/freeProxyProviders/webshare.ts` | API токен за акаунта в Webshare (`Authorization: Token `). Задължителен — доставчикът остава деактивиран без него. | | `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Замества URL адреса на API за списъка с прокси сървъри на Webshare. | | `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Максимален брой прокси сървъри, импортирани при всяка синхронизация с Webshare. | | `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Показва/скрива бутона за внедряване на Vercel Relay в раздела Proxy Pool. | | `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Замества базовия URL адрес на Vercel API (за тестване). | | `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Име на проекта по подразбиране, предварително попълнено в модалния прозорец за внедряване на Vercel Relay. | | `TAILSCALE_BIN` | _(автоматично откриване)_ | `src/lib/tailscaleTunnel.ts` | Изричен път до изпълнимия файл `tailscale`. | | `TAILSCALED_BIN` | _(автоматично откриване)_ | `src/lib/tailscaleTunnel.ts` | Изричен път до изпълнимия файл на демона `tailscaled`. | | `TAILSCALE_AUTHKEY` | _(не е зададено)_ | `src/lib/tailscaleTunnel.ts` | Предварително споделен ключ за удостоверяване в Tailscale за неинтерактивно изпълнение или изпълнение без графичен интерфейс на `tailscale up` (предава се чрез `--auth-key=`). Когато не е зададен, влизането се извършва чрез интерактивния URL адрес за удостоверяване в браузъра. | | `NGROK_AUTHTOKEN` | _(не е зададено)_ | `src/lib/ngrokTunnel.ts` | Удостоверява изходящите тунели на ngrok. | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Максимален брой файлове с резервни копия на SQLite, запазвани при ръчно или планирано почистване на резервните копия. Моментните снимки за миграция се адресират по съдържание и се използват повторно при идентично състояние на базата данни; те не се премахват в рамките на прозореца за паралелна миграция. Заменя стойността, запазена от Настройки → Съхранение на резервни копия на базата данни. | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Максимална възраст (в дни) на файловете, запазвани при ръчно или планирано почистване на резервните копия. `0` деактивира премахването въз основа на възрастта. Моментните снимки за миграция не се премахват в рамките на прозореца за паралелна миграция. Заменя стойността, запазена от Настройки → Съхранение на резервни копия на базата данни. | | `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Интервалът на изпълнение (в ms) на сървърната задача, която изпълнява `backup-schedule.json`. Той трябва да остане значително под едноминутната гранулярност на cron; стойности под `5000` или такива, които не могат да бъдат анализирани, по подразбиране се заменят с `30000`. | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Подсказка за средата за изпълнение на контейнери при проверката на разрешенията в началната точка. Задайте на `podman` за всяка топология с Podman. Тъй като контейнерът не може да определи дали машината се изпълнява локално, или е достъпна чрез Podman Machine, предупреждението остава неутрално спрямо топологията и препраща към `contrib/podman/README.md`. | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Бекенд за хранилището за потреблението на дялове от квотата: `sqlite` (по подразбиране) или `redis`. | | `QUOTA_STORE_REDIS_URL` | _(не е зададено)_ | `src/lib/quota/storeFactory.ts` | Низ за връзка с Redis, използван, когато `QUOTA_STORE_DRIVER=redis` (напр. `redis://localhost:6379`). | | `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | Коефициент на насищане на пула (0..1); при достигането или надвишаването му пулът преминава в строг режим (без заемане). | | `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Множител на оценката (0..1), прилаган към цел, когато политиката за мека квота понижава приоритета ѝ. | | `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Множител на оценката (0..1), прилаган към изчерпан доставчик (`credits_exhausted`/`rate_limited`) при автоматичното комбинирано оценяване, когато предварителното ограничаване по квота е ИЗКЛЮЧЕНО (#4540). | | `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Период на съхранение (в дни) за интервалите в `quota_consumption` преди събирането на отпадъци (`gcQuotaConsumption`). | | `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Включваема настройка (ИЗКЛЮЧЕНА по подразбиране): активира строгото ограничаване по квота при автоматично маршрутизиране, което премахва кандидатите с ниска квота преди оценяването. | | `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Включваема настройка (ИЗКЛЮЧЕНА по подразбиране): когато филтър `auto/:` не съвпада с нито един свързан кандидат, възстановява старото поведение за резервно връщане към пълния (нефилтриран) пул вместо връщане на празен пул. При настройка ИЗКЛЮЧЕНО по подразбиране `:free` означава „само безплатно ниво“. | | `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Горна граница за размера на панела (ограничена до 1–10) за варианта с разпространение `auto/*:chaos` — една заявка се разпределя към най-много толкова модела от различни доставчици. | | `OMNIROUTE_CHAOS_MIN_PANEL` | _(по подразбиране от системата)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Настройка на минималния размер на панела, предавана към обработчика за хаотично разпространение; ако не е зададена, се запазва стойността по подразбиране на системата. | | `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(по подразбиране от системата)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Твърдо ограничение на времето (ms) за цялостното паралелно разпращане към хаотичния панел; ако не е зададено, се запазва стойността по подразбиране на системата. | | `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Път до файла `auth.json` на Grok CLI, използван за извличане на седмичната квота за grok-web; може да бъде променен за тестове или нестандартна инсталация на CLI. | | `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(не е зададено)_ | `src/mitm/manager.ts` | Допълнителен сертификат на сертифициращ орган (PEM), считан за доверен при TLS връзките на AgentBridge към сървъри нагоре по веригата. | | `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Максимален брой прихванати заявки, съхранявани в пръстеновидния буфер на Traffic Inspector. | | `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Максимален размер (KB) на прихванатото тяло на заявка/отговор преди съкращаване. | | `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Локален порт за HTTP прокси сървъра на Traffic Inspector. | | `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Автоматично стартиране на HTTP прокси сървъра на инспектора при зареждане. | | `INSPECTOR_LLM_HOSTS_EXTRA` | _(не е зададено)_ | `src/lib/inspector/captureState.ts` | Допълнителни имена на хостове (разделени със запетаи), третирани като LLM крайни точки за прихващане. | | `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | Маскиране на поверителни данни (заглавки за удостоверяване/API ключове) в прихванатия трафик. | | `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | Минути преди защитният механизъм на системното прокси автоматично да възстанови настройките за прокси на ОС. | | `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(автоматично)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Токен, удостоверяващ вътрешното подаване на прихванати данни към инспектора. | | `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Максимален брой колони една до друга в режима за сравнение на Playground. | | `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(не е зададено)_ | `src/app/(dashboard)/dashboard/playground/` | Модел по подразбиране за действието „подобряване на подканата“ в Playground (ако не е зададен, се използва активният модел). | | `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Главен прекъсвач за страничното прокси Bifrost. Когато е зададен на `0`, маршрутът връща 503 със заглавката `X-Bifrost-Killswitch`, а операторът се пренасочва към TS пътя. Използвайте го, за да деактивирате страничната услуга без повторно внедряване (инцидент с маршрутизатор от ниво 1, ротация на ключове). | | `BIFROST_BASE_URL` | _(не е зададено)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Когато е зададен, маршрутът на страничното прокси Bifrost препраща трафика от `/v1/chat/completions` към този Go шлюз вместо към TS обработчика за препредаване. Ако не е зададен → 503 с резервно пренасочване. Завършващата наклонена черта се премахва. | | `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Портът, към който се свързва контролираната вградена услуга Bifrost (`127.0.0.1:`), когато OmniRoute управлява жизнения цикъл на страничната услуга Bifrost. Стойността по подразбиране е `8080`. | | `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Портът, към който се свързва контролираната услуга за компресиране LLMLingua (`127.0.0.1:`). Стойността по подразбиране е `20135`. | | `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | Базов URL адрес за локалния демон на HTTP микроуслугата за компресиране LLMLingua. Стойността по подразбиране е `http://127.0.0.1:20135`. | | `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | Идентификаторът на модела в Hugging Face, който контролираната странична услуга LLMLingua зарежда (предава се към средата на дъщерния процес). | | `BIFROST_API_KEY` | _(не е зададено)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | API ключ за шлюза Bifrost (изпраща се като `Authorization: Bearer ...`). Ако не е зададен, маршрутът очаква заявката да съдържа валиден API ключ за OmniRoute; този ключ е само за удостоверяване от страна на шлюза. | | `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Когато е `true`, маршрутът на страничния процес Bifrost предава поточно отговорите обратно чрез SSE през шлюза, вместо чрез TS изпълнителя за поточно предаване. Задайте `0`, за да наложите непоточни JSON отговори през шлюза. | | `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Време за изчакване за всяка заявка при проксиране към шлюза Bifrost (ms). При изтичане на времето за изчакване маршрутът връща TS пътя на релето чрез заглавката `X-Bifrost-Fallback`. | | `OMNIROUTE_BIFROST_KEY` | _(не е зададено)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Псевдоним за `BIFROST_API_KEY` (използван от скриптове, които четат променливите на средата чрез `OMNIROUTE_*`). `BIFROST_API_KEY` има предимство, когато са зададени и двете. | | `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Backend на релето за `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript реле (по подразбиране, когато Bifrost не е конфигуриран); `auto` избира Bifrost, когато `BIFROST_BASE_URL` е зададен и `BIFROST_ENABLED` ≠ `0`, с автоматично резервно преминаване към TS, ако страничният процес е недостъпен; `bifrost` налага Bifrost (строг режим, без резервно преминаване). Удостоверяването/ограничаването на честотата/защитата срещу инжектиране/списъкът с разрешени винаги се изпълняват първо в маршрута Next. Отговорите съдържат `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. | | `RELAY_ROUTING_BACKEND` | _(не е зададено)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Приеман псевдоним за `OMNIROUTE_RELAY_BACKEND` (същите стойности `ts \| bifrost \| auto`). `OMNIROUTE_RELAY_BACKEND` има предимство, когато са зададени и двете. | | `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | Период на изчакване (ms), след като преминаване през страничния процес Bifrost е неуспешно в режим `auto`, преди релето да опита отново страничния процес; докато трае периодът на изчакване, то насочва директно към TS пътя, след което опитва отново. `0` го деактивира. Прилага се само когато `OMNIROUTE_RELAY_BACKEND=auto`. | | `OMNIROUTE_TLS_CERT` | _(не е зададено)_ | `bin/cli/commands/serve.mjs` | Път до PEM TLS сертификат за обслужване на `omniroute serve` през HTTPS (еквивалентно на `--tls-cert`). Трябва да се използва заедно с `OMNIROUTE_TLS_KEY`; след това самостоятелният сървър прекратява TLS на същия слушател (`wss://` продължава да работи без промени). Ако не е зададено → обикновен HTTP. Предоставянето само на сертификат или ключ, или на нечетим път, записва предупреждение в журнала и запазва HTTP. | | `OMNIROUTE_TLS_KEY` | _(не е зададено)_ | `bin/cli/commands/serve.mjs` | Път до PEM TLS частния ключ за HTTPS на `omniroute serve` (еквивалентно на `--tls-key`). Трябва да се използва заедно с `OMNIROUTE_TLS_CERT`. Вижте `OMNIROUTE_TLS_CERT`. | | `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Главен превключвател за маршрутите `/api/local/*`. Когато не е зададен или е `0`, всички маршрути `/api/local/*` връщат 503 в производствена среда. Трябва да бъде `1` при внедрявания извън loopback, за да се активират стартерът на Redis и подобни стартери с едно щракване за локални услуги. Допълнителна защита заедно с класификацията от защитата на маршрутите `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` в `src/server/authz/routeGuard.ts`). | | `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(не е зададено)_ | `src/lib/security/localEndpoints.ts` | Bearer токен за извикващи `/api/local/*`, които не са на loopback (напр. настолното приложение). Когато е зададен, заявките от IP адреси извън loopback трябва да съдържат `Authorization: Bearer `. Задължителен е, когато `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` при внедрявания извън loopback. | | `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Име на контейнера за стартиране на Redis с 1 щракване (`omniroute redis up`). Използва се както от CLI, така и от графичния интерфейс `RedisLauncherPanel`. | | `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Порт на хоста за стартиране на Redis с 1 щракване. Променете го, ако порт 6379 на хоста вече се използва. Вътрешният порт на контейнера остава 6379. | | `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Интерфейс на хоста, на който се публикува Redis при стартиране с 1 щракване. Redis се стартира БЕЗ парола, така че обвързването с `0.0.0.0` предоставя на всеки хост във вашата LAN неавтентикиран достъп до Redis — разширявайте достъпа само ако сами зададете парола на инстанцията. | | `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Интерфейс на хоста, на който docker-compose публикува страничната услуга Redis (#9286). Redis в compose работи без `requirepass`; контейнерите на приложението осъществяват достъп до него през мрежата на compose (`redis:6379`) — публикуваният порт съществува само за инструменти, работещи на хоста. `0.0.0.0` излага неавтентикиран Redis към цялата LAN. | | `REDIS_PORT` | `6379` | `docker-compose.yml` | Порт на хоста за страничната услуга Redis в compose. | | `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Интерфейс на хоста, на който docker-compose публикува собствените портове на приложението за таблото, API и live-WS (#12568). Тъй като `REQUIRE_API_KEY=false` се предоставя като стойност по подразбиране в `.env.example`, `0.0.0.0` излага анонимния LLM прокси `/v1` към цялата LAN/WAN — разширявайте достъпа едва след като зададете `REQUIRE_API_KEY=true` или поставите отпред обратен прокси сървър, който налага собствено удостоверяване. | | `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Интерфейс на хоста, на който docker-compose публикува страничната услуга за памет Qdrant (#12578). Важи същата логика за излагане в LAN като при `REDIS_BIND_HOST`. | | `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Интерфейс на хоста, на който docker-compose публикува страничната услуга на маршрутизатора Bifrost (#12578). Важи същата логика за излагане в LAN като при `REDIS_BIND_HOST`. | | `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Префикс на пространството от имена, прилаган към всеки Redis ключ на OmniRoute (ограничител на честотата, кеш за удостоверяване, хранилище за квоти, прекъсвач на веригата при предварително загряване). Предотвратява колизии на ключове, когато Redis инстанцията се споделя с други приложения (#11042). | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(не е зададено — механизмът е деактивиран)_ | `src/lib/api/internalServiceAuth.ts` | Споделена тайна за вътрешни REST преходи със запазване на самоличността (#9260): компонентите на OmniRoute, които извикват други локални маршрути на OmniRoute, я изпращат като `x-omniroute-internal-service-token`, за да се запази самоличността на първоначалния извикващ. Сравнява се чрез `timingSafeEqual`. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(не е зададено)_ | `src/lib/api/internalServiceAuth.ts` | Вариант на токена за вътрешната услуга чрез файл с тайна: път до файл, чието съдържание след премахване на празните символи в началото и края е токенът. Използва се само когато вградената променлива не е зададена. | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Допълва списъка с доставчици в таблото за управление със статистика за седмичното класиране от OpenRouter (#9324). Активирано е по подразбиране; задайте `false`, за да пропуснете изцяло фоновото извличане (не блокира и никога не води до фатална грешка). | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24 ч.) | `src/lib/catalog/openrouterProviderStats.ts` | TTL на кеша за моментната снимка на статистиката за доставчиците от OpenRouter, в милисекунди. | | `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Образ на Redis, използван от инструмента за стартиране на Redis с едно щракване. При необходимост задайте вместо него `redis:8-alpine` или огледален образ в частен регистър. | | `QDRANT_HOST` | `qdrant` | _(профил на клъстер с изрично активиране)_ | Име на хоста на страничния контейнер Qdrant, когато `--profile memory` е активен. Стойността по подразбиране сочи към името на услугата qdrant във вътрешната мрежа; променете я при външно внедряване. Използва се само когато `qdrantEnabled` е `true` в кода (`src/lib/memory/vectorStore.ts:108`). | | `QDRANT_PORT` | `6333` | _(профил на клъстер с изрично активиране)_ | REST порт на страничния контейнер Qdrant. | | `QDRANT_GRPC_PORT` | `6334` | _(профил на клъстер с изрично активиране)_ | gRPC порт на страничния контейнер Qdrant. Използва се от клиентски библиотеки, които предпочитат gRPC пред REST за операции с поточно предаване. | | `QDRANT_API_KEY` | _(не е зададено)_ | _(профил на клъстер с изрично активиране)_ | Незадължителен API ключ за Qdrant Cloud или удостоверен локален екземпляр. Празна стойност → не се изпраща заглавка `api-key`. | | `QDRANT_COLLECTION` | `omniroute-memory` | _(профил на клъстер с изрично активиране)_ | Име на колекцията за векторните представяния на паметта за разговори на OmniRoute. Създава се при първото изпълнение с броя измерения, зададен от `QDRANT_VECTOR_SIZE`. | | `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(профил на клъстер с изрично активиране)_ | Име на модела за векторни представяния по подразбиране, записано в метаданните на колекцията Qdrant. Действителните векторни представяния се генерират от доставчика, към когото сочи полето `embeddingModel` в настройките на OmniRoute. | | `QDRANT_VECTOR_SIZE` | `1536` | _(профил на клъстер с изрично активиране)_ | Размерност на вектора за вграждане. Трябва да съвпада с модела, с който създавате вграждания (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). | | `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(профил на клъстер с изрично активиране)_ | Точност при изграждането на HNSW индекса. По-висока стойност = по-бавно изграждане, по-бързо търсене. | | `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Главен превключвател за конфигурирано от оператора ротиране на акаунти. Когато е `false`, никой от класовете `OMNIROUTE_ROTATE_*` по-долу не задейства преминаване към резервен акаунт (изключеното състояние на главния превключвател блокира и активираните по подразбиране класове 429/500/502). Позволява на контролиращ интерфейс (напр. настолното приложение VibeProxy) да пренесе собствените си правила за ротиране към механизма на сървъра за преминаване към резервен акаунт. | | `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Период на изчакване (в секунди), прилаган към акаунт с ограничена честота на заявките, когато услугата нагоре по веригата не предоставя изрично указание за нулиране. `0` = използване на периода на изчакване по подразбиране на механизма вместо фиксирана заместваща стойност. | | `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Съответства на настройката на интерфейса „да не се маркира като ограничен по честота без време за нулиране“. | | `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | Активиране на преминаването към резервен акаунт за грешки със статус `429`. Когато е `false` (и `OMNIROUTE_ROTATION_ENABLED=true`), грешка `429` вече не задейства ротиране на акаунта, а вместо това се връща на клиента. | | `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Брой грешки `429` в рамките на `OMNIROUTE_ROTATE_429_WINDOW_SECONDS`, необходими преди ротиране на акаунта. `1` (по подразбиране) задейства незабавно ротиране, като запазва досегашното поведение. | | `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Плъзгащ се времеви прозорец (в секунди), в който грешките `429` се отчитат спрямо `OMNIROUTE_ROTATE_429_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | Активиране на преминаването към резервен акаунт за сървърни грешки `5xx` (с изключение на `502`, която има собствен клас). Когато е `false`, тези грешки вече не задействат ротиране на акаунта. | | `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Брой грешки `5xx` в рамките на `OMNIROUTE_ROTATE_500_WINDOW_SECONDS`, необходими преди ротиране на акаунта. `1` (по подразбиране) задейства незабавно ротиране. | | `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Плъзгащ се прозорец (в секунди), в рамките на който грешките `5xx` се отчитат спрямо `OMNIROUTE_ROTATE_500_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | Активиране на резервното превключване за грешки със статус `502` (невалиден шлюз). Когато е `false`, грешките `502` вече не задействат смяна на акаунта. | | `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Брой грешки `502` в рамките на `OMNIROUTE_ROTATE_502_WINDOW_SECONDS`, необходими преди смяната на акаунта. При `1` (по подразбиране) смяната се извършва незабавно. | | `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Плъзгащ се прозорец (в секунди), в рамките на който грешките `502` се отчитат спрямо `OMNIROUTE_ROTATE_502_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | Изрично включване (по подразбиране е ИЗКЛЮЧЕНО): когато е `true`, обикновена грешка `400` (невалидна заявка) също задейства смяна на акаунта. Това поведение е само допълващо — то никога не възпрепятства съществуващото поведение на механизма, при което грешка `400`, съдържаща текст за ограничение на честотата/квотата, задейства резервно превключване независимо от този флаг. | | `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Брой грешки `400` в рамките на `OMNIROUTE_ROTATE_400_WINDOW_SECONDS`, необходими преди смяната на акаунта (проверява се само когато `OMNIROUTE_ROTATE_ON_400=true`). | | `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Плъзгащ се прозорец (в секунди), в рамките на който грешките `400` се отчитат спрямо `OMNIROUTE_ROTATE_400_THRESHOLD`. | ### Планировчик за предварително активиране на Claude Предварително активиране, управлявано чрез cron, за включени Anthropic OAuth връзки, така че 5-часовият прозорец за ограничение на честотата да се отваря чрез проста планирана заявка, вместо чрез първата реална заявка (#8848). Планировчикът е изключен, освен ако `OMNIROUTE_WARMUP_ENABLED` има стойност, интерпретирана като истина, **и** връзката е отбелязана в `settings.claudeWarmup.connections`; празен списък с връзки означава, че не се извършва предварително активиране, дори когато променливата на средата е включена. | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ------------------------------ | ----------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_WARMUP_ENABLED` | _(не е зададена → изключено)_ | `src/lib/warmupScheduler.ts` | Главен превключвател за планировчика за предварително загряване. Приема `1`/`true`/`yes`/`on` (без значение от регистъра, с премахнати околни интервали). Всяка друга стойност или липсата на такава оставя планировчика изключен. | | `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Cron израз с пет полета за такта на предварителното загряване, изчисляван в `America/Los_Angeles` (часовата зона за нулиране на Anthropic), независимо от часовника на хоста. | | `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | Колко връзки се загряват паралелно при всеки такт. Ограничава се до `1`-`10`; при нечислова стойност се използва `3`. | | `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | Моделът, използван за заявката за предварително загряване. Заменяйте го само ако стандартният модел не е наличен във вашия план; изберете най-евтиния модел, който все пак отваря прозореца. | ### VNC сесии за влизане през браузър и псевдоним за директорията с данни Контейнеризиран Chromium+VNC, използван за интерактивно прихващане на идентификационни данни при влизане през браузър (`/api/vnc-session`), както и наследен псевдоним `DATA_DIR`. Всички настройки са незадължителни — стойностите по подразбиране за VNC са предназначени за включения образ `omniroute-vnc-chromium:local` и се заменят само при използване на персонализиран контейнерен образ, портове или настройка на жизнения цикъл. | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Етикет на Docker образа за контейнера за влизане с Chromium+VNC. Изградете `docker/vnc-browser/chromium` или задайте тук персонализиран образ. | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Изпълним файл на средата за контейнери, използван за стартиране на VNC контейнера (напр. задайте `podman`). | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC/noVNC порт, достъпен в контейнера. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Порт за Chrome DevTools Protocol в контейнера. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Път до директорията с профила на Chromium в контейнера. | | `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | Директория на хоста, съдържаща запазените профили за влизане през браузър. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 мин.) | `src/lib/vncSession/manifest.ts` | Време на изчакване при неактивност (мс), след което неактивната VNC сесия се прекратява. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 мин.) | `src/lib/vncSession/manifest.ts` | Твърдо ограничение (мс) за продължителността на една VNC сесия. | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Максимален брой едновременни VNC сесии. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Време на изчакване (мс), докато контейнеризираният браузър стане готов за CDP. | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Време на изчакване (мс) за извличане на прихванатата сесия/бисквитки след завършване на влизането. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | Допълнителни флагове от командния ред, предавани на контейнеризирания Chromium. | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Специализирана Docker мрежа, към която се присъединява VNC контейнерът за влизане (#12571) вместо към стандартния мост, така че съседните контейнери да не могат да достигат неговия CDP мостов порт. | | `VIBEPROXY_DATA_DIR` | _(не е зададена)_ | `open-sse/services/notionThreadSessions.ts` | **Наследен псевдоним** за `DATA_DIR`, проверяван само ако нито `DATA_DIR`, нито `OMNIROUTE_DATA_DIR` са зададени. Определя местоположението на кеша за сесиите на уеб нишките в Notion (`/notion-web-thread-sessions.json`). | --- ## 26. Тестов и E2E инструментариум Използва се от `scripts/dev/run-next-playwright.mjs`, `scripts/dev/smoke-electron-packaged.mjs`, `scripts/dev/run-ecosystem-tests.mjs` и `scripts/build/uninstall.mjs`. Оставете всички стойности по-долу недефинирани в продукционни среди. | Променлива | По подразбиране | Изходен файл | Описание | | -------------------------------------- | ------------------------------ | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | Режим за първоначална настройка на E2E (`auth`, `fresh`, `reuse`) за изпълняващия модул на Playwright. | | `OMNIROUTE_E2E_PASSWORD` | използва `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Администраторска парола, инжектирана в средата на Playwright. | | `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Деактивира локалната проверка за изправност по време на изпълненията на Playwright. | | `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Деактивира цикъла за проверка на изправността на OAuth токените по време на тестовете. | | `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(не е зададено)_ | `src/lib/tokenHealthCheck.ts` | Доставчици, разделени със запетаи, които са изключени от проактивното обхождане за обновяване на токени (напр. `codex,openai`). Целенасочена алтернатива на пълното деактивиране на проверката за изправност — доставчиците с кратък TTL продължават да се обновяват, а каскадните доставчици остават само реактивни. | | `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Потиска излишните съобщения от проверките за изправност в стандартния изход на Playwright. | | `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Пропуска продукционното компилиране на Next.js преди стартирането на Playwright (оптимизация за CI). | | `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Пропуска куката за деинсталиране на OmniRoute (използва се от CI, за да се запази `node_modules` непокътната). | | `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | Време за изчакване (ms), докато сървърът стане изправен, преди да се изпълнят тестовете на екосистемата/протокола. | | `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | URL адрес, на който тестовата среда за базова проверка на Electron очаква пакетираното приложение да е достъпно. | | `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Общо време за изчакване (ms), преди тестовата среда за базова проверка да се откаже. | | `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | Период за стабилизиране (ms) след зареждането на страницата. | | `ELECTRON_SMOKE_APP_EXECUTABLE` | _(автоматично)_ | `scripts/dev/smoke-electron-packaged.mjs` | Изрично зададен път до изпълнимия файл на пакетираното приложение Electron. | | `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | Директория с данни за базовата проверка на Electron. | | `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Задайте `1`, за да запазите директорията с данни от базовата проверка след изпълнението. | | `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Задайте `1`, за да предавате поточно журналите на Electron към стандартния изход по време на изпълнението. | | `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: стартира отново със същата директория с данни и проверява дали при второто стартиране е избран нативният драйвер за SQLite. | | `CLI_DEVIN_BIN` | _(търсене в PATH)_ | `open-sse/executors/devin-cli.ts` | Замества пътя до двоичния файл на Devin CLI. | ### Процес за превод на документацията Използва се от `scripts/i18n/run-translation.mjs` (командата `npm run i18n:run`). И петте променливи по подразбиране не са зададени — задавайте ги в `.env` само на машини, които трябва да могат да изпълняват преводача на документацията. | Променлива | По подразбиране | Изходен файл | Описание | | ----------------------------------- | ----------------- | ---------------------------------- | ----------------------------------------------------------------------- | | `OMNIROUTE_TRANSLATION_API_URL` | _(не е зададена)_ | `scripts/i18n/run-translation.mjs` | Съвместим с OpenAI базов URL адрес за системата за превод. | | `OMNIROUTE_TRANSLATION_API_KEY` | _(не е зададена)_ | `scripts/i18n/run-translation.mjs` | Bearer токен за системата за превод (никога не се записва в журналите). | | `OMNIROUTE_TRANSLATION_MODEL` | _(не е зададена)_ | `scripts/i18n/run-translation.mjs` | Идентификатор на модел, напр. `gpt-4o-mini` или `cx/gpt-5.4-mini`. | | `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Време за изчакване за всяка заявка в милисекунди. | | `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Паралелни заявки за превод при обработка на множество файлове/локали. | --- ## 27. Radar емисия (самостоятелно хостване) Незадължителна добавка, управлявана чрез функционалния флаг RADAR_ENABLED (по подразбиране е изключен — функционален флаг, превключван чрез Settings/DB, а не променлива на средата; вижте [docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)). Първите четири променливи по-долу са незадължителни замествания за самостоятелно хоствана или разклонена емисия и процесите за ключове на поддръжници. Петата, `RADAR_ADMIN_URL`, е отделна връзка без стойност по подразбиране към частния оперативен панел на собственика. Вижте [docs/frameworks/RADAR.md](../frameworks/RADAR.md) за пълната документация на модула и неговата [последователност за цялостно активиране и насочвана настройка](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup). Общият четец за известия в Home/Changelog не се конфигурира чрез променлива на средата и не зависи от функционалния флаг RADAR_ENABLED. Той чете URL адреса на публичното хранилище `news.json`, деклариран в `src/shared/utils/releaseNotes.ts`, само чрез GET; идентификаторите на отхвърлените известия остават в локалното хранилище на браузъра. | Променлива | Стойност по подразбиране | Файл с изходен код | Описание | | ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | Основен URL адрес, споделен от отделно подписаните емисии за каталога, препоръките, офертите за поддръжници и Intel. Заменете го, за да сочи към самостоятелно хоствана или разклонена услуга. | | `RADAR_FEED_PUBKEY` | _(фиксиран ключ по подразбиране)_ | `src/lib/radar/pinnedKeys.ts` | Публичен Ed25519 ключ (base64-DER SPKI или PEM), използван за проверка на подписите на емисията от персонализирана емисия. | | `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | URL адресът, който бутонът „Аз съм сътрудник“ в таблото за управление отваря (процес за заявяване на ключ за поддръжник чрез GitHub OAuth). | | `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | URL адресът, който бутонът „Подкрепете проекта“ в таблото за управление отваря (страница за плащане/планове). | | `RADAR_ADMIN_URL` | _(не е зададена)_ | `src/lib/radar/links.ts` | Връзка към частния оперативен панел, предназначена само за собственика. Изисква се HTTPS, освен при HTTP loopback SSH пренасочване; незададените или невалидните стойности не създават елемент за навигация. | --- ## Одит: премахнати / неизползвани променливи Следните променливи присъстваха в предишни версии на `.env.example`, но **нямат препратки по време на изпълнение** в текущата кодова база. Те са премахнати: | Променлива | Причина | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `STORAGE_DRIVER=sqlite` | Никога не се прочита от никой файл с изходен код. SQLite е единственият поддържан драйвер — не е необходим избор. | | `INSTANCE_NAME=omniroute` | Присъства в стари документации/шаблони за променливи на средата, но не се използва по време на изпълнение. Може да се върне в бъдеща функция за множество инстанции. | | `SQLITE_MAX_SIZE_MB=2048` | Не се реферира в изходния код. Размерът на базата данни не е изкуствено ограничен. | | `SQLITE_CLEAN_LEGACY_FILES=true` | Не се реферира в изходния код. Почистването на наследени файлове вероятно е премахнато. | | `CLI_ROO_BIN` | Не е регистрирана в `src/shared/services/cliRuntime.ts`. | | `CLI_KIMI_CODING_BIN` | Не е регистрирана в `src/shared/services/cliRuntime.ts` (Kimi Coding използва OAuth, а не CLI двоичен файл). | | `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | Не се реферират никъде в изходния код. | | `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` | Премахнати във v3.8.0. Средата за изпълнение вече не чете тези променливи на средата — идентификационните данни идват от таблото за управление / `data/provider-credentials.json` / криптираната БД. | | `CURSOR_PROTOBUF_DEBUG` | Премахната във v3.8.0. Изпълнителят на Cursor използва `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (вижте §22). | | `CLI_COMPAT_KIRO` | Премахната във v3.8.0. Kiro е в `CLI_COMPAT_OMITTED_PROVIDER_IDS` — превключвателят ѝ няма ефект. | | `QIANFAN_API_KEY` | Премахната заедно с другите неизползвани заготовки за API ключове на доставчици във v3.8.0. | ### Корекции на стойностите по подразбиране | Променлива | Стара стойност в `.env.example` | Действителна стойност по подразбиране | Коригирано | | ------------------------- | ------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------- | | `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Подвеждащата стойност е премахната; `7` е документирана като стойност по подразбиране | | `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Подвеждащата стойност е премахната; `7` е документирана като стойност по подразбиране | ### Повторно генериране на конфигурацията на OpenCode (ad-hoc инструменти) Използва се от `scripts/ad-hoc/regen-opencode-config.ts` за повторно генериране на `opencode.json` с точни стойности за `limit.context` и `limit.output`, извлечени от работещата инстанция на OmniRoute. Нито една от тях не е необходима за нормална работа — скриптът е само инструмент за разработчици. | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ------------------ | ------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | Базов URL адрес на инстанцията на OmniRoute, към която се изпраща заявка за `/v1/models`. | | `OMNIROUTE_KEY` | _(не е зададена)_ | `scripts/ad-hoc/regen-opencode-config.ts` | API ключ за удостоверяване пред крайната точка `/v1/models` на OmniRoute. Ако не е зададен, се използва `OPENCODE_API_KEY`. | | `OPENCODE_API_KEY` | _(не е зададена)_ | `scripts/ad-hoc/regen-opencode-config.ts` | API ключ в стил OpenCode (`sk-...`), записван в регенерирания `opencode.json`. Ако не е зададен, се използва `OMNIROUTE_KEY`. | ### Инструмент за офлайн оценка на компресията (ad-hoc инструменти) Използва се от `scripts/compression-eval/index.ts`, CLI инструмента за офлайн оценка на компресията. Не е необходим за нормална работа — предназначен е само за разработчици. | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ---------------------------- | ------------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (празен обект) | `scripts/compression-eval/index.ts` | Предоставени от оператора JSON идентификационни данни за доставчика, използван от CLI инструмента за офлайн оценка на компресията (анализират се с `JSON.parse`). Оставете незадано за пробно изпълнение. | ### VNC сесии на браузъра Използва се от `src/lib/vncSession/manifest.ts` за конфигуриране на базирани на Docker сесии на Chromium без графичен интерфейс за доставчици на автоматизация на браузъра. Всички променливи са незадължителни — стойностите по подразбиране са показани по-долу. | Променлива | Стойност по подразбиране | Изходен файл | Описание | | ------------------------------------- | ------------------------------ | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Път до изпълнимия файл на Docker, използван за стартиране на VNC контейнери. | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Docker образ за VNC контейнера с Chromium. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(вградени флагове)_ | `src/lib/vncSession/manifest.ts` | Допълнителни CLI аргументи за Chromium, предавани на браузъра в контейнера. | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC порт в контейнера. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Порт за Chrome DevTools Protocol в контейнера. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Директория за профили в контейнера. | | `OMNIROUTE_VNC_PROFILE_DIR` | _(не е зададена)_ | `src/lib/vncSession/manifest.ts` | Директория на хост системата за постоянни профили на браузъра. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | Време на неактивност (ms), след което VNC сесията се приключва. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | Максимална продължителност на сесията (ms). | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Максимален брой едновременни VNC сесии. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Време за изчакване на готовността на браузъра (ms). | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Време за изчакване при приключване/почистване (ms). | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Специализирана Docker мрежа, към която се присъединява контейнерът (#12571), отделно от моста по подразбиране. | | `VIBEPROXY_DATA_DIR` | _(не е зададена)_ | `open-sse/services/notionThreadSessions.ts` | Директория за постоянно съхранение на сесиите на Notion нишките. | ### Удостоверяване на вътрешни услуги | Променлива | Стойност по подразбиране | Описание | | --------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | Вграден токен за удостоверяване между услуги в равнината за управление. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | Път до файл, съдържащ токена за вътрешната услуга (предпочитан в контейнери; има предимство пред вградената променлива). | ### Статистика за доставчиците на OpenRouter | Променлива | Стойност по подразбиране | Описание | | ----------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | Задайте `false`, за да пропуснете извличането на статистика за всеки доставчик от OpenRouter с цел обогатяване на каталога. | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | TTL на кеша (ms) за извлечената статистика за доставчиците на OpenRouter. | ### Вградено свързване с Redis | Променлива | По подразбиране | Описание | | --------------------------- | --------------- | ------------------------------------------------------------------------------------- | | `REDIS_BIND_HOST` | `127.0.0.1` | Адрес за свързване на вградената услуга Redis. | | `REDIS_PORT` | `6379` | Порт за вградената услуга Redis. | | `OMNIROUTE_REDIS_BIND_HOST` | – | Специфично за OmniRoute заместване на адреса за свързване на вградената услуга Redis. | --- ## 24. Допълнения във версия v3.8.50 Тези настройки бяха въведени след предишната моментна снимка на договора за средата. | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Максимално време за изчакване на слот за допускане на тежка чат заявка, преди да бъде върнат повторяем отговор `503`; краткото ограничено изчакване обработва последователно пиковете от агенти вместо незабавен `503`. `0` възстановява незабавното отхвърляне. | | `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Бюджет в байтове на опашката за изчакване на допускане: ограничава общия размер на буферираните байтове от телата, задържани в рамките на целия процес, така че изчакването да не увеличава прекомерно динамичната памет (#4380). Заявките за изчакване над бюджета незабавно получават повторяем отговор `503`. | | `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | Отхвърлена настройка без действие след #10110: каналите за допускане за отделните сесии бяха премахнати в полза на един общ бюджет за целия процес. Приема се за съвместимост на конфигурацията, но се игнорира. | | `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Отхвърлена настройка без действие след #10110: каналите за допускане за отделните сесии бяха премахнати в полза на един общ бюджет за целия процес. Приема се за съвместимост на конфигурацията, но се игнорира. | | `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (изключено) | `open-sse/services/admission/runtime.ts` | Адаптивни виртуални канали за допускане по време на изпълнение (#9654): главен превключвател за адаптивния шлюз за всеки клиент (система 2). Различава се от отхвърлените по-горе променливи за канали за отделните връзки (TTL_MS / MAX_SESSIONS, без действие след #10110). Флаг за функционалност в таблото за управление със същото име; променливата на средата има предимство пред настройката от таблото за управление; изисква рестартиране. | | `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | Ограничава колко дълго извикването за незабавно изпълнение изчаква текущо изпълняваща се задача, преди да стартира поставеното на опашката изпълнение. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | включено | `open-sse/services/adobeFireflySession.ts` | Поддържа актуални състоянията на IMS и риска на браузъра чрез сесии на Chrome CDP, ограничени до съответния акаунт; задайте `0`, за да го деактивирате. | | `ADOBE_FIREFLY_SESSION_DISK` | включено | `open-sse/services/adobeFireflySession.ts` | Запазва поправените сесии на Adobe в `DATA_DIR`; задайте `0` за състояние само в паметта. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Минимален интервал между изпращанията на заявки за генериране към Adobe Firefly. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Допълнителен период на изчакване след всяко трето успешно изпращане към Adobe. | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Истински режим без графичен интерфейс, предназначен само за отстраняване на грешки; Adobe colligo обикновено отхвърля получената рискова сесия. | | `CHROME_PATH` | автоматично откриване | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Незадължителен абсолютен път до изпълнимия файл на Chrome, използван от управляваните чрез браузър изпълнители, когато автоматичното откриване за платформата е недостатъчно. | | `TELEGRAM_BOT_TOKEN` | _(незададено)_ | `src/lib/telegram/config.ts` | Токен от BotFather, който активира входящата webhook крайна точка и подписва `initData` на Mini App. | | `TELEGRAM_WEBHOOK_SECRET` | _(незададено)_ | `src/lib/telegram/config.ts` | Споделена тайна, регистрирана чрез `setWebhook` и проверявана спрямо заглавката `X-Telegram-Bot-Api-Secret-Token` при всяка webhook доставка. Задължителна за webhook пътя; ако не е зададена, webhook доставките се отказват с 503. | | `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Модел, използван за отговорите в Telegram чат. | | `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Замяна на базовия URL адрес на Bot API за проксита или самостоятелно хоствани Bot API сървъри. | | `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Време за изчакване в милисекунди за изходящи извиквания към Bot API. | | `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (включено) | `scripts/build/optionalPackStaging.mjs` | Задайте `0`, за да пропуснете създаването на `.tar.gz` tar архиви при подготвянето на незадължителни ML/браузърни пакети за самостоятелното Electron дърво (директориите на пакетите и `optional-packs.index.json` все пак се създават). Използва се от работния процес за настолни издания, за да се намали размерът на качваните артефакти. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Активира регистрирането на маршрутите за изображения чрез xAI абонамент; по подразбиране е деактивирано, така че пътят за изображения с API ключ да остане непроменен. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Период на изчакване за всеки ключ в милисекунди, когато отговорът `429` не съдържа използваема подсказка `Retry-After`. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | включено | `open-sse/services/estimatorCalibration.ts` | Задайте `off`, `0` или `false`, за да деактивирате записването и прилагането в паметта на калибрирането на оценителя. | | `NEXT_MANUAL_SIG_HANDLE` | _(вътрешно)_ | `scripts/dev/standalone-server-ws.mjs` | Вътрешна замяна на обработчика на сигнали на самостоятелния сървър; обикновено се задава и изчиства от стартиращия модул, вместо да се конфигурира от операторите. | ### ChatGPT Web (Codex) Глобални настройки по подразбиране за браузъра без графичен интерфейс и изходящия тунел за инструменти. Стойностите за връзката, зададени в таблото за управление, имат предимство. | Променлива | По подразбиране | Файл източник | Описание | | --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CHATGPT_WEB_CODEX_CHROME_PATH` | _(автоматично откриване)_ | `open-sse/executors/chatgpt-web-codex.ts` | Изричен път до Chrome/Chromium за работа с npm, systemd и PM2. | | `CHROME_PATH` | _(автоматично откриване)_ | `open-sse/executors/chatgpt-web-codex.ts` | Общ резервен вариант за изричен път до Chrome/Chromium. | | `CHATGPT_WEB_CODEX_CDP_URL` | _(не е зададено)_ | `open-sse/executors/chatgpt-web-codex.ts` | Вътрешна CDP крайна точка; Docker използва sidecar контейнера на порт `9223`. | | `CDP_PROXY_TOKEN` | _(не е зададено)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Ако е зададено, всяка заявка към CDP proxy sidecar контейнера трябва да изпраща тази стойност в заглавката `X-Omni-Cdp-Token` (#13679). Без стойност proxy сървърът препраща без удостоверяване — тогава защита осигурява единствено мрежовата изолация на Compose мрежата `chatgpt-web-codex-net`. Генерирайте с `openssl rand -hex 32`. | | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(не е зададено)_ | `open-sse/executors/chatgpt-web-codex.ts` | Глобален идентификатор на OpenAI тунела за локални итерации на Codex инструменти. | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(не е зададено)_ | `open-sse/executors/chatgpt-web-codex.ts` | Глобален runtime ключ за тунела; никога да не се извежда в регистрационните файлове. | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | Точното име на новосъздадения персонализиран ChatGPT конектор за MCP моста. | | `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | Специална директория за състоянието на браузъра, брокера и тунела. | | `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | При `1` във всяка контролна точка се заснемат диагностични изображения на браузъра. | | `CODEX_CHATGPT_WEB_LAUNCHER` | _(не е зададено)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Незадължителен абсолютен път до постоянен launcher двоичен файл. | | `CODEX_CHATGPT_WEB_BUN` | _(автоматично откриване)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Незадължителен абсолютен път до двоичния файл на Bun runtime средата. | | `CODEX_WEB_GPT_BUN` | _(не е зададено)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Остарял резервен вариант за `CODEX_CHATGPT_WEB_BUN`; новите конфигурации използват каноничното име. | --- ## Мост OmniConductor Дълготраен SSE потребител, който отразява задачите от OmniConductor хъба в локалния A2A TaskManager (`src/lib/conductor/`). Активира се по избор — мостът се стартира само когато е зададена `CONDUCTOR_HUB_URL`. Само от страна на сървъра: токенът за хъба никога не трябва да достига до браузъра. | Променлива | По подразбиране | Файл източник | Описание | | ------------------------------ | ----------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `CONDUCTOR_HUB_URL` | _(празно)_ | `src/lib/conductor/boot.ts` | Базов URL адрес на OmniConductor хъба (напр. `http://127.0.0.1:7910`). Ако не е зададена = мостът е деактивиран. | | `CONDUCTOR_HUB_TOKEN` | _(празно)_ | `src/lib/conductor/boot.ts` | Идентификационни данни за хъба за SSE потока — създайте в хъба партньор от вид `spokesperson` (`POST /v1/peers`, администратор). | | `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(празно)_ | `src/lib/conductor/hubProxy.ts` | Идентификационни данни за входящо делегиране на задачи от A2A към хъба (`POST /v1/tasks`); ако не е зададена, използва `CONDUCTOR_HUB_TOKEN`. | | `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Базов URL адрес на услугата за говорител (Faro) зад проксито за чат на таблото (`/api/conductor/ask`). | ### Планиране, съобразено с квотите Използва се от `open-sse/services/combo.ts` и `src/lib/quota/quotaScheduler.ts` за проверки на бюджета за токени преди заявка. Активира се по избор — поведението за маршрутизиране по подразбиране остава непроменено, когато не е зададено. | Променлива | По подразбиране | Файл източник | Описание | | ---------------------------------- | --------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Когато е `1`, пропуска връзките, чийто бюджет за токени за съответния времеви прозорец (`rateLimitOverrides.tpm`, таблица `provider_quota_state`) не може да покрие прогнозната цена на заявката преди изпращането ѝ. При липса на конфигуриран бюджет допуска заявката. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(включено)_ | `open-sse/services/estimatorCalibration.ts` | Калибриране чрез обратна връзка на оценителя за токени на предпазния механизъм за контекста (#14931): EMA за всяка комбинация от (доставчик, модел, наличие на инструменти) на съотношението `usage.prompt_tokens` / прогнозна стойност, ограничено до 0.15–2.0, само в паметта. `off`, `0` или `false` деактивира записването и прилагането. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Регистрира маршрутите за изображения `xai-oauth` (`xao`) и `grok-cli`. Флаг за функционалност на таблото със същото име; настройка от базата данни има предимство пред тази стойност. |