# Environment Variables Reference (Bosanski)
🌐 **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) · 🇨🇿 [cs](../../../cs/docs/reference/ENVIRONMENT.md) · 🇩🇰 [da](../../../da/docs/reference/ENVIRONMENT.md) · 🇩🇪 [de](../../../de/docs/reference/ENVIRONMENT.md) · 🇬🇷 [el](../../../el/docs/reference/ENVIRONMENT.md) · 🇪🇸 [es](../../../es/docs/reference/ENVIRONMENT.md) · 🇪🇪 [et](../../../et/docs/reference/ENVIRONMENT.md) · 🇮🇷 [fa](../../../fa/docs/reference/ENVIRONMENT.md) · 🇫🇮 [fi](../../../fi/docs/reference/ENVIRONMENT.md) · 🇫🇷 [fr](../../../fr/docs/reference/ENVIRONMENT.md) · 🇮🇪 [ga](../../../ga/docs/reference/ENVIRONMENT.md) · 🇮🇳 [gu](../../../gu/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ha](../../../ha/docs/reference/ENVIRONMENT.md) · 🇮🇱 [he](../../../he/docs/reference/ENVIRONMENT.md) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [sr](../../../sr/docs/reference/ENVIRONMENT.md) · 🇸🇪 [sv](../../../sv/docs/reference/ENVIRONMENT.md) · 🇰🇪 [sw](../../../sw/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ta](../../../ta/docs/reference/ENVIRONMENT.md) · 🇮🇳 [te](../../../te/docs/reference/ENVIRONMENT.md) · 🇹🇭 [th](../../../th/docs/reference/ENVIRONMENT.md) · 🇹🇷 [tr](../../../tr/docs/reference/ENVIRONMENT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/ENVIRONMENT.md) · 🇵🇰 [ur](../../../ur/docs/reference/ENVIRONMENT.md) · 🇺🇿 [uz](../../../uz/docs/reference/ENVIRONMENT.md) · 🇻🇳 [vi](../../../vi/docs/reference/ENVIRONMENT.md) · 🇳🇬 [yo](../../../yo/docs/reference/ENVIRONMENT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/ENVIRONMENT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/ENVIRONMENT.md)
---
> Potpuna referenca za svaku varijablu okruženja koju OmniRoute prepoznaje.
> Za predložak za brzi početak pogledajte [`.env.example`](../../.env.example).
> [!IMPORTANT]
> Svaka ovdje dokumentovana varijabla mora se također nalaziti u `.env.example`, a
> svaka varijabla iz `.env.example` mora se nalaziti ovdje. `npm run check:env-doc-sync`
> osigurava ovo pri potvrđivanju izmjena i u CI-ju. Da biste namjerno izostavili varijablu, dodajte je na
> listu dozvoljenih unutar `scripts/check/check-env-doc-sync.mjs`.
---
## Sadržaj
- [1. Obavezne tajne](#1-required-secrets)
- [2. Pohrana i baza podataka](#2-storage--database)
- [3. Mreža i portovi](#3-network--ports)
- [4. Sigurnost i autentifikacija](#4-security--authentication)
- [5. Sanitizacija unosa i zaštita ličnih podataka](#5-input-sanitization--pii-protection)
- [6. Pravila alata i usmjeravanja](#6-tool--routing-policies)
- [7. URL-ovi i sinhronizacija s oblakom](#7-urls--cloud-sync)
- [8. Izlazni proxy](#8-outbound-proxy)
- [9. Integracija CLI alata](#9-cli-tool-integration)
- [10. Integracije internog agenta i MCP-a](#10-internal-agent--mcp-integrations)
- [11. Pristupni podaci OAuth pružatelja usluga](#11-oauth-provider-credentials)
- [12. Nadjačavanja User-Agent vrijednosti pružatelja usluga](#12-provider-user-agent-overrides)
- [13. Kompatibilnost CLI otiska](#13-cli-fingerprint-compatibility)
- [14. Pružatelji API ključeva](#14-api-key-providers)
- [15. Postavke isteka vremena](#15-timeout-settings)
- [16. Evidentiranje](#16-logging)
- [17. Optimizacija memorije](#17-memory-optimization)
- [18. Sinhronizacija cijena](#18-pricing-sync)
- [19. Sinhronizacija modela (razvoj)](#19-model-sync-dev)
- [20. Postavke specifične za pružatelje usluga](#20-provider-specific-settings)
- [21. Stanje proxyja](#21-proxy-health)
- [22. Otklanjanje grešaka](#22-debugging)
- [23. Integracija s GitHubom](#23-github-integration)
- [24. Izolirano okruženje vještina (v3.8.0+)](#24-skills-sandbox-v380)
- [27. Radar izvor (samostalno hostovanje)](#27-radar-feed-self-hosting)
- [Scenariji implementacije](#deployment-scenarios)
- [Revizija: uklonjene / nekorištene varijable](#audit-removed--dead-variables)
---
## 1. Obavezne tajne
Nepostavljene tajne označene sa **Da** automatski se generiraju pri prvom pokretanju (`JWT_SECRET`, `API_KEY_SECRET`) i trajno se pohranjuju u `server.env` u direktoriju podataka — postavite ih eksplicitno kada je taj direktorij privremen. Iznimka je `OMNIROUTE_WS_BRIDGE_SECRET`: on se ne pohranjuje u `server.env` — ulazne tačke servera kreiraju privremenu vrijednost za svako pokretanje koju može koristiti samo most unutar procesa, pa ga eksterni klijenti mosta moraju postaviti eksplicitno.
| Varijabla | Obavezno | Zadano | Izvorna datoteka | Opis |
| ---------------------------- | ------------------- | ------------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `JWT_SECRET` | **Da** | _(nema)_ | `src/lib/auth` | Potpisuje/verificira sve kolačiće sesije nadzorne ploče (JWT). Generirajte pomoću `openssl rand -base64 48`. |
| `API_KEY_SECRET` | **Da** | _(nema)_ | `src/lib/db/apiKeys.ts` | AES ključ za šifriranje vrijednosti API ključeva pohranjenih u SQLite. Generirajte pomoću `openssl rand -hex 32`. |
| `INITIAL_PASSWORD` | Ne | _(nije postavljeno)_ | `src/lib/auth/managementPassword.ts` | Postavlja lozinku nadzorne ploče pri pokretanju dok još nijedna nije sačuvana; zanemaruje se čim se lozinka sačuva. npm i instalacije iz izvornog koda kopiraju `.env.example` u `.env`, pa počinju s njenim javno poznatim rezervisanim mjestom `CHANGEME`: zamijenite ga prije prvog pokretanja ili postavite `INITIAL_PASSWORD=` (prazno) u tom `.env` da lozinku kreirate u čarobnjaku za početno podešavanje pri prvoj posjeti, kao što to čini nepostavljena vrijednost (zadana postavka Docker slike). Sačuvanu lozinku promijenite u Nadzorna ploča → Postavke → Sigurnost ili pokrenite `omniroute reset-password` (`node bin/reset-password.mjs` u checkout-u izvornog koda) s `DATA_DIR` postavljenim na direktorij podataka servera. |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **Da** (produkcija) | _(nije postavljeno)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Dijeljena tajna za interni Codex Responses WebSocket most. Autentificira zahtjeve mosta između WS releja u Electronu/pregledniku i OmniRoute. ⚠️ **OBAVEZNO u produkciji — kada nije postavljeno, svi zahtjevi WS mosta se odbijaju.** Generirajte pomoću `openssl rand -base64 32`. |
| `OMNIROUTE_SW_BUILD_ID` | Ne | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Eksplicitni ID service workera za razbijanje keša za PWA ljusku (#11779); prvi u lancu razrješavanja. |
| `SOURCE_VERSION` | Ne | _(nije postavljeno)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Drugi u lancu — postavljaju ga PaaS alati za izradu (npr. u Heroku stilu) kao implementirani commit. |
| `NEXT_PUBLIC_SW_BUILD_ID` | Ne | _(izvedeno)_ | `src/shared/components/PwaRegister.tsx` | Javna vrijednost u vrijeme izrade koju klijent koristi za registraciju `/sw.js?v=…`; izvedena iz gore navedene dvije, a zatim iz git SHA. |
| `OMNIROUTE_PEER_STAMP_TOKEN` | Ne (automatski) | _(automatski pri svakom pokretanju)_ | `src/server/authz/policies/management.ts` | Tajna po procesu koja dokazuje da je pouzdana oznaka peer-IP adrese potekla s OmniRouteovog vlastitog HTTP servera (`scripts/dev/peer-stamp.mjs`). authz middleware vjeruje lokalnosti zahtjeva (loopback/LAN ograničavanje LOCAL_ONLY ruta) samo kada oznaka nosi ovaj token. Automatski se generira pri svakom pokretanju — ostavite nepostavljeno; fiksirajte ga samo za višeprocesne postavke koje moraju dijeliti oznaku. |
| `OMNIROUTE_TRUSTED_PROXIES` | Ne | _(nije postavljeno)_ | `scripts/dev/peer-stamp.mjs` | IP adrese ili CIDR rasponi reverznih proksija odvojeni zarezima čijim zaglavljima `X-Forwarded-For` / `X-Real-IP` IP lista dozvola/zabrana smije vjerovati, povrh loopback adresa, adresa privatnih mreža i Cloudflare rubnih čvorova, kojima se uvijek vjeruje. Potrebno samo za proksi na bilo kojoj drugoj javnoj adresi; inače filter prosuđuje vlastitu adresu tog proksija. Ograničavanje releja po klijentu (`/api/v1/relay/chat/completions`) koristi kao ključ istu razriješenu adresu klijenta, nikad samo zaglavlja prosljeđivanja. |
### Naredbe za generiranje
```bash
# Generirajte sve četiri tajne odjednom:
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]
> Nikada ne commitajte `.env` datoteke sa stvarnim tajnama u sistem za kontrolu verzija. `.gitignore` već isključuje `.env`, ali provjerite prije pushanja.
---
## 2. Skladištenje i baza podataka
OmniRoute koristi **SQLite** (putem `better-sqlite3`) za svu perzistenciju. Ove varijable upravljaju lokacijom podataka, enkripcijom i životnim ciklusom.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Korijenski direktorij za SQLite bazu podataka, sigurnosne kopije i podatkovne datoteke. Nadjačajte za Docker volumene ili prilagođene putanje. |
| `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(nije postavljeno)_ | `src/lib/dataPaths.ts` | Zaobilazni izlaz za test/eval `DATA_DIR` zaštitu (#10428). Testovi i Node eval/print sonde (`-e`/`--eval`/`-p`/`--print`, uključujući `--eval=`/`--print=` oblike) bez postavljenog `DATA_DIR` preusmjeravaju se u jednokratni privremeni direktorij kako ne bi mogli otvoriti stvarnu bazu podataka operatora; postavite na `1` da biste ponovo uključili stvarni direktorij. |
| `OMNIROUTE_BUILD_SHA` | _(nije postavljeno)_ | `src/lib/monitoring/buildSha.ts` | Git SHA pokrenutog artefakta. Upisuje ga `npm run build:release`; može se ubaciti u kontejnere koji se isporučuju bez `dist/BUILD_SHA` sentinel datoteke. Prikazuje se kao `system.buildSha` na `/api/monitoring/health`. |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Ref prema kojem provenance gate pack-artefakta provjerava build SHA (#10427). |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(nije postavljeno)_ | `scripts/build/buildProvenance.ts` | Postavite na `1` da biste dopustili pakovanje builda čiji SHA nije na release liniji, bilježeći ga kao namjerni canary umjesto da gate padne (#10427). |
| `OMNIROUTE_SMOKE_API_KEY` | _(nije postavljeno)_ | `scripts/ops/deploy-canary.mjs` | API ključ za smoke sondu canary deploya, šalje se kao `Authorization: Bearer` na `/v1/chat/completions`. Koristi ga samo deploy skripta (#10429), nikad server. Nije povezan s `OMNIROUTE_SMOKE_*` varijablama opt-in CLI smoke alata (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` u `tests/integration/upstream-cli-smoke.int.test.ts`) — pogledajte [CLI integracije → Stvarni smoke pregled](../guides/CLI-INTEGRATIONS.md). |
| `OMNIROUTE_BUILDING` | _(nije postavljeno)_ | `src/lib/buildPhase.ts` | Signal build faze (#10060): postavlja ga `scripts/build/build-next-isolated.mjs` na `1` i nasljeđuje ga svaki pokrenuti build worker kako bi DB sloj vratio no-op stub umjesto učitavanja nativnog better-sqlite3 dodatka (koji prekida workera pri izlasku). Nikada ne postavljati za pokrenuti server. |
| `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Postavite na `1` da biste preskočili opcionalnu prebuild provjeru nativnih zavisnosti za egzotična vendored stabla. Ovo ne čini nedostajuću zavisnost izgradivom; koristite samo kada se nativne zavisnosti isporučuju izvan redovnog kanala. |
| `OMNIROUTE_DATA_DIR` | _(nije postavljeno)_ | `open-sse/executors/promptql/threadSticky.ts` | **Rezervni alias** za `DATA_DIR`, provjerava se samo kada `DATA_DIR` nije postavljen. Koristi se za lociranje on-disk thread-sticky keša sesija PromptQL executora (`
/promptql-thread-sessions.json`); ako nijedna varijabla nije postavljena, keš ostaje samo u memoriji (ne čuva se između ponovnih pokretanja). |
| `OMNIROUTE_PLUGINS_DIR` | _(nije postavljeno)_ | `src/lib/plugins/scanner.ts` | Direktorij koji **runtime skener plugina** čita — i korijen u koji plugin manager instalira — nadjačavajući zadanu vrijednost izvedenu iz home direktorija (#11827). Usmjerite ga na bind-mountano stablo plugina u Docker/K8s umjesto premještanja HOME-a samo da biste promijenili putanju skeniranja (HOME upravlja i svakim drugim ponašanjem relativnim prema home direktoriju). Nepostavljeno = `~/.omniroute/plugins`, ili `/tmp/.omniroute/plugins` kada proces uopće ne izvozi home — tiho neotkrivanje koje ova varijabla uklanja. Razriješeni direktorij zapisuje se jednom pri pokretanju kao `scanner.dir_resolved` s ulazom koji je pobijedio. Samo na strani servera: CLI command pluginovi zadržavaju vlastiti `OMNIROUTE_PLUGIN_PATH` (odjeljak 9). |
| `STORAGE_ENCRYPTION_KEY` | _(prazno = onemogućeno)_ | `src/lib/db/encryption.ts` | AES ključ za potpuno šifriranje SQLite baze podataka u mirovanju. Generišite sa `openssl rand -hex 32`. |
| `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | Oznaka verzije za ključ šifriranja. Povećajte je pri rotaciji ključeva kako biste podržali dešifriranje starih sigurnosnih kopija. |
| `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | Kada je `true`, preskače rutinske sigurnosne kopije SQLite datoteke prije upisa (models.dev čuvanje/brisanje cijena, upisi postavki). Ručne sigurnosne kopije i kopije prije vraćanja i dalje se izvršavaju. **Ne** onemogućuje obavezni trajni sigurnosni snimak pokretača migracija niti zaštitu od masovnih migracija za postojeću trajnu bazu podataka. Ne-ručne sigurnosne kopije ograničene su na najviše jednom u 60 minuta. Nadzorna ploča **Settings → Storage** može nezavisno onemogućiti rutinske automatske sigurnosne kopije. |
| `OMNIROUTE_SQLITE_SLOW_MS` | _(nepostavljeno/isključeno)_ | `src/lib/db/adapters/slowDiagnostics.ts` | Milisekunde; vrijednosti ispod 1 ili ne-numeričke ostaju isključene; upozorava najviše jednom u 10s; linija zapisa sadrži samo driver, operation i elapsedMs. |
| `OMNIROUTE_CRYPT_KEY` | _(nepostavljeno)_ | `src/lib/db/encryption.ts` | **Zastarjeli alias** za `STORAGE_ENCRYPTION_KEY`. Prihvaćen kao rezervna opcija kada primarna varijabla nije prisutna. |
| `OMNIROUTE_API_KEY_BASE64` | _(nepostavljeno)_ | `src/lib/db/encryption.ts` | **Zastarjeli alias** (Base64-kodirani oblik) prihvaćen kao rezervna opcija. Automatski se dekodira prije upotrebe. |
| `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(nepostavljeno)_ | `src/lib/db/core.ts` | Zaobilazi periodični interval provjere zdravlja SQLite baze (ms). Kada nije postavljeno, zadane vrijednosti izvode se iz `NODE_ENV`. |
| `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(uklonjeno)_ | `src/lib/db/walMaintenance.ts` | **Uklonjeno.** Periodični `wal_checkpoint(TRUNCATE)` uživo može poništiti dijeljeno mapiranje wal-indeksa i srušiti proces sa SIGBUS (#13973), pa planer više ne postoji. Varijabla je inertna: pozitivna vrijednost bilježi jednokratno upozorenje o zastarjelosti, dok `0` ili nepostavljeno ostaje tiho. WAL održavaju PASSIVE checkpointi (ispod), a skraćuje ga checkpoint pri gašenju. |
| `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5m) | `src/lib/db/walMaintenance.ts` | Zaobilazi česti interval `wal_checkpoint(PASSIVE)` (ms). Održava WAL okvire na čekanju malim kako bi checkpointi ostali brzi, a WAL datoteka ostala ograničena između skraćivanja pri gašenju. `0` onemogućuje. |
| `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Kada PASSIVE tick otkrije da je WAL datoteka iznad ove veličine, pokreće `wal_checkpoint(RESTART)` kako bi WAL počeo ispočetka bez prepisivanja mapiranog wal-indeksa. Checkpointi u truncate režimu uživo uklonjeni su (pogledajte red `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). |
| `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Postavite na `1`/`true`/`yes`/`on` da proces izađe nakon što kritični pritisak resursa traje `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, omogućujući nadzorniku (systemd `Restart=always`, Docker politika restartovanja) da vrati čist proces umjesto neograničenog posluživanja 503 odgovora. |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2m) | `open-sse/utils/resourcePressure.ts` | Koliko dugo kritični pritisak mora trajati prije nego što se aktivira izlaz za samostalni restart. |
| `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Postavite na `1`/`true`/`yes`/`on` da se ignorira `/proc/pressure/memory` na nivou hosta (`psi_some` / `psi_full`) kada bučni susjed izazove 503 odgovore dok je ovaj proces u redu (#13124). Cgroup i V8 heap zaštite ostaju uključene. PSI se također prestaje računati kao dokaz kernel prigušivanja za `cgroup_high`: cgroup ukupno iznad `memory.high` tada postaje kritično samo pri povećanju `high`/`max` u `memory.events`. Bez `memory.events` zadržava se sirovi omjer. |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(automatska detekcija)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Eksplicitna putanja (apsolutna ili relativna u odnosu na cwd) do `sql-wasm.wasm` pri korištenju `sql.js` WASM rezervnog adaptera. Automatski se detektira putem zavisnosti paketa i mogućih rasporeda kada nije postavljeno. |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Broj dana koliko automatsko čišćenje (cleanup sweep) čuva checkpointove, referencirane ulazne/izlazne datoteke i datoteke grešaka te red terminalnog (completed/failed/cancelled/expired) Batch API posla prije brisanja. Stupa na snagu tek kada se uključi `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`; odgovara periodu zadržavanja izlaza OpenAI-jevog vlastitog Batch API-ja. Ne utječe na rutu `DELETE /api/v1/batches/delete-completed` koju pokreće operator, koja po dizajnu ostaje bezuslovna (bez filtera starosti). |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Kada je `true`, automatsko čišćenje briše terminalne Batch API poslove (i njihove checkpointove) starije od `OMNIROUTE_BATCH_RETENTION_DAYS`, te čisti BLOB sadržaj otpremljenih datoteka nakon njihovog vlastitog `expires_at`. Podrazumijevano isključeno: svaka postojeća instalacija zadržava ove podatke potpuno kao prije dok se operator ne odluči za uključivanje. Također feature flag koji se može uređivati na kontrolnoj ploči — pogledajte `docs/reference/FEATURE_FLAGS.md` → Runtime. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Postavite na `1` da se DB healthcheck potpuno preskoči pri pokretanju. Korisno za kratkotrajne zadatke i integracijske testove. |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Postavite na `1` da se petlja DB healthchecka prisilno uključi čak i kada bi se normalno preskočila (npr. kod kratkotrajnih zadataka). |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Postavite na `1` da se preskoči zagrijavanje nativnog runtime-a tokom `npm install`. Korisno u CI/headless instalacijama gdje je sqlite već izgrađen. |
| `OMNIROUTE_MIGRATIONS_DIR` | _(auto-detect)_ | `src/lib/db/migrationRunner.ts` | Nadjačava direktorij koji skenira pokretač migracija. Korisno kada se priložene migracije isporučuju u prilagođenim izradama. |
| `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(unset)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Dodatni direktoriji migracija kao unosi `namespace=dir` odvojeni razdjelnikom putanje platforme (npr. `ee=/opt/app/enterprise/db/migrations`). Datoteke pronađene tamo bilježe se kao `-`, tako da distribucija koja isporučuje vlastite migracije nikada ne dolazi u sukob s upstream numeričkim mjestima. Pogrešno oblikovan unos, nevažeći namespace ili nedostajući direktorij baca grešku pri pokretanju umjesto da tiho preskoči shemu. |
| `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Sigurnosni prag za masovne migracije na čekanju (#3416). Pokretanje se prekida ako na postojećoj bazi čeka više migracija od ovog broja (štiti od izbrisane tabele praćenja). Povećajte ga da biste vratili stariju sigurnosnu kopiju; postavite na `0` da onemogućite provjeru. |
| `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Radni direktorij za release gate `check:install-upgrade`. Treba mu otprilike 12 GB (dva stabla instalacije od ~3 GB plus tarball), pa se ne smije pokretati na malom tmpfs-u — na self-hosted runneru `/tmp` je tmpfs od 12 GB podržan RAM-om i gate ga je iscrpio, obrezujući paket. |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(default in code)_ | `src/lib/spend/batchWriter.ts` | Interval pražnjenja (ms) za grupisanog zapisivača potrošnje/troškova. Niže vrijednosti smanjuju spajanje zapisa; više vrijednosti smanjuju zagušenje baze podataka. |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(default in code)_ | `src/lib/spend/batchWriter.ts` | Maksimalan broj baferovanih unosa potrošnje prije prisilnog pražnjenja. Povećajte na instalacijama s visokim QPS-om; smanjite kada je ograničena memorija važnija. |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(unset)_ | `open-sse/utils/proxyFetch.ts` | Postavite na `"true"` da se emitiraju `[ProxyFetch]` debug logovi na Vercel relay putanji. Podrazumijevano isključeno kako bi se izbjeglo curenje naznaka o rutiranju. |
| `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(unset)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Apsolutna putanja lokalnog binarnog fajla jezgra proxyja (datoteka nazvana `sing-box`) koji provjerava generiranu konfiguraciju jezgra prije nego što zamijeni usvojenu datoteku. Ako nije postavljeno, upisuje se samo `.generated` pored usvojene datoteke. Samo okruženje hosta: nikada se ne čuva u bazi podataka niti prihvata putem upravljačkog API-ja, jer se binarni fajl izvršava. |
| `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(unset)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Kako se lokalno jezgro proxyja ponovno učitava nakon provjerene zamjene konfiguracije: JSON niz argumenata koji se pokreće bez shella, ili tačno `external` kada vanjski posmatrač primjenjuje datoteku. Nikada se ne čuva u bazi podataka niti izlaže putem API-ja. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Postavite na `"true"` ili `"1"` da uključite IP adrese klijenta/izlaza i prefiks naloga u opširnoj liniji proces-loga `[ProxyEgress]`. Podrazumijevano je ISKLJUČENO kako proces-log ne bi otkrivao IP adrese ili prefiks naloga. |
| `OMNIROUTE_DEBUG` | _(nije postavljeno)_ | `bin/cli/commands/quota.mjs` | Postavite na `1` za ispis dijagnostike vremena po zahtjevu (`[omniroute] GET completed in Nms`) iz CLI quota komandi na stderr. |
| `OMNIROUTE_HEALTHCHECK_PATH` | _(automatski)_ | `scripts/dev/healthcheck.mjs` | Eksplicitna putanja koju ispituje health check kontejnera. Ako nije postavljena, proba je izvodi iz `OMNIROUTE_BASE_PATH`; postavljanjem se ponovo uključuje dubinski monitoring endpoint. |
| `OMNIROUTE_DEBUG_COMPLETION` | _(nije postavljeno)_ | `bin/cli/commands/completion.mjs` | Postavite na bilo koju nepraznu vrijednost za emitovanje dijagnostike `[omniroute completion]` iz putanja keša CLI shell-completiona (čitanje/osvježavanje/pisanje). Podrazumijevano isključeno — ti kešovi neuspijevaju tiho, tako da nedostajući/oštećeni keš nikada ne prekida tab-completion. |
| `BATCH_RETRY_DURATION_MS` | `86400000` (24h) | `open-sse/services/batchProcessor.ts` | Maksimalni prozor ponovnih pokušaja za pojedinačne stavke batcha (ms). Stavke koje premaše ovo trajanje označavaju se kao neuspjele. |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Osnovno kašnjenje (ms) za eksponencijalni backoff kod ponovnih pokušaja stavki batcha. |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | Gornja granica (ms) za eksponencijalni backoff između ponovnih pokušaja stavki batcha. |
| `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Maksimalan broj batcheva koji se obrađuju istovremeno. Povećajte za veću propusnost; držite nisko da izbjegnete oluje rate-limit ograničenja. |
> [!IMPORTANT]
> Prije izmjene postojeće perzistentne baze podataka, pokretač migracija objavljuje potpuni,
> sadržajno adresirani snapshot pod `DATA_DIR/db_backups/`. Objavljivanje zahtijeva datotečni sistem
> koji podržava hard linkove unutar istog datotečnog sistema bez prepisivanja, uz trajnu sinhronizaciju
> datoteka. POSIX hostovi također zahtijevaju sinhronizaciju direktorija; na Windowsu Node može odbiti
> handle direktorija, pa OmniRoute flushuje objavljenu datoteku, a sinhronizaciju unosa direktorija
> tretira kao najbolji napor (best effort).
> Ako montirani `DATA_DIR` ne može pružiti te garancije, pokretanje sigurno prekida (fails closed) prije
> primjene migracije. Premjestite `DATA_DIR` na volumen s tim primitivama; nemojte koristiti
> `DISABLE_SQLITE_AUTO_BACKUP` za zaobilaženje sigurnosti migracije.
### Scenariji
| Scenarij | Konfiguracija |
| -------------------------- | --------------------------------------------------------------------------------------------------------- |
| **Lokalni razvoj** | Ostavite sve podrazumijevane vrijednosti. Baza podataka se nalazi na `~/.omniroute/omniroute.db`. |
| **Docker** | `DATA_DIR=/data` + montirajte volumen na `/data`. |
| **Enkripcija u mirovanju** | Postavite `STORAGE_ENCRYPTION_KEY` + čuvajte sigurnosne kopije ključa! Gubitak ključa = gubitak podataka. |
| **CI/Testiranje** | `DATA_DIR=/tmp/omniroute-test` — efemerno, enkripcija nije potrebna. |
---
## 3. Mreža i portovi
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `PORT` | `20128` | `src/lib/runtime/ports.ts` | Glavni port za Dashboard UI i API krajnje tačke (režim s jednim portom). |
| `OMNIROUTE_BASE_PATH` | _(prazno = korijen)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | URL podputanja za posluživanje OmniRoute iza reverznog proxyja (postavlja Next.js `basePath`; preusmjeravanja autentifikacije uzimaju u obzir basePath). Npr. `/omniroute`. U Dockeru se vrijednost ugrađuje tokom `docker build` (`ARG OMNIROUTE_BASE_PATH`); unaprijed izgrađene korijenske slike mogu primijeniti drugačiju runtime vrijednost jednom pri pokretanju kontejnera, prije nego što se Next.js pokrene. Postavite `NEXT_PUBLIC_BASE_URL` na javni origin uključujući istu podputanju. |
| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(prazno = korijen)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Ogledalo `OMNIROUTE_BASE_PATH` vidljivo u pregledniku, umetnuto tokom izgradnje tako da prikaz krajnje tačke na kontrolnoj tabli pokazuje `https://host/omniroute/v1` umjesto `https://host/v1`. Kada nije postavljeno, vraća se na `OMNIROUTE_BASE_PATH`. Ponovno izgradite nakon promjene (Next `basePath` se određuje tokom izgradnje). |
| `DASHBOARD_ALLOW_EMBED` | _(nepostavljeno = nikad se ne može uokviriti)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Opcionalno ugrađivanje HTML stranica u iframe. Kada nije postavljeno, svaka ruta se isporučuje sa `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Postavite na `vscode` da se stranice (dashboard, login, docs, landing) posluže sa `frame-ancestors 'self' vscode-webview:` i bez `X-Frame-Options`, tako da ih VS Code Simple Browser može prikazati (OmniCopilot režim `dashboardOpen: "editor"`). API površina (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, pseudonimi na korijenskom nivou) u svakom slučaju zadržava stroga zaglavlja. Prepoznaje se samo `vscode` — `1`/`true` to ne omogućavaju. Tokom izgradnje: ponovno izgradite nakon promjene (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` za slike; postavljanje na unaprijed izgrađenoj instalaciji nema efekta). |
| `API_PORT` | _(nepostavljeno)_ | `src/lib/runtime/ports.ts` | Kada je postavljeno, poslužuje `/v1/*` proxy API na ovom odvojenom portu. |
| `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Adresa vezanja za API port. |
| `DASHBOARD_PORT` | _(nepostavljeno)_ | `src/lib/runtime/ports.ts` | Kada je postavljeno, poslužuje Dashboard UI na ovom odvojenom portu. |
| `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(onemogućeno)_ | `src/sse/utils/backpressure.ts` | Ograničava istovremene chat konekcije u toku; zahtjevi preko ograničenja dobijaju `503` sa `Retry-After`. Pozitivan cijeli broj omogućava zaštitu; nepostavljeno/`0` je onemogućava. |
| `OMNIROUTE_INSTANCE_ID` | _(nepostavljeno)_ | `src/shared/resilience/peerRouting.ts` | Stabilan, jedinstveni ID za ovaj gateway prilikom ulančavanja OmniRoute instanci. Omogućava provjere dolaznih peer-petlji. Dozvoljeni znakovi: slova, cifre, `.`, `_`, `:` i `-`; maksimalno 64 znaka. |
| `OMNIROUTE_PEER_URLS` | _(unset)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | OmniRoute osnovni URL-ovi razdvojeni zarezom koji mogu primiti `X-OmniRoute-Peer-Trace`. Samo eksplicitno allowlistani upstream URL-ovi primaju peer metapodatke; svi ostali provajderi su netaknuti. |
| `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | Maksimalan broj prethodno posjećenih OmniRoute instanci prihvaćenih na lančanom zahtjevu (`1`-`32`). Ponovljene instance ili iscrpljen budžet vraćaju HTTP `508 Loop Detected`. |
| `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Port objavljen na strani hosta za Dashboard u Docker produkcijskom režimu. |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Port objavljen na strani hosta za API u Docker produkcijskom režimu. |
| `OMNIROUTE_PORT` | _(unset)_ | `src/lib/runtime/ports.ts` | Ima prednost nad `PORT` kada se pokreće unutar Electrona ili drugih omotača. |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Port za WebSocket server za praćenje uživo u realnom vremenu. |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Adresa za bindovanje za live WebSocket server. Postavite na `0.0.0.0` da biste ga izložili na LAN mreži (također podesite `LIVE_WS_ALLOWED_ORIGINS`). Konekcije se autentificiraju pomoću kolačića sesije dashboarda ili Bearer API ključa koji posjeduje upravljački scope (`manage`/`admin`). |
| `LIVE_WS_ALLOWED_ORIGINS` | _(unset)_ | `src/server/ws/liveServer.ts` | Dodatni origin-i razdvojeni zarezom kojima je dozvoljeno otvaranje live WebSocketa. Loopback origin-i dashboarda su već dozvoljeni po defaultu. |
| `LIVE_WS_ALLOWED_HOSTS` | _(unset)_ | `src/server/ws/liveServerAllowList.ts` | Dodatna imena hostova razdvojena zarezom dozvoljena za live WebSocket origin-e. Za razliku od `LIVE_WS_ALLOWED_ORIGINS` (puni origin URL-ovi), poklapa samo dio koji predstavlja host — korisno za LAN/Tailscale postavke. |
| `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(unset)_ | `src/hooks/useLiveDashboard.ts` | Javni URL za live dashboard WebSocket (na strani browsera). Postavite kada ispred WS servera stoji reverse proxy ili Cloudflare Tunnel (npr. `wss://ws.my-ai.com/live-ws`); browser se tada povezuje tamo umjesto na `ws://hostname:20132`. Dio putanje (pathname) se također koristi kao putanja za WebSocket upgrade (default: `/live-ws`). |
| `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` and `scripts/start-ws-server.mjs` | Postavite na `0` ili `false` da onemogućite WebSocket server u realnom vremenu (omogućen po defaultu, vezan na loopback). CI/harness prekidač koji onemogućava samostalnu pomoćnu skriptu za live WebSocket. |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Relay ograničenje brzine po (token, IP), zahtjeva/minuti. U memoriji, po instanci. `0` ili negativna vrijednost onemogućava IP-dimenziju ograničenja (DB ograničenje po tokenu se i dalje primjenjuje). |
| `NODE_ENV` | `production` | Next.js jezgro | Kontrolira opširnost logovanja, keširanje, izlaganje detalja grešaka i Next.js optimizacije. |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — zadano u kodu) | `package.json` / Next.js 16 | Turbopack je zadani bundler za `npm run dev` i `npm run build` (2-3× brži buildovi, mjereno). Postavite na `0` za povratak na webpack na Windowsu, kada naiđete na nekompatibilnosti native bindinga / bundlera, **ili na mašinama s ograničenim RAM-om** — za Turbopack production buildove na ovoj liniji Next.js verzija (16.2.x) je upstream poznato da na velikim grafovima modula dostižu daleko više memorijske vrhove nego webpack (popravka memory-evictiona za Turbopack iz Next 16.3 još nije stabilna); webpack fallback dostiže mnogo niže vrhove. Pogledajte #6409. **Docker buildovi imagea zadano koriste `0` (webpack)**: `Dockerfile` deklarira `ARG OMNIROUTE_USE_TURBOPACK=0` kako običan `docker build .` (Railway i drugi one-click hostovi, ad-hoc self-hosting korisnici) ne bi bio OOM-ubijen na builderu s ograničenom memorijom; proslijedite `--build-arg OMNIROUTE_USE_TURBOPACK=1` da izgradite image s Turbopackom. Pogledajte `docs/guides/DOCKER_GUIDE.md` → Resursi za vrijeme builda. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(nije postavljeno)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Postavite na `1` da preskočite provjeru integriteta SQLite baze pri pokretanju. Korisno za brže podizanje na velikim bazama podataka. |
| `NOTIFY_SOCKET` | _(nije postavljeno)_ | systemd (sd_notify protokol) | Postavlja ga systemd kada proces radi pod servisnom jedinicom sa sd_notify integracijom; OmniRoute ga čita (pogledajte `OMNIROUTE_DISABLE_SD_NOTIFY`) za slanje READY/WATCHDOG notifikacija. Korisnik ga nikada ne postavlja. |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(nije postavljeno)_ | `scripts/dev/systemd-notify.mjs` | Postavite na `1` da onemogućite systemd sd_notify (Type=notify / WatchdogSec=) čak i kada se radi pod systemd jedinicom. Notifikator je u svakom slučaju no-op izvan systemda. |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Interval (ms) za pozadinskog planera provjere zdravlja kredencijala. Minimum: 10000 (10s). |
| `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (ms) za keširani status zdravlja kredencijala. |
| `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Postavite na `1` ili `true` da onemogućite pozadinsko periodično testiranje konekcija providera. Search provideri (SEARCH_VALIDATOR_CONFIGS u `src/lib/providers/validation/searchProviders.ts`, npr. `tavily-search`) su uvijek isključeni iz te provjere — njihova "validacija" je stvarni upstream upit koji se naplaćuje, pa im se zdravlje nikada ne provjerava na tajmer (#9970). |
| `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Postavite na `1` da omogućite autentificiranom pozivatelju da zatraži `/api/monitoring/health?deep=1`, što uzorkuje completions površinu jednom po TTL-u. Anonimni pozivatelji nikada ne pokreću probu. |
| `OMNIROUTE_EVENT_LOOP_STALL_THRESHOLD_MS` | `5000` | `src/lib/healthzLag.ts` | Prag zastoja (ms) za snimač event-loopa pri podizanju: smrzavanje duže od ovog praga pri nastavku bilježi jednu liniju `event loop stalled` s brojima memorije i in-flight zahtjeva, te podiže `eventLoopStall` brojač/maksimum na `/api/monitoring/health`. Postavite na `0` da onemogućite; nečitljiva ili negativna vrijednost vraća na `5000`. |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Bind adresa za Next.js dev/start server. Kada je postavljena, nadjačava zadanu `0.0.0.0`. |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Bind adresa koju Playwright runner koristi prilikom pokretanja Next.js. Zadana vrijednost je `127.0.0.1` za hermetičke testove. **Nemojte koristiti za `omniroute serve`** — umjesto toga koristite `OMNIROUTE_SERVER_HOST` (POSIX shell-ovi automatski postavljaju `HOSTNAME` na ime mašine; `.env` ga ne može nadjačati). |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Bind adresa za `omniroute serve`. Izbjegava koliziju s POSIX shell varijablom `HOSTNAME` (koju bash/zsh uvijek postavljaju na ime mašine). Ako nije postavljena, vraća se na `0.0.0.0`. (#6194) |
### Režimi portova
```
┌─────────────────────────── Single Port (default) ──────────────────────────┐
│ PORT=20128 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Split Ports ─────────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ Use case: Expose API to LAN while restricting Dashboard to localhost. │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker Production ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → Maps container ports to host ports in docker-compose.prod.yml. │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 4. Sigurnost i autentifikacija
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Salt kombiniran sa hardverskim identifikatorima za digitalni otisak mašine (fingerprinting). Mijenjajte ga za svaki deployment radi izolacije. |
| `OMNIROUTE_CLI_SALT` | _(nije postavljeno = nasumični salt po instalaciji, trajno sačuvan u `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | HMAC salt za izvođenje lokalnog CLI autentifikacijskog tokena. Postavljanje ove vrijednosti rotira sve CLI tokene na mašini i uvijek ima prioritet nad trajno sačuvanim saltom. Pogledajte `docs/security/CLI_TOKEN.md`. |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Postavlja `Secure` zastavicu na kolačiće sesije. **Mora biti `true`** kada se pokreće iza HTTPS-a. |
| `REQUIRE_API_KEY` | `false` | API middleware | Kada je `true`, svi `/v1/*` proxy zahtjevi moraju uključivati važeći API ključ. **Ova zastavica ne štiti `GET /v1/models`**, koji umjesto toga prati sigurnosni stav prijave na kontrolnu ploču (`requireAuthForModels`) — pa `401` od `/v1/models` NE znači da je inferencija zaštićena. Pogledajte `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). |
| `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Omogućava otkrivanje potpunih vrijednosti API ključeva u korisničkom interfejsu kontrolne ploče. Podesivo putem Feature Flags na kontrolnoj ploči; sigurnosni rizik na dijeljenim instancama. |
| `NO_LOG_API_KEY_IDS` | _(prazno)_ | `src/lib/compliance/index.ts` | ID-ovi API ključeva odvojeni zarezom koji zaobilaze evidentiranje zahtjeva (GDPR usklađenost). |
| `DEFAULT_RATE_LIMIT_PER_DAY` | _(nije postavljeno = neograničeno)_ | `src/shared/utils/apiKeyPolicy.ts` | Rezervni dnevni budžet zahtjeva koji se primjenjuje na API ključeve čija je kolona `rate_limits` null. Nepostavljeno ili prazno: nema implicitnog ograničenja (#2289, #11017). `0` znači isto (neograničeno). Pozitivan cijeli broj N omogućava N/dan, 5N/sedmica, 20N/mjesec. Neispravno formatirane neprazne vrijednosti prebacuju se na zastarjele (legacy) okvire od 1000/dan, 5000/sedmica, 20000/mjesec. |
| `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | Maksimalna dozvoljena veličina tijela zahtjeva. Odbija podatke (payload) koji premašuju ovo ograničenje. |
| `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | Stvarna tijela zahtjeva na ovom pragu ili iznad njega preuzimaju atomski, procesno-lokalni heavyweight admission lease prije JSON parsiranja (BYTE putanja, uključujući `POST /v1/responses`). Isti mehanizam zaobilaženja sa zdravom rezervom kapaciteta (healthy-headroom escape) iz [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) kao i kod structure-heavy; i dalje ograničeno sa `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), tako da se [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) ne vraća. |
| `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Tvrdo ograničenje chat rute koje se primjenjuje na bajtove pročitane tokom ograničene ingestije, uključujući zahtjeve sa nedostajućim, nevažećim ili neiskrenim `Content-Length`; višak dobija `413`. |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(nepostavljeno — bez ograničenja broja zahtjeva)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** ovo naslijeđeno ograničenje BROJA zahtjeva sada važi samo kada je eksplicitno postavljeno. Kada ostane nepostavljeno (podrazumijevano), prijem teških chat zahtjeva se umjesto toga kontroliše pomoću `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — automatski izvedenog BAJT budžeta dimenzionisanog prema stvarnom memorijskom limitu procesa u **jednom procesu** (jedan V8 heap). Dva preklapajuća `/v1/responses` od ~750k tokena prekorače heapove od ~12 Gi (#7849) — upozorenje o **memorijskom budžetu**, a ne tvrdi maksimum proizvoda od 2. Zdrav proces (heap ispod omjera odbacivanja) MOŽE primiti više paralelnih dugih `/v1/responses` putem `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Desetine dugih SSE klijenata (40–50) je heap + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, a ne "maks 2". Nerazumno podizanje ovoga na "iskoristi host" ponovo uvodi #7849. Množite **heapove** sa **N nezavisnih `DATA_DIR`-ova** (#11024); nikada `replicas>1` na jednoj SQLite datoteci. |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(automatski izvedeno)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** nadjačavanje automatski izvedenog bajt budžeta za ingestiju (25% od strožeg V8/cgroup memorijskog limita podijeljeno sa 8x prolaznog pojačanja). Izvedene i eksplicitne vrijednosti se ograničavaju na 8 MiB–2 GiB. Tijelo veće od efektivnog budžeta odmah pada sa `413 body_exceeds_budget`; nadmetanje između pojedinačno usluživih tijela ostaje ponovljivo `503`. 40–50 paralelnih dugih SSE klijenata je ovaj budžet + heap, a ne tvrdi "maks 2". Pročitajte `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` na `/api/monitoring/health` prije podešavanja. |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Omjer odbacivanja usljed heap pritiska (`heapUsed / heap_size_limit`) za BAJT i STRUKTURNI prijem teških zahtjeva (#10183, #10268, #10437). Paralelni teški zahtjev iznad `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` se odbacuje sa ponovljivim `503` samo kada je heap TAKOĐER na ili iznad ovog omjera; na zdravom heapu se umjesto toga prima putem zdravog headrooma. |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (podrazumijevano `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Ograničeni dodatni kapacitet za brzu putanju zdravog heapa (#10437) na **oba** STRUKTURNI i BAJT prijem (`admitChatRequest`, uključujući tijela ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Bez ovog ograničenja, svaki zahtjev sa zauzetim ali zdravim heapom zaobišao bi prijem bez ikakvog limita. Kada je ovaj broj paralelnih zakupa aktivan kroz putanju zdravog heapa, dodatni zauzeti zahtjevi prelaze na ISTU putanju ograničenog čekanja/odbacivanja koja se koristi pod stvarnim heap pritiskom. `0` u potpunosti onemogućava zaobilaženje. |
| `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Broj poruka koji klasifikuje chat zahtjev kao težak čak i kada je njegovo tijelo ispod bajt praga. |
| `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Broj alata koji klasifikuje chat zahtjev kao težak čak i kada je njegovo tijelo ispod bajt praga. |
| `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Konzervativna procjena tokena na osnovu veličine stringa koja klasifikuje zahtjev kao težak; ovo je proxy za trošak prijema, a ne tokenizacija za naplatu provajdera. |
| `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (onemogućeno) | `src/shared/middleware/chatBodyAdmission.ts` | Opcionalno ograničenje istorije chata koje se uključuje. Podrazumijevano onemogućeno: broj poruka je politika deploymenta, a ne univerzalno svojstvo zahtjeva, i ograničavanje ovdje odbija razgovore sa terminalnim `413` prije nego što ih pipeline za kompresiju može učiniti usluživim. Rast heapa je ograničen pomoću `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` i odbacivanja usljed heap pritiska. Postavite pozitivnu vrijednost na deploymentima sa ograničenom memorijom kojima je potreban tvrdi limit; višak tada dobija strukturirani `413` koji zahtijeva kompaktiranje. |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Tvrdo ograničenje za non-streaming odgovor uzvodnog servisa koji se u potpunosti baferuje u memoriju. Nakon ovoga, čitač uzvodnog servisa se otkazuje i zahtjev brzo pada umjesto da raste neograničeni string dok se heap ne iscrpi. |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Maksimalni broj bajtova na vezi koji se prosljeđuju iz zaglavlja odgovora upstream servera. Kada se budžet premaši, zaglavlja nižeg prioriteta (npr. prilagođena `x-codex-*`, `x-oai-request-id`) se odbacuju kako bi se ostalo u okviru uobičajenih ograničenja zaglavlja reverznih proxyja. Postavite višu vrijednost da biste proslijedili više upstream metapodataka po cijenu veće veličine zaglavlja odgovora. |
| `CORS_ORIGIN` | _(nije postavljeno)_ | `src/server/cors/origins.ts` | Zastarjela CORS lista dozvoljenih pojedinačnih izvora. Za nove instalacije koristite `CORS_ALLOWED_ORIGINS`. CORS je namijenjen samo API klijentima u pregledniku s drugog izvora; autentificirani upisi s kontrolne ploče umjesto toga koriste zahtjeve s istog izvora uz CSRF zaštitu vezanu za sesiju. |
| `CORS_ALLOWED_ORIGINS` | _(nije postavljeno)_ | `src/server/cors/origins.ts` | CORS lista dozvoljenih izvora odvojenih zarezima. Zamjenski znak (wildcard) se ne šalje osim ako nije izričito konfigurirano `CORS_ALLOW_ALL=true`. |
| `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Sigurnosni ventil samo za razvoj koji odražava (echo) bilo koje `Origin` zaglavlje preglednika. Nemojte omogućavati na dijeljenim ili produkcijskim okruženjima. |
| `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Zastarjeli alias. Njegov prekidač na kontrolnoj ploči (nadjačavanje iz baze podataka) se čita prije ove vrijednosti okruženja; `false`, `0`, `no` ili `off` na bilo kojem od njih isključuje provjere hosta na način na koji to čini `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, čak i kada je prekidač te zastavice na kontrolnoj ploči sačuvan kao isključen; druge vrijednosti ostavljaju zaštitu na dvije zastavice ispod. |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Isključuje provjere hosta koje vrši zaštita odlaznih URL-ova, uključujući i blokadu cloud-metadata (cijeli 169.254.0.0/16, metadata.google.internal), na putanjama provajdera koje prate režim zaštite: validaciju URL-a, otkrivanje modela, osnovne URL-ove čvorova provajdera (uključujući udaljene rerank čvorove) i test proxy-fallbacka, među ostalim odlaznim putanjama vezanim za provajdere poput udaljenog preuzimanja slika/medija. Također dozvoljava privatna webhook odredišta, osim cloud-metadata/link-local krajnjih tačaka, koje ostaju blokirane čak i kada je ova zastavica uključena. Zahtjevi za chat poslani putem `BaseExecutor.execute()` zadržavaju svoju provjeru cloud-metadata. Lokalni provajderi rade sa zadanim postavkama: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (zadano `true`) već dozvoljava lokalne i LAN URL-ove na putanjama validacije, otkrivanja i čvorova provajdera; test proxy-fallbacka i privatna webhook odredišta uzimaju u obzir samo ovu zastavicu i blokiraju lokalne/LAN hostove dok je isključena. Nadjačava `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. Vrijednost sačuvana preko prekidača na kontrolnoj ploči ima prednost nad ovom varijablom. |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Dozvoljava URL-ove provajdera na lokalnim/privatnim adresama (127.0.0.1, localhost, LAN, privatni opsezi) za validaciju provajdera, otkrivanje modela, chat i ostale odlazne putanje vezane za provajdere kojima upravlja režim zaštite. **Zadano `true`** (local-first): zaštita tada blokira cloud-metadata krajnje tačke — cijeli 169.254.0.0/16 plus poznata metadata imena hostova (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Postavite `false` za režim samo javnih adresa, koji blokira i privatne i loopback hostove. Zaštita provjerava ime hosta ili IP literal onako kako je napisan, prije bilo kakvog DNS upita; u režimu samo javnih adresa safe-fetch omotač dodatno razrješava ime hosta i odbija svaki privatni odgovor. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` isključuje ove provjere na putanjama navedenim u njegovom redu. Ugrađeni lokalni provajderi, poput LM Studio, Ollama, vLLM, Llamafile i Triton, preskaču sve provjere hosta za validaciju ključa i chat. Vrijednost sačuvana preko prekidača na kontrolnoj ploči ima prednost nad ovom varijablom. (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Dozvoljava da rute `/v1/audio/*` (transkripcije, govor, prijevodi) koriste OpenAI-kompatibilni čvor provajdera hostovan izvan localhosta. Zadano isključeno — usmjeravanje zvuka na udaljeni host mijenja identitet izlaznog saobraćaja i mora biti izričita odluka operatora. Loopback/privatni čvorovi (localhost, 127.0.0.1, 172.16-31.x) su uvijek dozvoljeni i nisu pogođeni. (#3963) |
| `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Dozvoljava da `POST /v1/rerank` (i loopback rerank korak memory enginea) koristi OpenAI-kompatibilni čvor provajdera hostovan izvan localhosta — LAN uređaj ili Tailscale peer koji pokreće TEI, Infinity, vLLM itd. Zadano isključeno — usmjeravanje na udaljeni host mijenja identitet izlaznog saobraćaja i mora biti izričita odluka operatora. Loopback čvorovi (localhost, 127.0.0.1, 172.16-31.x) su uvijek dozvoljeni i nisu pogođeni. Osnovni URL udaljenog čvora također mora proći politiku odlaznih URL-ova provajdera (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). |
| `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(prazno)_ | `src/shared/network/localNodeHosts.ts` | Imena hostova (odvojena zarezom ili bjelinama) koja rutiranje čvorova provajdera tretira kao lokalna — obično ime Docker/Compose servisa rerankera, TEI-ja ili audio sidecar servisa na vlastitoj Docker mreži OmniRoutea (`http://reranker:8080/v1`), tako da čvor ne treba hardkodiranu IP adresu kontejnera. Navedeni hostovi ispunjavaju uvjete za `/v1/rerank`, `/v1/audio/*` i lokalnu provjeru ispravnosti bez uključivanja `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` za svaki udaljeni čvor, te se pozivaju direktno — nikada putem `HTTP(S)_PROXY` ili fiksiranog proxyja veze. I dalje šalju API ključ te veze. Prihvaćaju se samo imena s jednom oznakom (single-label) te imena `.internal`/`.local`; javni FQDN-ovi, IP literali i imena cloud-metapodataka ignoriraju se uz upozorenje. (#14635) |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Kada je OIDC omogućen, onemogućava prijavu lozinkom tako da se korisnici mogu autentificirati isključivo putem OIDC Single Sign-On. Također se prihvaća skraćeni alias `OIDC_DISABLE_PASSWORD_LOGIN`; Dashboard Feature Flag istog ključa ima prednost. (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Skraćeni alias za `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). |
### Kontrolna lista za hardening
```bash
# Minimalni produkcijski sigurnosni standard:
AUTH_COOKIE_SECURE=true # Zahtijeva HTTPS
REQUIRE_API_KEY=true # Autentificiraj sve proxy pozive
ALLOW_API_KEY_REVEAL=false # Nikada ne otkrivaj ključeve u korisničkom interfejsu
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # Ograničenje od 5 MB
```
---
## 5. Sanitizacija unosa i zaštita ličnih podataka
OmniRoute pruža dvoslojnu zaštitu: skeniranje zahtjeva radi otkrivanja ubacivanja prompta i uklanjanje ličnih podataka iz odgovora.
> **⚠️ Ograničenja:** Ove zaštitne mjere predstavljaju _heurističko otkrivanje po principu najboljeg mogućeg pokušaja_, a ne potpuni vatrozid protiv ubacivanja prompta niti DLP sistem za lične podatke. Mogu proizvesti lažno pozitivne rezultate (označavanje bezopasnih promptova za persone/RPG) i lažno negativne rezultate (leetspeak, razmaci, obrasci koji nisu na engleskom jeziku). Same po sebi nisu dovoljne za usklađenost s propisima. Prilagodite načine rada i testirajte ih na svom saobraćaju prije nego što se oslonite na njih.
### Strana zahtjeva: zaštita od ubacivanja prompta
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| --------------------------------- | -------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | Omogućava skeniranje dolaznih poruka radi otkrivanja obrazaca ubacivanja prompta. |
| `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Pravilo za ubacivanje: `warn` = samo evidentiranje, `block` = odbijanje zahtjeva sa statusom 400. Naslijeđeni način `redact` **ne** uklanja tekst ubacivanja; koristite `PII_REDACTION_ENABLED` za izmjenu ličnih podataka u zahtjevu. |
| `INJECTION_GUARD_MODE` | _(nije postavljeno)_ | `src/middleware/promptInjectionGuard.ts` | Naslijeđeni alias za `INPUT_SANITIZER_MODE` — isto ponašanje. |
| `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | Najniži nivo ozbiljnosti koji `MODE=block` odbija: `high` (zadano), `medium` ili `low`. Obrasci srednje ozbiljnosti služe samo za praćenje, osim ako se prag ne snizi. |
| `INJECTION_GUARD_BLOCK_THRESHOLD` | _(nije postavljeno)_ | `src/shared/utils/injectionSeverity.ts` | Naslijeđeni alias za `INPUT_SANITIZER_BLOCK_THRESHOLD` — isto ponašanje. |
| `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | Kada je postavljeno na `true`, rediguje lične podatke u dolaznim zahtjevima (nezavisno od načina rada za ubacivanje). |
| `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | Rediguje poznate obrasce API ključeva / tajnih tokena iz sadržaja zahtjeva i odgovora. Opcionalno; odražava ponašanje `PII_REDACTION_ENABLED`. |
### Strana odgovora: sanitizator ličnih podataka
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| -------------------------------- | ----------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | Skenira odgovore LLM-a radi otkrivanja otkrivenih ličnih podataka prije vraćanja klijentu. |
| `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = maskiranje ličnih podataka, `warn` = samo evidentiranje, `block` = odbacivanje cijelog odgovora. |
### Sanitizator konteksta tokenizirane rute za VS Code
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------------------- | ----------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | Uklanja implicitni kontekst aktivnog uređivača (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) iz zahtjeva prema `/v1/vscode/[token]/*` i rediguje sadržaj eksplicitno priloženih osjetljivih datoteka. Sigurno prema zadanim postavkama; postavite na `0` da biste onemogućili. |
### Scenariji
| Scenarij | Konfiguracija |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Usklađenost za preduzeća** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (blokiranje ubacivanja + redigovanje ličnih podataka u zahtjevima/odgovorima; načini rada su nezavisni) |
| **Samo praćenje** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — evidentira, ali nikada ne blokira |
| **Lična upotreba** | Ostavite sve onemogućeno — bez dodatnog opterećenja |
---
## 6. Politike alata i usmjeravanja
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ----------------------------------------------------------- | ------------------------------------ | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | Kontroliše pristup LLM alatima/pozivanju funkcija. `allowlist` = samo navedeni alati, `denylist` = svi osim navedenih, `disabled` = bez ograničenja. |
| `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | Putanja do JSON datoteke s pravilima za manipulaciju payload-om (prilagodbe upstream-a po modelu/protokolu). |
| `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Interval ponovnog učitavanja (ms) za hot-reload datoteke s pravilima payload-a. Minimum `1000`. |
| `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Opcionalno uključivanje: usmjerava neprefiksirane `claude-*` ID-ove modela od Claude Code klijenata kroz Claude Code OAuth račun umjesto da zahtijeva prefiks provajdera. Eksplicitni prefiksi provajdera i dalje imaju prednost. Može se konfigurisati i putem prekidača na nadzornoj ploči na stranici Claude provajdera. |
| `OMNIROUTE_REDACT_THINKING` | `true` | `open-sse/executors/base/redactThinkingBeta.ts` | Postavite `false` da zaustavite OmniRoute da sam dodaje Anthropic betu `redact-thinking-2026-02-12` (prazni thinking blokovi samo s potpisom). Zahtjevi s `thinking.display: "summarized"` je bez obzira na to preskaču; klijentski dogovorena redact beta ili CC-kompatibilno `requestDefaults.redactThinking` uključivanje je zadržava. Claude OAuth zahtjevi zadržavaju betu (dio je Claude Code OAuth otiska) osim ako nije uključen zadano isključeni feature flag `CLAUDE_OAUTH_SUMMARIZED_THINKING_UNREDACTED`. |
| `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Starije ponašanje `resolveBareModelToConnectionDefault` (#4825): zamjenjuje bilo koji neprefiksirani naziv modela sa `defaultModel` odabrane konekcije. Zadano isključeno — zamjenjuje se samo `auto` ili prazan model; kada je uključeno, bilježi jedno upozorenje po paru. |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Ograničenje konkurentnosti po modelu za round-robin kombinacije (#9100). Round-robin combo semafor bio je čvrsto ograničen na 3 konkurentna zahtjeva po modelu bez mogućnosti nadjačavanja, serijalizirajući promet veće konkurentnosti iza tog ograničenja. Validira se na `>= 1`, ograničava na `<= 32`. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Opasno opcionalno uključivanje koje preskače lokalnu provjeru kontekstnog prozora / maksimalnog broja ulaznih tokena u OmniRoute-u za direktne zahtjeve s jednim modelom. Upstream provajderi i dalje primjenjuju svoje stvarne limite; kompresija prompta i ograničenje izlaznih tokena samog modela ostaju aktivni. Efektivni prioritet je: Feature Flags DB nadjačavanje > varijabla okruženja > zadano; restart nije potreban. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(nije postavljeno)_ | `open-sse/services/selfHostedEntry.ts` | Inline YAML `providers:` dokument (RIC-738, D4). Kada je postavljen (sa ili bez `strategy:` bloka), `/v1/chat/completions` preusmjerava na self-hosted unificirani OpenAI-kompatibilni ulaz umjesto cloud pipeline-a. Nepostavljeno (zadano): ruta prolazi direktno do postojećeg cloud pipeline-a. Pogledajte `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(nije postavljeno)_ | `open-sse/services/selfHostedEntry.ts` | Putanja do YAML datoteke koja sadrži isti `providers:` dokument kao `OMNIROUTE_SELF_HOSTED_PROVIDERS`, za implementacije koje preferiraju datoteku umjesto inline varijable okruženja. Bilo koja od njih aktivira self-hosted ulaz. |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(nije postavljeno — otvorena ruta)_ | `open-sse/services/selfHostedEntry.ts` | Opcionalni dijeljeni API ključ za unificirani self-hosted ulaz (D5 scaffold, rezerviran za sistem kvota po ključu). Kada je postavljen, zahtjevi moraju sadržavati `Authorization: Bearer `. Nepostavljeno: ruta je otvorena, u skladu s postojećim obrascem self-hosted lokalnih provajdera (implementacija na loopback/pouzdanoj mreži). |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(nije postavljeno)_ | `open-sse/services/routingStrategies.ts` | Inline YAML `strategy:` dokument za deterministički engine usmjeravanja (M2/RIC-740, D3) — crna lista/bijela lista, prekidač hlađenja (cooldown), prioritet troškova, prilagođenost latenciji, lanac zamjenskih opcija. Nadjačava inline `strategy:` blok ugniježđen unutar `OMNIROUTE_SELF_HOSTED_PROVIDERS`, po ključu. Pogledajte `docs/routing/DETERMINISTIC_ROUTING.md`. |
| `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(nije postavljeno)_ | `open-sse/services/routingStrategies.ts` | Putanja do YAML datoteke koja sadrži isti `strategy:` dokument kao `OMNIROUTE_SELF_HOSTED_STRATEGY`, za implementacije koje preferiraju datoteku umjesto inline env varijable. |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(nije postavljeno)_ | `open-sse/services/conversationTracker.ts` | Postavite `1` da zaustavite prikupljanje historije razgovora. `resolveConversationId()` vraća nespraćen rezultat prije nego što pročita SQLite ili parsira historiju poruka, a pokriveni su i ID-ovi sesija koje dostavlja klijent. Rukovanje sesijama usmjeravanja je nepromijenjeno i postojeći zapisi se ne brišu. Namijenjeno implementacijama koje ne koriste pregled razgovora na kontrolnoj ploči i žele da tabela poteza prestane rasti. |
| `OMNIROUTE_NADIR_API_KEY` | _(nije postavljeno)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | API ključ za opcionalnu `nadir` auto-combo strategiju rutera, koristi se kada combo-v vlastiti `config.nadir.apiKey` nije postavljen. Opcionalno: pozivi bez ključa idu na Nadirov anonimni nivo, koji je ograničen brzinom po IP adresi i stoga nije upotrebljiv iza zajedničkog gateway-a. Osjetljivo; preferirajte polje po kombinaciji kada kombinacije koriste različite naloge. |
| `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Osnovni origin Nadir API-ja za odlučivanje, koristi se kada combo-v vlastiti `config.nadir.baseUrl` nije postavljen. Potrebno je samo za samohostovani Nadir, koji drži glave promptova unutar vaše vlastite mreže. Završni `/v1` se tolerira i uklanja. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Sedmični prozor za ograničenja USD potrošnje po API ključu (primjena na zahtjeve, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: sedmica završava pri najranijem sedmičnom resetu među upstream konekcijama koje ključ može dosegnuti, ili je klizećih 7 dana kada nijedan nije poznat. `calendar`: lokalna sedmica od ponedjeljka 00:00 do sljedećeg ponedjeljka 00:00, identična za svaki ključ. `calendar` se preporučuje kada jedan bazen upstream naloga dijeli mnogo pojedinačno budžetiranih ključeva. Neispravne vrijednosti vraćaju se na `provider`. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(vremenska zona procesa)_ | `src/lib/usage/apiKeyUsageLimits.ts` | IANA vremenska zona (na primjer `Asia/Shanghai`) koja definiše ponedjeljak 00:00 za `calendar` sedmični prozor. Nepostavljeno ili neispravno: vremenska zona OmniRoute procesa (`TZ` hosta ili kontejnera, koja je u slikama kontejnera često nepostavljena, tj. Koordinirano univerzalno vrijeme). Zanemaruje se u `provider` režimu. |
| `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Zadani maksimalni broj alata dozvoljenih u zahtjevu (OpenAI zadano). Samo pozitivni cijeli brojevi; nepostavljene ili neispravne vrijednosti zadržavaju `128`. Pružatelj sa poznatim/proaktivnim ograničenjem (`grok-cli` 200, `nvidia` 1536) i dalje primjenjuje svoj vlastiti limit — ovo samo pomjera zadani plafon. |
| `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(uključeno)_ | `open-sse/executors/syntxChat.ts` | SYNTX.ai pozivanje alata emulirano promptom: nepostavljeno ili `1`/`true`/`on`/`yes` ubacuje lokalni katalog alata u prompt; svaka druga vrijednost (npr. `0`) preskače to ubacivanje. |
---
## 7. URL-ovi i sinhronizacija u oblaku
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL na strani servera koji interni poslovi sinhronizacije koriste za pozivanje `/api/sync/cloud`. Zadržite ga kao loopback URL ili URL kontejnera čak i kada se aplikaciji javno pristupa putem proxyja. |
| `CLOUD_URL` | _(prazno)_ | `src/lib/cloudSync.ts` | URL krajnje tačke releja u oblaku (premium funkcija). |
| `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | HTTP vremensko ograničenje za zahtjeve sinhronizacije s oblakom. |
| `OMNIROUTE_BUILD_PROFILE` | `full` | Webpack konfiguracija izgradnje | Profil koji se primjenjuje tokom izgradnje (postavite na `minimal` kako biste fizički isključili privilegovane module iz paketa). |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ samostalni izlaz_ | `scripts/build/colocate-standalone.mjs` | Zamjenska vrijednost direktorija samostalnog izlaza tokom izgradnje, koju koristi korak kolokacije nakon izgradnje. Ovo nije postavka vremena izvršavanja. |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(prazno)_ | `src/lib/cloudSync.ts` | Dijeljena tajna koja se koristi za provjeru HMAC-SHA256 potpisa odgovora sinhronizacije s oblakom. |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Postavite na `true` kako biste krajnjoj tački sinhronizacije s oblakom omogućili prepisivanje lokalnih vjerodajnica. Zadana vrijednost je `false`. |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Postavite na `true` kako biste odbacili nepotpisani odgovor sinhronizacije s oblakom kada nije konfigurirana lokalna tajna (#13679). Prisutni potpis uvijek se provjerava — i uvijek odbacuje kada `OMNIROUTE_CLOUD_SYNC_SECRET` nije postavljen — bez obzira na ovu zastavicu. U v3.9 zadana postavka postaje obavezna provjera. |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Postavite na `true` kako biste se vratili na ponašanje u jednom koraku „uvezi sve” iz v3.8.5 bez potvrde korisnika. |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, kontrolna tabla, sinhronizacija | Javno dostupan URL za OAuth redirect_uri, veze kontrolne table i generirane javne URL-ove. Postavite ga na stabilni javni URL kada OAuth povratni pozivi ili generirane veze preglednika moraju koristiti kanonski host obrnutog proxyja. |
| `NEXT_PUBLIC_CLOUD_URL` | _(prazno)_ | Klijentska strana | Klijentska kopija varijable `CLOUD_URL`. |
| `NEXT_PUBLIC_APP_URL` | _(nije postavljeno)_ | `src/shared/services/cloudSyncScheduler.ts` | Naslijeđena rezervna vrijednost za `NEXT_PUBLIC_BASE_URL`. |
| `NEXT_PUBLIC_PORT` | _(nije postavljeno — koristi `PORT` kao rezervnu vrijednost)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Rezervni port na strani klijenta za URL-ove za prikaz kada porijeklo nije poznato (SSR/testovi); čita se prije `PORT`. |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(nije postavljeno)_ | Razrješivač javnog porijekla, URL-ovi slika | OmniRoute porijeklo namijenjeno pregledniku s najvišim prioritetom, koje se koristi za generisanje javnih URL-ova i provjeru porijekla preglednika izvan kontrolne ploče. Postavite ovo kada OpenWebUI ili drugi relej pristupa OmniRouteu putem internog URL-a, ali korisnikov preglednik mora dohvatiti generisane medije putem LAN-a, tunela ili javnog porijekla. **Nemojte** uključivati `/v1`. |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(nije postavljeno)_ | `open-sse/config/providerPluginManifestUrl.ts` | Apsolutni URL manifesta dodatka pružatelja koji se oglašava sidecar klijentima. Kada nije postavljeno, OmniRoute izvodi `/api/v1/provider-plugin-manifest` iz porijekla zahtjeva ili HOST/PORT. |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Protokol koji se koristi pri izvođenju URL-a manifesta dodatka pružatelja iz HOST/PORT bez porijekla zahtjeva. Postavite na `https` iza javnog proxyja koji završava TLS kada eksplicitni `OMNIROUTE_PROVIDER_MANIFEST_URL` nije postavljen. |
| `OMNIROUTE_TRUST_PROXY` | _(nije postavljeno)_ | `src/server/origin/publicOrigin.ts` | Opcionalni način pouzdanosti za proslijeđena zaglavlja javnog porijekla. Nije postavljeno = nemoj vjerovati zaglavljima `Forwarded` / `X-Forwarded-*` pri donošenju sigurnosnih odluka. `true` / `loopback` vjeruje proslijeđenom hostu/protokolu samo od loopback proxyja označenog tokenom. `private` / `lan` također vjeruje proxy peerovima u privatnom LAN-u i omogućava `API_PORT` mostu da zadrži `X-Forwarded-For` takvog peera. U produkciji preferirajte eksplicitni `NEXT_PUBLIC_BASE_URL`. |
| `KIE_CALLBACK_URL` | _(nije postavljeno)_ | `open-sse/utils/kieTask.ts` | Javni URL povratnog poziva za asinhrone kie.ai zadatke. Nadjačavanje s najvišim prioritetom prije `OMNIROUTE_KIE_CALLBACK_URL` i `OMNIROUTE_PUBLIC_URL`. |
| `OMNIROUTE_KIE_CALLBACK_URL` | _(nije postavljeno)_ | `open-sse/utils/kieTask.ts` | Alternativni naziv za `KIE_CALLBACK_URL`. Koristi se kao rezervna vrijednost kada primarna varijabla nije postavljena. |
| `OMNIROUTE_PUBLIC_URL` | _(nije postavljeno)_ | `open-sse/utils/kieTask.ts` | Javno porijeklo koje se koristi za sastavljanje URL-ova asinhronih povratnih poziva. Rezervna vrijednost najnižeg prioriteta za kie.ai povratne pozive; također se koristi kao generički javni URL za druge releje. |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Krajnja tačka za dohvaćanje CrofAI kvote koju koristi stranica Upotreba. Nadjačajte za releje / testne fixturte. |
| `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | ClinePass krajnja tačka za 5-satnu / sedmičnu / mjesečnu kvotu koju koristi stranica Upotreba. Nadjačajte za releje / testne fixturte. |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Zvanična OpenCode Go krajnja tačka za upotrebu, autentificirana API ključem, koju koristi stranica Upotreba. Nadjačajte za releje / testne fixturte. |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Sintetizuje zaglavlja identiteta OpenCode CLI-ja (User-Agent, x-opencode-client/project, UUID-ove zahtjeva/sesije) u opencode-go/zen zahtjevima prema nadređenom servisu koje klijent nije poslao, kako bi ih Cloudflare prihvatio pri izlaznom prometu s VPS-a (#6210/#5997). Podrazumijevano uključeno od #10571; isključite pomoću `false`/`0`/`no`/`off`. |
| `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | Zadani User-Agent koji se koristi kada je `OPENCODE_SYNTHESIZE_CLI_HEADERS` uključen i nije postavljena zamjenska vrijednost `_USER_AGENT` za pojedinačnog pružaoca usluga. Primjenjuje se samo na opencode izvršioce. Kod zahtjeva bez ključa koji nadređeni servis ograniči, konfigurirana vrijednost koja ne sadrži `opencode/= 1.17>` zamjenjuje se ovom zadanom vrijednošću umjesto da zahtjev bude odbijen. |
| `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (uključeno) | `open-sse/utils/opencodeHeaders.ts` | Prosljeđuje zaglavlja klijentske aplikacije za atribuciju (`x-session-id`, `x-title`, `http-referer`) nadređenim pružaocima usluga, tako da zahtjev pokrenut unutar navedenog okruženja zadržava svoj identitet kroz usmjerivač (OpenRouterova ograničenja izdavača oslanjaju se na njih). `0`/`false`/`no`/`off` zadržava identitet registra/operatora i odbacuje vrijednosti koje je dostavio klijent. Prilagođena zaglavlja koja je konfigurirao operator uvijek imaju prednost nad vrijednostima klijenta. |
| `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | Vrijednost za sintetizirano zaglavlje `x-opencode-client` kada je `OPENCODE_SYNTHESIZE_CLI_HEADERS` uključen. |
| `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | Vrijednost za sintetizirano zaglavlje `x-opencode-project` kada je `OPENCODE_SYNTHESIZE_CLI_HEADERS` uključen. |
| `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(nije postavljeno)_ | `open-sse/config/providerErrorRules.ts` | Efektivni skup pružalaca usluga čiji se kvarovi nadređenog servisa grupiraju prema izlaznoj IP adresi (jedan 429 privremeno zaustavlja svaku povezanu konekciju koja dijeli tu IP adresu). Ako nije postavljeno, koristi se zadana vrijednost za besplatni nivo `opencode,opencode-go,opencode-cli`; `none`/`off`/`false`/`0` potpuno onemogućava kaskadu; lista razdvojena zarezima zamjenjuje skup. Plaćeni planovi grupiraju se prema računu na nadređenom servisu i mogu ovo sigurno onemogućiti (#9611). |
| `OMNIROUTE_EGRESS_QUOTA_ROTATION_PROVIDERS` | _(nije postavljeno)_ | `open-sse/config/providerErrorRules.ts` | Opseg rotacije izlaza pri odbijanju zbog kvote. Ako nije postavljeno, član skupa se nakon odgovora 429 izuzima samo za prethodno navedenu porodicu grupiranu prema IP adresi; `all` proširuje taj zapis na svakog pružaoca usluga, tako da ograničenje brzine primljeno preko jednog člana uzrokuje da se sljedeći izbor usmjeri preko drugog izlaza. Sve vrijednosti osim `all` se zanemaruju. Zahtijeva `PROXY_SKIP_RECENTLY_FAILED` (zadano uključeno). Spremište koristi izlaznu adresu kao ključ, a ne (pružaoca usluga, adresu), tako da prošireni 429 privremeno zaustavlja tog člana za svakog pružaoca usluga dok period ne istekne (5 min, uz udvostručavanje na 15). Čita se nakon svakog ishoda odgovora, pa se promjena primjenjuje bez ponovnog pokretanja. |
| `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(nije postavljeno)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Postavite na `off` da biste zaustavili prilagođavanje tijela OpenCode zahtjeva bez ključa (oznaka strujanja i lista alata). Zaglavlja se i dalje primjenjuju. Čita se pri svakom zahtjevu, pa promjena odmah stupa na snagu. |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(nije postavljeno)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Nazivi alata razdvojeni zarezima koji se deklariraju u OpenCode zahtjevu bez ključa koji ne sadrži nijedan alat, kada za taj model još ništa nije zabilježeno. Prazna vrijednost vraća se na jedan zamjenski alat za koji se modelu nalaže da ga ne poziva. Najviše 32 unosa, `[A-Za-z_][A-Za-z0-9_-]{0,63}`; nevažeći unosi se zanemaruju. |
| `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | URL postavki za Ollama Cloud koji se koristi za prikupljanje podataka o kvoti. Zamijenite za posredničke servise / testne primjerke. |
| `OMNIROUTE_OLLAMA_CLOUD_BALANCE_URL` | `https://ollama.com/api/balance` | `open-sse/services/ollamaCloudBalance.ts` | Dokumentirana krajnja tačka nadređenog servisa za stanje računa Ollama Cloud (`GET https://ollama.com/api/balance`, `Authorization: Bearer `). Čita se jednom pri učitavanju modula. Prvo se koristi za kvotu Ollama Cloud kada konekcija ima API ključ; prikupljanje putem kolačića sa stranice postavki ostaje rezervna opcija. Zamijenite za posredničke servise / testne primjerke. |
| `OLLAMA_USAGE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage.ts` | Ollama Cloud kolačić `__Secure-session` koji se koristi za prikupljanje podataka o kvoti sa stranice postavki. Osjetljiv podatak; kada je konfigurirano više računa, prednost dajte polju za pojedinačnu konekciju na nadzornoj ploči. |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage.ts` | Alternativna varijabla okruženja za Ollama Cloud kolačić `__Secure-session`. Osjetljiv podatak; kada je konfigurirano više računa, prednost dajte polju za pojedinačnu konekciju na nadzornoj ploči. |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage.ts` | Alternativna varijabla okruženja za Ollama Cloud kolačić `__Secure-session`, koja se koristi prije kraćih aliasa. Osjetljivo; kada je konfigurirano više računa, radije koristite polje po vezi na kontrolnoj ploči. |
| `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | Krajnja tačka za ograničenja upotrebe servisa CodeWhisperer (AWS Kiro). Promijenite za releje / testne elemente. |
> [!IMPORTANT]
> Prilikom implementacije iza obrnutog proxyja (nginx, Caddy), postavite `NEXT_PUBLIC_BASE_URL` na stabilni javni URL (npr. `https://omniroute.example.com`) kada OAuth povratni pozivi ili generirani javni linkovi moraju koristiti taj naziv hosta. Bez toga OAuth povratni pozivi mogu biti neuspješni jer se redirect_uri neće podudarati, a generirani javni linkovi mogu upućivati na interno porijeklo kontejnera.
>
> Zadržite `BASE_URL` kao interni URL povratne petlje/kontejnera za poslove između servera. Nemojte koristiti preglednički `Origin` ili javni naziv hosta za interne samostalne zahtjeve koji sadrže pristupne podatke.
>
> Autentificirani upisi putem kontrolne ploče ne zahtijevaju statički javni osnovni URL: kontrolna ploča šalje nesigurne zahtjeve istog porijekla sa CSRF tokenom vezanim za sesiju. OmniRoute i dalje centralizira provjeru javnog porijekla za pregledničke integracije koje ne koriste kontrolnu ploču: najprije se vjeruje eksplicitnim varijablama okruženja za javni URL; neobrađena zaglavlja `Forwarded` / `X-Forwarded-*` zanemaruju se osim ako je `OMNIROUTE_TRUST_PROXY` omogućeno i neposredni proxy ravnopravni čvor označen tokenom kao pouzdan. Nemojte koristiti CORS postavke za ispravljanje zahtjeva istog porijekla s kontrolne ploče; CORS je namijenjen samo pregledničkim klijentima s različitog porijekla.
---
## 8. Izlazni proxy
Usmjerite pozive upstream LLM provajdera kroz HTTP ili SOCKS5 proxy radi kontrole odlaznog prometa, geo-usmjeravanja ili maskiranja IP adrese.
`OMNIROUTE_UPSTREAM_HTTP2_ENABLED` je podrazumijevano postavljena na `true`. Postavite je na `false`, `0`, `no` ili
`off` da biste prisilili HTTP/1.1 na Undici dispatcherima u `open-sse/utils/proxyDispatcher.ts`
i `open-sse/utils/proxyFetch.ts`: direktni odlazni promet, HTTP(S)/SOCKS proxyje, relay-e i
njihove ponovne pokušaje sa svježim soketima. Ovo zadržava verifikaciju TLS certifikata, proxy
autentifikaciju, ograničenja konekcija i keep-alive postavke. Restartujte OmniRoute nakon
promjene jer su dispatcheri keširani, a relay agenti se kreiraju pri pokretanju.
Ovaj prekidač ne kontroliše wreq TLS fingerprinting niti transporte specifične za provajdera.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ---------------------------------------- | -------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Omogućuje SOCKS5 proxy agent za pozive prema upstream serverima. Isključite sa `false`. |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Klijentska strana | Svijest klijentske strane o dostupnosti SOCKS5 proxyja. |
| `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Zastavica funkcionalnosti uključena po zadanome (vidi [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz dashboard baze podataka ima prednost). Proxy poolovi i rotacija po računu prestaju ponovno koristiti člana koji je upravo odbio (odbijena TCP proba ili 429 kroz njega) na period koji se udvostručuje sa svakim ponavljanjem, do gornje granice. `false` vraća običan odabir. |
| `SELECTOR_CONTROL_ALLOWLIST` | _(nije postavljeno)_ | `src/lib/proxySubscription/selectorGuard.ts` | Lista dozvola za ciljeve upravljanja selektorima lokalne jezgre izvan loopbacka (hostovi ili IP adrese odvojene zarezom/razmakom, `*` otvara LAN/privatne adrese, ali nikad metadata/link-local). Loopback preko http/https je dozvoljen po zadanome. Vrijednost iz dashboard baze podataka ima prednost nad ovom varijablom kada je postavljena i nije prazna. |
| `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Osnovni period (ms) izdvajanja zbog 429 greške, udvostručuje se sa svakim ponavljanjem. Čita se jednom pri pokretanju. Ograničeno na `1000..3600000`; vrijednost izvan opsega ili nečitljiva vraća se na zadanu uz upozorenje. |
| `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Gornja granica (ms) izdvajanja zbog 429 greške. Čita se jednom pri pokretanju. Ograničeno na `1000..3600000`; vrijednost izvan opsega ili nečitljiva vraća se na zadanu uz upozorenje. Kada je gornja granica ispod osnovne vrijednosti, vraća se na zadanu. Smanjenje gornje granice također skraćuje zaboravljanje nizova: unosi se brišu `2 x max` nakon isteka. |
| `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Zastavica funkcionalnosti koja se uključuje po izboru (vidi [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz dashboard baze podataka ima prednost). Za provajdere čija je kvota grupisana po izlaznoj adresi, rangira člana poola koji dijeli uočenu izlaznu adresu nedavno odbijenog člana odmah ispod zdravih članova. Samo redoslijed, nikad isključivanje. Zahtijeva `PROXY_SKIP_RECENTLY_FAILED`, koji proizvodi signal odbijanja koji ova zastavica čita. |
| `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Prozor odbijanja (ms) koji ograničava ponovljena `proxy.set_aside` webhook upozorenja po članu poola, tako da nalet odbijanja šalje jedan događaj. Čita se pri svakom emitiranju. Ograničeno na `1000..3600000`; vrijednost izvan opsega ili nečitljiva tiho se vraća na zadanu. |
| `HTTP_PROXY` | _(nije postavljeno)_ | Node.js standard | HTTP proxy za pozive prema upstream serverima. |
| `HTTPS_PROXY` | _(nije postavljeno)_ | Node.js standard | HTTPS proxy za pozive prema upstream serverima. |
| `ALL_PROXY` | _(nije postavljeno)_ | Node.js standard | Univerzalni proxy (podržava `socks5://`). |
| `OMNIROUTE_PROXY_ECHO_URL` | _(nije postavljeno)_ | `src/lib/proxyEchoTarget.ts` | Fiksira echo-IP cilj koji koriste sonde proxy izlaza na jedan URL. Kada nije postavljeno, sonda pokušava `api64.ipify.org`, a zatim `api4.ipify.org`, kako tuneli samo s IPv4 ne bi bili prijavljeni kao mrtvi (#9694). |
| `NO_PROXY` | _(nije postavljeno)_ | Node.js standard | Imena hostova/IP adrese odvojene zarezom koje zaobilaze proxy. |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Maksimalan broj istovremenih socket veza po keširanom HTTP/SOCKS proxy dispatcheru. Dugotrajni SSE tokovi poput Codex `/v1/responses` zahtijevaju više od jedne veze kada više zahtjeva dijeli isti proxy na nivou računa. Vrijednosti iznad `256` ograničavaju se na gornju granicu. |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Timeout SOCKS5 handshakea (povezivanja) u ms. Povećajte ga kada je jedan rezidencijalni gateway host pogođen visokom konkurentnošću (npr. 100 istovremenih zahtjeva) — stvarni handshake može premašiti 10 s pod zasićenim poolom iako je proxy dostupan, što bi se inače pojavilo kao lažno `[Proxy Fast-Fail] Proxy unreachable`. Ograničeno na `120000`. |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Kada je `false` (zadano), zahtjev čiji se dodijeljeni proxy ne može razriješiti biva **odbijen (fail-closed)** umjesto da se prebaci na direktnu vezu — sprječava curenje stvarne IP adrese. Postavite `true` da biste vratili stari DIRECT fallback. |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Lažira TLS otisak prsta (fingerprint) koristeći wreq-js (imitira Chrome 124). Suprotstavlja se JA3/JA4 blokiranju. |
| `TLS_FINGERPRINT_PROVIDERS` | _(nije postavljeno)_ | `open-sse/utils/proxyFetch.ts` | Lista dozvoljenih provajdera odvojenih zarezom za novo proxy-usmjereno TLS rutiranje (`open-sse/utils/proxyFetch.ts`). Direktni TLS zadržava svoje staro ponašanje kada nije postavljeno; samo se ovi provajderi usmjeravaju kroz most za Chrome-124 otisak prsta. Groq (`api.groq.com`) isključen je čak i kada lista dozvola nije postavljena, jer Chrome JA3 izaziva Cloudflare 1010 dok nativni undici doseže API. |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Dozvoljava da Claude Turnstile Playwright kontekst preglednika ignorira greške HTTPS certifikata. |
### Scenariji
| Scenarij | Konfiguracija |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **SOCKS5 kroz SSH tunel** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` |
| **Korporativni HTTP proxy** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` |
| **Zaštita od otiska prsta (anti-fingerprint)** | `ENABLE_TLS_FINGERPRINT=true` — zahtijeva `wreq-js` (uključeno) |
| **Kontrolisani izlaz / bez direktnog pristupa** | Ostavite `PROXY_FAIL_OPEN=false` (zadano). Zahtjevi strogo neuspijevaju kada proxy nije dostupan umjesto da cure kroz direktnu vezu. |
| **Legacy / dev — dozvoli direktni fallback** | `PROXY_FAIL_OPEN=true`. Vraća ponašanje prije sigurnosnog ojačavanja: direktna veza se koristi kada razrješavanje proxyja ne uspije. |
> **Napomena (zaobilaženje NVIDIA validacije — #3226):** NVIDIA-in endpoint za
> validaciju API ključa zastaje kada se usmjerava kroz globalni proxy/TLS-zakrpljeni
> fetch (undici dispatcher → 504). `src/lib/providers/validation.ts::directHttpsRequest()`
> namjerno zaobilazi proxy zakrpu za taj jedan poziv validacije koristeći
> `safeOutboundFetch({ bypassProxyPatch: true })`. Ovo je dokumentovani, ograničeni
> izuzetak — **ne** utiče na izlazni saobraćaj za chat/usage. Opseg zaobilaženja
> fiksiran je testom `tests/unit/proxy-bypass-scope-guard-3226.test.ts`.
---
## 9. Integracija CLI alata
Kontroliše kako OmniRoute otkriva i pokreće CLI sidecar alate (Claude Code, Codex, itd.).
| Varijabla | Zadano | Izvorna datoteka | Opis |
| --------------------------------- | -------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = pretraži sistemski PATH; `manual` = koristi samo eksplicitne putanje. |
| `CLI_EXTRA_PATHS` | _(nije postavljeno)_ | `src/shared/services/cliRuntime.ts` | Dodatne PATH stavke za otkrivanje CLI binarnih datoteka (odvojene dvotačkom). |
| `CLI_CONFIG_HOME` | _(nije postavljeno)_ | `src/shared/services/cliRuntime.ts` | Nadjačava home direktorij za čitanje CLI konfiguracija (`~/.claude`, `~/.codex`). Mora biti apsolutna putanja i unutar home direktorija procesa — **ili**, u kontejneru, bind-montirana putanja (tako funkcionira `/host-home`). Sve ostalo vraća na home direktorij. |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Dopušta OmniRoute-u da piše CLI konfiguracijske datoteke (osvježavanje tokena, podaci sesije). Postavite na `false` da svaki zapis CLI konfiguracije ne uspije s eksplicitnom greškom "writes disabled". |
| `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Claude CLI binarne datoteke. |
| `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Codex CLI binarne datoteke. |
| `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Droid CLI binarne datoteke. |
| `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do OpenClaw CLI binarne datoteke. |
| `CLI_CURSOR_BIN` | `agent`, zatim `cursor` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Cursor agent binarne datoteke. Bez nje, detekcija prvo pokušava `agent`, a zatim se vraća na `cursor`. |
| `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Cline CLI binarne datoteke. |
| `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do 5dive CLI binarne datoteke. |
| `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | Sistemski state direktorij 5dive-a (profili autentifikacije u vlasništvu root-a); odražava zadanu vrijednost STATE_DIR samog 5dive-a. |
| `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Continue CLI binarne datoteke. |
| `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Qoder CLI binarne datoteke. |
| `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Qwen Code CLI binarne datoteke. |
| `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Aider CLI binarne datoteke. |
| `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Goose CLI binarne datoteke. |
| `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Google Gemini CLI binarne datoteke — samo detekcija/provjere stanja na strani servera; `omniroute run gemini` razrješava `gemini` binarnu datoteku iz sistemskog PATH-a. |
| `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Kilo Code CLI binarne datoteke. |
| `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do OpenCode CLI binarne datoteke. |
| `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Hermes. Dijele je oba unosa u katalogu (`hermes` i `hermes-agent`). |
| `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke ForgeCode CLI. |
| `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke jcode CLI. |
| `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke DeepSeek TUI. |
| `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke CodeWhale CLI. |
| `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Smelt CLI. |
| `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Pi (pi-coding-agent). |
| `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Crush CLI. |
| `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke agenta Oh My Pi (`omp`). |
| `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Letta CLI. |
| `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Prime Agent (Prime Intellect). |
| `CLI_WINDSURF_BIN` | _(nema)_ | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Windsurf. Windsurf se isporučuje **bez zadane naredbe** — detekcija binarne datoteke ostaje onemogućena dok se ovo ne postavi. |
| `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Prilagođena putanja do binarne datoteke Devin CLI (v3.8.0). Koristi je izvršilac Windsurf/Devin. |
| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | `ide_version` za Devin Desktop. Nadjačavanja moraju koristiti format `x.y.z`; nevažeće vrijednosti vraćaju se na provjerenu zadanu vrijednost. |
| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | `extension_version` priloženog Codeium/language-servera, različit od Desktop `ide_version`. Nadjačavanja moraju koristiti `x.y.z`; nevažeće vrijednosti koriste priloženu zadanu vrijednost. |
| `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Nadjačavanje Devin CLI-ja koje vrijedi samo za agentski most. Izvršilac prihvata samo lokalni ACP stdio upstream. |
| `DEVIN_AGENTIC_HOME` | _(obavezno)_ | `open-sse/executors/devin-cli-agentic.ts` | Apsolutni izolirani početni direktorij za agentski Devin podproces; prihvaćene putanje mosta su `/home/bridge` i putanje `.sandbox` lokalne zadatku (na Windowsu, `C:\...\.sandbox\...`). |
| `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Maksimalno trajanje jednog Devin ACP koraka prije nego što most prekine podređeni proces i vrati eksplicitni timeout. |
| `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | Glavni alias modela Claude Code za izolirani most. Aktivni harness zamjenjuje primjer modelom koji vraća trenutni Devin račun. |
| `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izoliranog mosta koji se koristi kada Claude Code zatraži svoj zadani model Sonnet. |
| `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izoliranog mosta koji se koristi kada Claude Code zatraži svoj zadani model Opus. |
| `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izoliranog mosta koji se koristi kada Claude Code zatraži svoj zadani model Haiku. |
| `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias izoliranog mosta koji se koristi za podagente Claude Code. |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Opcionalno nadjačavanje Codeium API-ja za upravljanje sjedištima koje koristi Devin CLI kvota (`GetUserStatus`). |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Nadjačavanje apsolutne putanje za Augment (Auggie) CLI binarni fajl koji koristi lokalni `auggie` provajder. Ako nije postavljeno, koristi se `CLI_AUGGIE_BIN`, a zatim pretraga PATH-a. |
| `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Alternativno (alias) nadjačavanje putanje Augment (Auggie) CLI binarnog fajla (provjerava se nakon `AUGGIE_BIN`). |
| `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Binarni fajl koji se koristi za stdio klijent lokalnog `zcode` provajdera. Ako nije postavljeno, koristi se `zcode` sa PATH-a. |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | JSON niz (≤16 stringova) dodatnih argumenata koji se prosljeđuju `zcode` binarnom fajlu kada se pokreće putem `cliTools`. |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Radni direktorij za ZCode app-server podproces. |
| `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Nadjačavanje ID-a provajdera koji se šalje app-serveru. |
| `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Korijenski direktorij ZCode app-server runtime-a (gdje se nalaze uključeni `node` i `zcode-server.cjs`). |
| `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Node izvršni fajl koji se koristi za hostovanje ZCode app-servera. |
| `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Ulazna skripta app-servera koja se koristi za hostovanje ZCode servera. |
| `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Vremensko ograničenje pokretanja (ms) nakon kojeg se pokretanje ZCode app-servera smatra neuspješnim. |
| `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | RPC vremensko ograničenje (ms) po zahtjevu za poziv ZCode app-servera. |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Maksimalno trajanje (ms) jednog ZCode turna prije nego što ga supervizor prekine zbog isteka vremena. |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Interval provjere (ms) za završetak ZCode turna. |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Početni direktorij Hermes Agenta gdje OmniRoute čita/piše Hermes CLI konfiguraciju. Odgovara varijabli okruženja koju Hermes PowerShell instalater postavlja na Windowsu (`%LOCALAPPDATA%\hermes`). |
### Automatska sinhronizacija CLI profila
Ove zastavice funkcija su opcionalne (opt-in) i po zadanim postavkama isključene. Također se mogu uključiti/isključiti sa
CLI Code nadzorne ploče.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------- | ------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Nakon sinhronizacije modela provajdera, automatski ponovo zapisuje `~/.codex/*.config.toml` datoteke profila iz aktivnog kataloga. Zahtijeva `CLI_ALLOW_CONFIG_WRITES`; nikada ne mijenja aktivnu/zadanu Codex konfiguraciju, autentifikaciju, Codex-lb postavke ili izbor provajdera. |
| `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Nakon sinhronizacije modela provajdera, automatski ponovo zapisuje `~/.claude/profiles//settings.json` Claude Code datoteke profila iz aktivnog kataloga. Zahtijeva `CLI_ALLOW_CONFIG_WRITES`; nikada ne mijenja aktivnu/zadanu Claude konfiguraciju, autentifikaciju ili izbor provajdera. |
### Docker primjer
```bash
# Montirajte host binarne fajlove u kontejner i recite OmniRoute gdje se nalaze:
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` stupa na snagu samo kada je putanja stvarno bind-montirana s hosta — uparite je s montiranjima poput `~/.codex:/host-home/.codex:rw` (pogledajte profil `host` u `docker-compose.yml`). Putanja koja nije ni unutar kućnog direktorija korisnika kontejnera ni bind montiranje se zanemaruje, jer bi pisanje na nju bilo odbačeno kada se kontejner ponovo kreira.
Slika radi kao `USER node`, pa nemontirani `/root` **nije** važeće premošćavanje.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ---------------------------------------- | ---------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(automatski)_ | `src/shared/utils/containerEnv.ts` | Prisiljava detekciju kontejnera na uključeno (`1`/`true`) ili isključeno (`0`/`false`). Potrebno samo na runtime okruženjima koja automatska detekcija ne prepozna. |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Ipak dozvoljava pisanje konfiguracije CLI alata u nemontiranu putanju kontejnera. CLI ekvivalent je `--allow-container-write`. |
| `DOCKER_UPDATE_TRIGGER_FILE` | nije postavljeno | `src/lib/system/autoUpdate.ts` | Samo Docker slika: dashboard **Update Now** upisuje JSON zahtjev u ovu datoteku (mora biti unutar `DATA_DIR`) kako bi nadzorni proces na strani hosta povukao sliku i ponovo kreirao kontejner. Pogledajte [Docker vodič](../guides/DOCKER_GUIDE.md#dashboard-updates-in-docker). |
### Pomoćne varijable CLI binarne datoteke (`omniroute`)
Ove varijable podešavaju ponašanje same CLI binarne datoteke `omniroute` (ne detekciju sidecara iznad).
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------- | --------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_LANG` | _(sistemski)_ | `bin/cli/i18n.mjs` | Prisiljava jezik izlaza CLI-ja. BCP-47 lokalitet (npr. `en`, `pt-BR`). Premošćava sistemske varijable okruženja lokaliteta (LC_ALL, LC_MESSAGES). |
| `OMNIROUTE_SHOW_LOG` | _(nije postavljeno)_ | `bin/cli/runtime/processSupervisor.mjs` | Postavite na `1` za prosljeđivanje stdout/stderr servera na terminal u nadziranom režimu. Ekvivalent zastavici `--log` na `omniroute serve`. |
| `OMNIROUTE_CLI_TOKEN` | _(nije postavljeno)_ | `bin/cli/api.mjs` | Token za mašinsku autentifikaciju koji se ubacuje kao zaglavlje `x-omniroute-cli-token`. Automatski generiran u zadatku 8.12. |
| `GEMINI_CLI_HOME` | _(nije postavljeno)_ | `bin/cli/commands/setup-gemini.mjs` | Trajni korijen Gemini kućnog direktorija; jednokratno pokretanje koristi privremeni izolirani kućni direktorij. |
| `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Period čekanja u milisekundama prije prisilnog prekida CLI podprocesa kojem je poslan signal. |
| `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(nije postavljeno)_ | `bin/omniroute.mjs` | Postavite na 1 uz eksplicitno zadani DATA_DIR da biste preskočili datoteku okruženja podatkovnog direktorija zadanog korisnika. |
| `OMNIROUTE_SYNC_TOKEN` | _(nije postavljeno)_ | `bin/cli/commands/sync.mjs` | Token sinhronizacije za `omniroute sync bundle` (`GET /api/sync/bundle` prihvata samo token sinhronizacije, a ne API ključ). Ekvivalent je `--token`. |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | Vremensko ograničenje HTTP-a po pokušaju (ms) za CLI → server zahtjeve. |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Maksimalno vrijeme (ms) koje CLI čeka na endpoint zdravlja servera prije ispisa upozorenja o isteku vremena. Korisno za spora hladna pokretanja (npr. Windows). Može se postaviti i putem `--ready-timeout`. |
| `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | Postavite na `1` za ispis dijagnostike ponovnih pokušaja i backoff-a na stderr tokom CLI komandi. |
| `OMNIROUTE_PLUGIN_PATH` | _(nije postavljeno)_ | `bin/cli/plugins.mjs` | Prilagođeni direktorij za otkrivanje CLI plugina (`omniroute-cmd-*` paketi). Kada nije postavljeno, zadano je `~/.omniroute/plugins/`. Samo za CLI — nikada ne dopire do skenera plugina na strani servera, koji određuje `OMNIROUTE_PLUGINS_DIR` (odjeljak 2). |
| `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(nije postavljeno)_ | `bin/omniroute.mjs` | Suzbija obavještenje CLI-ja o ažuriranju pri izlasku iz procesa kada je postavljeno na bilo koju nepraznu vrijednost. Obavještenje ostaje nezavisno onemogućeno u CI okruženju, tihom režimu i netekstualnim izlaznim režimima. |
| `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(izvedeno)_ | `bin/cli/commands/doctor.mjs` | Liveness URL koji ispituje `omniroute doctor`. Programska opcija `livenessUrl` ima prednost; u suprotnom se ova vrijednost koristi doslovno. Ako nije postavljeno, CLI izvodi endpoint `/api/health/degradation` lokalnog dashboarda. |
| `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Putanja kataloga provajdera koju koriste CLI komande za provajdere. Programska opcija `catalogPath` ima prednost. Apsolutne putanje koriste se kakve jesu; relativne putanje rješavaju se od korijena projekta. Ako nije postavljeno, CLI koristi direktorij konstanti provajdera, s naslijeđenom datotekom `providers.ts` kao rezervnom opcijom. |
| `OMNIROUTE_PROVIDER_TEST_MODEL` | _(zadano od provajdera)_ | `bin/cli/provider-test.mjs` | Globalni rezervni model za CLI testove veze s provajderima. Redoslijed prednosti je: konfigurirani model veze, specifično premošćavanje modela za provajdera, ova vrijednost, zatim ugrađeni testni model provajdera. |
---
## 10. Interni agent i MCP integracije
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_BASE_URL` | automatsko otkrivanje | `open-sse/mcp-server/server.ts` | Eksplicitni URL za MCP/A2A alate za pristup OmniRoute-u. Nadjačava automatsko otkrivanje localhosta. |
| `OMNIROUTE_API_KEY` | _(nije postavljeno)_ | MCP/A2A moduli | API ključ za interne pozive MCP alata i A2A vještina. |
| `OMNIROUTE_API_KEY_ID` | _(nije postavljeno)_ | `open-sse/mcp-server/audit.ts` | ID ključa za atribuciju u MCP audit zapisniku. |
| `ROUTER_API_KEY` | _(nije postavljeno)_ | Zastarjelo | Zastarjeli alias za `OMNIROUTE_API_KEY`. |
| `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | Broj dana koliko se A2A historija zadataka čuva u lokalnoj bazi podataka prije nego što je dnevno čišćenje obriše. Ako nije postavljeno, nije numeričko ili je `<= 0`, koristi se zadana vrijednost `30`. |
| `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | Kill-switch za A2A funkciju praćenja memory-hits pogodaka. Postavite na `0` da se potpuno preskoči pretraga prisjećanja memorije za zadatak; svaka druga vrijednost (uključujući nepostavljeno) zadržava funkciju omogućenom. |
| `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Omogućuje offline/lokalni Issue Agent endpoint za snimljenu trijažu. Ostavite onemogućeno osim ako izričito ne pokrećete lokalne tokove rada snimljene trijaže. |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(nije postavljeno)_ | `src/lib/issueAgent/execution.ts` | Vremensko ograničenje (ms) za pojedinačno izvršavanje snimljene trijaže Issue Agenta. Ograničeno na interni maksimum; koristi se ugrađena zadana vrijednost kada nije postavljeno ili je nevažeće. |
| `OMNIROUTE_CONTEXT` | _(aktivni kontekst)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | CLI kontekst/profil udaljenog režima za `omniroute` komande; nadjačava aktivni kontekst u lokalnom spremištu konteksta. Ekvivalentno `--context `. |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Onemogućuje opcionalni `keytar` OS-keychain backend za CLI vjerodajnice konteksta. Kada je omogućeno, vjerodajnice ostaju u `config.json` s modom `0600` i CLI jednokratno ispisuje upozorenje o prebacivanju; namijenjeno za namjerni headless/container rad. |
| `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Nameće kontrolu pristupa zasnovanu na opsezima za pozive MCP alata. |
| `OMNIROUTE_MCP_SCOPES` | _(svi)_ | `open-sse/mcp-server/server.ts` | Opsezi odvojeni zarezom: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. |
| `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | Kompresira opise MCP alata prije serijalizacije manifesta. Vrijednosti za omogućavanje: `1`, `true`, `on`. |
| `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | Algoritam/profil kompresije. Vrijednosti za onemogućavanje: `0`, `false`, `off`. |
| `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | Budžet prekida (ms) za interna upravljačka čitanja MCP servera (health, resilience, combos, quota, usage). |
| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Budžet prekida (ms) za MCP skokove koji čekaju na dobavljača (`route_request`, `web_search`, `web_fetch`). |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | Maksimalan broj instanci indeksa lokalnog korpusa keširanih u memoriji (LRU, jedan po indeksiranom korijenskom direktoriju). Ograničeno na minimum od `1`. |
| `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | Interval sinhronizacije kataloga modela u satima. |
| `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | Interval provjere ograničenja brzine i kvote dobavljača. |
| `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Razmak (ms) između uzastopnih OAuth dohvata kvota u grupnoj sinhronizaciji; OAuth konekcije se dohvataju jedna po jedna kako bi se izbjeglo naletno preopterećenje upstreama. `0` isključuje (istovremeno). |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Minimalni interval (ms) između uzastopnih upstream dohvata kvota na per-request preflight/monitor putanji; raspoređuje istovremene mrežne pozive tako da mnogi nalozi na jednoj IP adresi ne preopterete upstream. Uključeno u Codex (`/wham/usage`), DeepSeek, Bailian (obje lokacije dohvata), OpenCode i Crof dohvatače kvota (#6009, #6911). Generička putanja dispečiranja `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/itd.) još nije pokrivena — prati se zasebno. Pogoci keša nisu pogođeni. `0` onemogućava; ograničeno na `0..60000`. |
| `OMNIROUTE_QUOTA_FETCH_JITTER_MS` | `120` | `open-sse/services/quotaFetchThrottle.ts` | Dodatni nasumični razmak po zahtjevu (ms), uzorkovan pri svakom rezervisanom upstream dohvatu kvote. Podrazumijevano 120; ograničeno na `0..60000`; `0` uklanja samo jitter. Postavite `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS=0` da onemogućite cijelo prigušivanje. Jitter ne garantuje sprečavanje upstream zabrana. |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Kašnjenje (ms) prije osvježavanja ograničenja dobavljača nakon stvarnog događaja potrošnje, dajući upstream API-ju kvote vremena da registruje potrošnju. |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | automatska detekcija | `open-sse/services/adobeFireflyBrowserLogin.ts` | Apsolutna putanja do sistemske Chrome ili Edge izvršne datoteke koja se koristi za interaktivnu Adobe Firefly prijavu i obnovu van ekrana. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Održava IMS i stanje rizika preglednika svježim pomoću Chrome CDP sesija ograničenih na nalog. Postavite na `0` da onemogućite obnovu preglednika. |
| `ADOBE_FIREFLY_SESSION_DISK` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Trajno čuva popravljene Adobe sesije pod `DATA_DIR` kroz ponovna pokretanja procesa. Postavite na `0` da sesije ostanu samo u memoriji. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Minimalni razmak u milisekundama između Adobe Firefly generate slanja; `0` onemogućava razmak. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Dodatni period tišine u milisekundama nakon svakog trećeg uspješnog Adobe slanja. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | Osnovni backoff u milisekundama nakon prolaznih Adobe 408 odgovora; kombinovan s razmakom slanja kroz najviše pet pokušaja. |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Onemogućava sve pozadinske servise (sinhronizacija, cijene, osvježavanje modela). Korisno za CI/test. |
| `OMNIROUTE_HEADLESS` | _(nije postavljeno)_ | `src/lib/system/headless.ts` | Pokretanje samo proxy-enginea: preskače opcionalne podsisteme, `/dashboard` → 404. Isto kao `omniroute serve --headless`. Pogledajte [HEADLESS.md](../guides/HEADLESS.md). |
| `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(nije postavljeno)_ | `src/lib/config/runtimeSettings.ts` | Prisilno uključuje pozadinske zadatke pri automatskoj detekciji testiranja. Postavite `1` da biste zaobišli testnu heuristiku. |
| `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | Učestalost provjere resetiranja budžeta (ms). Donja granica `10000`. |
| `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | Učestalost proaktivnog oporavka veza nakon hlađenja (ms): ponovno validira veze čije je prolazno `rate_limited_until` isteklo, izvan vruće putanje zahtjeva. Donja granica `5000`. |
| `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | Onemogućuje planer proaktivnog oporavka veza nakon hlađenja (lijeni oporavak u `getProviderCredentials` se i dalje primjenjuje). |
| `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Učestalost čišćenja keša zaključivanja (ms). Donja granica `60000`. |
| `OMNIROUTE_REASONING_MIN_BUDGET` | _nije postavljeno_ (onemogućeno) | `open-sse/services/reasoningTokenBuffer.ts` | Opcionalna donja granica za izlazne budžete modela razmišljanja: `max_tokens` pozivaoca u rasponu `[256, floor)` podiže se na granicu (ograničeno maksimalnim izlaznim kapacitetom modela). Nepostavljeno = budžeti klijenta se nikada ne uvećavaju (#9507). |
| `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _nije postavljeno_ (onemogućeno) | `open-sse/services/learnedReasoningEffortCaps.ts` | Opcionalni, zarezom odvojeni ID-evi provajdera (ili `*`): kada `reasoning_effort` 400/422 ne navodi prihvaćeni skup, pokušaj ponovo jednom na nivou niže (nikada ispod `low`) i nauči taj nivo samo ako sonda dobije odgovor (#14895). |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Cron izraz (UTC) za posao izvoza zapisa poziva koji ispražnjava svako omogućeno odredište izvoza zapisa. Preporučuje se `*/5 * * * *` pri izvozu tijela. |
| `OMNIROUTE_LOG_EXPORT_RUN_TIMEOUT_MS` | `900000` | `src/lib/logExport/childRunner.ts` | Vremensko ograničenje (wall-clock) podređenog procesa po odredištu, u milisekundama. Istek vremena bilježi neuspjeh i prekida proces bez pomjeranja nepotvrđene serije. Nevažeće/nepozitivne/ne-cjelobrojne vrijednosti koriste zadanu. |
| `OMNIROUTE_LOG_EXPORT_CHILD_MAX_OLD_SPACE_MB` | `1024` | `src/lib/logExport/childRunner.ts` | Ograničenje V8 old-space prostora podređenog Node izvoznog procesa u MB (ne ukupni RSS). Zadana vrijednost ostavlja prostora za 500 redova ograničenih artefakata s tijelima; prevelike serije i dalje mogu iscrpiti heap podređenog procesa. Neuspjeh savjetuje smanjenje veličine serije ili povećanje ovog ograničenja. Nevažeće/nepozitivne/ne-cjelobrojne vrijednosti koriste zadanu. Bun izvozi se vraćaju na izvršavanje unutar procesa bez ovog ograničenja. |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Interval prozivanja (ms) za vruće ponovno učitavanje konfiguracije. Vrijednosti niže od `1000` se odbijaju. |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(omogućeno)_ | `src/lib/db/apiKeys.ts` | Postavite `1` da biste zaobišli Redis-keš autentifikacije API ključeva (prisiljava čitanje iz baze podataka). |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | Vjeruj korisnički upravljanim RTK pravilima filtera projekta bez strogih provjera potpisa. |
| `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | Ograničenje broja znakova za Lite proaktivno skraćivanje rezultata alata kada `lite.maxToolLength` nije postavljeno. Raspon 256–1000000. Postavka na nadzornoj ploči ima prednost nad ovom env varijablom. |
| `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | Maksimalni broj istovremenih sinkronih RTK/Caveman radnika; višak poslova čeka FIFO redom. |
| `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Vremensko ograničenje po poslu u milisekundama. Radnici kojima istekne vrijeme se prekidaju, a zahtjev prolazi nepromijenjen (fail-open). |
| `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | Trajanje neaktivnosti u milisekundama prije nego što se neiskorišteni radnik kompresije prekine. |
| `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Gornja granica V8 old-generation heap memorije u MB za svaki compression worker, u svim režimima (donja granica `128`). Posao koji je premaši neuspijeva otvoreno (nekompresovan) umjesto da povećava heap gatewaya. |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Glavni prekidač T02 circuit-breakera po engineu za složeni pipeline. **Opcionalno (po defaultu isključeno)** — kada je uključeno, engine koji uzastopno baca greške kroz zahtjeve se preskače (fail-open) tokom cooldown perioda; isključeno = bajt-identično legacy ponašanje. |
| `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Broj uzastopnih neuspjeha kroz zahtjeve prije nego što se breaker enginea otvori. |
| `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Milisekunde tokom kojih otvoreni engine ostaje preskočen prije half-open probnog pokušaja. |
| `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | T08/H8 CCR rampa povratne informacije o dohvatu: svaki prethodni dohvat pohranjenog bloka linearno podiže njegov efektivni `minChars` (često dohvaćeni sadržaj se manje kompresuje; `>=3` dohvata = nikad se ne kompresuje). `1` onemogućava rampu (binarno preskakanje samo na pragu). |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | CCR trajno skladište blokova (#9061). Podržava in-memory skladište SQLite bazom tako da blok preživi LRU izbacivanje, TTL, restart ili dohvat koji stigne na drugu instancu. Postavite `false` da blokovi ostanu samo u memoriji. Blokovi veći od 512KB i cloud runtime okruženja u svakom slučaju ostaju samo u memoriji. |
| `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Glavni prekidač T08/H5 zamrzavanja prefiksa na osnovu uočene upotrebe. **Opcionalno (po defaultu isključeno)** — kada je uključeno, sistemski prompt uočen `>=` praga tretira se kao stabilan keširajući prefiks i čuva od kompresije čak i za providere koje statička heuristika keširanja promaši (zamrzavanje samo _čuva_, nikad ne mijenja). |
| `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Broj uočavanja sistemskog prompta prije nego što se tretira kao zamrznuti stabilni prefiks. |
| `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Postavlja na `true` bootstrap skripta nakon početnog postavljanja. Kontroliše vidljivost čarobnjaka za postavljanje. |
| `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Izlazni mehanizam: dozvoljava da tijelo zahtjeva nadjača polje Antigravity projekta. |
| `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Politika Google One AI kredita: `off` nikad ne ubacuje kredite, `retry` ubacuje jednom nakon prihvatljive kvote 429, a `always` ubacuje na prvom zahtjevu. |
| `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Dozvoljava Antigravity prevodiocu zahtjeva da preskoči strogu validaciju potpisa CLI zahtjeva kada upstream odbija prave potpise (debug/zastarjeli-CLI režim). Vrijednost različita od nule omogućava zaobilaženje. |
| `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | Nadjačava putanju token-datoteke Antigravity CLI-a (agy) za uvoz lokalne prijave putem automatskog otkrivanja. |
### OAuth CLI most (interno)
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------- | --------------------- | ------------------------------- | ---------------------------------------- |
| `OMNIROUTE_SERVER` | automatsko otkrivanje | `src/lib/oauth/config/index.ts` | URL servera za CLI↔OmniRoute auth most. |
| `OMNIROUTE_TOKEN` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Auth token za CLI most. |
| `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | Korisnički ID za sesije CLI mosta. |
| `SERVER_URL` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Legacy pseudonim za `OMNIROUTE_SERVER`. |
| `CLI_TOKEN` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Legacy pseudonim za `OMNIROUTE_TOKEN`. |
| `CLI_USER_ID` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Legacy pseudonim za `OMNIROUTE_USER_ID`. |
---
## 11. OAuth kredencijali provajdera
Ugrađeni kredencijali za **localhost razvoj**. Za udaljene implementacije, registrirajte svoje na konzoli za developere svakog provajdera.
| Varijabla | Provajder | Napomene |
| ------------------------------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Javni klijent — tajna nije potrebna. |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Zaobilaženje redirect URI. Zadano: `https://platform.claude.com/oauth/code/callback` |
| `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Javni klijent. |
| `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Zahtijeva 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) | Opcionalno zaobilaženje za javni Muse CLI device-flow klijent id. Ostavite nepostavljeno da koristite ugrađeni javni klijent. |
| `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Zahtijeva odgovarajući `_SECRET`. |
| `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — |
| `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Javni klijent. |
| `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Opcionalno zaobilaženje za OAuth klijent id GitHub Enterprise Copilota. Vraća se na javnu zadanu vrijednost iz `GITHUB_OAUTH_CLIENT_ID` kada nije postavljeno. |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | Opcionalno zaobilaženje za GitHub Copilot klijent integracijski ID poslan u `Copilot-Integration-Id` i `Editor-Plugin-Version` zaglavljima. Zadano je `copilot-developer-cli`. |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | API ključ kao rezerva koji koristi `open-sse/executors/devin-cli.ts` kada kredencijal po vezi nije dostupan. Opcionalno. |
| `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Prilagođena putanja do Devin CLI binarne datoteke (`devin`). Razrješava `open-sse/executors/devin-cli.ts`. |
| `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | OAuth klijent ID za GitLab Duo. Registrirajte aplikaciju na `https://gitlab.com/-/profile/applications` s redirect URI `/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) | OAuth klijentska tajna za GitLab Duo. Opcionalno — PKCE tok ne zahtijeva tajnu. Vraća se na `GITLAB_OAUTH_CLIENT_SECRET`. |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Zaobilaženje GitLab osnovnog URL-a (samohostirani GitLab). Zadano je `https://gitlab.com`. Vraća se na `GITLAB_BASE_URL`. |
| `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Zastarjela rezervna opcija za `GITLAB_DUO_BASE_URL`. Koristi se kada `_DUO_` varijanta nije postavljena. |
| `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Zastarjela rezervna opcija za `GITLAB_DUO_OAUTH_CLIENT_ID` koju koristi `src/lib/oauth/constants/oauth.ts`. |
| `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Zastarjela rezervna opcija za `GITLAB_DUO_OAUTH_CLIENT_SECRET` koju koristi `src/lib/oauth/constants/oauth.ts`. |
| `QODER_OAUTH_CLIENT_SECRET` | Qoder | — |
| `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Postavite za omogućavanje Qoder OAuth-a. |
| `QODER_OAUTH_TOKEN_URL` | Qoder | — |
| `QODER_OAUTH_USERINFO_URL` | Qoder | — |
| `QODER_OAUTH_CLIENT_ID` | Qoder | — |
| `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Direktna rezervna opcija s API ključem (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 | Zaobilazi direktorij konfiguracije Qoder CLI-ja (izolirana PAT sesija, sprječava prepisivanje prijave u pregledniku). |
| `QODER_CLI_MAX_CONCURRENCY` | Qoder | Maksimalan broj istovremenih pokretanja qodercli-ja (print pokretanja ili ACP upiti); dodatni zahtjevi se stavljaju u FIFO red. Nepostavljeno (zadano) = bez ograničenja. |
| `QODER_CLI_QUEUE_TIMEOUT_MS` | Qoder | Koliko dugo Qoder zahtjev čeka na qodercli slot (samo kada je ograničenje postavljeno) prije nego što ne uspije sa statusom 429 `qodercli_busy` + `Retry-After`. Zadano `120000`. |
| `QODER_CLI_TRANSPORT` | Qoder | `print` (zadano) pokreće `qodercli --print` po zahtjevu; `acp` održava jedan trajni `qodercli --acp` proces po PAT-u. |
| `QODER_CLI_ACP_IDLE_TIMEOUT_MS` | Qoder | ACP transport: prekida trajni qodercli proces nakon ovako dugog vremena neaktivnosti. Zadano `600000`. |
| `QODER_CLI_ACP_STARTUP_TIMEOUT_MS` | Qoder | ACP transport: rok u kojem qodercli mora odgovoriti na ACP `initialize`. Zadano `60000`. |
| `QODER_CLI_ACP_MAX_SESSIONS_PER_PROCESS` | Qoder | ACP transport: reciklira trajni qodercli proces nakon ovako mnogo sesija. Zadano `500`. |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Frontend `tk` token koji se šalje kao `validated` na `/api/chat`. Obavezno kada Blackbox nameće podudaranje tokena; u suprotnom OmniRoute koristi nasumični UUID. Pogledajte issue #2252. |
| `VISION_BRIDGE_BASE_URL` | Vision Bridge zaštitna mjera | Osnovni URL kompatibilan s OpenAI za vision-bridge pozive koji nisu Anthropic. Zadano koristi zastarjelu (legacy) OpenAI URL env varijablu ili api.openai.com. Usmjerite na OmniRouteov `/v1` self-loop ili bilo koji OpenAI-kompatibilni endpoint (Gemini OpenAI-compat, OpenRouter). Issue #2232. Kada je URL OmniRouteov vlastiti `/v1`, describe pod-zahtjev šalje `x-omniroute-admission-bypass: internal` i autentificira se pomoću razriješene self-loop vjerodajnice (`sk_omniroute` sentinel u lokalnom načinu rada, ili `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350), kako bi deploymenti s `REQUIRE_API_KEY=true` radili. |
| `VISION_BRIDGE_API_KEY` | Vision Bridge zaštitna mjera | API ključ za gornji URL. Nadjačava OpenAI / Google env varijable po dobavljaču za vision-bridge pozive koji nisu Anthropic. Anthropic modeli zadržavaju svoj namjenski put Anthropic ključa. Issue #2232. |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge zaštitna mjera | Koliko dugo se kešira rezultat rutiranja "nema upotrebljivog kandidata", u ms (zadano `30000`). Nevažeće ili negativne vrijednosti vraćaju se na zadanu; `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 Client ID (tip: "Web application")
> 3. Dodajte URL svog servera kao Authorized redirect URI
> 4. Zamijenite vrijednosti vjerodajnica u `.env`.
---
## 12. Zaobilaženje User-Agent-a provajdera
Zaobiđite `User-Agent` zaglavlje koje se šalje svakom upstream provajderu. Ovo se dinamički razrješava prilikom izvršavanja od strane bazne klase executor-a:
```
process.env[`${PROVIDER_ID}_USER_AGENT`]
```
> **Izvor:** `open-sse/executors/base.ts` → `buildHeaders()`
| Varijabla | Zadana vrijednost | Kada ažurirati |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Kada Anthropic objavi novu verziju CLI-ja |
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Postavite na `1`/`true` da bi se imena alata harness-a trećih strana doslovno prosljeđivala Anthropic-u na obje putanje prema Anthropic-u (nativni OAuth i CLIProxyAPI). Po zadanim postavkama executor deterministički dodjeljuje pseudonime imenima alata koja nisu Claude Code (kanonsko mapiranje Claude Code-a gdje postoji, inače PascalCase) i vraća ih na original u odgovoru putem `_toolNameMap`, tako da harness-i sa snake_case alatima ne budu odbijeni kao identificirani klijenti trećih strana. Samo za otklanjanje grešaka. |
| `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | Kada OpenAI ažurira Codex CLI |
| `CODEX_CLIENT_VERSION` | `0.155.0` | Zaobiđite verziju Codex klijenta nezavisno od cijelog UA stringa |
| `GROK_CLI_CLIENT_VERSION` | `1.0.41` | Zaobiđite `x-grok-client-version` za inference, sinhronizaciju modela i device-code OAuth, kao i zadani Grok CLI User-Agent za inference i sinhronizaciju modela. Prihvata SemVer s opcionalnim prerelease/build metapodacima, do 128 znakova nakon uklanjanja okolnih razmaka. Nepostavljene, prazne, nevažeće vrijednosti ili one koje sadrže prelom reda koriste isporučenu fiksiranu vrijednost. Postojeće potpuno zaobilaženje User-Agent-a za inference zadržava prednost. |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | Zaobiđite oglašenu verziju Claude Code-a nezavisno od `CLAUDE_USER_AGENT`. Anthropic ograničava pristup nekim modelima na osnovu ove vrijednosti (#12417). |
| `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Zaobiđite sufiks od 3 znaka koji OmniRoute dodaje na `cc_version=` u Claude billing bloku. Povećavajte ga zajedno sa `CLAUDE_CODE_CLIENT_VERSION` — fiksiranje samo verzije oglašava `version.revision` par koji nijedan stvarni binarni fajl ne emituje. |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | Zaobiđite oglašenu verziju Copilot CLI-ja nezavisno od `GITHUB_USER_AGENT` |
| `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | Kada se GitHub Copilot Chat ažurira |
| `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | Kada se Antigravity IDE ažurira |
| `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | Kada se Kiro IDE ažurira |
| `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | Zaobiđite Kiro social device-code `clientId` (javni id) |
| `KIRO_VERIFY_FULL_CRC` | `false` | Opcija po izboru: potpuna CRC validacija poruka po frame-u na Kiro event stream-u (za otklanjanje grešaka oštećenih streamova) |
| `KIRO_CREDIT_PRICE_USD` | `0.02` | USD po Kiro kreditu; pretvara `meteringEvent` kredite u tačan trošak po zahtjevu |
| `KIRO_REQUIRE_CREDITS` | `false` | Odbaci Kiro odgovor koji ne prijavljuje mjerenje kredita umjesto da se zabilježi kao nenaplaćen |
| `QODER_USER_AGENT` | `Qoder-Cli` | Kada se Qoder CLI ažurira |
| `CURSOR_USER_AGENT` | `Cursor/3.3` | Kada se Cursor ažurira |
> [!TIP]
> Možete dodati User-Agent zaobilaženja za **bilo kojeg** provajdera koristeći obrazac `{PROVIDER_ID}_USER_AGENT`. Executor dinamički konstruiše ime env varijable.
---
## 13. Kompatibilnost CLI otiska
Kada je omogućeno, OmniRoute mijenja redoslijed HTTP zaglavlja i polja JSON tijela kako bi odgovarao tačnom potpisu zvaničnih CLI alata. Time se smanjuje rizik od označavanja računa, uz zadržavanje vaše proxy IP adrese.
**Izvor:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts`
### Po pružaocu usluge
| Varijabla | Aktivacija | Efekat |
| ------------------------ | ---------- | --------------------------------------- |
| `CLI_COMPAT_CODEX` | `=1` | Oponaša potpis zahtjeva Codex CLI-ja |
| `CLI_COMPAT_CLAUDE` | `=1` | Oponaša potpis zahtjeva Claude Codea |
| `CLI_COMPAT_GITHUB` | `=1` | Oponaša potpis zahtjeva GitHub Copilota |
| `CLI_COMPAT_ANTIGRAVITY` | `=1` | Oponaša potpis zahtjeva Antigravityja |
| `CLI_COMPAT_CURSOR` | `=1` | Oponaša potpis zahtjeva Cursora |
| `CLI_COMPAT_KIMI_CODING` | `=1` | Oponaša potpis zahtjeva Kimi Codinga |
| `CLI_COMPAT_KILOCODE` | `=1` | Oponaša potpis zahtjeva Kilo Codea |
| `CLI_COMPAT_CLINE` | `=1` | Oponaša potpis zahtjeva Clinea |
### Globalno
| Varijabla | Aktivacija | Efekat |
| ---------------- | ---------- | -------------------------------------------------------------------- |
| `CLI_COMPAT_ALL` | `=1` | Omogućava kompatibilnost otiska za **sve** pružaoce usluga odjednom. |
### Zamjene identiteta Kimi Coding CLI-ja
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------- | --------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------ |
| `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | Zamjenjuje verziju Kimi CLI-ja poslanu tokom OAuth/API poziva. |
| `KIMI_CODING_DEVICE_ID` | _(zabilježena zadana vrijednost)_ | `src/lib/oauth/providers/kimi-coding.ts` | Zamjenjuje zabilježeni ID Kimi uređaja koji se koristi u zaglavljima klijenta. |
> [!NOTE]
> Ova funkcija radi zajedno sa zamjenama User-Agenta (§12). Sistem otiska upravlja redoslijedom zaglavlja i polja tijela, dok zamjene User-Agenta upravljaju konkretnim UA nizom. Obje funkcije mogu se omogućiti nezavisno.
---
## 14. Pružaoci usluga s API ključem
API ključevi za pružaoce usluga koji koriste direktnu autentifikaciju. **Preporučena postavka:** Kontrolna tabla → Pružaoci usluga → Dodaj API ključ.
Postavljanje putem varijabli okruženja predstavlja alternativu za Docker ili implementacije bez grafičkog interfejsa.
Prepoznati obrazac: `{PROVIDER_ID}_API_KEY`
| Varijabla | Pružalac usluge |
| ------------------ | ----------------------------------------------------- |
| `DEEPSEEK_API_KEY` | DeepSeek |
| `NVIDIA_API_KEY` | NVIDIA NIM |
| `JINA_AI_API_KEY` | Jina AI (Foundation API + rezervni Reader) |
| `JINA_API_KEY` | Jina AI (alias za `JINA_AI_API_KEY`) |
| `GEMINI_API_KEY` | Gemini (Google AI Studio) ugrađivanja + rezervni chat |
| `GOOGLE_API_KEY` | Gemini (alias za `GEMINI_API_KEY`) |
> [!NOTE]
> Statički unosi `${PROVIDER}_API_KEY` za Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius i Qianfan uklonjeni su u v3.8.0 jer ih izvršno okruženje više ne čita — ti pružaoci usluga oslanjaju se isključivo na Kontrolnu tablu / `data/provider-credentials.json` / šifriranu bazu podataka. Pogledajte odjeljak _Revizija: uklonjene / neaktivne varijable_ na dnu ovog dokumenta za postupak migracije.
> [!TIP]
> Ključevi postavljeni putem Kontrolne table pohranjuju se šifrirano u SQLiteu i imaju prednost nad varijablama okruženja.
>
> **Jina:** `jina-ai/…` ugrađivanja, ponovno rangiranje, klasifikacija, segmentacija i `jina-search` **ne** naplaćuju ključ okruženja klastera kada postoji veza `jina-ai` (ili dijeljena `jina-reader`) na kontrolnoj tabli — `getProviderCredentials` prvo popunjava postojeće vrijednosti. `JINA_AI_API_KEY` / `JINA_API_KEY` koriste se samo kada ne postoji upotrebljiv ključ s kontrolne table. Zapisi poziva pripisuju rezervnu vrijednost iz okruženja kao `connection_id=env:JINA_AI_API_KEY`. Kartica Reader (`jina-reader`, `r.jina.ai`) nikada ne opslužuje `/v1/embeddings` niti `/v1/rerank`.
>
> **Gemini:** `gemini/gemini-embedding-2` (alias `google/gemini-embedding-2`) prvo koristi vezu `gemini` s kontrolne table. `GEMINI_API_KEY` / `GOOGLE_API_KEY` koriste se samo kada ne postoji upotrebljiv ključ s kontrolne table. Zapisi poziva pripisuju rezervnu vrijednost iz okruženja kao `connection_id=env:GEMINI_API_KEY`. Izvorni multimodalni saobraćaj koristi `x-goog-api-key` prema `:embedContent` / `:batchEmbedContents` — N OpenAI `input` stavki postaje N vektora.
---
## 15. Postavke vremenskih ograničenja (timeout)
Sve vrijednosti su u **milisekundama**. Centralizirano razrješavanje u `src/shared/utils/runtimeTimeouts.ts`.
### Hijerarhija vremenskih ograničenja
```
REQUEST_TIMEOUT_MS (globalno nadjačavanje)
├─→ FETCH_TIMEOUT_MS (pozivi upstream provajdera, zadano: 600000)
│ ├─→ FETCH_HEADERS_TIMEOUT_MS (nasljeđuje od FETCH_TIMEOUT_MS)
│ ├─→ FETCH_BODY_TIMEOUT_MS (nasljeđuje od FETCH_TIMEOUT_MS)
│ ├─→ TLS_CLIENT_TIMEOUT_MS (nasljeđuje od FETCH_TIMEOUT_MS)
│ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (nezavisno, zadano: 10000)
│ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (nezavisno, zadano: 15000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (nezavisno, zadano: 0 = isključeno, preporučeno: 30000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (nezavisno, zadano: 2)
│ ├── FETCH_CONNECT_TIMEOUT_MS (nezavisno, zadano: 30000)
│ └── FETCH_KEEPALIVE_TIMEOUT_MS (nezavisno, zadano: 4000)
├─→ STREAM_IDLE_TIMEOUT_MS (nasljeđuje od REQUEST_TIMEOUT_MS, zadano: 600000)
├─→ STREAM_ACTIVE_TIMEOUT_MS (nezavisno, zadano: 1260000; 0 onemogućava)
├─→ STREAM_READINESS_TIMEOUT_MS (nasljeđuje od REQUEST_TIMEOUT_MS, zadano: 80000)
├─→ STREAM_READINESS_MAX_TIMEOUT_MS (ograničava adaptivna produženja spremnosti, zadano: 180000)
└─→ API_BRIDGE_PROXY_TIMEOUT_MS (nasljeđuje od REQUEST_TIMEOUT_MS, zadano: 30000)
├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (izvedeno, zadano: 300000)
├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (zadano: 60000)
├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (zadano: 5000)
└── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (zadano: 0 = onemogućeno)
```
| Varijabla | Zadano | Opis |
| ----------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REQUEST_TIMEOUT_MS` | _(nije postavljeno)_ | Globalna prečica — nadjačava zadane vrijednosti za `FETCH_TIMEOUT_MS` i `STREAM_IDLE_TIMEOUT_MS`. |
| `FETCH_TIMEOUT_MS` | `600000` | Ukupni HTTP timeout zahtjeva za pozive prema upstream pružateljima. |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | Maksimalna tišina između sirovih upstream bajtova prije prekida. Modeli s proširenim razmišljanjem rijetko pauziraju duže od 90 s. |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Maksimalno ukupno trajanje aktivnog SSE streama; nikad se ne resetuje na upstream bajtove i nezavisno je od `REQUEST_TIMEOUT_MS`. Izvedeno iz najveće vrijednosti `timeoutMs` po modelu u registru (1200000, Codex) plus margina od 60000, tako da model kojem je dozvoljeno da iskoristi svoj puni budžet nikad ne bude prekinut usred odgovora. Postavite na `0` da biste onemogućili. |
| `OMNIROUTE_SSE_COMMENTS` | _(onemogućeno)_ | Određuje može li OmniRoute emitovati SSE `:` linije komentara (npr. `: keepalive` heartbeat i `x-omniroute-*` metapodatke u trailerima). Onemogućeno po defaultu (#10524) jer striktni OpenAI-kompatibilni klijenti primjenjuju JSON.parse na svaku SSE liniju i ruše se na `:` komentarima; `data:` heartbeatovi nisu pogođeni. Postavite `on`/`true`/`1`/`yes` da biste se ponovo uključili. Koristi ga `open-sse/utils/sseHeartbeat.ts`. |
| `SSE_COALESCE_MS` | `0` (isključeno) | Po izboru: spaja uzastopne Claude `content_block_delta` događaje (isti indeks bloka i tip delte) poslane Claude klijentima, uz pražnjenje najmanje svakih N ms. Bez gubitaka; `signature_delta` i granični događaji se nikad ne spajaju. Primjenjuje se na svaki tip delte osim ako nije postavljena neka od varijabli po tipu ispod. Koristi ga `open-sse/utils/sseDeltaCoalesce.ts`. |
| `SSE_COALESCE_THINKING_MS` | `0` (isključeno) | Nadjačavanje po tipu za `SSE_COALESCE_MS` za `thinking_delta`. |
| `SSE_COALESCE_TEXT_MS` | `0` (isključeno) | Nadjačavanje po tipu za `SSE_COALESCE_MS` za `text_delta`. |
| `SSE_COALESCE_INPUT_JSON_MS` | `0` (isključeno) | Nadjačavanje po tipu za `SSE_COALESCE_MS` za `input_json_delta`. |
| `SSE_FRAME_COALESCE_MS` | `0` (isključeno) | Po izboru: grupiše SSE okvire proslijeđene unutar N ms u jedan upis prema klijentu. Prvi okvir i završni okviri (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) se nikad ne odlažu; s uključenim grupisanjem, ITL mjeri razmake između grupa. Koristi ga `open-sse/utils/sseOutputSink.ts`. |
| `SSE_STALL_WATCHDOG` | `timer` | Implementacija watchdog-a za zastoj bajtova kod streamovanih odgovora. `timer` ponovo naoružava jedan tajmer po upstream chunk-u (aktivira se tačno na budžetu zastoja); `interval` drži jednu provjeru po streamu s periodom `clamp(budget/4, 1s, 5s)`, tako da se zastoj detektuje unutar budžet + period. Koristi ga `open-sse/utils/streamStallWatchdog.ts`. |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | Vrijeme za primanje prvog SSE događaja koji nije ping. Nasljeđuje `REQUEST_TIMEOUT_MS` kada je postavljeno. |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Maksimalni adaptivni prozor spremnosti za prvi događaj za velike, alatima opterećene ili streaming zahtjeve s visokim stepenom rezonovanja. |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Kill-switch za `/goal` heuristiku. Postavite `false`/`0`/`off` da biste potpuno onemogućili detekciju — timeouti spremnosti i oporavak streama nikad se ne povećavaju na osnovu tijela/zaglavlja zahtjeva, čime se ublažava pojačanje timeouta kontrolisano od strane klijenta. |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Maksimalni prozor spremnosti za prvi događaj za detektovana `/goal` agentska izvršavanja ili zahtjeve prisiljene s `x-omniroute-agent-goal`. |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Automatski omogućava rani oporavak streama za detektovana `/goal` agentska izvršavanja. Postavite `false`/`0`/`off` da biste onemogućili ovo uključivanje specifično za cilj. Ovo može samo DODATI oporavak povrh operatorove zadane postavke — nikad ne nadjačava eksplicitno odustajanje putem `STREAM_RECOVERY_ENABLED`/DB postavki. |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Uklanja nestandardne `codex.*` SSE događaje (npr. `codex.rate_limits`) koji ruše OpenAI SDK-ov `responses.stream()` s greškom 502. Zadano UKLJUČENO (#11014). Postavite `0`/`false`/`no`/`off` da biste ih proslijedili. |
| `OMNIROUTE_CODEX_APPSERVER_WS` | _(nije postavljeno)_ | Opcioni Codex app-server transport. WebSocket endpoint (`ws://`/`wss://`) lokalnog `codex app-server` sidecara. Kada je postavljeno zajedno s tokenom, Codex zahtjevi se usmjeravaju preko JSON-RPC-a na sidecar umjesto na HTTP Responses API. Također se može postaviti po konekciji putem `providerSpecificData.codexAppServerUrl`. Koristi ga `open-sse/executors/codex/appServerConfig.ts`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(nije postavljeno)_ | Inline capability/bearer token koji se dostavlja app-serveru. Nadjačavanje po konekciji: `providerSpecificData.codexAppServerToken`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(nije postavljeno)_ | Putanja do datoteke koja sadrži token mogućnosti app-servera (iz `codex app-server --ws-token-file`). Koristi se kada `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` nije postavljen. Nadjačavanje po konekciji: `providerSpecificData.codexAppServerTokenFile`. |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Radni direktorij u kojem se izvršava turn app-servera. Nadjačavanje po konekciji: `providerSpecificData.codexAppServerCwd`. |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(nije postavljeno)_ | Politika odobravanja koja se prosljeđuje turnu app-servera (npr. `never`, `on-request`). Nadjačavanje po konekciji: `providerSpecificData.codexAppServerApprovalPolicy`. |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(nije postavljeno)_ | Sandbox politika koja se prosljeđuje turnu app-servera (npr. `read-only`, `workspace-write`, `danger-full-access`). Kada nije postavljena, izvršilac podrazumijevano koristi `workspace-write` (očvrsnuto; ranije `danger-full-access`). Nadjačavanje po konekciji: `providerSpecificData.codexAppServerSandbox`. |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Automatski odobrava vlastite upite za odobrenje app-servera (izvršavanje naredbi/datoteka/dozvola na hostu). Podrazumijevano isključeno — upiti se automatski odbijaju; pozivi alata harnessa nisu pogođeni (putuju zasebnim `item/tool/call` passthroughom). Prihvata `true`/`1`/`yes`. Nadjačavanje po konekciji: `providerSpecificData.codexAppServerAutoApprove`. |
| `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Vrijeme za prijem zaglavlja odgovora. |
| `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | Maksimalno čekanje na zaglavlja odgovora kod streaming zahtjeva (ms). `0` onemogućava ovo ograničenje; eksplicitni `fetchStartTimeoutCapMs` provajdera ima prednost. |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30s) | Maksimalno čekanje na početak odgovora (ms) za svaki direktni pokušaj bez proxyja. Istek vremena ponavlja pokušaj jednom na svježem socketu; postavite `0` da onemogućite granicu i zadržite prethodno ponašanje. |
| `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 min) | Donja granica početka odgovora (ms) za direktne pokušaje bez proxyja čiji je ciljni host privatan/LAN/loopback (na primjer `localhost`, `host.docker.internal`, `192.168.x.x`), tako da hladno pokretanje nativnog Ollame ne prekine gornja zadana vrijednost od 30s. Djeluje kao donja granica: efektivno čekanje je veća od ove vrijednosti i `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; `0` ili nevažeća vrijednost uklanja lokalnu donju granicu. Udaljeni hostovi nisu pogođeni. |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Gornja granica (ms) za RETRY pokušaj na svježem socketu nakon isteka vremena početka odgovora pooliranog pokušaja gore (#13703). Primjenjuje se samo kada je pozivalac već priložio vlastiti signal roka (razriješena kaskada konekcija/model/provajder/`FETCH_TIMEOUT_MS`); taj signal je prava granica i aktivira se prvi na predviđenom putu, pa je ovo velikodušna sigurnosna granica, a ne ravna kapa — bez nje bi ponovni pokušaj ponovo koristio identičan kratki prozor `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` kao poolirani pokušaj i vratio 504 za zdrave reasoning modele sa sporim TTFB-om. Nikada nije dozvoljena ispod ravne donje granice gore; kada pozivalac uopće ne dostavi signal roka, ponovni pokušaj zadržava ravnu donju granicu nepromijenjenu. |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Vrijeme za prijem cijelog tijela odgovora. |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Istek vremena uspostavljanja TCP konekcije. |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Istek vremena neaktivnosti keep-alive socketa. |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Istek vremena TLS fingerprint proxyja (wreq-js). |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Ograničava vrijeme-do-prvog-bajta posebno na tijelu wreq-js TLS-fingerprint transporta; sam `TLS_CLIENT_TIMEOUT_MS` ne može uhvatiti zastalo tijelo jer se razrješava čim stignu zaglavlja (#12656). Istek vremena otkazuje wreq čitač i vraća se na direktni/proxy dispečer; `0` onemogućava watchdog. |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Samo OpenCode izvršilac, i samo dok je feature flag `OPENCODE_RESPONSES_STALL_ROTATION` uključen (podrazumijevano isključen): ograničava čekanje prvog bajta tijela streamiranog Responses odgovora nakon njegovih zaglavlja (#13484). Responses stream se otvara sa `response.created`, pa je tišina nakon ovog prozora zastoj: račun se hladi i zahtjev se jednom rotira na sljedeći račun; drugi zastoj brzo ne uspijeva. `0` onemogućava zaštitu čak i sa uključenim flagom. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= isključeno) | Samo OpenCode izvršilac: ograničava čekanje upstream zaglavlja odgovora na streamiranom Responses pozivu kada je drugi račun još uvijek dostupan — zahtjev u redu čekanja prestaje čekati i prelazi dalje umjesto da drži cijeli prozor zaglavlja. Pogođeni su samo streamirani Responses pozivi (Responses stream se otvara sa `response.created`, pa je tišina tu red čekanja, a ne generisanje); chat completions i nestreamirani pozivi su netaknuti, a prozor samo skraćuje efektivnu gornju granicu fetch-starta, nikada je ne produžava. Predložena vrijednost pri omogućavanju: `30000`. `0` onemogućava. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Samo OpenCode executor: koliko puta po zahtjevu se gornja granica čekanja zaglavlja može pomjeriti na sljedeći račun. Posljednji preostali račun uvijek zadržava puni prozor zaglavlja. |
| `OPENCODE_PARK_AND_RESUME` | `false` | Samo OpenCode executor: parkira zahtjev s heartbeat signalom nakon ponovljenih prolaznih 429 grešaka (ili svježeg markera opterećenja pool-a), zatim ponovo izvršava jedan ograničeni korak od najviše 3 sekvencijalna računa umjesto širenja na cijelu flotu (#13924). Isključeno po zadanim postavkama: svaki 429 rotira na sljedeći račun tačno kao prije. |
| `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Samo OpenCode executor: kada je svaki račun spreman nakon cooldown-a u koraku ponovnog izvršavanja park-and-resume mehanizma odložen od strane memorije odbijanja proxy-ja, ipak ih posluži umjesto da se ne ponovi ništa (#14851, nastavak na #14750). Isključeno po zadanim postavkama: korak ponovnog izvršavanja je u tom slučaju prazan, kao prije #14750. |
| `STREAM_READINESS_STALL_RETRY` | `false` | Samo streaming chat: kada se prvo upstream tijelo zaustavi prije nego što proizvede upotrebljiv događaj, izdaje se jedan ograničeni drugi pokušaj kroz istu rutiranu putanju s istim budžetom spremnosti i bez kazne za račun. Isključeno po zadanim postavkama: zaustavljeno prvo tijelo uzrokuje neuspjeh zahtjeva bez ponovnog pokušaja. |
| `OPENCODE_POOL_RESELECT` | `false` | Samo OpenCode executor: nakon 429 od egress-bucketed pružaoca na računu bez proxy-ja pod ambient pool kontekstom, zatraži od connection pool-a drugog člana za sljedeći pokušaj umjesto ponovnog pokušaja s istom egress adresom. Uređuje redoslijed, nikada ne isključuje: iscrpljen pool zadržava trenutno ponašanje. Isključeno po zadanim postavkama: svaki 429 rotira na sljedeći račun tačno kao prije. |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(unset)_ | Samo OpenCode executor: nadjačava putanju markera opterećenja pool-a koji se čita prije parkiranja (`{since, reason, ttl_s}`, zadano `/tmp/opencode-pool-strain.json`, #13924). Svježi marker parkira bez ponovnog brojanja; odsutan ili zastario marker vraća se na brojač naleta. |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Timeout proxy skoka za `/v1` bridge zahtjeve. |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Usmjeri Firecrawl web-fetch executor na self-hosted instancu (API ključ je opcionalan izvan oblaka). |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Timeout po zahtjevu za Firecrawl web-fetch executor. |
| `TAVILY_BASE_URL` | _(unset)_ | Osnovni URL za Tavily `/usage` preuzimač kvote (Provider Limits); ignorira se kada pokazuje na `api.tavily.com`. Ako nije postavljeno, vraća se na osnovni URL veze. |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Ukupni timeout serverskog zahtjeva za bridge. |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Vrijeme za slanje zaglavlja odgovora putem bridge-a. |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Bridge keep-alive timeout neaktivnosti. |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Timeout sirovog socketa (0 = onemogućeno). |
| `SHUTDOWN_TIMEOUT_MS` | `30000` | Period čekanja na SIGTERM/SIGINT prije prisilnog izlaska. |
| `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | Rezervna vrijednost koju koristi `src/shared/utils/fetchTimeout.ts` kada `FETCH_TIMEOUT_MS` nije postavljen. |
| `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Timeout (ms) za `validationRead` i `modelsProbe` unaprijed definirane postavke u `src/shared/network/safeOutboundFetch.ts`. Povećajte za spore endpointe (Cerebras, Cloudflare AI, Groq) kako biste spriječili prebacivanje između stanja aktivno/greška na kontrolnoj ploči. Vraća se na 8000ms za nevažeće (<1000) ili ne-numeričke vrijednosti. |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Timeout preuzimanja specifičan za relay u `open-sse/utils/proxyFetch.ts` (#9158). Zaustavljeni relay mora neuspjeti prije timeouta klijenta/agenta (~30s) kako bi pozivatelji vidjeli neuspjeh specifičan za relay umjesto generičkog upstream timeouta. Ograničeno na `29000` tako da se uvijek prvo aktivira. |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Dijeljeni retry backoff za direct/relay/proxy putanje jednog ponovnog pokušaja u `open-sse/utils/proxyFetch.ts` (#9158). `0` = ponovni pokušaj odmah. |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Nativni wreq-js timeout zahtjeva (`claudeTlsClient.ts`). |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Apsolutni JS hard-deadline period čekanja dodan na vrh nativnog timeouta. |
| `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Nativni wreq-js timeout zahtjeva (`perplexityTlsClient.ts`). |
| `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Apsolutni JS hard-deadline grace rok dodat na vrhu nativnog timeout-a. |
| `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (isključeno) | Dodaje "You have built-in web search. Answer questions directly using search results." na sistemsku poruku pozivaoca (`perplexity-web/protocol.ts`). Po defaultu isključeno — Perplexity svakako pretražuje, a rečenica procuri u odgovore kao meta-komentar za klijente za kodiranje. Postavite `1`/`true`/`yes`/`on` da biste vratili. |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Nativni wreq-js timeout zahtjeva (`grokTlsClient.ts`). |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Apsolutni JS hard-deadline grace rok dodat na vrhu nativnog timeout-a. |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Nativni wreq-js timeout zahtjeva (`notionTlsClient.ts`); `notion-web` ga podiže po zahtjevu na `180000` za dugotrajna generisanja. |
| `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Apsolutni JS hard-deadline grace rok dodat na vrhu nativnog timeout-a. |
| `OMNIROUTE_BROWSER_POOL` | `on` | Zajednički Playwright pool preglednika za web-cookie chat podržan preglednikom (`browserPool.ts`); postavite `off` za onemogućavanje. |
| `OBSCURA_BIN` | `auto-detect` | Putanja do `obscura` binarne datoteke koju pool preglednika i Cloudflare Playground executor koriste kao primarni engine (`open-sse/services/obscura.ts`); automatski se detektuje iz sistemskog PATH-a kada nije postavljena. |
| `OBSCURA_CDP_ENDPOINT` | _(nije postavljeno)_ | Usmjerava na već pokrenutu Obscuru (`http://host:port`) umjesto pokretanja nove; modul ne posjeduje taj proces (`open-sse/services/obscura.ts`). |
| `OBSCURA_PORT` | `random free port` | Eksplicitni port za pokrenuti `obscura serve`; slobodan port se bira automatski kada nije postavljen (`open-sse/services/obscura.ts`). |
| `WEB_COOKIE_USE_BROWSER` | `0` | Uključuje web-cookie chat zahtjev u putanju podržanu preglednikom (`browserBackedChat.ts`); `1` za omogućavanje. |
| `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Osnovni URL za Kimi Web (međunarodni kimi.ai Connect-RPC) executor (`kimi-web.ts`); mijenjajte samo za mirror/proxy krajnje tačke. |
| `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Puna chat krajnja tačka za Kimi Web executor (`kimi-web.ts`). |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | _(automatski detektovano)_ | Putanja do sistemskog Chrome/Edge izvršnog fajla za Adobe Firefly interaktivnu prijavu putem preglednika (`adobeFireflyBrowserLogin.ts`); nadjačava automatsku detekciju po OS-u. |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone izlaz_ | Nadjačavanje u vrijeme builda za standalone izlazni direktorij koji koristi post-build korak kolokacije (`scripts/build/colocate-standalone.mjs`); build alati, ne runtime. |
Pokušaji combo ciljeva nasljeđuju razriješeni upstream timeout zahtjeva (`FETCH_TIMEOUT_MS`, ili
`REQUEST_TIMEOUT_MS` kada on daje fetch default). Postavite `targetTimeoutMs` u combo-u,
combo defaultima ili provider override-u samo da biste ubrzali combo fallback; vrijednosti iznad
trenutnog upstream timeout-a ograničavaju se na upstream timeout.
`comboTimeoutMs` je zaseban wall-clock budžet cijelog combo-a kroz failover ciljeve.
Ostavite ga nepostavljenim ili `0` da zadržite neograničenu iteraciju (i dalje vrijedi
10-minutni hardkodirani hang-stop u `comboPredicates.ts`). Pozitivna vrijednost zamjenjuje tu
sigurnosnu mrežu za combo. Držite `comboTimeoutMs` dužim od `targetTimeoutMs` kako bi failover
i dalje imao vremena nakon sporog prvog cilja.
### Pragovi circuit breaker-a
Podešavanje circuit breaker-a na nivou provajdera. Defaultne vrijednosti odražavaju skalirane vrijednosti korištene od v3.6 za 500+ konekcija.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------------------------------- | --------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | Prag uzastopnih neuspjeha za OAuth provajdere prije nego što se prekidač aktivira. |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | Prozor resetovanja (ms) za prekidač OAuth provajdera. |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | Prag uzastopnih neuspjeha za provajdere s API ključem. |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | Prozor resetovanja (ms) za prekidač provajdera s API ključem. |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Prag uzastopnih neuspjeha za lokalne provajdere (Ollama, LM Studio, ...). |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | Prozor resetovanja (ms) za prekidač lokalnog provajdera. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: neuspjesi unutar prozora prije nego što cijeli OAuth provajder uđe u cooldown. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: klizni prozor brojanja neuspjeha (ms) za OAuth provajdere. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: cooldown (ms) nakon što se dostigne prag OAuth provajdera. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | OAuth provajder ulazi u stanje DEGRADED nakon ovog broja neuspjeha. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | Maksimalni multiplikator eskalacije resetTimeout-a za OAuth provajdera. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | OAuth provajder eskalira nakon ovog broja otvorenih ciklusa. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: neuspjesi unutar prozora prije nego što cijeli provajder s API ključem uđe u cooldown. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: klizni prozor brojanja neuspjeha (ms) za provajdere s API ključem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: cooldown (ms) nakon što se dostigne prag provajdera s API ključem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | Provajder s API ključem ulazi u stanje DEGRADED nakon ovog broja neuspjeha. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | Maksimalni multiplikator eskalacije resetTimeout-a za provajdera s API ključem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | Provajder s API ključem eskalira nakon ovog broja otvorenih ciklusa. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: neuspjesi prije nego što cijeli lokalni provajder uđe u cooldown. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: klizni prozor brojanja neuspjeha (ms) za lokalne provajdere. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Prekidač na nivou provajdera: cooldown (ms) nakon što se dostigne prag lokalnog provajdera. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Cooldown po ključu (ms) koji primjenjuje rotacija više API ključeva kada upstream 429 ne nosi `Retry-After` (#14573). Nepozitivne ili nenumeričke vrijednosti vraćaju se na zadanu. |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Dubina backoff-a pri kojoj se provajder pin-a kontekstnog keša smatra trajno neispravnim i pin se odbacuje radi failover-a. |
| `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Anti-flap prozor (ms) koji toleriše kratke prolazne cooldown-e prije odbacivanja pin-a kontekstnog keša. |
### Scenariji
| Scenario | Konfiguracija |
| -------------------------------------------- | ------------------------------------------------------- |
| **Dugotrajno generisanje koda** | `REQUEST_TIMEOUT_MS=900000` (15 min) |
| **Ograničen ukupni vijek trajanja stream-a** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 min) |
| **Brzi neuspjeh za produkcijski API** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` |
| **Modeli s proširenim razmišljanjem** | `STREAM_IDLE_TIMEOUT_MS=300000` (5 min između dijelova) |
---
## 16. Evidentiranje
Sistem evidentiranja zapisuje i na stdout i u rotirane datoteke evidencije. Sva konfiguracija se učitava iz `src/lib/logEnv.ts`.
| Varijabla | Zadana vrijednost | Opis |
| ----------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `APP_LOG_LEVEL` | `info` | Minimalni nivo evidencije: `debug`, `info`, `warn`, `error`. |
| `APP_LOG_FORMAT` | `text` | Izlazni format: `text` (čitljiv ljudima) ili `json` (strukturiran). |
| `APP_LOG_TO_FILE` | `true` | Zapisuje evidencije u datoteku uz stdout. |
| `APP_LOG_FILE_PATH` | `logs/application/app.log` | Putanja datoteke evidencije (relativna u odnosu na korijen projekta ili `DATA_DIR`). |
| `APP_LOG_MAX_FILE_SIZE` | `50M` | Maksimalna veličina datoteke prije rotacije. Prihvata: `50M`, `1G`, `512K` ili običan broj bajtova. |
| `APP_LOG_RETENTION_DAYS` | `7` | Broj dana čuvanja rotiranih datoteka evidencije aplikacije. |
| `APP_LOG_MAX_FILES` | `20` | Maksimalan broj rezervnih kopija rotiranih datoteka evidencije. |
| `CALL_LOG_RETENTION_DAYS` | `7` | Broj dana čuvanja zapisa evidencije zahtjeva/poziva u bazi podataka. |
| `CALL_LOG_MAX_ENTRIES` | `10000` | Maksimalan broj zapisa evidencije poziva u međuspremniku u memoriji. |
| `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | Maksimalan broj redova u SQLite tabeli `call_logs` prije uklanjanja starih podataka. |
| `ENABLE_REQUEST_LOGS` | _(nije postavljeno)_ | Prisilno uključuje ili isključuje detaljno evidentiranje zahtjeva, zanemarujući postavku kontrolne ploče. |
| `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 sat) | Maksimalna starost napuštenih aktivnih zapisa evidencije zahtjeva prije čišćenja iz memorije. |
| `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | Pohranjuje dijelove toka u artefaktima cjevovoda kada je `call_log_pipeline_enabled=true`. Mora se izričito uključiti (`true`) — zadano je isključeno radi uštede prostora na disku. |
| `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | Maksimalna veličina artefakta evidencije poziva cjevovoda u KB kada je `call_log_pipeline_enabled=true`. |
| `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | Maksimalan broj redova u SQLite tabeli `proxy_logs` prije uklanjanja starih podataka. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | Uključuje IP adrese klijenta/izlaza i prefikse računa u konzolne evidencije `[ProxyEgress]`. Zapisi evidencije proxyja na kontrolnoj ploči/u bazi podataka zadržavaju sve detalje. |
| `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | Postavite na `"true"` ili `"1"` kako biste zabilježili `first_chunk_ms` (od početka slanja do prvog korisnog bajta tijela) u redovima evidencije proxyja. Obavija svako uzvodno tijelo u lijeni prolazni tok i ažurira red nakon pristizanja bajta; zadano je isključeno kako bi odgovori prolazili neizmijenjeni. |
| `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 min) | Koliko često `src/lib/logRotation.ts` ponovo provjerava veličinu aktivne datoteke evidencije. |
| `CHAT_LOG_TEXT_LIMIT` | `65536` | Maksimalna dužina niza znakova zadržana u artefaktima evidencije razgovora (zadano 64 KB). |
| `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | Broj stavki niza zadržanih s kraja pri skraćivanju sadržaja evidencije razgovora. |
| `CHAT_LOG_MAX_DEPTH` | `6` | Maksimalna dubina ugnježđivanja prije skraćivanja sadržaja evidencije razgovora. |
| `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | Maksimalan broj ključeva objekta zadržanih u sadržaju evidencije razgovora (0 = neograničeno). |
| `CHAT_LOG_MAX_BODY_KB` | `1024` | Veličina cijelog tijela zahtjeva/odgovora (KB) nakon koje se ono zamjenjuje sažetkom bez dodatnih detalja umjesto potpunom kopijom. Povećajte ovu vrijednost ako duži agentni razgovori na kontrolnoj ploči prikazuju rezervirano mjesto umjesto stvarnih poruka. |
| `CHAT_DEBUG_FILE` | `false` | Kada je postavljeno na true, `serializeArtifactForStorage` preskače skraćivanje zasnovano na veličini. Samo za otklanjanje grešaka. |
---
## 17. Optimizacija memorije
| Varijabla | Zadano | Opis |
| ----------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_MEMORY_MB` | _auto_ (bare metal); **`1024` u Docker image-u** | **Preporučeno** ograničenje V8 heap-a (MB) za Docker/standalone. Kada nije postavljeno, dinamički se kalibriše (~35% sistemskog RAM-a, ograničeno na `[512, 4096]`); `512` je samo donja granica kada se ukupna memorija ne može očitati. Na `run-standalone.mjs` (Docker CMD), **eksplicitna** vrijednost se dodaje kao `--max-old-space-size` i **ima prednost** nad konfliktnom NODE_OPTIONS heap zastavicom (V8 last-flag). `omniroute serve` i dalje daje prednost postojećem NODE_OPTIONS heap-u (#5238). Nemojte postavljati obje na različite brojeve — proces bilježi upozorenje (warn) navodeći obje vrijednosti i pobjedničku. **Službeni Docker image uvijek postavlja `1024`, pa se kalibracija tamo nikada ne izvršava.** Coding-agent `/v1/responses` zahtijeva `8192`–`12288` plus dodatnu rezervu cgroup-a — pogledajte [Docker vodič — RAM tokom izvršavanja](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). |
| `OMNIROUTE_RSS_PRESSURE_MB` | _auto_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; isključeno kada `OMNIROUTE_MEMORY_MB` nije postavljeno) | `open-sse/utils/resourcePressure.ts` | Apsolutni osigurač proces-RSS-a (MB) za nativnu/eksternu memoriju koju V8 `heapUsed` ne može vidjeti; iznad njega novi zahtjevi dobijaju 503 `resource_pressure`. RSS se rijetko smanjuje nakon naglog skoka, pa ga kombinujte s `OMNIROUTE_PRESSURE_SELF_RESTART`. |
| `PROMPT_CACHE_MAX_SIZE` | `50` | Maksimalan broj keširanih unosa sistemskog prompta. |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Maksimalna ukupna veličina keša prompta. |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 min) | TTL unosa keša prompta. |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | Maksimalan broj keširanih odgovora s temperature=0. |
| `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Maksimalna ukupna veličina semantičkog keša. |
| `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 min) | TTL unosa semantičkog keša. |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | Korijeni lokalnog korpusa koji istovremeno zadržavaju aktivan indeks u memoriji (`src/lib/localCorpus/configured.ts`). LRU: na granici se indeks najmanje nedavno korištenog korijena uklanja i ponovo izgrađuje pri njegovom sljedećem upitu. Ograničeno na najmanje `1`; ne-numerička vrijednost vraća na zadanu. |
| `STREAM_HISTORY_MAX` | `50` | Maksimalan broj nedavnih stream događaja u bufferu Dashboard prikaza uživo. |
| `CONTEXT_LENGTH_DEFAULT` | _(nije postavljeno)_ | Globalno nadjačavanje dužine konteksta (tokeni) za svakog pružaoca koji nema varijablu `CONTEXT_LENGTH_`. Kada je postavljeno, **zamjenjuje** katalog, nadjačavanje na dashboardu i vrijednosti registra za te pružaoce; kada nije postavljeno, OmniRoute koristi svoj ugrađeni lanac, čije je posljednje utočište `128000`. Pogledajte [Dužina konteksta po pružaocu](#per-provider-context-length-context_length_provider). |
| `USAGE_TOKEN_BUFFER` | `100` | Dodatna rezerva tokena prilikom praćenja kvota korištenja. |
### Dužina konteksta po pružaocu (`CONTEXT_LENGTH_`)
`open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) također čita oblik
**po pružaocu** čije se ime gradi od ID-a pružaoca u vrijeme izvršavanja, pa se ne može
navesti red po red u tabeli iznad niti u `.env.example`.
**Naziv.** `CONTEXT_LENGTH_`, gdje je `` ID provajdera u velikim slovima, pri čemu je
svaki znak izvan `A-Z` / `0-9` zamijenjen sa `_`. ID provajdera je kanonski nakon razrješavanja
alijasa (dio `provider` u stringu `provider/model` nakon što je kratki alijas razriješen).
Prilagođeni čvorovi kompatibilni s OpenAI ili Anthropic koriste svoj generisani ID čvora, pa je
UUID dio naziva varijable. Vrijednost je pozitivan cijeli broj tokena; sve ostalo (prazno, `0`,
negativno, ne-numeričko) se ignorira i razrješavanje prelazi na sljedeći korak.
| ID provajdera | Naziv varijable |
| ----------------------------------------------------------- | -------------------------------------------------------------------------- |
| agentrouter | CONTEXT_LENGTH_AGENTROUTER |
| openrouter | CONTEXT_LENGTH_OPENROUTER |
| openai-compatible-chat-0f8e2c1a-5b7d-4e3f-9a6c-2d1b8e4f7a90 | CONTEXT_LENGTH_OPENAI_COMPATIBLE_CHAT_0F8E2C1A_5B7D_4E3F_9A6C_2D1B8E4F7A90 |
**Prioritet.** Za par `provider/model`, pobjeđuje prvi korak koji daje vrijednost:
1. `CONTEXT_LENGTH_` za tog provajdera.
2. `CONTEXT_LENGTH_DEFAULT` (globalno zaobilaženje putem okruženja).
3. Prozor po modelu: trajno pohranjeno zaobilaženje konteksta (postavljeno na nadzornoj ploči,
ili automatski prikvačeno od strane usklađivača otkrivanja, vidi
`CONTEXT_WINDOW_RECONCILE_INTERVAL`), u suprotnom sinhronizovana vrijednost kataloga /
models.dev.
4. `defaultContextLength` iz registra provajdera.
5. Heuristike naziva modela (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` /
`codex` 400000).
6. Ugrađene zadane vrijednosti po provajderu, zatim `128000`.
Oba koraka okruženja primjenjuju se na **cijelog provajdera**: svaki model tog provajdera dobija
isti limit i oni imaju prednost nad zaobilaženjima po modelu na nadzornoj ploči. Kada samo jedan
model provajdera treba drugačiji prozor, umjesto toga koristite zaobilaženje po modelu na
nadzornoj ploči.
**Opseg.** Ovaj lanac upravlja provjerom kontekstnog prozora u vrijeme zahtjeva (odbijanje
`context_length_exceeded` / "Input exceeds context window" u
`open-sse/handlers/chatCore.ts`), budžetima kompresije prompta i kombinovanim limitima konteksta.
Vrijednost `context_length` koju oglašava `GET /v1/models` i dalje može dolaziti iz metapodataka
kataloga ili registra i nije zagarantovano da odražava zaobilaženje okruženja.
**Primjer.** Provajder čiji model prihvata prozor od 1.050.000 tokena dok katalog prijavljuje
128.000:
```dotenv
CONTEXT_LENGTH_AGENTROUTER=1050000
```
Restartujte server nakon izmjene: vrijednost se čita iz okruženja serverskog procesa. U
**desktop aplikaciji** server radi kao podređeni proces i ne vidi sistemsku varijablu postavljenu
nakon pokretanja aplikacije; stavite liniju u `.env` fajl koji aplikacija učitava (redoslijed
pretrage u [Vodič za Electron: Pretraga fajla okruženja](../guides/ELECTRON_GUIDE.md#environment-file-lookup)),
zatim potpuno zatvorite aplikaciju i ponovo je pokrenite.
### Kompresija
| Varijabla | Zadano | Opis |
| ------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | nije postavljeno | Vjeruj projektnom `.rtk/filters.json` bez `.rtk/trust.json` hasha. Koristite samo u kontrolisanom lokalnom razvoju. |
### Memorijski engine (plan 21)
### Trošak event-loopa za memoriju, vještine i osvježavanje tokena (#10349)
OmniRoute je **jedan Node proces**. Ekstrakcija/preuzimanje memorije, ubrizgavanje vještina i
osvježavanje tokena provajdera izvršavaju se na toj **istoj event petlji** kao `GET /healthz` i
nadzorna ploča. To nije posebna worker nit.
| Posao | Kod | Zadano | Kontrola operatora |
| ---------------------------------- | ---------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ekstrakcija / preuzimanje memorije | `src/lib/memory/` | Nadzorna ploča **memoryEnabled** (zadano uključeno) | Isključite **Settings → Memory**. Ne postoji zaseban env prekidač za gašenje osim onemogućavanja funkcije u postavkama. |
| Ubrizgavanje vještina | `src/lib/skills/injection.ts` | Nadzorna ploča **skillsEnabled** (zadano uključeno) | Isključite **Settings → Memory/Skills** (`skillsEnabled`). Sandbox postavke ispod samo ograničavaju izvršavanje nakon što je ubrizgavanje već uključeno. |
| Osvježavanje tokena | `src/sse/services/tokenRefresh.ts` | Uključeno za povezane OAuth/web provajdere | Prekinite vezu provajdera ili pustite da tokeni ostanu važeći; danas ne postoji `TOKEN_REFRESH=0` env varijabla. |
Ako je `/healthz` spor na mirnoj mašini, prvo onemogućite memoriju + vještine, zatim provjerite
opterećenje kataloga/kompresije (#10303, #9685). Ove funkcije predaju kontrolu na `await`
tačkama, ali se i dalje takmiče za tu jednu nit.
Postavke embedding sloja, vektorskog skladišta i rerangiranja za trajni memorijski podsistem (`src/lib/memory/`).
| Varijabla | Zadano | Opis |
| ------------------------------------ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 min) | TTL za in-memory keš embeddinga (po potpisu izvora/modela/dimenzije). |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Maksimalni broj LRU unosa koji se čuvaju u kešu embeddinga. |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | ID HF repozitorija za opcionalni `@huggingface/transformers` lokalni MiniLM pipeline (~23 MB int8, ~400 MB RAM). |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | ID HF repozitorija za statički potion/Model2Vec lookup-table embedder. Lijeno se preuzima u direktorij keša. |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Direktorij koji se koristi za keširanje datoteka statičkog potion modela. Ako nije postavljeno, zadano je pod `DATA_DIR`. |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | Zamjenjuje osnovni URL Hugging Face Hub-a koji koristi `staticPotion.ts` (npr. mirror endpoint za air-gapped okruženja). |
| `MEMORY_VEC_TOP_K` | `20` | Zadani top-K koji koristi `sqlite-vec` brute-force vektorska pretraga unutar `src/lib/memory/vectorStore.ts`. |
| `MEMORY_RRF_K` | `60` | Konstanta `k` Reciprocal Rank Fusion-a za hibridno FTS5 + vektorsko preuzimanje (sqlite-vec recept). |
| `VECTOR_STORE_DISABLE_VEC` | `false` | Testni/dijagnostički spoj u `getVectorStore()` (`src/lib/memory/vectorStore.ts`): kada je `true`, forsira vektorsko skladište na `null` (simulira cloud/WASM okruženje bez `sqlite-vec`), čime se preuzimanje memorije degradira na FTS5 pretragu po ključnim riječima. Ostavite nepostavljeno u produkciji. |
| `NOTION_API_KEY` | _(nepostavljeno)_ | API ključ za Notion backend (koristi ga preset poznatog backenda u `genericBackend.ts`). |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Osnovni URL za Notion API (može se zamijeniti za self-hosted alternative Notionu). |
| `OBSIDIAN_API_KEY` | _(nepostavljeno)_ | API ključ za Obsidian Vault backend (koristi ga preset poznatog backenda u `genericBackend.ts`). |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Osnovni URL za Obsidian Vault API (može se zamijeniti za udaljeni vault). |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | Glavni prekidač za TV6 tipizirano propadanje memorije. **Opcionalno (zadano isključeno)** — čišćenje **briše** propale memorije. Kada je isključeno, `access_count`/`last_accessed_at` su čista telemetrija i ništa se nikada ne briše. |
| `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (u danima) nakon kojeg nekorištena `episodic` memorija propada. `0` čini epizodnu memoriju također imunom. Trajni tipovi (`factual`/`procedural`/`semantic`) su uvijek imuni. Sat propadanja se resetuje na osnovu `last_accessed_at`. |
| `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | Memorija ubrizgana `>=` ovaj broj puta postaje imuna na propadanje bez obzira na tip. `0` isključuje imunitet na osnovu pristupa. |
| `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (onemogućeno) | Interval (u sekundama) za opcionalno periodično čišćenje propalih memorija u `src/lib/memory/typedDecay.ts`. `0`/nepostavljeno = nema periodičnog čišćenja. Dvostruko opcionalno: također zahtijeva `MEMORY_TYPED_DECAY_ENABLED=true`. |
| `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(nepostavljeno)_ | ID-evi provajdera odvojeni zarezom (neosjetljivi na velika/mala slova) koji prihvataju `system` poruku **samo na indeksu 0** (`src/lib/memory/injection.ts`). Za njih, cache-sigurno umetanje memorije u sredinu niza nije sigurno u višekružnim razgovorima, pa se memorija umjesto toga spaja/dodaje kao vodeća system poruka. Zadano samo `xiaomi-mimo`/`mimo`; proširite za self-hosted OpenAI-kompatibilne endpointove (npr. Qwen3.5+/3.6) čiji chat template nameće isto ograničenje jedne vodeće system poruke. |
### Primjer Dockera za malo RAM-a
`128` je samo za dashboard. Coding agenti na ovom heap-u dobiju `FATAL ERROR` tokom dugih `/v1/responses`. Nemojte koristiti ovaj primjer kao Claude/Codex/Grok gateway.
```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. Sinhronizacija cijena
Automatska sinhronizacija podataka o cijenama modela iz vanjskih izvora.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------- | ----------------- | ------------------------ | -------------------------------------------- |
| `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | Opcionalna periodična sinhronizacija cijena. |
| `PRICING_SYNC_INTERVAL` | `86400` (24h) | `src/lib/pricingSync.ts` | Interval sinhronizacije u sekundama. |
| `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | Izvori podataka odvojeni zarezima. |
---
## Sinhronizacija Arena ELO
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------- | ----------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Periodična sinhronizacija ELO rang-liste Arena AI, podesiva putem zastavica funkcionalnosti na kontrolnoj ploči ili isključiva pomoću vrijednosti `false`. |
| `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | Oblik prefiksa koji se koristi za ID-ove modela u `GET /v1/models`. `dual` oglašava i kratki prefiks pseudonima i kanonski prefiks pružaoca za svaki model (kompatibilnost unazad — približno udvostručuje katalog); `alias` ispisuje jedan ID po modelu; `canonical` ispisuje samo puni prefiks ID-a pružaoca (pružaoci čiji je pseudonim već kanonski ID zadržavaju svoj pojedinačni unos). Klijenti to mogu nadjačati za svaki zahtjev pomoću `?prefix=alias`. Pogledajte [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). |
| `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | Interval sinhronizacije u sekundama. |
---
## Pružalac PromptQL Playground (neslužbeno/eksperimentalno)
Obrnuto projektovan GraphQL most sesije za prompt.ql.app (`src/shared/constants/providers/web-cookie.ts`). Sve je opcionalno — zadane vrijednosti upućuju na javne krajnje tačke playgrounda; promijenite ih samo za samostalno hostovanu/alternativnu PromptQL implementaciju.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | GraphQL krajnja tačka koja se koristi za operacije chata/sesije. |
| `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | GraphQL krajnja tačka koja se koristi za provjeru stanja/potrošnje kredita. |
| `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | Krajnja tačka koja se koristi za pokušaj osvježavanja tokena. |
| `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | Maksimalno vrijeme (ms) za prozivanje `thread_events` prije isteka vremena. |
---
## HyperAgent web-provajder (neslužbeno/eksperimentalno)
Obrnuto projektovani sesijski most za hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). Opcionalno — zadana vrijednost upućuje na javnu krajnju tačku za naplatu/upotrebu; promijenite je samo za samostalno hostovanu/alternativnu HyperAgent implementaciju.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------- | --------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------- |
| `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | Krajnja tačka koja se koristi za dohvaćanje blokova kredita za naplatu/upotrebu. |
---
## Kvote upotrebe za Kilo Code
Provjera ličnog salda u USD i upotrebe Kilo Passa za Kilo Code provajder. Opcionalno — zadana vrijednost upućuje na javni Kilo API; promijenite je samo za relej/testnu postavku. Autentifikacija koristi postojeći OAuth pristupni token veze.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| -------------- | --------------------- | ------------------------------------- | --------------------------------------------------------------------------------------- |
| `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | Osnovni URL koji se koristi za dohvaćanje ličnog Kilo Code salda i upotrebe Kilo Passa. |
---
## Adobe Firefly web-provajder (neslužbeno/eksperimentalno)
Osvježavanje sesije putem preglednika za Adobe Firefly web-provajder
(`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`,
`open-sse/services/adobeFireflyClient.ts`). Opcionalno — sve zadane vrijednosti prilagođene su uobičajenoj
instalaciji na desktop računaru.
> **Uklonjeno u #9255.** Staro Chrome izvršno okruženje povezano putem CDP-a (adobeFireflyChromeRuntime.ts)
> zamijenjeno je Playwright servisom za prijavu putem preglednika, a njegove postavke više ne postoje.
> Varijable ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART, kao i
> ADOBE_FIREFLY_LOGIN_WAIT_MS i ADOBE_FIREFLY_FORTER_WAIT_MS, ne čitaju se nigdje u
> bazi koda — njihovo postavljanje nema nikakvog efekta.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------ | -------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Postavite na `1` za pravi bezglavi Chrome (poznato je da ne radi za generisanje; samo za otklanjanje grešaka). |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | Uključivanje/isključivanje proaktivnog zagrijavanja preglednika. `0` onemogućava proaktivno zagrijavanje (oporavak od greške 408 usred serije i dalje se primjenjuje). |
| `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Postavite na `0` da biste onemogućili spremanje Adobe Firefly sesije na disk. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(nije postavljeno)_ | `open-sse/services/adobeFireflySession.ts` | Minimalni razmak (ms) koji se primjenjuje između uzastopnih slanja, čime se nadjačava ugrađena zadana vrijednost. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(nije postavljeno)_ | `open-sse/services/adobeFireflySession.ts` | Dodatni razmak (ms) koji se dodaje nakon uspješne serije, čime se nadjačava ugrađena zadana vrijednost. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(nije postavljeno)_ | `open-sse/services/adobeFireflyClient.ts` | Osnovno kašnjenje (ms) prije slanja zahtjeva za generisanje, čime se nadjačava ugrađena zadana vrijednost. |
---
## 19. Sinhronizacija modela (razvoj)
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------------------- | -------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MODELS_DEV_SYNC_ENABLED` | _(nije postavljeno)_ | `src/lib/modelsDevSync.ts` | Izričito nadjačavanje sinhronizacije cijena s models.dev. Nije postavljeno = poštuj Postavke > AI (`modelsDevSyncEnabled`). `0`/`false`/`off`/`no` **ima prednost nad bazom podataka** i preskače i periodičnu sinhronizaciju i SQL/JSON skeniranja funkcije `getModelsDevPricing()` (oporavak kada je kontrolna ploča blokirana u istoj petlji događaja). `1`/`true`/`on`/`yes` prisilno uključuje sinhronizaciju. Čuvanje/brisanje cijena i dalje poziva `backupDbFile("pre-write")`, što ne izvršava nikakvu radnju tokom ograničenja od 60 minuta ili kada je postavljen `DISABLE_SQLITE_AUTO_BACKUP`. |
| `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 h) | `src/lib/modelsDevSync.ts` | Interval sinhronizacije kataloga modela tokom razvoja, u sekundama. |
| `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 h) | `src/lib/contextWindowResolver.ts` | Interval (u sekundama) za samokorigirajući usklađivač kontekstnog prozora (5004): prikvačuje prozore koje je deklarirao pružalac, otkrivene putem `/models`, kao nadjačavanja `auto:discovery` kada odstupaju od kataloga. Postavite na `0` da biste onemogućili. Ponovo koristi već sinhronizirane podatke (bez novog dohvaćanja); nikada ne prepisuje `manual` nadjačavanja. |
---
## 20. Postavke specifične za provajdera
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterCatalog.ts` | TTL keša kataloga OpenRouter modela. |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Uključi polja `name` pogodna za prikaz u `/v1/models` odgovorima. Onemogućite za klijente koji očekuju samo ID-ove. |
| `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8s) | `src/app/api/v1/models/catalogCache.ts` | Gornja granica čekanja na hladnoj putanji za objedinjenu ponovnu izgradnju kataloga `GET /v1/models` (#12627). Pri isteku vremena servira se posljednji ispravan odgovor 200, ako postoji. |
| `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 dana) | `src/lib/db/models/activeSyncedCatalog.ts` | Starost nakon koje sinhronizirana lista modela veze prestaje biti mjerodavna za rutiranje i otvoreno prelazi na registar (#12849). Redovi bez vremenske oznake računaju se kao zastarjeli. |
| `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60s) | `src/lib/usage/analyticsResponseCache.ts` | Koliko dugo se spor odgovor `GET /api/usage/analytics` ponovo koristi za isti query string (#15629). `0` onemogućava keš. |
| `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1s) | `src/lib/usage/analyticsResponseCache.ts` | Keširaju se samo analitički odgovori čija je izgradnja trajala barem toliko dugo, tako da male instance uvijek vide svježe podatke. |
| `OMNIROUTE_CACHE_METRICS_MIN_COMPUTE_MS` | nije postavljeno (isključeno) | `src/app/api/cache/route.ts` putem `src/lib/usage/analyticsResponseCache.ts` | Uključuje se na zahtjev (#16361). Kada je postavljeno na nenegativni cijeli broj N, dio historije korištenja odgovora `GET /api/cache` (ukupni zbrojevi prompt-keša + trend) servira se iz dijeljenog keša analitičkih odgovora ako je njegova izgradnja trajala barem N ms, po ograničenom `trendHours` prozoru, za trajanje od `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` (historija može kasniti do tog TTL-a; `DELETE /api/cache` ga poništava). Nepostavljeno ili nevažeće = historija se čita uživo pri svakom zahtjevu. |
| `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Maksimalno čekanje na poslove generiranja slika NanoBanana. |
| `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Učestalost prozivke NanoBanana poslova. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Osnovno kašnjenje za eksponencijalni backoff ponovnih pokušaja slanja Adobe Firefly upscale zahtjeva. |
| `AWS_REGION` | _(nije postavljeno)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Regija koja se koristi za konstruiranje AWS Bedrock krajnjih tačaka (Kiro, audio). |
| `AWS_DEFAULT_REGION` | _(nije postavljeno)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Rezervna vrijednost kada `AWS_REGION` nije postavljena. |
| `CLOUDFLARE_ACCOUNT_ID` | _(nije postavljeno)_ | `open-sse/executors/cloudflare-ai.ts` | ID računa za Cloudflare Workers AI. |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(nije postavljeno)_ | `open-sse/executors/cloudflare-playground.ts` | Puna putanja do desktop Chrome binarne datoteke za Cloudflare AI Playground izvršni program; koristi se kada headless provjera digitalnog otiska blokira Playwrightov ugrađeni Chromium. |
| `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) — _(nije postavljeno = bez ograničenja dužine)_ | `open-sse/executors/codebuddy/shared.ts` | Opcionalno ograničenje dužine za sistemske promptove pozivaoca koje se šalju CodeBuddyju (CN i International). Po zadanom se zamjenjuje samo prompt koji nosi oznaku identiteta coding-agenta, i to neutralnim (Tencentov filter sadržaja takve odbija); dugi promptovi se zadržavaju. Cijeli broj > 0 dodatno zamjenjuje svaki sistemski prompt duži od tog broja znakova; nepostavljeno, `0` ili necjelobrojna vrijednost onemogućava ograničenje. Svaka zamjena bilježi koje je pravilo aktivirano (oznaka identiteta ili dužina). |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Zaobilazi osnovni URL Cloudflare REST API-ja koji koristi deployer proxy-pool Workers relay-a (#4640 / 9router#1360). |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Zadano ime worker projekta predloženo u proxy-pool modalu "Deploy Relay". |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Postavite na `false` da sakrijete opciju Cloudflare Workers relay-a s kartice Proxy Pool. |
| `CLOUDFLARED_BIN` | automatska detekcija | `src/lib/cloudflaredTunnel.ts` | Prilagođena putanja do `cloudflared` binarne datoteke. |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Transportni protokol tunela: `http2` (zadano), `quic` ili `auto`. |
| `CLOUDFLARED_CONFIG` | _(nije postavljeno)_ | `src/lib/cloudflaredTunnel.ts` | Putanja do lokalno upravljane cloudflared `config.yml` datoteke (sa `tunnel:`, `credentials-file:`, `ingress:`). Kada je postavljeno, OmniRoute pokreće `tunnel --config run` (imenovani tunel) umjesto privremenog brzog tunela. |
| `CLOUDFLARED_HOSTNAME` | _(iz config ingress-a)_ | `src/lib/cloudflaredTunnel.ts` | Nadjačavanje javnog hostname-a imenovanog tunela (npr. `ai.example.com`), prijavljeno kao `publicUrl`/`apiUrl`. Kada nije postavljeno, čita se iz prvog `ingress` hostname-a u konfiguraciji. |
| `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | Nadjačava osnovu Deno Deploy REST API-ja koju koristi deployer proxy-pool relay-a (#4643 / 9router#1437). |
| `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Zadano ime Deno Deploy aplikacije predloženo u proxy-pool modalu "Deploy Relay". |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Postavite na `false` da sakrijete opciju Deno Deploy relay-a s kartice Proxy Pool. |
| `SEARCH_CACHE_TTL_MS` | `300000` (5 min) | `open-sse/services/searchCache.ts` | TTL za keširanje odgovora API-ja za pretragu (Perplexity, Brave, itd.). |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Otkriva eksperimentalni UI CC-kompatibilnog provajdera za relay-e namijenjene samo za Claude Code. |
| `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | Nadjačava host na kojem ugrađena 9router instanca osluškuje. |
| `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | Nadjačava port na kojem ugrađena 9router instanca osluškuje. |
| `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | Bind host za WebSocket proxy ugrađenog servisa (zadano samo loopback). |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Port za WebSocket proxy server ugrađenog servisa. |
| `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI bridge host (zastarjela integracija). |
| `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI bridge port. |
| `CLIPROXYAPI_API_KEY` | _(prazno)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | Rezervni data-plane ključ kada postavka `cliproxyapi_api_key` nije prisutna. |
| `CLIPROXYAPI_MANAGEMENT_KEY` | _(prazno)_ | `src/lib/services/cliproxyAccountHealth.ts` | Upravljački ključ za čitanje stanja naloga s eksterno upravljane CLIProxyAPI instance. |
| `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | CLIProxyAPI konfiguracijski direktorij. |
| `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interfejs na kojem docker-compose objavljuje `cliproxyapi` sidecar (#12578). Njegov podatkovni volumen čuva OAuth/API kredencijale provajdera, a zakačena (pinned) slika nema env-bazirano `api-keys` poništenje za podatkovnu ravan (samo montirani `config.yaml`), pa `0.0.0.0` izlaže servis koji nosi kredencijale cijeloj LAN mreži. |
| `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | Poništava port na kojem ugrađeni Mux (coder/mux) daemon za orkestraciju agenata sluša (uvijek 127.0.0.1). |
| `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | Poništava port na kojem ugrađeni open-wa (automatizacija WhatsApp Weba) daemon sluša (uvijek 127.0.0.1). |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Dario host za vezivanje/povezivanje ugrađenog servisa (prema zadanim postavkama samo loopback). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port Dario ugrađenog servisa. |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Dario host za vezivanje/povezivanje ugrađenog servisa (prema zadanim postavkama samo loopback). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port Dario ugrađenog servisa. |
| `LOCAL_HOSTNAMES` | _(prazno)_ | `open-sse/config/providerRegistry.ts` | Dodatni nazivi hostova odvojeni zarezima koji se tretiraju kao "lokalni" (nazivi Docker servisa itd.). |
`ENABLE_CC_COMPATIBLE_PROVIDER` je samo za relaje trećih strana koji isključivo prihvataju
Claude Code klijente. OmniRoute prepisuje zahtjeve tako da ih ti relaji prihvate. Ako želite
koristiti samo Claude Code CLI, ili niste sigurni šta su ti relaji, držite ovo onemogućenim i
umjesto toga dodajte običnog Anthropic-kompatibilnog provajdera.
---
## 21. Ispravnost proxyja
| Variable | Default | Source File | Description |
| ------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Istek vremena za fast-fail provjeru ispravnosti. |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Vremenski prozor (u satima) za izračunavanje prosječne latencije proxy kandidata u strategiji grupe (pool) optimiziranoj za latenciju. |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL keša rezultata provjere ispravnosti. |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL keša za neuspjele provjere ispravnosti proxyja. Ovu vrijednost držite kraćom od `PROXY_HEALTH_CACHE_TTL_MS` kako bi se prolazni isteci vremena proxyja pri visokoj konkurentnosti brzo ponavljali, bez onemogućavanja fast-fail mehanizma za zaista nedostupne proxyje. |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Postavite `false` da biste onemogućili pozadinskog planera ispravnosti proxyja koji periodično provjerava registrovane proxyje. |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval prolaska pozadinskog planera ispravnosti u ms (minimum `60000`). |
| `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Interval sondiranja u ms za edge-relay proxy-je (`deno`/`vercel`/`cloudflare`), čije sonde bude naplaćeni serverless izolat (minimum `60000`). |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval pozadinskog prolaska oporavka u ms: koliko često se prethodno neispravni proxy-ji ponovno sonderaju kako bi se oporavljeni proxy vratio u rotaciju bez ponovnog pokretanja. Vrijednosti ispod `60000` vraćaju se na zadanu vrijednost. |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Cilj sonde dostupnosti koji koriste planer i `/api/settings/proxies/auto-test` endpoint. Usmjerite ga na interni/self-hosted URL kako biste izbjegli javni zadani cilj. |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Broj sondi pokrenutih odjednom po seriji, zajednički za planer i `/api/settings/proxies/auto-test` endpoint. Donja granica je 1, a gornja 50. |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Kašnjenje u ms između dva polaska sonde unutar serije. Bez njega cijela serija odlazi u istom trenutku i zajednička izlazna IP adresa može aktivirati ograničenje brzine na cilju. Postavite na `0` da onemogućite razmak; ograničeno na 5000. |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Postavite "false" da prestanete sondirati stvarni host pružatelja dodijeljenog proxy-ju (`GET /models`, bez API ključa) i umjesto toga uvijek koristite `PROXY_HEALTH_TEST_URL`. |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Kada je `false` (zadano), automatizirane sonde dostupnosti (planer + dugme "Test All" na `/api/settings/proxies/auto-test`) su **samo za čitanje** i nikada ne zapisuju status proxy-ja — samo operator postavlja aktivan/neaktivan, tako da nepouzdana sonda ne može izvan rotacije ostaviti dodijeljeni proxy (#6246). Postavite `true` da vratite staro ponašanje testiranja-i-postavljanja. |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in zastavica funkcije (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz baze podataka nadzorne ploče ima prednost). `true` (ili `1`, `yes`) ponovno pokušava prazne prevedene streaming turnove kroz uobičajenu putanju kredencijala (do `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` pokušaja) umjesto izlaganja praznog odgovora 200 ili odgovora 502 s praznim sadržajem. |
| `EMPTY_STREAM_SIBLING_RECOVERY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in zastavica funkcije (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz baze podataka nadzorne ploče ima prednost). `true` (ili `1`, `yes`) aktivira Claude/Codex sondu sadržaja praznog streama i troši postojeći ograničeni pokušaj ponavljanja na drugu prihvatljivu vezu nakon `empty_content` turna, bez cooldown-a ili blokade modela. |
| `STREAM_LATE_OUTPUT_PROBE_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in zastavica funkcije (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz baze podataka nadzorne ploče ima prednost). `true` (ili `1`, `yes`) nastavlja uzorkovati jedan proslijeđeni chunk od 16 nakon prvih 64, tako da kasni vidljivi izlaz i dalje označava stream kao onaj koji je emitovao izlaz (usamljeni 5xx nakon izlaza ostaje ograničen na zahtjev umjesto blokade samo modela). |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Opcioni feature flag (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz dashboard baze podataka ima prednost). `true` (ili `1`, `yes`) prikazuje read-only promatranje izlaznog prometa (egress) pool-a pod proxy pool-om na dashboardu (različite izlazne IP adrese, konekcije i najviše viđenih iza jedne IP adrese u posljednja 24 h, iz proxy loga). Nikad se ne koristi za rutiranje. |
| `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opcioni feature flag (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz dashboard baze podataka ima prednost). `true` (ili `1`, `yes`) prihvata datirane promatrane adrese koje je poslao operator po članu pool-a i spaja ih s čitanjem dnevnika radi prikaza i redoslijeda pool-a. |
| `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Prozor promatranja u satima za izlazne (egress) redove koje je poslao operator (čita se pri svakom čitanju; nije potreban restart). Ograničeno na 1..168; vrijednost izvan opsega, ne-numerička ili prazna vraća se na 24 uz jedno upozorenje na nivou cijelog procesa, nikad izuzetak. |
| `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Postavite `true` da planer automatski uklanja proxyje nakon ponovljenih uzastopnih neuspjeha. |
| `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Broj uzastopnih neuspjeha prije nego što planer automatski ukloni proxy (kada je `PROXY_AUTO_REMOVE=true`). |
| `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Postavite `true` da planer privremeno onemogući (status `dead`, nikad izbrisan) proxy nakon ponovljenih uzastopnih neuspjeha, umjesto da ga ukloni. Nedestruktivna alternativa za `PROXY_AUTO_REMOVE`: proxy odmah ispadne iz razrješavanja pool-a/rotacije (filter statusa živog proxyja koji koristi razrješavanje scope-pool-a već ga isključuje) i automatski se reaktivira kada ponovo počne prolaziti provjere. Dijeli prag `PROXY_AUTO_REMOVE_AFTER`. Ako su oba flaga `true`, `PROXY_AUTO_REMOVE` ima prednost. |
| `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Opciono pasivno preskakanje: kada je `true`, planer preskače živu provjeru za endpoint čiji nedavni produkcijski promet već dokazuje njegovu ispravnost (najmanje jedan uspjeh i nijedan pripisani proxy neuspjeh u prozoru, promatran tačno jedan provider). Po zadanom isključeno: svaki proxy se provjerava. |
| `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Prozor u ms produkcijskog prometa koji pasivno preskakanje razmatra (ograničeno na `60000..599999`). Kraći od intervala čišćenja od 10 minuta, tako da nedavni neuspjeh dominira umjesto da bude razrijeđen. |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Dozvoljava OAuth i tokovima validacije providera da zaobiđu prikvačeni proxy i povežu se direktno kada pred-provjere dohvatljivosti proxyja ne uspiju. Efektivni prioritet je: nadjačavanje iz Feature Flags baze podataka > env varijabla > zadano. |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30s) | `src/lib/resilience/settings.ts` | Zadani budžet **čekanja u redu**: koliko dugo zahtjev smije čekati na slot provajdera i stajati u redu prije nego što bude odbijen, a da nikada ne stigne do upstreama. Tajmer se poništava kada posao počne izvršavati — izvršavanje je posebno ograničeno s `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Env varijabla postavlja samo zadanu vrijednost: trajno sačuvana `resilienceSettings.requestQueue.maxWaitMs`, a zatim `rateLimitOverrides.maxWaitMs` po vezi, svaka ima prednost nad njom. |
| `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 min) | `open-sse/services/rateLimitManager.ts` | Gornja granica koliko dugo primljeni zahtjev smije ostati u izvršavanju prije nego što njegova rate-limit rezervacija istekne — odvojeno od budžeta čekanja u redu kako sporo pokretanje fetch-a na ne-inkrementalnim gateway-evima ne bi isteklo (#12027). |
| `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (onemogućeno) | `open-sse/services/rateLimitManager.ts` | Ograničenje prijema u red: odbija sa 429 `queue_full` kada je već ovoliko zahtjeva u redu. `0` = neograničeno (zadano). |
| `RATE_LIMIT_AUTO_ENABLE` | _(nije postavljeno)_ | `open-sse/services/rateLimitManager.ts` | Prisilno uključuje/isključuje sigurnosnu mrežu automatskog uključivanja rate limita bez obzira na trajno sačuvanu postavku Dashboarda (`resilienceSettings.requestQueue.autoEnableApiKeyProviders`). Prihvata `true`/`1`/`on` za prisilno uključivanje, `false`/`0`/`off` za prisilno isključivanje. Kada je aktivna (zadano), aktivne API-key veze su automatski zaštićene rate limitom. Postavljanje `rateLimitProtection: false` po vezi isključuje eksplicitnu zaštitu, ali se ne izuzima iz ove sigurnosne mreže; postavljanje ove env varijable na `false` je globalni mehanizam za rad API-key veza bez rate-limit redova. |
| `PROVIDER_COOLDOWN_ENABLED` | _(nije postavljeno → isključeno)_ | `open-sse/services/providerCooldownTracker.ts` | Opciono globalno praćenje cooldown-a provajdera/veze između zahtjeva. Isključeno po zadanim postavkama (preklapa se sa Connection Cooldown / Provider Circuit Breaker). Prihvata `true`/`1`/`on` za uključivanje. |
| `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | Minimalni cooldown (ms) prije ponovnog pokušaja neuspjelog provajdera/veze. Skalira se eksponencijalno s uzastopnim neuspjesima. Koristi se samo kada je `PROVIDER_COOLDOWN_ENABLED`. |
| `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 min) | `open-sse/services/providerCooldownTracker.ts` | Maksimalno ograničenje cooldown-a (ms) nakon kojeg se neuspjeli provajder/veza svakako ponovo pokušava. Koristi se samo kada je `PROVIDER_COOLDOWN_ENABLED`. |
| `STREAM_RECOVERY_ENABLED` | _(nije postavljeno → isključeno)_ | `src/lib/resilience/settings.ts` (početna vrijednost) → `open-sse/services/streamRecovery.ts` (logika) | **Šta:** transparentan oporavak skraćenih upstream streamova (free-claude-code port). Zadržava početni SSE prozor do `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) tako da se _pre-commit_ prekid — onaj koji se dogodi prije nego što ijedan bajt stigne do klijenta — ponovo otvori i nevidljivo ponovi. **Kada uključiti:** nepouzdani upstreamovi koji često skraćuju na 0 bajtova na početku streama; ostavite isključeno ako si ne možete priuštiti do 750 ms dodatnog vremena do prvog tokena na svakom streamu. Prihvata `true`/`1`/`on`. Postavlja početnu vrijednost trajno sačuvane Resilience postavke; postavka Dashboarda ima prednost kada se jednom postavi. |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(nije postavljeno → isključeno)_ | `src/lib/resilience/settings.ts` (seed) → `open-sse/services/streamRecovery.ts` (logika) | **Šta:** nastavak usred toka (Faza 4.4) — nakon _post-commit_ skraćivanja (bajtovi su već stigli do klijenta), ponovno pošalji zahtjev s djelimičnim tekstom kao assistant prefill i spoji nedostajući sufiks. Samo plain-text OpenAI-kompatibilni streamovi; nikad se ne aktivira dok je poziv alata u toku. **Kada omogućiti:** duga generiranja koja se prekinu usred odgovora i prihvatate da oporavljeni kraj stigne odjednom umjesto token po token. Nezavisno od `STREAM_RECOVERY_ENABLED` (drugačiji profil rizika). Prihvata `true`/`1`/`on`. |
| `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(nije postavljeno → isključeno)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | Opcionalni watchdog korisnog ispisa aktivnog streama. Otkriva streamove koji nastavljaju slati dijelove, ali ostaju ispod konfigurirane stope ispisa asistenta; heartbeatovi, usage događaji, prazne delte i faze alata/rezoniranja ne predstavljaju se kao napredak. Odvojeno od idle i hard-deadline timeouta. |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Početni period čekanja prije evaluacije propusnosti, ograničen na 0–600000 ms. |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Klizni prozor korisnog ispisa, ograničen na 1000–600000 ms; prije prekida potreban je jedan cijeli prozor. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Minimalna stopa UTF-8 bajtova ispisa asistenta (konzervativna proxy procjena tokena), ograničena na 1–1000000. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Minimalni nenulti uzorak korisnog ispisa koji se smatra mjerljivim, ograničen na 1–1000000 bajtova. |
| `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Interval raspoređivanja (ms) između healthchecka tokena providera pri pokretanju. |
| `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Minimalni nasumični jitter (ms) dodan na `HEALTHCHECK_STAGGER_MS` između healthchecka tokena providera, kako bi se spriječili naleti (Issue #1220). |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Maksimalni nasumični jitter (ms) dodan na `HEALTHCHECK_STAGGER_MS` između healthchecka tokena providera, kako bi se spriječili naleti (Issue #1220). |
| `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Veličina batcha istovremenih provjera za početni pregled healthchecka tokena pri pokretanju; veće vrijednosti provjeravaju više konekcija paralelno, manje vrijednosti smanjuju opterećenje od naleta (Issue #7875, regresija od #7719). |
| `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Broj automatskih ponovnih pokušaja na cooldown odgovore ograničene na model prije vraćanja greške klijentu. |
| `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Maksimalni backoff interval (u sekundama) između ponovnih pokušaja nakon cooldown-a. Ograničen ovom vrijednošću bez obzira na upstream `Retry-After`. |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL Headroom token-saver proxyja. Životni ciklus dashboarda (`api/headroom/*`) po defaultu pokreće lokalni `headroom-ai` CLI na loopbacku; mijenjajte samo ako želite ukazati na eksterni Docker sidecar proxy. |
### Konstante za podešavanje oporavka streama
Ponašanje zadržavanja (holdback) pri oporavku podešeno je hardkodiranim konstantama u
`open-sse/config/constants.ts` (`STREAM_RECOVERY`), ovdje prikazanim radi reference —
njihova izmjena zahtijeva izmjenu koda, a ne env varijablu:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — koliko dugo se početni SSE prozor zadržava
kako bi se rano skraćivanje moglo ponovo pokušati prije nego što ijedan bajt bude commitovan klijentu.
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — stroga gornja granica zadržanog prozora; commit
(flush + passthrough) čim se nakupi ovoliko bajtova, bez obzira na tajmer.
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — maksimalan broj transparentnih ponovnih otvaranja
upstream streama dok holdback još nije commitovan.
> **Ograničenje brzine po provideru s klizećim prozorom (bez env varijable):** FCC-portovani
> per-provider sliding-window rate-limit _fallback_ postoji u kodu
> (`open-sse/services/providerDefaultRateLimit.ts`, povezan kroz
> `open-sse/services/rateLimitManager.ts`), ali se isporučuje s **praznom defaultnom mapom**
> i danas **nema operatersku env varijablu** — omogućuje se samo putem test hooka /
> izmjene koda. Namjerno nije naveden u gornjoj tabeli. Relay limiter po `(token, IP)`
> koji _ima_ podešavanje je `RELAY_IP_PER_MINUTE` (§3 Mreža i portovi).
---
## 22. Otklanjanje grešaka
> [!CAUTION]
> Ove varijable proizvode **opširan izlaz** i mogu otkriti osjetljive podatke. **Nikada ih nemojte omogućavati u produkciji.**
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CURSOR_DEBUG` | _(nije postavljeno)_ | `open-sse/executors/cursor.ts` | Postavite na `1` da biste omogućili opširne zapisnike Cursor izvršioca (dekodirani SSE segmenti itd.). |
| `CURSOR_STREAM_DEBUG` | _(nije postavljeno)_ | `open-sse/executors/cursor.ts` | Alias varijable `CURSOR_DEBUG` kompatibilan sa starijim verzijama. |
| `CURSOR_DUMP_FILE` | _(nije postavljeno)_ | `open-sse/executors/cursor.ts` | Opcionalna putanja datoteke u koju se zapisuju neobrađeni dekodirani Cursor segmenti kada je `CURSOR_DEBUG=1`. |
| `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Vremensko ograničenje neaktivnosti toka (ms) za Cursor izvršioca. |
| `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Period tolerancije (ms) nakon mekog završetka composer kv_after_text kada su bajtovi još uvijek u međuspremniku — omogućava naknadnom pozivu alata exec_mcp da dovrši svoj okvir. |
| `CURSOR_TOOL_DIRECTIVE` | omogućeno (`!== "0"`) | `open-sse/executors/cursor.ts` | Direktiva za potvrdu alata koja omogućava da composer-2.5 pouzdano izvršava pozive alata. Postavite na `0` da biste je onemogućili. |
| `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(nije postavljeno)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | Tekst sistemskog upita koji definira operater i koji se dodaje sistemskoj poruci NAKON prevođenja (ubrizgavanje nakon prevođenja), te dospijeva do putanja codex/Responses i `/v1/messages`. Također se koristi kao prefiks direktive koji se uklanja iz ponovljenih blokova sistemskog uvoda. Ostavite nepostavljeno da biste onemogućili. |
| `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (isključeno) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | Postavite na `1` da biste uklonili ponovljene blokove uvoda sistemskog upita s početka toka openai→claude. Zadano je isključeno — heuristike su prilagođene engleskoj prozi i mijenjaju sadržaj odgovora, pa bi odgovor koji opravdano počinje takvim odjeljkom izgubio taj odjeljak. |
| `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Vremensko ograničenje dohvaćanja po slici (ms) za udaljeni vizuelni ulaz `image_url`. |
| `CURSOR_STATE_DB_PATH` | _(ispitano)_ | `open-sse/utils/cursorVersionDetector.ts` | Nadjačava pretragu baze podataka stanja Cursor IDE-a koja se koristi za otkrivanje verzije IDE-a. |
| `CURSOR_AGENT_CLI_VERSION` | _(otkrivanje / fiksiranje)_ | `open-sse/utils/cursorAgentCliVersion.ts` | ID izdanja Agent CLI-ja (`YYYY.MM.DD-`) za `x-cursor-client-version: cli-…` pri pokretanju agenta. |
| `CURSOR_AGENT_BIN` | _(nije postavljeno)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Putanja do izvršne datoteke Cursor Agent koja se koristi za generiranje slika. Ako nije postavljena, rukovalac koristi `providerSpecificData.agentBin`, a zatim PATH. |
| `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Ukupno vremensko ograničenje po slici (ms) za zadatke generiranja slika pomoću Cursor Agenta. |
| `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Ograničenje konkurentnosti zajedničkog mjesta za Cursor zadatke generiranja slika. |
| `CURSOR_IMG_MODEL` | zahtjev / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Nadjačava Cursor CLI `--model` za zadatke generiranja slika. |
| `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Učestalost provjere rezultata generiranja slika putem UC-a (uncensored.com) (ms). |
| `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Ukupno vremensko ograničenje provjere rezultata generiranja slika putem UC-a (ms). |
| `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Učestalost provjere rezultata generiranja videozapisa putem UC-a (uncensored.com) (ms). |
| `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Ukupno vremensko ograničenje provjere rezultata generiranja videozapisa putem UC-a (ms). |
| `CURSOR_DATA_DIR` | _(ispitano)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Nadjačava direktorij podataka Cursor Agent CLI-ja (`…/versions/`); ista varijabla koju koristi službeni agent. |
| `CURSOR_TOKEN` | _(nije postavljeno)_ | `scripts/ad-hoc/cursor-tap.cjs` | Direktni Cursor bearer token koji koriste razvojni alati. |
| `OMNIROUTE_LOG_REQUEST_SHAPE` | onemogućeno (uključuje se putem `"1"`) | `src/app/api/v1/chat/completions/route.ts` | Bilježi oznake vrste/dužine sadržaja za velike sadržaje razgovora kada je postavljeno `"1"`. Zadano je isključeno radi smanjenja količine zapisa. |
| `DEBUG_RESPONSES_SSE_TO_JSON` | _(nije postavljeno)_ | `open-sse/handlers/responseTranslator.ts` | Postavite na `true` da biste bilježili detalje prevođenja Responses API SSE→JSON. |
| `DEBUG_CLAUDE_NONSTREAM` | _(nije postavljeno)_ | `open-sse/handlers/responseTranslator.ts` | Postavite na `true` da biste prikazali prazne textContent segmente u putanji prevođenja Claude odgovora (samo za otklanjanje grešaka). |
| `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(nije postavljeno)_ | Okruženje za E2E testiranje | Postavite na `true` da biste omogućili režim E2E testiranja (ublažena autentifikacija, testne kuke). |
---
## 23. GitHub integracija
Omogućite korisnicima da prijavljuju probleme direktno s kontrolne ploče.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| --------------------- | -------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GITHUB_ISSUES_REPO` | _(nije postavljeno)_ | `src/app/api/v1/issues/report/route.ts` | Repozitorij u formatu `owner/repo`. |
| `GITHUB_ISSUES_TOKEN` | _(nije postavljeno)_ | `src/app/api/v1/issues/report/route.ts` | GitHub lični pristupni token s opsegom `issues:write`. |
| `GITHUB_TOKEN` | _(nije postavljeno)_ | pomoćni alati za trijažu problema / agenta u oblaku | Generički GitHub pristupni token koji se koristi kao rezervna opcija za `GITHUB_ISSUES_TOKEN`, kao i u pomoćnim alatima agenta u oblaku u `src/lib/cloudAgent/*`. |
---
## Scenariji implementacije
Za SRE smjernice za pozadinski sistem prosljeđivanja (ponašanje ts/bifrost/auto, pozicioniranje 9router u odnosu na CLIProxyAPI i strategiju rezervnog rješenja za visoku propusnost), pogledajte [Strategiju pozadinskog sistema prosljeđivanja](/docs/reference/RELAY_BACKEND_STRATEGY.md).
### Minimalno lokalno razvojno okruženje
```bash
JWT_SECRET=$(openssl rand -base64 48)
API_KEY_SECRET=$(openssl rand -hex 32)
INITIAL_PASSWORD=dev123
PORT=20128
NODE_ENV=development
```
### Produkcijsko okruženje u Dockeru
```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
```
### Izolirano okruženje / CI
```bash
JWT_SECRET=test-jwt-secret-for-ci
API_KEY_SECRET=test-api-key-secret-for-ci
INITIAL_PASSWORD=testpass
NODE_ENV=production
OMNIROUTE_DISABLE_BACKGROUND_SERVICES=true
APP_LOG_TO_FILE=false
```
### VPS s obrnutim proxyjem (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 izolovano okruženje (v3.8.0+)
Ograničenja i sigurnosne postavke koje se primjenjuju kada Skills radni okvir (`src/lib/skills/`) izvršava automatizacije koje su definirali korisnici u izolovanom okruženju.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| --------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 s) | `src/lib/skills/builtins.ts` | Vremensko ograničenje prema stvarnom vremenu za svako izvršavanje Skills koda u izolovanom okruženju. Strogo ograničenje; sve što traje duže bit će prekinuto. |
| `SKILLS_EXECUTION_TIMEOUT_MS` | _(koristi `SKILLS_SANDBOX_TIMEOUT_MS` kao rezervnu vrijednost)_ | `src/lib/skills/` | Vremensko ograničenje za orkestraciju Skills procesa na visokom nivou. Postavite ga iznad `SKILLS_SANDBOX_TIMEOUT_MS` kako biste omogućili višekoračne radne tokove. |
| `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | Maksimalan broj bajtova koji Skills automatizacija može pročitati iz bilo koje pojedinačne datoteke u izolovanom okruženju. |
| `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | Maksimalan broj bajtova koji se može zabilježiti iz bilo kojeg pojedinačnog HTTP odgovora unutar Skills automatizacije. |
| `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | Strogo ograničenje broja znakova sa stdout/stderr izlaza vraćenih iz jednog poziva izolovanog okruženja. |
| `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | Postavite na `1`/`true` kako biste omogućili odlaznu mrežnu komunikaciju iz izolovanog okruženja. Radi sigurnosti je zadana vrijednost **izolovano**. |
| `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(prazno)_ | `src/lib/skills/builtins.ts` | Lista slika kontejnera, odvojenih zarezima, koje su dozvoljene za izvršavanje u izolovanom okruženju. Prazna vrijednost znači da je dozvoljena samo ugrađena zadana slika. |
| `SKILLS_SANDBOX_DOCKER_IMAGE` | _(ugrađena zadana vrijednost)_ | `src/lib/skills/` | Slika kontejnera koja se koristi prilikom pokretanja izolovanog okruženja zasnovanog na Dockeru. Nadjačajte je kako biste fiksirali prilagođenu ojačanu osnovnu sliku. |
| `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | Izvršno okruženje kontejnera za Skills izolaciju: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. `auto` odabire najbolje instalirano izvršno okruženje prema operativnom sistemu hosta (Apple Container/OrbStack na macOS-u, WSL Container na Windowsu, Podman na Linuxu), koristeći Docker kao rezervnu opciju. |
> [!CAUTION]
> Omogućavanje `SKILLS_SANDBOX_NETWORK_ENABLED=true` otvara put za odlaznu komunikaciju proizvoljnom Skills kodu. U zajedničkim implementacijama kombinujte ga s `OUTBOUND_SSRF_GUARD_ENABLED=true` i strogim pravilima za `CORS_ORIGIN`/proxy.
---
## 25. Kvote provajdera, tuneli, sigurnosne kopije i ostalo u runtime-u
Endpointi kvota provajdera, mrežni tuneli (Tailscale, Ngrok, MITM proxy za otklanjanje grešaka), 1Proxy pool za izlazni promet, sigurnosne kopije baze podataka i sitna nadjačavanja po funkcionalnosti na koja se pozivaju izvršni sloj ili skripte.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | Redis string za povezivanje za backend ograničivača brzine zahtjeva (rate limiter). |
| `ALIBABA_CODING_PLAN_HOST` | _(produkcijski host)_ | `open-sse/services/bailianQuotaFetcher.ts` | Zaobilaženje hosta koji se koristi za dohvaćanje kvota Alibaba Bailian coding plana. |
| `ALIBABA_CODING_PLAN_QUOTA_URL` | izvedeno iz hosta | `open-sse/services/bailianQuotaFetcher.ts` | Potpuno zaobilaženje URL-a kvote za Alibaba Bailian. |
| `QWEN_CLOUD_COOKIE` | _(nije postavljeno)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Sesijski kolačić konzole za gateway kvota ličnog Token Plana za Qwen Cloud / Model Studio (inference API ključ ga ne može pročitati). Kopirajte cijelo zaglavlje `Cookie` zahtjeva — sadrži `login_qwencloud_ticket` — s bilo kojeg `api.json` poziva prema `cs-data.qwencloud.com` na home.qwencloud.com › Billing › Subscription (F12 › Network). Osjetljivo je i ograničeno na sesiju; radije koristite polje `qwenCloudCookie` na Dashboardu za pojedinačnu vezu. |
| `QWEN_CLOUD_SEC_TOKEN` | _(nije postavljeno)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Ručno zaobilaženje `sec_token` za gateway konzole Token Plana. Osjetljivo; kada nije postavljeno, dohvatač ga rješava iz HTML-a dashboarda pomoću kolačića. |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Zaobilaženje hosta gatewaya za dohvatač kvota ličnog Token Plana (npr. `bailian-singapore-cs.alibabacloud.com` za Model Studio konzolu). |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | URL dashboarda koji se koristi za rješavanje `sec_token` iz HTML-a stranice nakon prijave. |
| `XIAOMI_MIMO_CONSOLE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Sesijski kolačić konzole za API kvota Xiaomi MiMo Token Plana (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — inference API ključ ga ne može pročitati). Kopirajte cijelo zaglavlje `Cookie` zahtjeva — sadrži `api-platform_serviceToken` i `userId` — s bilo kojeg zahtjeva prema `platform.xiaomimimo.com` na stranici Token Plana (F12 › Network). Osjetljivo je i ograničeno na sesiju; radije koristite polje `xiaomiMimoConsoleCookie` na Dashboardu za pojedinačnu vezu. |
| `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Mjesečni budžet (krediti) za OmniRoute-praćeni Xiaomi MiMo rezervni mehanizam koji se koristi kada nije konfigurisan kolačić konzole. Zadano je 4,1B iz Lite nivoa; postavite ga na kredite plana (Standard 11B / Pro 38B / Max 82B). Nadjačavanje po vezi `providerSpecificData.monthlyTokenLimit` ima prednost nad ovom env varijablom. |
| `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Nadjačavanje front-end putanje konzole za dohvaćanje kvote besplatnog nivoa za vizualne/medijske sadržaje Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Nadjačavanje front-end putanje konzole za dohvaćanje multimodalne kvote besplatnog nivoa Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Nadjačavanje front-end putanje konzole za dohvaćanje audio kvote besplatnog nivoa Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(nije postavljeno)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Opcionalna putanja do lokalnog JSON nadjačavanja za ugrađenu listu dozvoljenih tekstualnih modela besplatnog nivoa Alibaba. Ako nije zadano, koristi se `$DATA_DIR/alibaba-free-tier-allowlist.json`, a zatim `config/alibaba-free-tier-allowlist.json`. |
| `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Tokeni rezervirani za izlaz dovršetka prilikom izračunavanja budžeta upita. |
| `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Koliko najnovijih umetnutih slika zadržati prilikom uklanjanja starijih kako bi stale u prozor konteksta (#8560). |
| `MODEL_ALIAS_COMPAT_ENABLED` | omogućeno | `open-sse/services/model.ts` | Uključuje/isključuje sloj kompatibilnosti zastarjelih pseudonima modela koji koriste stariji klijenti. |
| `OMNIROUTE_EMERGENCY_FALLBACK` | omogućeno | `open-sse/services/emergencyFallback.ts` | Postavite na `false` (ili `0`) da onemogućite hitni rezervni mehanizam pri iscrpljenju budžeta koji preusmjerava neuspjele zahtjeve na besplatni model `nvidia`/`openai/gpt-oss-120b`. Efektivni redoslijed prioriteta je: nadjačavanje iz baze zastavica funkcija (Feature Flags DB) > env varijabla > zadano; ako nije dostupno, servis se vraća na sirovu env vrijednost. |
| `COMMAND_CODE_CALLBACK_PORT` | _(nije postavljeno)_ | `src/app/api/providers/command-code/auth/shared.ts` | Lokalni port koji se koristi za OAuth povratne pozive iz pomoćnog alata Command Code CLI. |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Vrijednost poslata kao zaglavlje `x-command-code-version` Command Code upstream serveru. Nadjačajte da biste podigli verziju CLI-ja. |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Osnovni URL za Command Code upstream za korištenje/kvote koji koristi telemetrija za dohvatanje kvota na pametnom telefonu. Nadjačajte za samostalno hostirani/alternativni Command Code API. |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Lokalni port na koji se vezuje MITM debug proxy. |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Postavite `1` da biste onemogućili upstream provjeru TLS-a (samo za razvoj). |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Vremensko ograničenje neaktivnih socketa (ms) za proksirane konekcije; neaktivni socketi nakon ovog roka se zatvaraju kako bi se izbjeglo curenje poluotvorenih tunela. |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Port na kojem Antigravity MITM bridge osluškuje. |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Router endpoint na koji bridge prosljeđuje Antigravity promet. |
| `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Nadjačava direktorij iz kojeg bridge čita svoj TLS materijal. Model certifikata bira se isto kao kod AgentBridge servera: `server.crt`/`server.key` za legacy leaf instalaciju, inače `ca.crt`/`ca.key` (root CA, po jedan leaf certifikat za svaki presretnuti host; prisiljava se sa `MITM_ROOT_CA_ENABLED=true`). Bridge se zaustavlja pri pokretanju ako fajlovi za aktivni model nedostaju. |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Opširnost logovanja odluka o rutiranju: `0` utišava log, veće vrijednosti loguju više bypass/route odluka. |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Postavite `true` da biste odabrali model certifikata root-CA + leaf-po-hostu (#6684). Nove instalacije ga dobijaju automatski; instalacije s postojećim pouzdanim legacy leaf certifikatom zadržavaju legacy fixed-SAN certifikat, osim ako se ne odabere. |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Postavlja ga MITM menadžer za stvoreni proxy proces (`root-ca` \| `legacy`) — odražava odluku o migraciji certifikata; nije namijenjen za ručno postavljanje. |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Postavite `1` (istinito) da uklonite početni `sudo` iz MITM naredbi za povjerenje certifikata — za implementacije bez root-a / s korisničkim imenskim prostorima gdje operator ručno vjeruje CA (npr. putem Nodeovog mehanizma extra-CA-certs). |
| `SKIP_ANTIGRAVITY_DNS` | _(nije postavljeno)_ | `src/mitm/dns/provision.ts` | Postavite `true` da u potpunosti preskočite provizioniranje `/etc/hosts` DNS unosa za Antigravity proxy imena hostova — za kontejnere bez dostupnog sudo/root-a. |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(nije postavljeno)_ | `src/mitm/dns/dnsConfig.ts` | Postavite `1` da preskočite pisanje u hosts datoteku prilikom dodavanja/uklanjanja DNS unosa — za sandboxirana ili testna okruženja samo za čitanje. |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Zaštita samo za test/CI: postavite `1` da instalacija/deinstalacija povjerenja certifikata postane bez efekta (no-op) kako paket testova nikada ne bi mijenjao OS skladište povjerenja. Automatski je postavljaju testna postavka i CI tijekovi rada. |
| `CHANGELOG_BASE_REF` | _(automatski)_ | `scripts/check/check-changelog-integrity.mjs` | Eksplicitna bazna referenca za kapiju protiv "jedenja" CHANGELOG-a (zadano je bazna grana PR-a u CI-ju, ili najviša `release/v*`). |
| `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Postavite `true` da omogućite pozadinski planer automatske sinhronizacije pool-a besplatnih proxyja. Po želji (opt-in), zadano isključeno. |
| `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | Interval automatske sinhronizacije u milisekundama (zadano 30 min). |
| `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | Omogućuje izvor besplatnih proxyja 1proxy. Postavite na `false` da onemogućite. |
| `FREE_PROXY_1PROXY_API_URL` | _(vidi oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Nadjačavanje 1proxy API URL-a. |
| `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Maksimalan broj proxyja dohvaćenih po sinhronizaciji s 1proxy. |
| `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | Minimalni prag ocjene kvaliteta za uvoz iz 1proxy. |
| `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Omogućuje Proxifly izvor besplatnih proxyja. Postavite na `false` za onemogućavanje. |
| `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Broj proxyja koje treba preuzeti po Proxifly sinhronizaciji. |
| `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | Filter nivoa anonimnosti za Proxifly (`elite`, `anonymous`, `transparent`). |
| `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | Omogućuje IPLocate izvor besplatnih proxyja. Samo uz prijavu (opt-in). |
| `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Zaobilaženje osnovnog URL-a IPLocate liste proxyja. |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Omogućuje Webshare izvor proxy poola. Postavite na `false` za onemogućavanje; također zahtijeva da `FREE_PROXY_WEBSHARE_API_KEY` bude postavljen. |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(nema)_ | `src/lib/freeProxyProviders/webshare.ts` | API token Webshare računa (`Authorization: Token `). Obavezno — provajder ostaje onemogućen bez njega. |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Zaobilaženje URL-a Webshare API-ja liste proxyja. |
| `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Maksimalan broj proxyja uvezenih po Webshare sinhronizaciji. |
| `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Prikaži/sakrij dugme Deploy Vercel Relay u kartici Proxy Pool. |
| `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Zaobilaženje osnovnog URL-a Vercel API-ja (za testiranje). |
| `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Zadano ime projekta unaprijed popunjeno u modalnom prozoru za implementaciju Vercel Relaya. |
| `TAILSCALE_BIN` | _(automatsko otkrivanje)_ | `src/lib/tailscaleTunnel.ts` | Eksplicitna putanja do `tailscale` binarne datoteke. |
| `TAILSCALED_BIN` | _(automatsko otkrivanje)_ | `src/lib/tailscaleTunnel.ts` | Eksplicitna putanja do binarne datoteke `tailscaled` daemona. |
| `TAILSCALE_AUTHKEY` | _(nije postavljeno)_ | `src/lib/tailscaleTunnel.ts` | Unaprijed podijeljeni Tailscale auth ključ za neinteraktivni / headless `tailscale up` (prosljeđuje se putem `--auth-key=`). Kada nije postavljen, prijava se vraća na interaktivni URL za autentifikaciju putem preglednika. |
| `NGROK_AUTHTOKEN` | _(nije postavljeno)_ | `src/lib/ngrokTunnel.ts` | Autentificira odlazne ngrok tunele. |
| `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Maksimalan broj SQLite backup datoteka koje zadržava ručno/zakazano čišćenje backupa. Snimci migracije adresirani su po sadržaju i ponovno se koriste za identično stanje baze podataka; ne uklanjaju se unutar prozora istovremene migracije. Zaobilazi vrijednost spremljenu iz Postavke → Zadržavanje backupa baze podataka. |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Maksimalna starost (u danima) koju zadržava ručno/zakazano čišćenje backupa. `0` onemogućava uklanjanje na osnovu starosti. Snimci migracije ne uklanjaju se unutar prozora istovremene migracije. Zaobilazi vrijednost spremljenu iz Postavke → Zadržavanje backupa baze podataka. |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Interval ciklusa (ms) posla na strani servera koji izvršava `backup-schedule.json`. Mora ostati znatno ispod granularnosti crona od 1 minute; vrijednosti ispod `5000` ili one koje se ne mogu parsirati vraćaju se na `30000`. |
| `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Naznaka container runtime-a za provjeru dozvola u entrypoint-u. Postavite na `podman` za bilo koju Podman topologiju. Budući da container ne može odrediti je li engine lokalni ili mu se pristupa putem Podman Machine, upozorenje ostaje topološki neutralno i upućuje na `contrib/podman/README.md`. |
| `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Backend pohrane potrošnje dijeljenih kvota: `sqlite` (zadano) ili `redis`. |
| `QUOTA_STORE_REDIS_URL` | _(nije postavljeno)_ | `src/lib/quota/storeFactory.ts` | Redis connection string koji se koristi kada je `QUOTA_STORE_DRIVER=redis` (npr. `redis://localhost:6379`). |
| `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | Omjer zasićenja poola (0..1); na toj vrijednosti ili iznad nje pool ulazi u strogi režim (bez posuđivanja). |
| `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Multiplikator rezultata (0..1) koji se primjenjuje na cilj kada ga politika meke kvote deprioritizira. |
| `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Multiplikator rezultata (0..1) koji se primjenjuje na iscrpljenog provajdera (`credits_exhausted`/`rate_limited`) u auto-combo bodovanju kada je preflight prekid kvote ISKLJUČEN (#4540). |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Period zadržavanja (u danima) za `quota_consumption` buckete prije GC-a (`gcQuotaConsumption`). |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Opt-in (zadano ISKLJUČENO): omogućava hard prekid kvote pri automatskom usmjeravanju koji odbacuje kandidate s niskom kvotom prije bodovanja. |
| `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Opt-in (zadano ISKLJUČENO): kada filter `auto/:` ne odgovara nijednom povezanom kandidatu, vraća staro (legacy) ponašanje povratka na puni (nefiltrirani) pool umjesto vraćanja praznog poola. Zadano ISKLJUČENO čini da `:free` znači "samo besplatni tier". |
| `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Ograničenje veličine panela (steznuto na 1–10) za `auto/*:chaos` broadcast varijantu — jedan zahtjev se širi na najviše ovaj broj modela različitih provajdera. |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(zadano za engine)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Minimalno podešavanje veličine panela proslijeđeno rukovaocu chaos emitiranja; ako nije postavljeno, zadržava se zadana postavka enginea. |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(zadano za engine)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Strogi vremenski limit (ms) za cijeli chaos panel fan-out; ako nije postavljeno, zadržava se zadana postavka enginea. |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Putanja do `auth.json` datoteke Grok CLI-a koja se koristi za dohvaćanje sedmične kvote grok-web-a; promijenite za testove ili nestandardnu instalaciju CLI-a. |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(nije postavljeno)_ | `src/mitm/manager.ts` | Dodatni CA certifikat (PEM) kojem se vjeruje za AgentBridge upstream TLS konekcije. |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Maksimalan broj uhvaćenih zahtjeva koji se drže u ring bufferu Traffic Inspectora. |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Maksimalna veličina tijela uhvaćenog zahtjeva/odgovora (KB) prije skraćivanja. |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Lokalni port za HTTP proxy Traffic Inspectora. |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Automatski pokreni HTTP proxy inspectora pri pokretanju. |
| `INSPECTOR_LLM_HOSTS_EXTRA` | _(nije postavljeno)_ | `src/lib/inspector/captureState.ts` | Dodatna imena hostova (odvojena zarezom) koja se tretiraju kao LLM endpointi za hvatanje. |
| `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | Maskiraj tajne (auth zaglavlja / API ključeve) u uhvaćenom prometu. |
| `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | Minuta prije nego što zaštita sistemskog proxyja automatski vrati OS proxy postavke. |
| `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(automatski)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Token kojim se autentificira interni ingest snimljenog prometa u inspector. |
| `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Maksimalni broj kolona uporedo u Playground režimu poređenja. |
| `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(nije postavljeno)_ | `src/app/(dashboard)/dashboard/playground/` | Zadani model za Playground akciju 'improve prompt' (vraća se na aktivni model kada nije postavljen). |
| `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Glavni sigurnosni prekidač za bifrost sidecar proxy. Kada je postavljen na `0`, ruta vraća 503 sa zaglavljem `X-Bifrost-Killswitch` i operator se preusmjerava na TS putanju. Koristite za onemogućavanje sidecara bez ponovnog postavljanja (incident tier-1 rutera, rotacija ključeva). |
| `BIFROST_BASE_URL` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Kada je postavljen, ruta Bifrost sidecar proxyja prosljeđuje promet `/v1/chat/completions` na ovaj Go gateway umjesto na TS relay handler. Nepostavljeno → 503 sa fallback-om. Završna kosa crta se uklanja. |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Port na koji se veže nadzirana Bifrost ugrađena usluga (`127.0.0.1:`) kada OmniRoute upravlja životnim ciklusom Bifrost sidecara. Zadano je `8080`. |
| `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Port na koji se veže nadzirana LLMLingua usluga kompresije (`127.0.0.1:`). Zadano je `20135`. |
| `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | Osnovni URL za lokalni LLMLingua HTTP mikroservisni daemon za kompresiju. Zadano je `http://127.0.0.1:20135`. |
| `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | Hugging Face ID modela koji nadzirani LLMLingua sidecar učitava (proslijeđen okruženju podređenog procesa). |
| `BIFROST_API_KEY` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | API ključ za Bifrost gateway (šalje se kao `Authorization: Bearer ...`). Ako nije postavljen, ruta očekuje da zahtjev nosi važeći OmniRoute API ključ; ovaj ključ služi samo za autentifikaciju na strani gatewaya. |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Kada je true, Bifrost sidecar ruta strima odgovore nazad putem SSE kroz gateway umjesto TS streaming izvršioca. Postavite na `0` da biste prisilili ne-streaming JSON odgovore kroz gateway. |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Timeout po zahtjevu pri proxy-ju ka Bifrost gateway-u (ms). Pri isteku vremena ruta vraća TS relay putanju putem `X-Bifrost-Fallback` zaglavlja. |
| `OMNIROUTE_BIFROST_KEY` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Alijas za `BIFROST_API_KEY` (koriste ga skripte koje čitaju env putem `OMNIROUTE_*`). `BIFROST_API_KEY` ima prednost kada su oba postavljena. |
| `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Relay backend za `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript relay (zadano kada Bifrost nije konfigurisan); `auto` bira Bifrost kada je `BIFROST_BASE_URL` postavljen i `BIFROST_ENABLED` ≠ `0`, sa automatskim TS fallback-om ako je sidecar nedostupan; `bifrost` prisiljava Bifrost (strogo, bez fallback-a). Auth/rate-limit/injection-guard/allowlist se uvijek prvo izvršavaju u Next ruti. Odgovori nose `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. |
| `RELAY_ROUTING_BACKEND` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Prihvaćeni alijas za `OMNIROUTE_RELAY_BACKEND` (iste `ts \| bifrost \| auto` vrijednosti). `OMNIROUTE_RELAY_BACKEND` ima prednost kada su oba postavljena. |
| `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | Cooldown (ms) nakon neuspješnog Bifrost sidecar skoka u `auto` režimu prije nego što relay ponovo pokuša sidecar; usmjerava direktno na TS putanju dok cooldown traje, a zatim ponovo ispituje. `0` onemogućava. Primjenjuje se samo kada je `OMNIROUTE_RELAY_BACKEND=auto`. |
| `OMNIROUTE_TLS_CERT` | _(nije postavljeno)_ | `bin/cli/commands/serve.mjs` | Putanja do PEM TLS certifikata za posluživanje `omniroute serve` preko HTTPS-a (ekvivalent `--tls-cert`). Mora biti uparena sa `OMNIROUTE_TLS_KEY`; samostalni server tada terminira TLS na istom listeneru (`wss://` radi nepromijenjeno). Nepostavljeno → obični HTTP. Navođenje samo jednog od cert/key, ili nečitljive putanje, bilježi upozorenje i ostaje HTTP. |
| `OMNIROUTE_TLS_KEY` | _(nije postavljeno)_ | `bin/cli/commands/serve.mjs` | Putanja do PEM TLS privatnog ključa za `omniroute serve` HTTPS (ekvivalent `--tls-key`). Mora biti uparena sa `OMNIROUTE_TLS_CERT`. Pogledajte `OMNIROUTE_TLS_CERT`. |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Glavni prekidač za `/api/local/*` rute. Kada nije postavljeno ili je `0`, sve `/api/local/*` rute vraćaju 503 u produkciji. Mora biti `1` u non-loopback implementacijama da bi se omogućio Redis pokretač i slični pokretači lokalnih servisa na jedan klik. Dvostruka zaštita sa `isLocalOnlyPath()` route-guard klasifikacijom (`LOCAL_ONLY_API_PREFIXES` u `src/server/authz/routeGuard.ts`). |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(nije postavljeno)_ | `src/lib/security/localEndpoints.ts` | Bearer token za `/api/local/*` pozivaoce koji nisu na loopback-u (npr. desktop aplikacija). Kada je postavljen, zahtjevi sa non-loopback IP adresa moraju nositi `Authorization: Bearer `. Obavezno kada je `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` u non-loopback implementacijama. |
| `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Naziv kontejnera za 1-click Redis pokretač (`omniroute redis up`). Koriste ga i CLI i `RedisLauncherPanel` GUI. |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Port hosta za 1-click Redis pokretač. Promijenite ako host već zauzima 6379. Interni port kontejnera ostaje 6379. |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Host interfejs na kojem 1-click Redis pokretač objavljuje. Pokretač pokreće Redis BEZ lozinke, pa vezivanje na `0.0.0.0` daje svakom hostu u vašoj LAN mreži neautentificirani Redis — proširite ovo samo ako i sami postavite lozinku na instanci. |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interfejs na kojem docker-compose objavljuje Redis sidecar (#9286). Compose Redis radi bez `requirepass`; aplikacijski kontejneri mu pristupaju preko compose mreže (`redis:6379`) — objavljeni port postoji samo za alate na strani hosta. `0.0.0.0` izlaže neautentificirani Redis cijeloj LAN mreži. |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | Port hosta za compose Redis sidecar. |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Host interfejs na kojem docker-compose objavljuje vlastite dashboard/API/live-WS portove aplikacije (#12568). Budući da se `REQUIRE_API_KEY=false` isporučuje kao zadana vrijednost u `.env.example`, `0.0.0.0` izlaže anonimni `/v1` LLM proxy cijeloj LAN/WAN mreži — proširite tek kada `REQUIRE_API_KEY=true` ili reverse proxy ispred nameće vlastitu autentifikaciju. |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interfejs na kojem docker-compose objavljuje Qdrant memory sidecar (#12578). Isto obrazloženje o LAN izloženosti kao kod `REDIS_BIND_HOST`. |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interfejs na kojem docker-compose objavljuje Bifrost router sidecar (#12578). Isto obrazloženje o LAN izloženosti kao kod `REDIS_BIND_HOST`. |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Prefiks namespacea koji se primjenjuje na svaki OmniRoute Redis ključ (rate limiter, auth cache, quota store, warmup circuit breaker). Sprječava kolizije ključeva kada se Redis instanca dijeli s drugim aplikacijama (#11042). |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(nije postavljeno — mehanizam onemogućen)_ | `src/lib/api/internalServiceAuth.ts` | Dijeljena tajna za interne REST skokove koji čuvaju identitet (#9260): OmniRoute komponente koje pozivaju druge lokalne OmniRoute rute šalju je kao `x-omniroute-internal-service-token` kako bi se sačuvao identitet originalnog pozivaoca. Poredi se s `timingSafeEqual`. |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(nije postavljeno)_ | `src/lib/api/internalServiceAuth.ts` | Varijanta internog servisnog tokena u vidu tajne datoteke: putanja do datoteke čiji sadržaj bez okolnih praznina predstavlja token. Koristi se samo kada inline varijabla nije postavljena. |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Obogati listu provajdera na kontrolnoj ploči OpenRouter sedmičnim statistikama rangiranja (#9324). Uključeno po zadanim postavkama; postavite na `false` da u potpunosti preskočite pozadinsko dohvaćanje (neblokirajuće, nikad fatalno). |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | TTL keša za snimak OpenRouter statistika provajdera, u milisekundama. |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Redis slika koju koristi 1-click Redis pokretač. Po potrebi zamijenite sa `redis:8-alpine` ili privatnim mirrorom registra. |
| `QDRANT_HOST` | `qdrant` | _(opcijski profil klastera)_ | Naziv hosta Qdrant sidecara kada je `--profile memory` aktivan. Zadano pokazuje na naziv qdrant servisa unutar mreže; zamijenite za eksterno postavljanje. Koristi se samo kada je `qdrantEnabled` postavljeno na `true` u kodu (`src/lib/memory/vectorStore.ts:108`). |
| `QDRANT_PORT` | `6333` | _(opcijski profil klastera)_ | REST port Qdrant sidecara. |
| `QDRANT_GRPC_PORT` | `6334` | _(opcijski profil klastera)_ | gRPC port Qdrant sidecara. Koriste ga klijentske biblioteke koje preferiraju gRPC umjesto REST-a za streaming operacije. |
| `QDRANT_API_KEY` | _(nije postavljeno)_ | _(opcijski profil klastera)_ | Opcijski API ključ za Qdrant Cloud ili autentificiranu on-prem instancu. Prazno → `api-key` zaglavlje se ne šalje. |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(opcijski profil klastera)_ | Naziv kolekcije za embedding-e memorije razgovora u OmniRoute-u. Kreira se pri prvom pokretanju sa `QDRANT_VECTOR_SIZE` dimenzija. |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(opcijski profil klastera)_ | Zadani naziv embedding modela zabilježen u metapodacima Qdrant kolekcije. Stvarne embedding-e generira provajder na koji pokazuje polje `embeddingModel` u OmniRoute postavkama. |
| `QDRANT_VECTOR_SIZE` | `1536` | _(opcioni profil klastera)_ | Dimenzija embedding vektora. Mora odgovarati modelu kojim radite embedding (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). |
| `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(opcioni profil klastera)_ | Tačnost HNSW indeksa tokom izgradnje. Viša vrijednost = sporija izgradnja, brža pretraga. |
| `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Glavni prekidač za rotaciju naloga koju može konfigurisati operator. Kada je `false`, nijedna od klasa `OMNIROUTE_ROTATE_*` navedenih ispod ne pokreće prelazak na rezervni nalog (isključeno glavno stanje također blokira klase 429/500/502 koje su podrazumijevano omogućene). Omogućava nadzornom front-endu (npr. VibeProxy desktop aplikaciji) da preslika vlastita pravila rotacije na backend-ov mehanizam za prelazak na rezervni nalog. |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Period hlađenja (u sekundama) koji se primjenjuje na nalog s ograničenom brzinom kada upstream ne daje eksplicitnu naznaku resetovanja. `0` = koristi podrazumijevani period hlađenja mehanizma umjesto fiksne nadjačane vrijednosti. |
| `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Odraz front-end postavke „ne označavaj kao ograničeno brzinom bez vremena resetovanja“. |
| `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | Omogućavanje fallbacka po statusu za greške `429`. Kada je `false` (i `OMNIROUTE_ROTATION_ENABLED=true`), greška `429` više ne pokreće rotaciju naloga i umjesto toga se vraća klijentu. |
| `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj grešaka `429` unutar `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` potreban prije rotacije naloga. `1` (podrazumijevano) odmah rotira, čuvajući dosadašnje ponašanje. |
| `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni prozor (u sekundama) tokom kojeg se greške `429` računaju prema `OMNIROUTE_ROTATE_429_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | Omogućavanje fallbacka po statusu za `5xx` serverske greške (isključujući `502`, koja ima vlastitu klasu). Kada je `false`, ove greške više ne pokreću rotaciju naloga. |
| `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj `5xx` grešaka unutar `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` potreban prije rotacije naloga. `1` (podrazumijevano) odmah rotira. |
| `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni prozor (u sekundama) tokom kojeg se `5xx` greške broje za prag `OMNIROUTE_ROTATE_500_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | Omogućavanje fallback-a po statusu za `502` (bad gateway) greške. Kada je `false`, `502` greške više ne pokreću rotaciju naloga. |
| `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj `502` grešaka unutar `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` potreban prije nego što se nalog rotira. `1` (zadano) rotira odmah. |
| `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni prozor (u sekundama) tokom kojeg se `502` greške broje za prag `OMNIROUTE_ROTATE_502_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | Opcija po izboru (zadano ISKLJUČENO): kada je `true`, obična `400` (bad request) greška također pokreće rotaciju naloga. Ovo je isključivo aditivno — nikada ne blokira postojeće ponašanje engine-a pri kojem `400` koja nosi tekst o rate-limit/kvoti i dalje uzrokuje prebacivanje bez obzira na ovu zastavicu. |
| `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj `400` grešaka unutar `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` potreban prije nego što se nalog rotira (uzima se u obzir samo kada je `OMNIROUTE_ROTATE_ON_400=true`). |
| `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni prozor (u sekundama) tokom kojeg se `400` greške broje za prag `OMNIROUTE_ROTATE_400_THRESHOLD`. |
### Claude Warmup Scheduler
Zagrijavanje pokretano cron-om za prijavljene Anthropic OAuth konekcije, tako da se 5-satni rate-limit prozor otvara trivijalnim zakazanim zahtjevom umjesto prvim pravim (#8848). Scheduler je isključen osim ako `OMNIROUTE_WARMUP_ENABLED` nije istinita (truthy) **i** konekcija nije označena u `settings.claudeWarmup.connections`; prazna lista konekcija znači da se ništa ne zagrijava čak i kada je env varijabla uključena.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------ | ----------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_WARMUP_ENABLED` | _(nedefinirano → isključeno)_ | `src/lib/warmupScheduler.ts` | Glavni prekidač za planer zagrijavanja. Prihvata `1`/`true`/`yes`/`on` (neosjetljivo na velika/mala slova, bez razmaka na krajevima). Svaka druga vrijednost, ili nedefinirano stanje, ostavlja planer isključenim. |
| `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Cron izraz s pet polja za otkucaj zagrijavanja, koji se evaluira u `America/Los_Angeles` (Anthropicova vremenska zona resetovanja) bez obzira na sat hosta. |
| `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | Koliko se konekcija zagrijava paralelno po otkucaju. Ograničeno na `1`-`10`; ne-numerička vrijednost vraća se na `3`. |
| `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | Model koji se koristi za zahtjev zagrijavanja. Promijenite samo ako zadani nije dostupan na vašem planu; odaberite najjeftiniji model koji i dalje otvara prozor. |
### VNC sesije za prijavu putem preglednika i alias za Data-Dir
Kontejnerizirani Chromium+VNC koji se koristi za interaktivno hvatanje vjerodajnica prijave putem preglednika (`/api/vnc-session`), plus zastarjeli `DATA_DIR` alias. Sve je opcionalno — VNC zadane vrijednosti ciljaju uključenu `omniroute-vnc-chromium:local` sliku i mijenjaju se samo za prilagođenu sliku kontejnera, portove ili podešavanje životnog ciklusa.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Docker tag slike za Chromium+VNC kontejner za prijavu. Izgradite `docker/vnc-browser/chromium` ili usmjerite ovo na prilagođenu sliku. |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Binarni runtime kontejnera koji se koristi za pokretanje VNC kontejnera (npr. postavite na `podman`). |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC/noVNC port izložen unutar kontejnera. |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Chrome DevTools Protocol port unutar kontejnera. |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Putanja direktorija Chromium profila unutar kontejnera. |
| `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | Direktorij na hostu koji sadrži trajno pohranjene profile prijave putem preglednika. |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 min) | `src/lib/vncSession/manifest.ts` | Vremensko ograničenje neaktivnosti (ms) prije nego što se neaktivna VNC sesija ukloni. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 min) | `src/lib/vncSession/manifest.ts` | Stroga granica (ms) trajanja pojedinačne VNC sesije. |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Maksimalan broj istovremenih VNC sesija. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Vremensko ograničenje (ms) čekanja da kontejnerizirani preglednik postane CDP-spreman. |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Vremensko ograničenje (ms) za prikupljanje uhvaćene sesije/kolačića nakon završetka prijave. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | Dodatne zastavice komandne linije proslijeđene kontejneriziranom Chromiumu. |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Namjenska Docker mreža kojoj se pridružuje VNC kontejner za prijavu (#12571) umjesto zadanog mosta, tako da susjedni kontejneri ne mogu doseći njegov CDP bridge port. |
| `VIBEPROXY_DATA_DIR` | _(nedefinirano)_ | `open-sse/services/notionThreadSessions.ts` | **Zastarjeli alias** za `DATA_DIR`, provjerava se tek nakon što i `DATA_DIR` i `OMNIROUTE_DATA_DIR` nisu postavljeni. Locira Notion cache sesije web-niti (`/notion-web-thread-sessions.json`). |
---
## 26. Testni & E2E okvir (Harness)
Koriste ga `scripts/dev/run-next-playwright.mjs`, `scripts/dev/smoke-electron-packaged.mjs`,
`scripts/dev/run-ecosystem-tests.mjs` i `scripts/build/uninstall.mjs`. Ostavite svaku
vrijednost ispod nepostavljenu u produkcijskim implementacijama.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| -------------------------------------- | ------------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | E2E bootstrap režim (`auth`, `fresh`, `reuse`) za Playwright pokretač. |
| `OMNIROUTE_E2E_PASSWORD` | vraća se na `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Administratorska lozinka koja se ubrizgava u Playwright okruženje. |
| `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Onemogući lokalno healthcheck ispitivanje tokom Playwright pokretanja. |
| `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Onemogući petlju healthcheck provjere OAuth tokena tokom testova. |
| `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(nepostavljeno)_ | `src/lib/tokenHealthCheck.ts` | Provajderi odvojeni zarezom isključeni iz proaktivnog osvježavanja tokena (npr. `codex,openai`). Ciljana alternativa potpunom onemogućavanju healthcheck-a — provajderi s kratkim TTL-om nastavljaju osvježavati, dok provajderi u kaskadi ostaju isključivo reaktivni. |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Utišaj healthcheck šum u Playwright stdout-u. |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Preskoči Next.js produkcijsku izradu prije pokretanja Playwrighta (CI optimizacija). |
| `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Preskoči OmniRoute uninstall hook (CI ga koristi kako bi `node_modules` ostao netaknut). |
| `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | Vrijeme čekanja (ms) da server postane ispravan prije pokretanja testova ekosistema/protokola. |
| `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | URL za koji Electron smoke okvir očekuje da ga pakovana aplikacija servira. |
| `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Ukupno vrijeme isteka (ms) prije nego što smoke okvir odustane. |
| `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | Vrijeme stabilizacije (ms) nakon učitavanja stranice. |
| `ELECTRON_SMOKE_APP_EXECUTABLE` | _(automatski)_ | `scripts/dev/smoke-electron-packaged.mjs` | Eksplicitna putanja do pakovane Electron izvršne datoteke. |
| `ELECTRON_SMOKE_DATA_DIR` | _(privremeni direktorij)_ | `scripts/dev/smoke-electron-packaged.mjs` | Direktorij podataka za Electron smoke pokretanje. |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Postavite `1` da se direktorij podataka smoke testa zadrži nakon pokretanja. |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Postavite `1` za strujanje Electron logova na stdout tokom pokretanja. |
| `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: ponovno pokreće aplikaciju nad istim direktorijem podataka i provjerava da drugo pokretanje bira nativni SQLite drajver. |
| `CLI_DEVIN_BIN` | _(pretraga PATH-a)_ | `open-sse/executors/devin-cli.ts` | Zaobilazi putanju binarne datoteke Devin CLI-ja. |
### Pipeline za prevođenje dokumentacije
Koristi ga `scripts/i18n/run-translation.mjs` (komanda `npm run i18n:run`).
Svih šest varijabli su podrazumijevano nepostavljene — postavite ih u `.env` samo na mašinama
koje trebaju moći pokretati prevodilac dokumentacije.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ---------------------------------------- | ----------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_TRANSLATION_API_URL` | _(nepostavljeno)_ | `scripts/i18n/run-translation.mjs` | Osnovni URL kompatibilan s OpenAI-jem za backend prevođenja. |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(nepostavljeno)_ | `scripts/i18n/run-translation.mjs` | Bearer token za backend prevođenja (nikada se ne bilježi). |
| `OMNIROUTE_TRANSLATION_MODEL` | _(nepostavljeno)_ | `scripts/i18n/run-translation.mjs` | ID modela, npr. `gpt-4o-mini` ili `cx/gpt-5.4-mini`. |
| `OMNIROUTE_TRANSLATION_FALLBACK_MODELS` | _(nepostavljeno)_ | `scripts/i18n/lib/translate-backend.mjs` | Opcionalni lanac modela odvojenih zarezom koji se pokušava redom kada primarni model ne uspije (429 kvota, 401/402, 5xx, timeout, mreža); pogrešno formiran zahtjev (400/413/422) ne pokušava se ponovo drugdje. |
| `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Vremensko ograničenje po zahtjevu u milisekundama. |
| `OMNIROUTE_TRANSLATION_REASONING_EFFORT` | _(nepostavljeno)_ | `scripts/i18n/lib/translate-backend.mjs` | Opcionalna kontrola zaključivanja, šalje se neizmijenjena backendu kada je postavljena. |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Paralelni zahtjevi za prevođenje pri radu s više datoteka / lokaliteta. |
---
## 27. Radar izvor (samostalno hostovanje)
Opcionalni dodatak kontrolisan zastavicom funkcionalnosti RADAR_ENABLED (zadano isključena — zastavica
funkcionalnosti koja se prebacuje putem postavki/baze podataka, a ne varijable okruženja; pogledajte
[docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)).
Prve četiri varijable u nastavku predstavljaju opcionalna nadjačavanja za samostalno hostovan ili račvan izvor i
tokove ključeva za podržavaoce. Peta, `RADAR_ADMIN_URL`, zasebna je veza bez zadane vrijednosti do vlasnikovog
privatnog panela za operacije. Za potpunu dokumentaciju modula i njegov
[slijed aktivacije od početka do kraja i vođenog postavljanja](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup) pogledajte [docs/frameworks/RADAR.md](../frameworks/RADAR.md).
Generički čitač objava na Početnoj stranici/Dnevniku izmjena nije konfigurisan varijablom
okruženja i ne zavisi od zastavice funkcionalnosti RADAR_ENABLED. On čita URL javnog repozitorija
`news.json`, deklarisan u `src/shared/utils/releaseNotes.ts`, isključivo putem
GET zahtjeva; ID-ovi odbačenih objava ostaju u lokalnoj pohrani preglednika.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | Osnovni URL koji zajednički koriste zasebno potpisani izvori kataloga, preporuka, ponuda za podržavaoce i Intel podataka. Nadjačajte ga kako bi upućivao na samostalno hostovanu ili račvanu uslugu. |
| `RADAR_FEED_PUBKEY` | _(fiksirani zadani ključ)_ | `src/lib/radar/pinnedKeys.ts` | Ed25519 javni ključ (base64-DER SPKI ili PEM) koji se koristi za provjeru potpisa prilagođenog izvora. |
| `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | URL koji otvara dugme „Ja sam doprinosilac” na kontrolnoj ploči (tok preuzimanja ključa za podržavaoce putem GitHub OAuth-a). |
| `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | URL koji otvara dugme „Podržite projekat” na kontrolnoj ploči (stranica za plaćanje/planove). |
| `RADAR_ADMIN_URL` | _(nije postavljeno)_ | `src/lib/radar/links.ts` | Veza do privatnog panela za operacije namijenjena samo vlasniku. HTTPS je obavezan, osim za HTTP povratno SSH prosljeđivanje; ako vrijednost nije postavljena ili nije važeća, navigacijska stavka se ne kreira. |
---
## Revizija: uklonjene / neaktivne varijable
Sljedeće varijable pojavljivale su se u prethodnim verzijama datoteke `.env.example`, ali **nemaju reference tokom izvršavanja** u trenutnoj bazi koda. Uklonjene su:
| Varijabla | Razlog |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `STORAGE_DRIVER=sqlite` | Ne čita je nijedna izvorna datoteka. SQLite je jedini podržani upravljački program — odabir nije potreban. |
| `INSTANCE_NAME=omniroute` | Prisutna je u staroj dokumentaciji/predlošcima okruženja, ali se ne koristi tokom izvršavanja. Možda će se vratiti u budućoj funkcionalnosti za više instanci. |
| `SQLITE_MAX_SIZE_MB=2048` | Ne koristi se u izvornom kodu. Veličina baze podataka nije vještački ograničena. |
| `SQLITE_CLEAN_LEGACY_FILES=true` | Ne koristi se u izvornom kodu. Čišćenje zastarjelih datoteka vjerovatno je uklonjeno. |
| `CLI_ROO_BIN` | Nije registrirana u `src/shared/services/cliRuntime.ts`. |
| `CLI_KIMI_CODING_BIN` | Nije registrirana u `src/shared/services/cliRuntime.ts` (Kimi Coding koristi OAuth, a ne CLI binarnu datoteku). |
| `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | Ne koriste se nigdje u izvornom kodu. |
| `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` | Uklonjene su u v3.8.0. Izvršno okruženje više ne čita ove varijable okruženja — vjerodajnice dolaze iz Dashboarda / `data/provider-credentials.json` / šifrirane baze podataka. |
| `CURSOR_PROTOBUF_DEBUG` | Uklonjena je u v3.8.0. Cursor izvršitelj koristi `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (pogledajte §22). |
| `CLI_COMPAT_KIRO` | Uklonjena je u v3.8.0. Kiro se nalazi u `CLI_COMPAT_OMITTED_PROVIDER_IDS` — njegovo uključivanje ili isključivanje nema efekta. |
| `QIANFAN_API_KEY` | Uklonjena je zajedno s drugim nekorištenim zamjenskim API ključevima pružalaca usluga u v3.8.0. |
### Ispravke zadanih vrijednosti
| Varijabla | Stara vrijednost u `.env.example` | Stvarna zadana vrijednost u kodu | Ispravljeno |
| ------------------------- | --------------------------------- | -------------------------------- | ----------------------------------------------------------------- |
| `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Uklonjena obmanjujuća vrijednost; `7` dokumentirano kao zadano |
| `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Uklonjena obmanjujuća vrijednost; `7` dokumentirano kao zadano |
### Ponovno generiranje OpenCode konfiguracije (ad hoc alati)
Koristi ih `scripts/ad-hoc/regen-opencode-config.ts` za ponovno generiranje datoteke `opencode.json`
s tačnim vrijednostima `limit.context` i `limit.output` preuzetim iz pokrenute
OmniRoute instance. Nijedna od njih nije potrebna za uobičajeni rad — skripta
služi isključivo kao razvojni alat.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------ | ------------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | Osnovni URL instance OmniRoute koja se upituje za `/v1/models`. |
| `OMNIROUTE_KEY` | _(nije postavljeno)_ | `scripts/ad-hoc/regen-opencode-config.ts` | API ključ za autentifikaciju prema OmniRoute krajnjoj tački `/v1/models`. Ako nije postavljen, koristi se `OPENCODE_API_KEY`. |
| `OPENCODE_API_KEY` | _(nije postavljeno)_ | `scripts/ad-hoc/regen-opencode-config.ts` | API ključ u OpenCode stilu (`sk-...`) koji se upisuje u regenerisani `opencode.json`. Ako nije postavljen, koristi se `OMNIROUTE_KEY`. |
### Okruženje za vanmrežnu evaluaciju kompresije (ad hoc alati)
Koristi ga `scripts/compression-eval/index.ts`, CLI za vanmrežnu evaluaciju kompresije.
Nije potrebno za uobičajeni rad — namijenjeno je samo programerskim alatima.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------- | ----------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (prazno) | `scripts/compression-eval/index.ts` | JSON vjerodajnice koje daje operater za pružaoca usluga kojeg koristi CLI za vanmrežnu evaluaciju kompresije (raščlanjuju se pomoću `JSON.parse`). Ostavite nepostavljeno za probno pokretanje. |
### VNC sesije preglednika
Koristi ih `src/lib/vncSession/manifest.ts` za konfiguraciju sesija Chromiuma bez grafičkog interfejsa zasnovanih na Dockeru za pružaoce usluga automatizacije preglednika. Sve su neobavezne — zadane vrijednosti prikazane su u nastavku.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------- | ------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Putanja do Docker izvršne datoteke koja se koristi za pokretanje VNC kontejnera. |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Docker slika za VNC Chromium kontejner. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(ugrađene zastavice)_ | `src/lib/vncSession/manifest.ts` | Dodatni Chromium CLI argumenti koji se prosljeđuju pregledniku unutar kontejnera. |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC port unutar kontejnera. |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Port protokola Chrome DevTools unutar kontejnera. |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Direktorij profila unutar kontejnera. |
| `OMNIROUTE_VNC_PROFILE_DIR` | _(nije postavljeno)_ | `src/lib/vncSession/manifest.ts` | Direktorij na strani domaćina za trajne profile preglednika. |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | Vrijeme neaktivnosti (ms) nakon kojeg se VNC sesija prikuplja. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | Maksimalno trajanje sesije (ms). |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Maksimalan broj istovremenih VNC sesija. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Vremensko ograničenje za spremnost preglednika (ms). |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Vremensko ograničenje za prikupljanje/čišćenje (ms). |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Namjenska Docker mreža kojoj se kontejner pridružuje (#12571), odvojena od zadanog mrežnog mosta. |
| `VIBEPROXY_DATA_DIR` | _(nije postavljeno)_ | `open-sse/services/notionThreadSessions.ts` | Direktorij za trajnu pohranu sesija Notion niti. |
### Autentifikacija internih usluga
| Varijabla | Zadana vrijednost | Opis |
| --------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | Direktno navedeni token za autentifikaciju između usluga upravljačkog sloja. |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | Putanja do datoteke koja sadrži token interne usluge (preporučuje se u kontejnerima; nadjačava direktno navedenu varijablu). |
### Statistika pružalaca usluga OpenRouter
| Varijabla | Zadana vrijednost | Opis |
| ----------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | Postavite na `false` kako biste preskočili dohvaćanje statistike OpenRoutera po pružaocu usluga radi obogaćivanja kataloga. |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | TTL predmemorije (ms) za dohvaćenu statistiku pružalaca usluga OpenRouter. |
### Ugrađeno Redis povezivanje
| Varijabla | Zadana vrijednost | Opis |
| --------------------------- | ----------------- | ------------------------------------------------------------------------------------ |
| `REDIS_BIND_HOST` | `127.0.0.1` | Adresa povezivanja za ugrađeni Redis servis. |
| `REDIS_PORT` | `6379` | Port za ugrađeni Redis servis. |
| `OMNIROUTE_REDIS_BIND_HOST` | – | Zamjenska vrijednost specifična za OmniRoute za adresu povezivanja ugrađenog Redisa. |
---
## 24. Dodaci u izdanju v3.8.50
Ove postavke uvedene su nakon prethodnog snimka ugovora okruženja.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Maksimalno čekanje na slot za prijem teških chat zahtjeva prije `503` odgovora koji se može ponoviti; kratko ograničeno čekanje serijalizira nalete agenata umjesto trenutnog `503`. `0` vraća trenutno odbijanje. |
| `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Budžet bajtova u redu čekanja za čekanje na prijem: ograničava ukupne baferisane bajtove tijela zahtjeva parkirane u cijelom procesu kako čekanje ne bi moglo povećati heap (#4380). Čekanja koja prelaze budžet odmah dobijaju `503` koji se može ponoviti. |
| `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | Zastarjelo, bez efekta od #10110: trake za prijem po sesiji uklonjene su u korist jednog budžeta za cijeli proces. Prihvaća se radi kompatibilnosti konfiguracije; ignorira se. |
| `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Zastarjelo, bez efekta od #10110: trake za prijem po sesiji uklonjene su u korist jednog budžeta za cijeli proces. Prihvaća se radi kompatibilnosti konfiguracije; ignorira se. |
| `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (isključeno) | `open-sse/services/admission/runtime.ts` | Adaptivne virtualne trake za prijem u runtime-u (#9654): glavni prekidač za adaptivnu kapiju po tenantu (sistem 2). Razlikuje se od zastarjelih varijabli traka po konekciji iznad (TTL_MS / MAX_SESSIONS, bez efekta od #10110). Zastavica funkcije na nadzornoj ploči istog naziva; varijabla okruženja ima prednost nad zaobilaženjem s nadzorne ploče; zahtijeva ponovno pokretanje. |
| `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | Ograničava koliko dugo poziv run-now čeka na posao u toku prije pokretanja posla iz reda čekanja. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Održava svježim IMS i stanje rizika preglednika kroz Chrome CDP sesije vezane za račun; postavite `0` za onemogućavanje. |
| `ADOBE_FIREFLY_SESSION_DISK` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Trajno čuva popravljene Adobe sesije pod `DATA_DIR`; postavite `0` za stanje samo u memoriji. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Minimalni razmak između slanja generate zahtjeva Adobe Firefly. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Dodatni period tišine nakon svakog trećeg uspješnog slanja Adobe. |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Pravi headless režim samo za otklanjanje grešaka; Adobe colligo obično odbija rezultirajuću sesiju rizika. |
| `CHROME_PATH` | automatska detekcija | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Opcionalna apsolutna putanja do Chrome izvršne datoteke koju koriste izvršioci vođeni preglednikom kada automatska detekcija platforme nije dovoljna. |
| `TELEGRAM_BOT_TOKEN` | _(nije postavljeno)_ | `src/lib/telegram/config.ts` | BotFather token koji omogućava dolazni webhook i potpisuje Mini App `initData`. |
| `TELEGRAM_WEBHOOK_SECRET` | _(nije postavljeno)_ | `src/lib/telegram/config.ts` | Dijeljena tajna registrovana putem `setWebhook` i provjeravana u odnosu na zaglavlje `X-Telegram-Bot-Api-Secret-Token` pri svakoj webhook isporuci. Obavezna za webhook putanju; ako nije postavljena, webhook isporuke se odbijaju sa 503. |
| `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Model koji se koristi za Telegram chat odgovore. |
| `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Zaobilaženje osnovnog URL-a Bot API-ja za proxy-je ili samohostovane Bot API servere. |
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Vremensko ograničenje u milisekundama za odlazne Bot API pozive. |
| `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (omogućeno) | `scripts/build/optionalPackStaging.mjs` | Postavite `0` da preskočite emitiranje `.tar.gz` arhiva prilikom pripreme opcionalnih ML/browser paketa za Electron standalone stablo (direktoriji paketa i `optional-packs.index.json` se i dalje proizvode). Koristi se u desktop workflow-u izdanja za smanjenje veličine učitavanja artefakata. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Omogućava registraciju xAI pretplatničkih ruta za slike; zadano onemogućeno kako bi putanja slika s API ključem ostala nepromijenjena. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Hlađenje po ključu u milisekundama kada `429` odgovor nema upotrebljivu `Retry-After` naznaku. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | omogućeno | `open-sse/services/estimatorCalibration.ts` | Postavite na `off`, `0` ili `false` da onemogućite snimanje i primjenu kalibracije estimatora u memoriji. |
| `NEXT_MANUAL_SIG_HANDLE` | _(interno)_ | `scripts/dev/standalone-server-ws.mjs` | Interno zaobilaženje rukovaoca signalima standalone servera; obično ga postavlja i uklanja pokretač, a ne konfigurišu operatori. |
### ChatGPT Web (Codex)
Globalne zadane vrijednosti za headless preglednik i odlazni tunel alata. Vrijednosti konekcije postavljene na nadzornoj ploči imaju prednost.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| --------------------------------------- | --------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(automatsko otkrivanje)_ | `open-sse/executors/chatgpt-web-codex.ts` | Eksplicitna Chrome-/Chromium-putanja za rad pod npm-, systemd- i PM2-om. |
| `CHROME_PATH` | _(automatsko otkrivanje)_ | `open-sse/executors/chatgpt-web-codex.ts` | Zajednička rezervna opcija za eksplicitnu Chrome-/Chromium-putanju. |
| `CHATGPT_WEB_CODEX_CDP_URL` | _(nije postavljeno)_ | `open-sse/executors/chatgpt-web-codex.ts` | Interna CDP-krajnja tačka; Docker koristi sidecar na portu `9223`. |
| `CHATGPT_WEB_CODEX_USE_CDP_PROFILE` | _(nije postavljeno — isključeno)_ | `open-sse/vendor/codex-chatgpt-web/persistent-cdp-context.ts` | Postavite na `1` (uz konfigurisanu CDP-krajnju tačku) da biste ponovo iskoristili postojeću ChatGPT stranicu eksterno upravljanog, prijavljenog profila preglednika umjesto izoliranog konteksta po svakom krugu; također ograničava istovremene ChatGPT tabove na 1. Po zadanom isključeno. Pogledajte [trajni CDP profil](../guides/CHATGPT-WEB-PERSISTENT-CDP.md). |
| `CDP_PROXY_TOKEN` | _(nije postavljeno)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Ako je postavljen, svaki zahtjev prema CDP-proxy-sidecaru mora sadržavati ovu vrijednost u zaglavlju `X-Omni-Cdp-Token` (#13679). Bez vrijednosti proxy prosljeđuje neautentificirano — tada štiti samo mrežna izolacija Compose-mreže `chatgpt-web-codex-net`. Generišite pomoću `openssl rand -hex 32`. |
| `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(nije postavljeno)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globalni OpenAI ID tunela za lokalne krugove Codex alata. |
| `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(nije postavljeno)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globalni runtime ključ tunela; nikada ga ne ispisujte u logove. |
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | Tačan naziv novostvorenog ChatGPT prilagođenog konektora za MCP-most. |
| `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | Namjenski direktorij za stanje preglednika, brokera i tunela. |
| `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | Pri `1` se dijagnostičke snimke preglednika bilježe na svakoj kontrolnoj tački. |
| `CODEX_CHATGPT_WEB_LAUNCHER` | _(nije postavljeno)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Opcionalna apsolutna putanja do trajne izvršne datoteke launchera. |
| `CODEX_CHATGPT_WEB_BUN` | _(automatsko otkrivanje)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Opcionalna apsolutna putanja do izvršne datoteke Bun runtimea. |
| `CODEX_WEB_GPT_BUN` | _(nije postavljeno)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Zastarjela rezervna opcija za `CODEX_CHATGPT_WEB_BUN`; nove instalacije koriste kanonski naziv. |
---
## OmniConductor Bridge
Dugotrajni SSE konzument koji preslikava zadatke OmniConductor huba u lokalni A2A TaskManager (`src/lib/conductor/`). Opcionalno — most se pokreće samo kada je postavljen `CONDUCTOR_HUB_URL`. Samo na serverskoj strani: token huba nikada ne smije doći do preglednika.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------ | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `CONDUCTOR_HUB_URL` | _(prazno)_ | `src/lib/conductor/boot.ts` | Osnovni URL OmniConductor huba (npr. `http://127.0.0.1:7910`). Nepostavljeno = most onemogućen. |
| `CONDUCTOR_HUB_TOKEN` | _(prazno)_ | `src/lib/conductor/boot.ts` | Kredencijal huba za SSE feed — emitujte `spokesperson`-vrstu peera na hubu (`POST /v1/peers`, admin). |
| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(prazno)_ | `src/lib/conductor/hubProxy.ts` | Kredencijal za dolaznu A2A→hub delegaciju zadataka (`POST /v1/tasks`); kada nije postavljen, koristi se `CONDUCTOR_HUB_TOKEN`. |
| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Osnovni URL spokesperson (Faro) servisa iza proxyja chata na kontrolnoj ploči (`/api/conductor/ask`). |
### Zakazivanje svjesno kvota
Koriste ga `open-sse/services/combo.ts` i `src/lib/quota/quotaScheduler.ts` za provjere budžeta tokena prije zahtjeva. Opcionalno — zadano ponašanje usmjeravanja ostaje nepromijenjeno kada nije postavljeno.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ---------------------------------- | ------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Kada je `1`, preskače konekcije čiji budžet tokena po prozoru (`rateLimitOverrides.tpm`, tabela `provider_quota_state`) ne može pokriti procijenjeni trošak zahtjeva prije slanja. Fail-open kada budžet nije konfigurisan. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(uključeno)_ | `open-sse/services/estimatorCalibration.ts` | Povratna kalibracija estimatora tokena context-guarda (#14931): po (provider, model, prisutni alati) EMA omjera `usage.prompt_tokens` / procjene, ograničeno na 0.15–2.0, samo u memoriji. `off`, `0` ili `false` onemogućuje bilježenje i primjenu. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Registruje rute slika `xai-oauth` (`xao`) i `grok-cli`. Feature flag kontrolne ploče istog naziva; DB nadjačavanje ima prednost nad ovom vrijednošću. |