# 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) · 🇧🇬 [bg](../../../bg/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) · 🇸🇪 [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`
> намеће ову проверу приликом прављења комита и у CI-ју. Да бисте намерно изоставили променљиву, додајте је на
> листу дозвољених унутар `scripts/check/check-env-doc-sync.mjs`.
---
## Садржај
- [1. Обавезне тајне](#1-required-secrets)
- [2. Складиште и база података](#2-storage--database)
- [3. Мрежа и портови](#3-network--ports)
- [4. Безбедност и аутентификација](#4-security--authentication)
- [5. Санитизација уноса и заштита личних података](#5-input-sanitization--pii-protection)
- [6. Политике алата и усмеравања](#6-tool--routing-policies)
- [7. URL адресе и синхронизација са облаком](#7-urls--cloud-sync)
- [8. Одлазни прокси](#8-outbound-proxy)
- [9. Интеграција CLI алата](#9-cli-tool-integration)
- [10. Интеграције интерних агената и MCP-а](#10-internal-agent--mcp-integrations)
- [11. Акредитиви OAuth добављача](#11-oauth-provider-credentials)
- [12. Замене корисничког агента добављача](#12-provider-user-agent-overrides)
- [13. Компатибилност CLI отиска](#13-cli-fingerprint-compatibility)
- [14. Добављачи API кључева](#14-api-key-providers)
- [15. Подешавања временског ограничења](#15-timeout-settings)
- [16. Евидентирање](#16-logging)
- [17. Оптимизација меморије](#17-memory-optimization)
- [18. Синхронизација цена](#18-pricing-sync)
- [19. Синхронизација модела (развој)](#19-model-sync-dev)
- [20. Подешавања специфична за добављача](#20-provider-specific-settings)
- [21. Стање проксија](#21-proxy-health)
- [22. Отклањање грешака](#22-debugging)
- [23. GitHub интеграција](#23-github-integration)
- [24. Изоловано окружење за вештине (v3.8.0+)](#24-skills-sandbox-v380)
- [27. Radar извор (самостално хостовање)](#27-radar-feed-self-hosting)
- [Сценарији примене](#deployment-scenarios)
- [Ревизија: уклоњене / некоришћене променљиве](#audit-removed--dead-variables)
---
## 1. Обавезне тајне
Оне **морају** бити подешене пре првог покретања. Без њих ће апликација или одбити да се покрене или ће радити са небезбедним подразумеваним вредностима.
| Променљива | Обавезно | Подразумевано | Изворна датотека | Опис |
| ---------------------------- | --------------------- | ----------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `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` | **Да** | `CHANGEME` | Скрипта за иницијализацију | Поставља почетну администраторску лозинку за контролну таблу (подудара се са подразумеваном вредношћу у `.env.example` — намерно је очигледно небезбедна како би се захтевала измена). **Промените је пре прве употребе.** Након пријављивања, промените је путем Контролна табла → Подешавања → Безбедност. |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **Да** (у продукцији) | _(није постављено)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Дељена тајна за интерни WebSocket мост Codex Responses. Потврђује аутентичност захтева моста између Electron/прегледачког WS релеја и OmniRoute-а. ⚠️ **ОБАВЕЗНО у продукцији — када није постављено, сви захтеви према WS мосту се одбијају.** Генеришите помоћу `openssl rand -base64 32`. |
| `OMNIROUTE_SW_BUILD_ID` | Не | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Експлицитни идентификатор за поништавање кеша сервисног радника за PWA љуску (#11779); први у ланцу разрешавања. |
| `SOURCE_VERSION` | Не | _(није постављено)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Други у ланцу — постављају га PaaS системи за изградњу (нпр. у стилу Heroku-а) као примењени комит. |
| `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`). Посреднички софтвер за ауторизацију верује да је захтев локалан (loopback/LAN ограничење за LOCAL_ONLY руте) само када печат садржи овај токен. Аутоматски се генерише при сваком покретању — оставите је непостављеном; поставите јој фиксну вредност само за вишепроцесне конфигурације које морају да деле печат. |
### Команде за генерисање
```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` датотеке са стварним тајнама у систем за контролу верзија. `.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 није на линији издања, уз евидентирање као намерне canary верзије уместо неуспеха провере (#10427). |
| `OMNIROUTE_SMOKE_API_KEY` | _(није постављено)_ | `scripts/ops/deploy-canary.mjs` | API кључ за пробну проверу canary примене, послат као `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): `scripts/build/build-next-isolated.mjs` га поставља на `1`, а наслеђује га сваки покренути радни процес изградње како би слој базе података вратио неоперативну замену уместо учитавања изворног додатка 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_SQLJS_WASM_PATH` | _(аутоматско откривање)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Изричита путања (апсолутна или релативна у односу на cwd) до `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-у — на самостално хостованом извршавачу `/tmp` је tmpfs од 12 GB у RAM-у, који је контролна тачка попунила, скративши пакет. |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(подразумевано у коду)_ | `src/lib/spend/batchWriter.ts` | Интервал пражњења (ms) за пакетни упис потрошње/трошкова. Ниже вредности смањују обједињавање уписа; више вредности смањују оптерећење базе података. |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(подразумевано у коду)_ | `src/lib/spend/batchWriter.ts` | Максималан број баферованих уноса потрошње пре принудног пражњења. Повећајте за примене са великим QPS-ом; смањите када је ограничена употреба меморије важнија. |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(није постављено)_ | `open-sse/utils/proxyFetch.ts` | Поставите на `"true"` да бисте емитовали `[ProxyFetch]` евиденције за отклањање грешака на Vercel путањи за прослеђивање. Подразумевано је искључено како би се избегло откривање смерница за усмеравање. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Поставите на `"true"` или `"1"` да бисте укључили IP адресе клијента/излазне тачке и префикс налога у детаљни `[ProxyEgress]` ред евиденције процеса. Подразумевано остаје ИСКЉУЧЕНО како евиденција процеса не би откривала IP адресе или префикс налога. |
| `OMNIROUTE_DEBUG` | _(није постављено)_ | `bin/cli/commands/quota.mjs` | Поставите на `1` да бисте из CLI команди за квоту исписивали дијагностику трајања сваког захтева (`[omniroute] GET completed in Nms`) у 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` (24h) | `open-sse/services/batchProcessor.ts` | Максимални временски период за поновне покушаје појединачних ставки пакета (ms). Ставке које прекораче ово трајање означавају се као неуспеле. |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Основно кашњење (ms) за експоненцијално повећавање интервала при поновним покушајима ставки групе. |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | Горња граница (ms) за експоненцијално повећавање интервала између поновних покушаја ставки групе. |
| `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-а иза обрнутог проксија (поставља Next.js `basePath`; преусмеравања за аутентификацију узимају `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`. Након измене поново извршите изградњу (Next `basePath` се задаје током изградње). |
| `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 може да их прикаже (OmniCopilot режим `dashboardOpen: "editor"`). API површина (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, алијаси на коренском нивоу) у сваком случају задржава строга заглавља. Препознаје се само `vscode` — `1`/`true` то не омогућавају. Подешава се током изградње: након измене поново извршите изградњу (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` за слике; постављање на унапред изграђеној инсталацији нема ефекта). |
| `API_PORT` | _(није подешено)_ | `src/lib/runtime/ports.ts` | Када је подешено, опслужује `/v1/*` прокси API на овом засебном порту. |
| `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` | Стабилан, јединствен ID овог мрежног пролаза при ланчаном повезивању OmniRoute инстанци. Омогућава улазне провере петљи између равноправних чворова. Дозвољени знакови: слова, цифре, `.`, `_`, `:` и `-`; највише 64 знака. |
| `OMNIROUTE_PEER_URLS` | _(није подешено)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | Основни OmniRoute URL-ови, раздвојени зарезима, који могу да приме `X-OmniRoute-Peer-Trace`. Метаподатке равноправног чвора добијају само изричито дозвољени узводни 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/harness прекидач који онемогућава самосталну помоћну скрипту за WebSocket уживо. |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Ограничење брзине прослеђивања по пару (токен, IP), у захтевима по минуту. Чува се у меморији, засебно по инстанци. `0` или негативна вредност онемогућава ограничење по IP димензији (ограничење по токену у бази података и даље важи). |
| `NODE_ENV` | `production` | Next.js jezgro | Kontroliše detaljnost evidencije, keširanje, prikaz detalja grešaka i Next.js optimizacije. |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — podrazumevano u kodu) | `package.json` / Next.js 16 | Turbopack je podrazumevani alat za objedinjavanje za `npm run dev` i `npm run build` (2–3× brže izgradnje, potvrđeno merenjima). Postavite na `0` da biste se vratili na webpack u sistemu Windows, kada naiđete na nekompatibilnosti nativnih povezivanja / alata za objedinjavanje, **ili na računarima sa ograničenom RAM memorijom** — poznato je da Turbopack produkcione izgradnje u ovoj liniji verzija Next.js-a (16.2.x) dostižu znatno veću vršnu potrošnju memorije nego webpack na velikim grafovima modula (Turbopack ispravka za oslobađanje memorije iz Next 16.3 još nije stabilna); rezervni prelazak na webpack dostiže znatno nižu vršnu potrošnju. Pogledajte #6409. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(nije postavljeno)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Postavite na `1` da biste preskočili proveru integriteta SQLite baze podataka pri pokretanju. Korisno za brže pokretanje sa velikim bazama podataka. |
| `NOTIFY_SOCKET` | _(nije postavljeno)_ | systemd (protokol sd_notify) | Postavlja systemd kada se proces izvršava u okviru servisne jedinice sa integracijom sd_notify; OmniRoute je čita (pogledajte `OMNIROUTE_DISABLE_SD_NOTIFY`) radi slanja READY/WATCHDOG obaveštenja. Korisnik je nikada ne postavlja. |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(nije postavljeno)_ | `scripts/dev/systemd-notify.mjs` | Postavite na `1` da biste onemogućili systemd sd_notify (Type=notify / WatchdogSec=), čak i kada se izvršava u okviru systemd jedinice. Obaveštavač ne radi ništa izvan systemd-a. |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Interval (ms) za pozadinski planer provere ispravnosti akreditiva. Minimum: 10000 (10 s). |
| `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (ms) za keširani status ispravnosti akreditiva. |
| `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Postavite na `1` ili `true` da biste onemogućili periodično pozadinsko testiranje veza sa pružaocima usluga. Pružaoci pretrage (SEARCH_VALIDATOR_CONFIGS u `src/lib/providers/validation/searchProviders.ts`, npr. `tavily-search`) uvek su izuzeti iz provere — njihova „validacija“ predstavlja stvarni naplativi upit ka nadređenoj usluzi, pa se njihova ispravnost nikada ne proverava periodično (#9970). |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Adresa povezivanja za Next.js dev/start server. Kada je postavljena, zamenjuje podrazumevanu adresu `0.0.0.0`. |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Adresa povezivanja koju Playwright pokretač koristi pri pokretanju Next.js-a. Podrazumevana vrednost je `127.0.0.1` radi izolovanih testova. **Ne koristite za `omniroute serve`** — umesto toga koristite `OMNIROUTE_SERVER_HOST` (POSIX ljuske automatski postavljaju `HOSTNAME` na naziv računara; `.env` ne može da ga zameni). |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Adresa povezivanja za `omniroute serve`. Izbegava koliziju sa promenljivom POSIX ljuske `HOSTNAME` (koju bash/zsh uvek postavljaju na naziv računara). Ako nije postavljena, koristi se `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` | Зарезима раздвојени ID-ови 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-разгранавање:** ово застарело ограничење БРОЈА захтева сада важи само када је изричито подешено. Када није подешено (подразумевано), прихватање захтевних захтева за ћаскање уместо тога контролише `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — аутоматски изведен БАЈТНИ буџет одређен на основу стварног меморијског ограничења процеса у **једном процесу** (једна V8 хип меморија). Два преклапајућа `/v1/responses` захтева са око 750 хиљада токена обарају хип меморије од око 12 GiB (#7849) — упозорење о **меморијском буџету**, а не строго ограничење производа на 2. Здрав процес (хип меморија испод односа за одбацивање) МОЖЕ да прихвати више истовремених дугих `/v1/responses` путем `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Десетине дуготрајних SSE клијената (40–50) зависе од хип меморије + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, а не од „максимално 2“. Слепо повећавање ове вредности ради „коришћења целог хоста“ поново уводи #7849. Умножавајте **хип меморије** помоћу **N независних `DATA_DIR` директоријума** (#11024); никада не користите `replicas>1` над једном SQLite датотеком. |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(аутоматски изведено)_ | `src/shared/middleware/admissionBudget.ts` | **#503-разгранавање:** замена за аутоматски изведен бајтни буџет уноса (25% строжег V8/cgroup меморијског ограничења подељено са 8x пролазног увећања). Изведене и изричите вредности ограничавају се на 8 MiB–2 GiB. Тело веће од ефективног буџета одмах не успева са `413 body_exceeds_budget`; надметање између тела која се појединачно могу обрадити остаје поновљиво са `503`. 40–50 истовремених дуготрајних SSE клијената зависи од овог буџета + хип меморије, а не од строгог ограничења „максимално 2“. Пре подешавања прочитајте `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` на `/api/monitoring/health`. |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Однос за одбацивање услед притиска на хип меморију (`heapUsed / heap_size_limit`) при прихватању захтевних захтева типа BYTE и STRUCTURE (#10183, #10268, #10437). Истовремени захтевни захтев изнад `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` одбацује се са поновљивом грешком `503` само када је хип меморија ТАКОЂЕ на овом односу или изнад њега; при здравој хип меморији прихвата се путем додатног капацитета за здраво стање. |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (подразумевано `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Ограничени додатни капацитет за брзу путању при здравој хип меморији (#10437) и за STRUCTURE и за BYTE (`admitChatRequest`, укључујући тела ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Без овог ограничења, сваки захтев при заузетом, али здравом хипу заобилазио је контролу прихватања без горње границе. Када је оволико истовремених закупа активно путем путање за здраву хип меморију, додатни захтеви током заузећа прелазе на ИСТУ путању ограниченог чекања/одбацивања која се користи при стварном притиску на хип меморију. `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` пре него што их процес компресије може учинити обрадивим. Раст хип меморије ограничен је помоћу `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` и одбацивања услед притиска на хип меморију. Подесите позитивну вредност у применама са ограниченом меморијом којима је потребна строга горња граница; прекорачење тада добија структурирани одговор `413` који захтева сажимање. |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Строго ограничење за нестримујући одговор узводног сервиса који се у потпуности баферује у меморији. Након прекорачења, читач узводног сервиса се отказује и захтев брзо не успева, уместо да неограничена ниска расте док се хип меморија не исцрпи. |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Maksimalan broj bajtova prosleđenih iz zaglavlja odgovora uzvodnog servera. Kada se budžet prekorači, zaglavlja nižeg prioriteta (npr. prilagođena `x-codex-*`, `x-oai-request-id`) izostavljaju se kako bi se ostalo u okviru uobičajenih ograničenja veličine zaglavlja reverznog proksija. Postavite višu vrednost da biste prosledili više uzvodnih metapodataka, po cenu veće veličine zaglavlja odgovora. |
| `CORS_ORIGIN` | _(nije postavljeno)_ | `src/server/cors/origins.ts` | Zastarela CORS lista dozvoljenih pojedinačnih izvora. Za nova postavljanja koristite `CORS_ALLOWED_ORIGINS`. CORS je namenjen samo API klijentima pregledača koji koriste različite izvore; autentifikovani upisi na kontrolnoj tabli umesto toga koriste zahteve sa istog izvora uz CSRF zaštitu povezanu sa sesijom. |
| `CORS_ALLOWED_ORIGINS` | _(nije postavljeno)_ | `src/server/cors/origins.ts` | CORS lista dozvoljenih izvora razdvojenih zarezima. Džoker se ne šalje osim ako je `CORS_ALLOW_ALL=true` izričito podešeno. |
| `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Zaobilazno rešenje isključivo za razvoj koje vraća bilo koji `Origin` pregledača. Nemojte ga omogućavati u deljenim ili produkcionim okruženjima. |
| `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuard.ts` | Blokira pozive ka provajderima koji ciljaju privatne, povratne ili link-lokalne opsege IP adresa. Onemogućite samo u izolovanim testnim okruženjima. |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuard.ts` | Dozvoljava URL-ove provajdera koji upućuju na privatne/lokalne mreže (localhost, 192.168.x.x, 10.x.x.x itd.). **OBAVEZNO za provajdere koji se samostalno hostuju** (LM Studio, Ollama, vLLM, Llamafile, Triton, SearXNG). Kada je `false`, kontrolna tabla odbija validaciju lokalnih URL-ova. |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuard.ts` | Dozvoljava dodavanje/validaciju provajdera na lokalnim/privatnim adresama (127.0.0.1, localhost, LAN, privatni opsezi) — ograničeno na putanju validacije provajdera. **Podrazumevano je `true`** (lokalno ima prednost); postavite na `false` da biste nametnuli strogo blokiranje svega osim javnih adresa. Krajnje tačke metapodataka u oblaku (169.254.169.254, metadata.google.internal) ostaju blokirane bez obzira na ovo podešavanje. (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Omogućava da rute `/v1/audio/*` (transkripcije, govor, prevodi) koriste čvor provajdera kompatibilan sa OpenAI-jem koji je hostovan izvan localhost-a. Podrazumevano je isključeno — usmeravanje zvuka ka udaljenom hostu menja izlazni identitet i mora biti izričita odluka operatera. Povratni/privatni čvorovi (localhost, 127.0.0.1, 172.16-31.x) uvek su dozvoljeni i ovo podešavanje ne utiče na njih. (#3963) |
| `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Omogućava da `POST /v1/rerank` (i povratni korak ponovnog rangiranja mehanizma memorije) koristi čvor provajdera kompatibilan sa OpenAI-jem koji je hostovan izvan localhost-a — uređaj na LAN-u ili Tailscale ravnopravni čvor koji izvršava TEI, Infinity, vLLM itd. Podrazumevano je isključeno — usmeravanje ka udaljenom hostu menja izlazni identitet i mora biti izričita odluka operatera. Povratni čvorovi (localhost, 127.0.0.1, 172.16-31.x) uvek su dozvoljeni i ovo podešavanje ne utiče na njih. Udaljeni čvorovi takođe moraju proći politiku odlaznih URL-ova provajdera (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`); zahtevi se nikada ne usmeravaju ka hostovima metapodataka u oblaku. |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Kada je OIDC omogućen, onemogućava prijavljivanje lozinkom kako bi korisnici mogli da se autentifikuju isključivo putem OIDC jedinstvenog prijavljivanja. Prihvata se i osnovni alias `OIDC_DISABLE_PASSWORD_LOGIN`; zastavica funkcionalnosti kontrolne table sa istim ključem ima prioritet. (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Osnovni alias za `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). |
### Kontrolna lista za bezbednosno ojačavanje
```bash
# Minimalni bezbednosni zahtevi za produkciju:
AUTH_COOKIE_SECURE=true # Zahteva HTTPS
REQUIRE_API_KEY=true # Autentifikuj sve pozive proksija
ALLOW_API_KEY_REVEAL=false # Nikada ne prikazuj ključeve u korisničkom interfejsu
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # Ograničenje od 5 MB
```
---
## 5. Санитизација улаза и заштита личних података
OmniRoute пружа двослојну заштиту: скенирање захтева ради откривања убацивања злонамерних инструкција и уклањање личних података из одговора.
> **⚠️ Ограничења:** Ове заштитне мере представљају _хеуристичке механизме који раде по принципу најбољег покушаја_, а не потпуни заштитни зид против убацивања инструкција нити DLP систем за личне податке. Могу произвести лажно позитивне резултате (безопасни упити са персонама или RPG садржајем означени као ризични) и лажно негативне резултате (leet говор, размаци, обрасци који нису на енглеском). Саме по себи нису довољне за усклађеност са прописима. Прилагодите режиме и тестирајте их на свом саобраћају пре него што се ослоните на њих.
### На страни захтева: заштита од убацивања инструкција
| Променљива | Подразумевано | Изворна датотека | Опис |
| --------------------------------- | ----------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `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` | Опционо: усмерава ID-ове модела `claude-*` без префикса из Claude Code клијената преко Claude Code OAuth налога уместо захтевања префикса добављача. Експлицитни префикси добављача и даље имају предност. Такође се може подесити преко прекидача на страници Claude добављача на контролној табли. |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Ограничење конкурентности по моделу за round-robin комбинације (#9100). Семафор round-robin комбинације био је строго ограничен на 3 истовремена захтева по моделу без могућности измене, чиме је саобраћај са већом конкурентношћу серијализован иза тог ограничења. Вредност се проверава да буде `>= 1` и ограничава на `<= 32`. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Опасна опциона поставка која прескаче OmniRoute-ову локалну проверу контекстног прозора / максималног броја улазних токена за директне захтеве ка једном моделу. Узводни добављачи и даље примењују своја стварна ограничења; компресија промпта и сопствено ограничење излазних токена модела остају активни. Ефективни редослед првенства је: замена из базе Feature Flags > променљива окружења > подразумевана вредност; поновно покретање није потребно. |
| `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 или рашчлани историју порука, а обухваћени су и ID-ови сесија које доставља клијент. Обрада сесије усмеравања остаје непромењена, а постојећи записи се не бришу. Намењено применама које не користе приказ разговора на контролној табли и желе да зауставе раст табеле потеза. |
---
## 7. URL-ови и синхронизација са облаком
| Променљива | Подразумевана вредност | Изворна датотека | Опис |
| ---------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL на страни сервера преко којег интерни послови синхронизације позивају `/api/sync/cloud`. Задржите га као URL повратне петље/контејнера чак и када је апликација јавно доступна преко проксија. |
| `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 потписа одговора синхронизације са облаком. |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Поставите на `true` да бисте омогућили крајњој тачки синхронизације са облаком да препише локалне акредитиве. Подразумевана вредност је `false`. |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Поставите на `true` да бисте одбацили непотписан одговор синхронизације са облаком када локална тајна није конфигурисана (#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-ове за приказ када извор није познат (SSR/тестови); чита се пре `PORT`. |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(није подешено)_ | Решавач јавног извора, URL-ови слика | OmniRoute извор највишег приоритета намењен прегледачу, који се користи за генерисање јавних URL-ова и валидацију извора прегледача ван контролне табле. Подесите ово када OpenWebUI или други посредник приступа OmniRoute-у преко интерног URL-а, али корисников прегледач мора да преузима генерисане медије са LAN-а, тунела или јавног извора. **Немојте** укључивати `/v1`. |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(није подешено)_ | `open-sse/config/providerPluginManifestUrl.ts` | Апсолутни URL манифеста додатка провајдера који се објављује пратећим клијентима. Када није подешен, OmniRoute изводи `/api/v1/provider-plugin-manifest` из извора захтева или HOST/PORT. |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Протокол који се користи при извођењу URL-а манифеста додатка провајдера из HOST/PORT када извор захтева није доступан. Подесите на `https` иза јавног проксија који завршава TLS када није подешен експлицитни `OMNIROUTE_PROVIDER_MANIFEST_URL`. |
| `OMNIROUTE_TRUST_PROXY` | _(није подешено)_ | `src/server/origin/publicOrigin.ts` | Опциони режим поверења за прослеђена заглавља јавног извора. Неподешено = не веруј заглављима `Forwarded` / `X-Forwarded-*` при безбедносним одлукама. `true` / `loopback` верује прослеђеном хосту/протоколу само са loopback проксија означеног токеном. `private` / `lan` такође верује прокси посредницима у приватном LAN-у. У продукцији дајте предност експлицитном `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` | Јавни извор који се користи за састављање URL-ова асинхроних повратних позива. Резервна вредност најнижег приоритета за kie.ai повратне позиве; такође се користи као генерички јавни URL за друге посреднике. |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Крајња тачка за проверу CrofAI квоте коју користи страница „Коришћење“. Замените за посреднике / тестне фикстуре. |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Званична OpenCode Go крајња тачка за коришћење, са аутентификацијом API кључем, коју користи страница „Коришћење“. Замените за посреднике / тестне фикстуре. |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Синтетише заглавља идентитета OpenCode CLI-ја (User-Agent, x-opencode-client/project, UUID-ове захтева/сесије) у opencode-go/zen захтевима према изворном серверу које клијент није послао, како би их Cloudflare прихватио при излазном саобраћају са VPS-а (#6210/#5997). Подразумевано укључено од #10571; искључите помоћу `false`/`0`/`no`/`off`. |
| `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | Подразумевани User-Agent који се користи када је `OPENCODE_SYNTHESIZE_CLI_HEADERS` укључен и није подешена замена `_USER_AGENT` за појединачног провајдера. Примењује се само на opencode извршиоце. Код захтева без кључа који изворни сервер ограничава, подешена вредност која не садржи `opencode/= 1.17>` замењује се овом подразумеваном вредношћу уместо да захтев буде одбијен. |
| `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` укључен. |
| `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` | Ollama Cloud колачић `__Secure-session` који се користи за прикупљање података о квоти са странице подешавања. Осетљив податак; када је конфигурисано више налога, користите поље контролне табле за појединачну везу. |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(није постављено)_ | `open-sse/services/usage.ts` | Алтернативна променљива окружења за Ollama Cloud колачић `__Secure-session`. Осетљив податак; када је конфигурисано више налога, користите поље контролне табле за појединачну везу. |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(није постављено)_ | `open-sse/services/usage.ts` | Алтернативна променљива окружења за Ollama Cloud колачић `__Secure-session`, која се користи пре краћих алијаса. Осетљив податак; када је конфигурисано више налога, користите поље контролне табле за појединачну везу. |
| `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 неће подударати, а генерисане јавне везе могу да упућују на интерно порекло контејнера.
>
> Задржите `BASE_URL` као интерни URL повратне петље/контејнера за послове између сервера. Не користите браузерски `Origin` или јавно име хоста за интерна самостална преузимања која садрже акредитиве.
>
> Аутентификовани уписи на контролној табли не захтевају статички јавни основни URL: контролна табла шаље небезбедне захтеве истог порекла са CSRF токеном везаним за сесију. OmniRoute и даље централизује проверу јавног порекла за интеграције прегледача које нису део контролне табле: експлицитне променљиве окружења за јавни URL имају првенство поверења; необрађена `Forwarded` / `X-Forwarded-*` заглавља се занемарују осим ако је `OMNIROUTE_TRUST_PROXY` омогућен и непосредни прокси чвор је означен токеном као поуздан. Не користите CORS подешавања да бисте исправили захтеве контролне табле истог порекла; CORS је намењен само клијентима прегледача са другог порекла.
---
## 8. Одлазни прокси
Усмерите позиве ка спољним LLM провајдерима преко HTTP или SOCKS5 проксија ради контроле одлазног саобраћаја, географског усмеравања или маскирања IP адресе.
| Променљива | Подразумевано | Изворна датотека | Опис |
| ---------------------------------------- | ----------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Омогућава SOCKS5 прокси агент за позиве ка спољним сервисима. Искључите га вредношћу `false`. |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | На страни клијента | Омогућава клијентској страни да зна да ли је SOCKS5 доступан. |
| `PROXY_SKIP_RECENTLY_FAILED` | `false` | `src/shared/utils/featureFlags.ts` | Опциона заставица функције (погледајте [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); замена вредности из базе података контролне табле има предност). Скупови проксија и ротација по налогу привремено престају да поново користе члана који је управо отказао (одбијена TCP провера или одговор 429 преко њега), током периода који се удвостручује при сваком поновљеном отказу, до задате горње границе. Вредност `true` (или `1`, `yes`) то омогућава. |
| `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` | Временско ограничење за SOCKS5 руковање (повезивање), у ms. Повећајте га када је један хост резиденцијалног мрежног пролаза изложен великом броју истовремених захтева (нпр. 100 истовремених захтева) — стварно руковање може трајати дуже од 10s када је скуп преоптерећен, иако је прокси доступан, што би се иначе приказало као лажна грешка `[Proxy Fast-Fail] Proxy unreachable`. Ограничено је на `120000`. |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Када је `false` (подразумевано), захтев чији додељени прокси не може да се разреши бива **одбијен (fail-closed)** уместо да се врати на директну везу — чиме се спречава откривање стварне 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 отисак. |
| `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):** NVIDIA крајња тачка за валидацију API кључа
> застаје када се усмерава кроз глобални прокси/TLS-закрпљени fetch (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 mount-а (тако функционише `/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`, а затим прелази на `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` | Devin Desktop `ide_version`. Замењене вредности морају да користе формат `x.y.z`; неважеће вредности се враћају на проверену подразумевану вредност. |
| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | Укључена Codeium/language-server вредност `extension_version`, различита од Desktop вредности `ide_version`. Замењене вредности морају да користе `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` | Максимално трајање једног Devin ACP потеза пре него што мост прекине подређени процес и врати изричиту грешку прекорачења времена. |
| `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` | Опционо замењивање Codeium API-ја за управљање лиценцама који користи квота 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` | Замењивање ID-а добављача који се шаље серверској апликацији. |
| `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-монтирана са
хоста — упарите је са монтирањима као што је `~/.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`)
Ове променљиве подешавају понашање саме `omniroute` CLI бинарне датотеке (а не
претходно наведено откривање sidecar-а).
| Променљива | Подразумевано | Изворна датотека | Опис |
| ---------------------------- | ---------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `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. |
| `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` да бисте током CLI команди исписивали дијагностику поновних покушаја/одлагања у stderr. |
| `OMNIROUTE_PLUGIN_PATH` | _(непостављено)_ | `bin/cli/plugins.mjs` | Прилагођени директоријум за откривање CLI додатака (`omniroute-cmd-*` пакети). Када није постављено, подразумевана вредност је `~/.omniroute/plugins/`. Само за CLI — никада не стиже до серверског скенера додатака, на који указује `OMNIROUTE_PLUGINS_DIR` (одељак 2). |
---
## 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` | ID кључа за приписивање у 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` | Омогућава локалну/офлајн крајњу тачку агента за проблеме за забележену тријажу. Оставите онемогућено осим ако изричито не покрећете локалне токове рада забележене тријаже. |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(није подешено)_ | `src/lib/issueAgent/execution.ts` | Временско ограничење (ms) за једно покретање забележене тријаже агента за проблеме. Ограничено је интерним максимумом; ако није подешено или је неважеће, користи се уграђена подразумевана вредност. |
| `OMNIROUTE_CONTEXT` | _(активни контекст)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Контекст/профил удаљеног режима CLI-ја за `omniroute` команде; има предност над активним контекстом у локалном складишту контекста. Еквивалентно опцији `--context `. |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Онемогућава опциони `keytar` позадински систем OS привеска за кључеве за акредитиве 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` | `24` | `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` | Основно експоненцијално одлагање у милисекундама након привремених Adobe 408 одговора; комбинује се са размаком између слања током највише пет покушаја. |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Онемогућава све позадинске сервисе (синхронизацију, цене, освежавање модела). Корисно за CI/тестирање. |
| `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_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` | Период неактивности у милисекундама након којег се некоришћени радник за компресију прекида. |
| `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` | аутоматско откривање | `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` | Кориснички ID за сесије 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. Akreditivi OAuth provajdera
Ugrađeni akreditivi za **localhost razvoj**. Za udaljena postavljanja, registrujte sopstvene na konzoli za programere svakog provajdera.
| Varijabla | Provajder | Napomene |
| :------------------------------------------ | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Javni klijent — nije potreban tajni ključ. |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Preklapanje URI-ja za preusmeravanje. Podrazumevano: `https://platform.claude.com/oauth/code/callback` |
| `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Javni klijent. |
| `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Zahteva odgovarajući `_SECRET`. |
| `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — |
| `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | Javni klijent. |
| `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | Opciono preklapanje za ID javnog klijenta Muse CLI device-flow. Ostavite nepodešeno da biste koristili ugrađeni javni klijent. |
| `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Zahteva odgovarajući `_SECRET`. |
| `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — |
| `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Javni klijent. |
| `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Opciono preklapanje za ID OAuth klijenta GitHub Enterprise Copilot-a. Vraća se na javnu podrazumevanu vrednost `GITHUB_OAUTH_CLIENT_ID` kada je nepodešeno. |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | Opciono preklapanje za ID integracije klijenta GitHub Copilot-a koji se šalje u zaglavljima `Copilot-Integration-Id` i `Editor-Plugin-Version`. Podrazumevano je `copilot-developer-cli`. |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | Rezervni API ključ koji koristi `open-sse/executors/devin-cli.ts` kada akreditivi po vezi nisu dostupni. Opciono. |
| `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Prilagođena putanja do binarne datoteke Devin CLI (`devin`). Rešava je `open-sse/executors/devin-cli.ts`. |
| `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | ID OAuth klijenta za GitLab Duo. Registrujte aplikaciju na `https://gitlab.com/-/profile/applications` sa URI-jem za preusmeravanje `/callback` i opsezima `api, read_user, openid, profile, email`. Vraća se na `GITLAB_OAUTH_CLIENT_ID`. |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Tajni ključ OAuth klijenta za GitLab Duo. Opciono — PKCE tok ne zahteva tajni ključ. Vraća se na `GITLAB_OAUTH_CLIENT_SECRET`. |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Preklapanje osnovnog URL-a GitLab-a (samostalno hostovan GitLab). Podrazumevano je `https://gitlab.com`. Vraća se na `GITLAB_BASE_URL`. |
| `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Nasleđeni rezervni mehanizam za `GITLAB_DUO_BASE_URL`. Koristi se kada `_DUO_` varijanta nije postavljena. |
| `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Nasleđeni rezervni mehanizam za `GITLAB_DUO_OAUTH_CLIENT_ID` koji koristi `src/lib/oauth/constants/oauth.ts`. |
| `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Nasleđeni rezervni mehanizam za `GITLAB_DUO_OAUTH_CLIENT_SECRET` koji koristi `src/lib/oauth/constants/oauth.ts`. |
| `QODER_OAUTH_CLIENT_SECRET` | Qoder | — |
| `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Postavite da biste omogućili Qoder OAuth. |
| `QODER_OAUTH_TOKEN_URL` | Qoder | — |
| `QODER_OAUTH_USERINFO_URL` | Qoder | — |
| `QODER_OAUTH_CLIENT_ID` | Qoder | — |
| `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Direktan rezervni mehanizam za API ključ (zaobilazi OAuth). |
| `QODER_CLI_WORKSPACE` | Qoder | ID radnog prostora za Qoder CLI. |
| `OMNIROUTE_QODER_WORKSPACE` | Qoder | Alias za `QODER_CLI_WORKSPACE`. |
| `QODER_CLI_CONFIG_DIR` | Qoder | Premošćuje Qoder CLI konfiguracioni direktorijum (izolovana PAT sesija, izbegava preklapanje prijave u pretraživaču). |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Frontend `tk` token za slanje kao `validated` na `/api/chat`. Obavezno kada Blackbox nameće podudaranje tokena; u suprotnom OmniRoute se vraća na nasumični UUID. Pogledajte problem #2252. |
| `VISION_BRIDGE_BASE_URL` | Vision Bridge guardrail | Osnovni URL kompatibilan sa OpenAI-jem za pozive vision-bridge-a koji nisu Anthropic. Podrazumevano koristi nasleđeni OpenAI URL env ili api.openai.com. Ukažite na OmniRoute-ovu `/v1` samopetlju ili bilo koju OpenAI-kompatibilnu krajnju tačku (Gemini OpenAI-kompatibilnu, OpenRouter). Problem #2232. Kada je URL OmniRoute-ov sopstveni `/v1`, podzahtev za opis šalje `x-omniroute-admission-bypass: internal` i autentifikuje se sa rešenim akreditivom samopetlje (`sk_omniroute` sentinel u lokalnom režimu, ili `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) tako da `REQUIRE_API_KEY=true` implementacije funkcionišu. |
| `VISION_BRIDGE_API_KEY` | Vision Bridge guardrail | API ključ za gornji URL. Premošćuje OpenAI / Google env varijable po provajderu za pozive vision-bridge-a koji nisu Anthropic. Anthropic modeli zadržavaju svoj posvećeni Anthropic putanju ključa. Problem #2232. |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge guardrail | Koliko dugo se kešira ishod rutiranja "nema upotrebljivog kandidata", u ms (podrazumevano `30000`). Nevažeće ili negativne vrednosti se vraćaju na podrazumevane; `0` onemogućava negativni keš. Izvor: `src/lib/guardrails/visionBridgeRouter.ts`. |
> [!WARNING]
>
> 1. Idite na [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials)
> 2. Kreirajte OAuth 2.0 ID klijenta (tip: "Web aplikacija")
> 3. Dodajte URL vašeg servera kao Autorizovani URI za preusmeravanje
> 4. Zamenite vrednosti akreditiva u `.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.258 (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.258` | Замените оглашену верзију Claude Code-а независно од `CLAUDE_USER_AGENT`. Anthropic ограничава неке моделе на основу ове вредности (#12417). |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.81-6` | Замените оглашену верзију 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 алата. Ово смањује ризик од означавања налога, уз задржавање ваше proxy 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` | Мења забележени ID 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)
│ ├── 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`. |
| `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`/DB. |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Уклања нестандардне `codex.*` SSE догађаје (нпр. `codex.rate_limits`) због којих OpenAI SDK `responses.stream()` враћа грешку 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` | _(није постављено)_ | Уметнути токен могућности/носилачки токен који се прослеђује 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` | _(није постављено)_ | Политика 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_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 s) | Максимално време чекања (ms) на почетак одговора за сваки директан покушај без проксија. Након истека времена покушај се понавља једном преко новог сокета; поставите на `0` да бисте онемогућили ограничење и задржали претходно понашање. |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Горња граница (ms) за RETRY покушај преко новог сокета након горенаведеног истека времена чекања на почетак одговора за покушај из скупа веза (#13703). Примењује се само када је позивалац већ приложио сопствени сигнал крајњег рока (разрешена каскада за везу/модел/добављача/`FETCH_TIMEOUT_MS`); тај сигнал је стварно ограничење и активира се први у предвиђеној путањи, па ово представља великодушну крајњу заштиту, а не фиксну горњу границу — без тога је поновљени покушај користио исти кратки интервал `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` као и покушај из скупа веза, због чега су исправни модели закључивања са спорим TTFB-ом враћали 504. Никада није дозвољено постављање испод горенаведене фиксне доње границе; када позивалац уопште не зада сигнал крајњег рока, поновљени покушај задржава непромењену фиксну доњу границу. |
| `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 fingerprint проксија (wreq-js). |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Ограничава време до првог бајта посебно за тело на wreq-js TLS-fingerprint транспорту; сам `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_PARK_AND_RESUME` | `false` | Само за OpenCode извршавач: паркирајте захтев уз heartbeat након поновљених пролазних грешака 429 (или свежег маркера оптерећења скупа), а затим поновите једну ограничену деоницу преко највише 3 узастопна налога уместо распоређивања на целу флоту (#13924). Подразумевано је искључено: сваки 429 преусмерава на следећи налог потпуно исто као раније. |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(није постављено)_ | Само за OpenCode извршавач: замените путању маркера оптерећења скупа који се чита пре паркирања (`{since, reason, ttl_s}`, подразумевано `/tmp/opencode-pool-strain.json`, #13924). Свеж маркер паркира без поновног бројања; ако не постоји или је застарео, користи се бројач рафала. |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Временско ограничење прокси корака за `/v1` bridge захтеве. |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Усмерите Firecrawl извршавач за веб-преузимање на самостално хостовану инстанцу (API кључ није обавезан ван cloud окружења). |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Временско ограничење по захтеву за Firecrawl извршавач за веб-преузимање. |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Укупно временско ограничење серверског захтева за bridge. |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Време за слање заглавља одговора преко bridge-а. |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Временско ограничење неактивности bridge keep-alive везе. |
| `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) да бисте спречили осцилирање између стања active/error на контролној табли. За неважеће (<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` да бисте задржали неограничено итерирање (чврсто кодирано заустављање након 10 минута
у `comboPredicates.ts` и даље се примењује). Позитивна вредност замењује ту
заштитну меру за комбинацију. Нека `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) након достизања прага локалног провајдера. |
| `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]`. Записи прокси евиденције на контролној табли/у бази података задржавају све детаље. |
| `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` и има **предност** над неусаглашеном NODE_OPTIONS заставицом за heap (последња V8 заставица). `omniroute serve` и даље даје предност постојећој NODE_OPTIONS вредности за heap (#5238). Немојте подешавати обе на различите бројеве — процес бележи упозорење у ком наводи обе вредности и победничку вредност. **Званична Docker слика увек поставља `1024`, па се калибрација у њој никада не извршава.** За `/v1/responses` агента за програмирање потребно је `8192`–`12288`, уз додатни простор за cgroup — погледајте [Docker водич — RAM током извршавања](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). |
| `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` | `128000` | Глобална резервна максимална дужина контекста за моделе без експлицитне конфигурације. |
| `USAGE_TOKEN_BUFFER` | `100` | Додатна резерва токена при праћењу квота коришћења. |
### Компресија
| Променљива | Подразумевано | Опис |
| ------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `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`). Подешавања sandbox окружења у наставку само ограничавају извршавање након што је убризгавање већ укључено. |
| Освежавање токена | `src/sse/services/tokenRefresh.ts` | Укључено за повезане OAuth/веб провајдере | Прекините везу са провајдером или пустите да токени остану важећи; тренутно не постоји променљива окружења `TOKEN_REFRESH=0`. |
Ако је `/healthz` спор на неоптерећеном систему, прво онемогућите меморију и вештине, а затим проверите оптерећење каталога/компресије (#10303, #9685). Ове функције препуштају извршавање на `await` тачкама, али се и даље надмећу за једну нит.
Подешавања слоја за угњежђивање, векторског складишта и поновног рангирања за подсистем трајне меморије (`src/lib/memory/`).
| Променљива | Подразумевано | Опис |
| ------------------------------------ | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 мин) | TTL за кеш угњежђивања у меморији (по потпису извора/модела/димензије). |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Највећи број LRU ставки које се чувају у кешу угњежђивања. |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | ID HF репозиторијума за опционални локални MiniLM процесни ток `@huggingface/transformers` (~23 MB int8, ~400 MB RAM-а). |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | ID HF репозиторијума за статички potion/Model2Vec угњежђивач заснован на табели претраживања. Преузима се по потреби у директоријум кеша. |
| `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 претрагу по кључним речима. Оставите неподешено у продукцији. |
| `NOTION_API_KEY` | _(није подешено)_ | API кључ за Notion позадински систем (користи га позната конфигурација позадинског система `genericBackend.ts`). |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Основни URL за Notion API (може се заменити за самостално хостоване Notion алтернативе). |
| `OBSIDIAN_API_KEY` | _(није подешено)_ | API кључ за Obsidian Vault позадински систем (користи га позната конфигурација позадинског система `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` | _(није подешено)_ | ID-ови провајдера раздвојени зарезима (без обзира на величину слова) који прихватају поруку `system` **само на индексу 0** (`src/lib/memory/injection.ts`). За њих, уметање меморије у средину низа које чува кеш није безбедно у разговорима са више размена, па се меморија уместо тога спаја/додаје на почетак као водећа системска порука. Подразумевано обухвата само `xiaomi-mimo`/`mimo`; проширите за самостално хостоване крајње тачке компатибилне са OpenAI-јем (нпр. Qwen3.5+/3.6) чији шаблон разговора намеће исто ограничење једне водеће системске поруке. |
### Пример Docker конфигурације са мало RAM-а
`128` је намењено само контролној табли. Агенти за програмирање на овој количини heap меморије добијају `FATAL ERROR` током дугих `/v1/responses` захтева. Не користите овај пример као 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` (24h) | `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` (24h) | `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`. Онемогућите за клијенте који очекују само ID-ове. |
| `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). Редови који никада нису добили временску ознаку сматрају се застарелим. |
| `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` | ID налога за Cloudflare Workers AI. |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(није постављено)_ | `open-sse/executors/cloudflare-playground.ts` | Пуна путања до десктоп Chrome бинарне датотеке за Cloudflare AI Playground извршавач, која се користи када провера отиска прегледача без графичког интерфејса блокира Chromium који долази у пакету са Playwright-ом. |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Замена основне адресе Cloudflare REST API-ја коју користи алат за примену Workers релеја скупа проксија (#4640 / 9router#1360). |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Подразумевано име радничког пројекта предложено у модалном прозору „Примени релеј“ за скуп проксија. |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Поставите на `false` да бисте сакрили опцију Cloudflare Workers релеја са картице Скуп проксија. |
| `CLOUDFLARED_BIN` | аутоматско откривање | `src/lib/cloudflaredTunnel.ts` | Прилагођена путања до бинарне датотеке `cloudflared`. |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Протокол преноса тунела: `http2` (подразумевано), `quic` или `auto`. |
| `CLOUDFLARED_CONFIG` | _(није постављено)_ | `src/lib/cloudflaredTunnel.ts` | Путања до локално одржаване cloudflared датотеке `config.yml` (са `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` | Замењује основну адресу Deno Deploy REST API-ја коју користи постављач релеја скупа проксија (#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 релеја са картице скупа проксија. |
| `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 проксија уграђене услуге (подразумевано само повратна петља). |
| `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` излаже услугу која садржи акредитиве целој локалној мрежи. |
| `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 услуге (подразумевано само повратна петља). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Порт уграђене Dario услуге. |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Хост за повезивање/везивање уграђене Dario услуге (подразумевано само повратна петља). |
| `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. Zdravlje proksija
| Promenljiva | Podrazumevano | Izvorna datoteka | Opis |
| ------------------------------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Vremensko ograničenje brze provere zdravlja. |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Vremenski period (u satima) za izračunavanje prosečne latencije kandidatskih proksija u strategiji skupa optimizovanoj za latenciju. |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL keša rezultata provere zdravlja. |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL keša za neuspešne provere zdravlja proksija. Ova vrednost treba da bude kraća od `PROXY_HEALTH_CACHE_TTL_MS` kako bi se privremena prekoračenja vremena proksija pri visokoj konkurentnosti brzo ponovo proverila, bez onemogućavanja brzog neuspeha za zaista nedostupne proksije. |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Postavite na `false` da biste onemogućili pozadinski planer provere zdravlja proksija, koji periodično proverava registrovane proksije. |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval ciklusa pozadinskog planera provere zdravlja u ms (najmanje `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 или 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_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` има предност. |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Омогућите OAuth токовима и токовима валидације добављача да заобиђу фиксирани прокси и повежу се директно када претходне провере доступности проксија не успеју. Важећи редослед приоритета је: измена у бази заставица функција > променљива окружења > подразумевана вредност. |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 s) | `src/lib/resilience/settings.ts` | Подразумевани буџет **чекања у реду**: колико дуго захтев може да чека на слободно место код добављача и остане у реду пре него што буде одбијен, а да никада не стигне до узводног сервиса. Тајмер се поништава када задатак почне да се извршава — извршавање је засебно ограничено помоћу `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` | Опционо глобално праћење периода хлађења добављача/везе између захтева. Подразумевано је ИСКЉУЧЕНО (преклапа се са хлађењем везе / заштитним прекидачем добављача). За омогућавање прихвата `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` (логика) | **Шта ради:** транспарентан опоравак прекинутих узводних токова (порт из free-claude-code). Задржава почетни SSE прозор до `STREAM_RECOVERY.HOLDBACK_MS` (750 ms), тако да се прекид _пре потврде_ — онај који се догоди пре него што било који бајт стигне до клијента — поново отвара и невидљиво покушава. **Када омогућити:** нестабилни узводни сервиси/узводни сервиси који често прекидају ток са 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`. |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL проксија Headroom за уштеду токена. Животни циклус контролне табле (`api/headroom/*`) подразумевано покреће локални `headroom-ai` CLI на повратној петљи; замените вредност само да бисте упутили на спољни Docker бочни прокси. |
### Константе за подешавање опоравка стрима
Понашање задржавања при опоравку подешава се константама уграђеним у кôд у
`open-sse/config/constants.ts` (`STREAM_RECOVERY`), које су овде приказане као референца —
њихова промена захтева измену кода, а не променљиву окружења:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — колико дуго се почетни SSE прозор задржава
како би се рани прекид могао поново покушати пре него што се клијенту пошаље било који бајт.
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — строго ограничење задржаног прозора; потврда
(пражњење + директно прослеђивање) чим се акумулира оволико бајтова, без обзира на тајмер.
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — максималан број неприметних поновних отварања узводног
стрима док задржани садржај још није потврђен.
> **Ограничење брзине по добављачу са клизним прозором (без променљиве окружења):** резервно
> ограничење брзине по добављачу, пренето из FCC-а, постоји у коду
> (`open-sse/services/providerDefaultRateLimit.ts`, повезано преко
> `open-sse/services/rateLimitManager.ts`), али се испоручује са **празном подразумеваном мапом**
> и тренутно **нема променљиву окружења за оператера** — омогућава се искључиво преко тестне спојнице /
> измене кода. Намерно није наведено у горњој табели. Ограничивач релеја по
> `(token, IP)` који _има_ параметар јесте `RELAY_IP_PER_MINUTE` (§3 Мрежа и портови).
---
## 22. Отклањање грешака
> [!CAUTION]
> Ове променљиве производе **опширан излаз** и могу открити осетљиве податке. **Никада их немојте омогућавати у продукцији.**
| Променљива | Подразумевано | Изворна датотека | Опис |
| ------------------------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CURSOR_DEBUG` | _(није постављено)_ | `open-sse/executors/cursor.ts` | Поставите на `1` да бисте омогућили опширне евиденције Cursor извршиоца (декодирани 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 извршилац. |
| `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` | Замењује Cursor CLI `--model` за задатке генерисања слика. |
| `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` | Директни 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 лични приступни токен са опсегом `issues:write`. |
| `GITHUB_TOKEN` | _(није подешено)_ | помоћни алати за тријажу проблема / агента у облаку | Генерички GitHub приступни токен који се користи као резервна опција за `GITHUB_ISSUES_TOKEN` и који користе помоћни алати агента у облаку у `src/lib/cloudAgent/*`. |
---
## Сценарији примене
За SRE смернице за relay backend (понашање ts/bifrost/auto, позиционирање 9router у односу на CLIProxyAPI и стратегију резервног решења за велики проток), погледајте [Стратегију за relay backend](/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 s) | `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` | Замена хоста који се користи за преузимање квота 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` за појединачну везу. |
| `QWEN_CLOUD_SEC_TOKEN` | _(није постављено)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Ручна замена вредности `sec_token` за мрежни пролаз конзоле Token Plan. Осетљиво; када није постављено, механизам за преузимање га проналази из HTML-а контролне табле помоћу колачића. |
| `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 контролне табле који се користи за проналажење вредности `sec_token` из HTML-а пријављеног корисника. |
| `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` | Вредност која се шаље Command Code извору као заглавље `x-command-code-version`. Замените је да бисте повећали верзију CLI-ја. |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Основни URL за Command Code извор података о коришћењу/квоти, који користи телеметрија механизма за преузимање квоте за паметне телефоне. Замените га за самостално хостовани/алтернативни Command Code API. |
| `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` | Порт на којем Antigravity MITM мост ослушкује. |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Крајња тачка рутера на коју мост прослеђује Antigravity саобраћај. |
| `CERT_DIR` | `~/.omniroute/mitm` | `bin/antigravity-bridge.mjs` | Директоријум који садржи `server.key`/`server.crt` за TLS ослушкивач моста; мост се прекида ако било која од ових датотека недостаје. |
| `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` да бисте прескочили уписивање у датотеку хостова приликом додавања/уклањања 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-а на картици скупа проксија. |
| `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` | Путања до Grok CLI датотеке `auth.json` која се користи за преузимање недељне квоте услуге grok-web; замените је за тестове или нестандардну инсталацију CLI-ја. |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(није подешено)_ | `src/mitm/manager.ts` | Додатни CA сертификат (PEM) коме се верује за AgentBridge узводне TLS везе. |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Максималан број снимљених захтева који се чувају у кружном баферу Инспектора саобраћаја. |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Максимална величина тела снимљеног захтева/одговора (KB) пре скраћивања. |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Локални порт за HTTP прокси Инспектора саобраћаја. |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Аутоматски покреће HTTP прокси инспектора при покретању система. |
| `INSPECTOR_TLS_INTERCEPT` | `false` | `src/lib/inspector/captureState.ts` | Омогућава TLS пресретање (MITM) за снимљени HTTPS саобраћај. |
| `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 sidecar проксија. Када је постављено на `0`, рута враћа 503 са заглављем `X-Bifrost-Killswitch`, а оператор се преусмерава на TS путању. Користите га да бисте онемогућили sidecar без поновног постављања система (инцидент рутера нивоа 1, ротација кључева). |
| `BIFROST_BASE_URL` | _(није постављено)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Када је постављено, Bifrost sidecar прокси рута прослеђује саобраћај `/v1/chat/completions` овом Go мрежном пролазу уместо TS relay обрађивачу. Није постављено → 503 са резервном путањом. Завршна коса црта се уклања. |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Порт за који се надгледана уграђена Bifrost услуга везује (`127.0.0.1:`) када OmniRoute управља животним циклусом Bifrost sidecar-а. Подразумевана вредност је `8080`. |
| `BIFROST_API_KEY` | _(није постављено)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | API кључ за Bifrost мрежни пролаз (шаље се као `Authorization: Bearer ...`). Ако није постављен, рута очекује да захтев садржи важећи OmniRoute API кључ; овај кључ служи искључиво за аутентификацију на страни мрежног пролаза. |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Када је вредност тачна, Bifrost sidecar рута прослеђује одговоре у току путем SSE-а кроз мрежни пролаз, уместо преко TS извршавача стримовања. Поставите на `0` да бисте кроз мрежни пролаз принудно користили JSON одговоре без стримовања. |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Временско ограничење по захтеву приликом проксирања ка Bifrost мрежном пролазу (ms). Када временско ограничење истекне, рута враћа TS relay путању путем заглавља `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` | Relay позадински систем за `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript relay (подразумевано када Bifrost није конфигурисан); `auto` бира Bifrost када је `BIFROST_BASE_URL` постављен и `BIFROST_ENABLED` ≠ `0`, уз аутоматски прелазак на TS ако sidecar није доступан; `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 покретач једним кликом (`omniroute redis up`). Користе га и CLI и GUI `RedisLauncherPanel`. |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Порт домаћина за Redis покретач једним кликом. Промените га ако домаћин већ користи порт 6379. Интерни порт контејнера остаје 6379. |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Интерфејс домаћина на којем Redis покретач једним кликом објављује услугу. Покретач покреће 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` излаже анонимни `/v1` LLM прокси целој 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` | Префикс именског простора који се примењује на сваки OmniRoute Redis кључ (ограничавач брзине, кеш аутентификације, складиште квота, аутоматски прекидач за загревање). Спречава колизије кључева када се 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 везе које су се за то определиле, тако да се петочасовни прозор ограничења брзине отвори тривијалним заказаним захтевом уместо првим стварним захтевом (#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` | Временско ограничење неактивности (ms) након којег се неактивна VNC сесија уклања. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 мин) | `src/lib/vncSession/manifest.ts` | Чврсто ограничење (ms) трајања једне VNC сесије. |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Максималан број истовремених VNC сесија. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Временско ограничење (ms) за чекање да прегледач у контејнеру постане спреман за CDP. |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Временско ограничење (ms) за преузимање снимљене сесије/колачића након завршетка пријављивања. |
| `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` да бисте сачували директоријум са smoke подацима након извршавања. |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Поставите на `1` да бисте током извршавања прослеђивали Electron евиденције на stdout. |
| `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` | Основни URL компатибилан са OpenAI-јем за позадински систем за превођење. |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(није постављено)_ | `scripts/i18n/run-translation.mjs` | Bearer токен за позадински систем за превођење (никада се не евидентира). |
| `OMNIROUTE_TRANSLATION_MODEL` | _(није постављено)_ | `scripts/i18n/run-translation.mjs` | ID модела, нпр. `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 (подразумевано искључен — заставица
функције која се мења преко подешавања/базе података, а не преко променљиве окружења; погледајте
[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).
Генерички читач обавештења на почетној страници/у евиденцији измена не конфигурише се помоћу променљиве
окружења и не зависи од заставице функције RADAR_ENABLED. Он искључиво методом
GET чита јавни URL `news.json` репозиторијума декларисан у `src/shared/utils/releaseNotes.ts`;
ID-ови одбачених обавештења остају у локалном складишту прегледача.
| Променљива | Подразумевана вредност | Изворна датотека | Опис |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `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` | Присутна је у старој документацији и env шаблонима, али се не користи током извршавања. Може се вратити у будућој функцији за више инстанци. |
| `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. Извршно окружење више не чита ове env променљиве — акредитиви долазе из контролне табле / `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 кључ за аутентификацију на OmniRoute крајњој тачки `/v1/models`. Ако није постављен, користи се `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` за конфигурисање сесија Chromium-а без графичког интерфејса, заснованих на Docker-у, за добављаче аутоматизације прегледача. Све су опционе — подразумеване вредности су приказане у наставку.
| Променљива | Подразумевано | Изворна датотека | Опис |
| ------------------------------------- | ------------------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `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` | Додатни Chromium CLI аргументи који се прослеђују прегледачу унутар контејнера. |
| `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` | – | Замена адресе за повезивање уграђене Redis услуге, специфична за OmniRoute. |
---
## 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` tarball архива приликом припреме опционалних ML/прегледачких пакета за самостално Electron стабло (директоријуми пакета и `optional-packs.index.json` и даље се производе). Користи га ток рада за десктоп издања ради смањења величине отпремања артефаката. |
### 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 ID тунела за локалне рунде 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` | Наменски директоријум за стање прегледача, broker-а и тунела. |
| `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 ток — емитујте peer врсте `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 spokesperson (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`) не може да покрије процењени трошак захтева пре слања. Ако буџет није конфигурисан, захтев се подразумевано пропушта. |