# 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 s **Da** automatski se generišu pri prvom pokretanju (`JWT_SECRET`, `API_KEY_SECRET`) i pohranjuju u `server.env` u direktoriju podataka — postavite ih izričito kada je taj direktorij privremen (ephemeral). Izuzetak je `OMNIROUTE_WS_BRIDGE_SECRET`: ona se ne pohranjuje u `server.env` — ulazne točke servera (entrypoints) generišu privremenu vrijednost po pokretanju koju može koristiti samo most unutar samog procesa, pa je vanjski klijenti mosta moraju postaviti izričito.
| Varijabla | Obavezna | Zadano | Izvorna datoteka | Opis |
| ---------------------------- | ------------------- | ------------------------------------ | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `JWT_SECRET` | **Da** | _(nema)_ | `src/lib/auth` | Potpisuje/provjerava sve kolačiće sesije kontrolne ploče (JWT). Generišite 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 bazi. Generišite pomoću `openssl rand -hex 32`. |
| `INITIAL_PASSWORD` | Ne | _(nije postavljeno)_ | `src/lib/auth/managementPassword.ts` | Postavlja lozinku kontrolne ploče pri pokretanju dok još nijedna lozinka nije sačuvana; zanemaruje se nakon što se lozinka sačuva. npm instalacije i instalacije iz izvornog koda kopiraju `.env.example` u `.env`, pa počinju s njegovim javno poznatim rezervnim mjestom `CHANGEME`: zamijenite ga prije prvog pokretanja ili postavite `INITIAL_PASSWORD=` (prazno) u tom `.env` da biste lozinku kreirali u čarobnjaku za početno postavljanje pri prvoj posjeti, kao što to čini i nepostavljena vrijednost (zadana u Docker slici). Sačuvanu lozinku mijenjajte u Kontrolna ploča → Postavke → Sigurnost, ili pokrenite `omniroute reset-password` (`node bin/reset-password.mjs` u izvornom checkoutu) 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 WebSocket most Codex Responses. Autentificira zahtjeve mosta između Electron/browser WS releja i OmniRoutea. ⚠️ **OBAVEZNO u produkciji — kada nije postavljena, svi zahtjevi WS mosta se odbijaju.** Generišite pomoću `openssl rand -base64 32`. |
| `OMNIROUTE_SW_BUILD_ID` | Ne | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Eksplicitni identifikator za poništavanje keša servisnog radnika 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 sistemi za izgradnju (npr. u stilu Herokua) kao implementirani commit. |
| `NEXT_PUBLIC_SW_BUILD_ID` | Ne | _(izvedeno)_ | `src/shared/components/PwaRegister.tsx` | Javna vrijednost u vrijeme izgradnje koju klijent koristi za registraciju `/sw.js?v=…`; izvodi se iz prethodne dvije vrijednosti, a zatim iz git SHA vrijednosti. |
| `OMNIROUTE_PEER_STAMP_TOKEN` | Ne (automatski) | _(automatski pri svakom pokretanju)_ | `src/server/authz/policies/management.ts` | Tajna po procesu koja dokazuje da je oznaka pouzdane IP adrese ravnopravnog uređaja došla s OmniRouteovog vlastitog HTTP servera (`scripts/dev/peer-stamp.mjs`). Authz međuprogram vjeruje lokalnosti zahtjeva (ograničavanje LOCAL_ONLY ruta na loopback/LAN) samo kada oznaka sadrži ovaj token. Automatski se generiše pri svakom pokretanju — ostavite je nepostavljenom; fiksirajte je samo za konfiguracije s više procesa koje moraju dijeliti oznaku. |
| `OMNIROUTE_TRUSTED_PROXIES` | Ne | _(nije postavljeno)_ | `scripts/dev/peer-stamp.mjs` | IP adrese ili CIDR rasponi reverznih proxyja, odvojeni zarezima, čijim vrijednostima `X-Forwarded-For` / `X-Real-IP` lista dozvoljenih/zabranjenih IP adresa može vjerovati, pored loopback adresa, adresa privatne mreže i Cloudflare rubnih čvorova, koji su uvijek pouzdani. Potrebno je samo za proxy na bilo kojoj drugoj javnoj adresi; u suprotnom se procjenjuje vlastita adresa tog proxyja. |
### Naredbe za generisanje
```bash
# Generišite 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 nemojte predavati `.env` datoteke sa stvarnim tajnama u sistem za kontrolu verzija. `.gitignore` već isključuje `.env`, ali to provjerite prije slanja promjena.
---
## 2. Pohrana i baza podataka
OmniRoute koristi **SQLite** (putem `better-sqlite3`) za svu trajnu pohranu. Ove varijable kontroliraju lokaciju podataka, šifriranje i životni ciklus.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Korijenski direktorij za SQLite bazu podataka, sigurnosne kopije i podatkovne datoteke. Promijenite za Docker volumene ili prilagođene putanje. |
| `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(nije postavljeno)_ | `src/lib/dataPaths.ts` | Zaobilazno rješenje za zaštitu DATA_DIR tokom testiranja/evaluacije (#10428). Testovi i Node eval/print provjere (`-e`/`--eval`/`-p`/`--print`, uključujući oblike `--eval=`/`--print=`) bez `DATA_DIR` preusmjeravaju se u privremeni direktorij za jednokratnu upotrebu kako ne bi mogli otvoriti stvarnu bazu podataka operatera; postavite na `1` da biste ponovo omogućili korištenje stvarnog direktorija. |
| `OMNIROUTE_BUILD_SHA` | _(nije postavljeno)_ | `src/lib/monitoring/buildSha.ts` | Git SHA pokrenutog artefakta. Utiskuje ga `npm run build:release`; može se ubaciti u kontejnere koji se isporučuju bez kontrolne datoteke `dist/BUILD_SHA`. Prikazuje se kao `system.buildSha` na `/api/monitoring/health`. |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Referenca prema kojoj provjera porijekla pakovanog artefakta provjerava SHA verzije (#10427). |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(nije postavljeno)_ | `scripts/build/buildProvenance.ts` | Postavite na `1` da biste dozvolili pakovanje verzije čiji SHA nije na liniji izdanja, pri čemu se ona evidentira kao namjenska canary verzija umjesto da provjera ne uspije (#10427). |
| `OMNIROUTE_SMOKE_API_KEY` | _(nije postavljeno)_ | `scripts/ops/deploy-canary.mjs` | API ključ za smoke provjeru canary implementacije, poslan kao `Authorization: Bearer` na `/v1/chat/completions`. Koristi ga samo skripta za implementaciju (#10429), nikada server. Nije povezan s varijablama `OMNIROUTE_SMOKE_*` smoke okruženja CLI-ja koje se uključuje po izboru (`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 faze izgradnje (#10060): `scripts/build/build-next-isolated.mjs` ga postavlja na `1`, a nasljeđuje ga svaki pokrenuti radni proces izgradnje kako bi sloj baze podataka vratio neoperativni zamjenski objekt umjesto učitavanja izvornog dodatka better-sqlite3 (koji prekida radni proces pri izlasku). Nikada se ne postavlja za pokrenuti server. |
| `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Postavite na `1` da biste preskočili opcionalnu provjeru unaprijed izgrađenih izvornih zavisnosti za neuobičajena uključena stabla. Time se zavisnost koja nedostaje ne može učiniti izgradivom; koristite samo kada se izvorne zavisnosti isporučuju izvan standardnog procesa. |
| `OMNIROUTE_DATA_DIR` | _(nije postavljeno)_ | `open-sse/executors/promptql/threadSticky.ts` | **Rezervni alias** za `DATA_DIR`, koji se provjerava samo kada `DATA_DIR` nije postavljen. Koristi se za pronalaženje diskovne predmemorije trajnih sesija niti PromptQL izvršioca (`
/promptql-thread-sessions.json`); ako nijedna varijabla nije postavljena, predmemorija ostaje samo u memoriji (ne zadržava se nakon ponovnog pokretanja). |
| `OMNIROUTE_PLUGINS_DIR` | _(nije postavljeno)_ | `src/lib/plugins/scanner.ts` | Direktorij koji čita **skener dodataka tokom izvršavanja** — i korijenski direktorij u koji upravitelj dodataka instalira — čime se nadjačava zadana vrijednost izvedena iz početnog direktorija (#11827). Usmjerite ga na bind-montirano stablo dodataka u Dockeru/K8s-u umjesto premještanja HOME samo radi promjene lokacije putanje skeniranja (HOME također upravlja svim drugim ponašanjima vezanim za početni direktorij). Nije postavljeno = `~/.omniroute/plugins`, ili `/tmp/.omniroute/plugins` kada proces uopće ne izvozi početni direktorij — čime se uklanja tiho neotkrivanje. Razriješeni direktorij evidentira se jednom pri pokretanju kao `scanner.dir_resolved`, zajedno s ulaznom vrijednošću koja je imala prednost. Samo na strani servera: dodaci CLI komandi zadržavaju vlastiti `OMNIROUTE_PLUGIN_PATH` (odjeljak 9). |
| `STORAGE_ENCRYPTION_KEY` | _(prazno = onemogućeno)_ | `src/lib/db/encryption.ts` | AES ključ za potpunu enkripciju SQLite baze podataka u mirovanju. Generišite pomoću `openssl rand -hex 32`. |
| `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | Oznaka verzije ključa za enkripciju. Povećajte je prilikom rotacije ključa kako biste podržali dešifriranje starih sigurnosnih kopija. |
| `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | Kada je `true`, preskaču se rutinske SQLite sigurnosne kopije datoteka i one prije upisivanja (čuvanje/brisanje cijena za models.dev, upisivanje postavki). Ručne sigurnosne kopije i one prije vraćanja i dalje se izvršavaju. Ovo **ne** onemogućava obavezni trajni sigurnosni snimak pokretača migracija niti zaštitu od masovne migracije za postojeću trajnu bazu podataka. Sigurnosne kopije koje nisu ručne ograničene su na najviše jednu svakih 60 minuta. **Postavke → Pohrana** na kontrolnoj ploči mogu zasebno onemogućiti rutinsko automatsko pravljenje sigurnosnih kopija. |
| `OMNIROUTE_CRYPT_KEY` | _(nije postavljeno)_ | `src/lib/db/encryption.ts` | **Naslijeđeni pseudonim** za `STORAGE_ENCRYPTION_KEY`. Prihvaća se kao rezervna opcija kada primarna varijabla nije prisutna. |
| `OMNIROUTE_API_KEY_BASE64` | _(nije postavljeno)_ | `src/lib/db/encryption.ts` | **Naslijeđeni pseudonim** (oblik kodiran u Base64) koji se prihvaća kao rezervna opcija. Automatski se dekodira prije upotrebe. |
| `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(nije postavljeno)_ | `src/lib/db/core.ts` | Nadjačava interval periodične provjere ispravnosti SQLitea (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 aktivni `wal_checkpoint(TRUNCATE)` može učiniti dijeljeno mapiranje wal-indexa nevažećim i srušiti proces signalom SIGBUS (#13973), pa planer više ne postoji. Varijabla nema efekta: pozitivna vrijednost bilježi jednokratno upozorenje o zastarjelosti, dok `0` ili nepostavljena vrijednost ne proizvode poruku. WAL se održava pomoću PASSIVE kontrolnih tačaka (ispod), a skraćuje se kontrolnom tačkom pri gašenju. |
| `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 min) | `src/lib/db/walMaintenance.ts` | Nadjačava učestali interval za `wal_checkpoint(PASSIVE)` (ms). Održava broj WAL okvira na čekanju malim kako bi kontrolne tačke ostale brze, a WAL datoteka ograničene veličine između skraćivanja pri gašenju. `0` onemogućava. |
| `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Kada PASSIVE ciklus utvrdi da je WAL datoteka veća od ove vrijednosti, pokreće `wal_checkpoint(RESTART)` kako bi WAL počeo ispočetka bez ponovnog zapisivanja mapiranog wal-indexa. Aktivne kontrolne tačke u načinu skraćivanja su uklonjene (pogledajte red `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). |
| `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Postavite na `1`/`true`/`yes`/`on` kako bi se proces završio nakon što kritično opterećenje resursa potraje tokom perioda `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, omogućavajući nadzorniku (systemd `Restart=always`, Docker politika ponovnog pokretanja) da pokrene čist proces umjesto da neograničeno vraća odgovore 503. |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 min) | `open-sse/utils/resourcePressure.ts` | Koliko dugo kritično opterećenje mora trajati prije nego što se aktivira izlaz radi samostalnog ponovnog pokretanja. |
| `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Postavite na `1`/`true`/`yes`/`on` kako biste zanemarili sistemski `/proc/pressure/memory` (`psi_some` / `psi_full`) kada bučni susjed uzrokuje odgovore 503 iako ovaj proces radi normalno (#13124). Zaštite za cgroup i V8 heap ostaju uključene. PSI također prestaje važiti kao dokaz ograničavanja kernela za `cgroup_high`: ukupna vrijednost cgroupa iznad `memory.high` tada postaje kritična samo pri povećanju `high`/`max` u `memory.events`. Bez `memory.events` zadržava se neobrađeni omjer. |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(automatsko otkrivanje)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Eksplicitna putanja (apsolutna ili relativna u odnosu na cwd) do `sql-wasm.wasm` pri korištenju rezervnog WASM adaptera `sql.js`. Kada nije postavljeno, automatski se otkriva putem zavisnosti paketa i mogućih rasporeda. |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Broj dana tokom kojih se kontrolne tačke završenog (uspješno/neuspješno/otkazano/isteklo) Batch API zadatka, referencirane ulazne/izlazne datoteke i datoteke grešaka te pripadajući red čuvaju prije brisanja u automatskom čišćenju. Stupa na snagu tek kada se uključi `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`; odgovara OpenAI-jevom periodu čuvanja izlaznih podataka Batch API-ja. Ne utječe na rutu `DELETE /api/v1/batches/delete-completed` koju pokreće operater i koja po dizajnu ostaje bezuslovna (bez filtera starosti). |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Kada je `true`, omogućava automatskom čišćenju da izbriše završene Batch API zadatke (i njihove kontrolne tačke) starije od `OMNIROUTE_BATCH_RETENTION_DAYS` te očisti BLOB sadržaj učitanih datoteka nakon njihovog `expires_at`. Podrazumijevano je isključeno: svaka postojeća instalacija zadržava ove podatke tačno kao i ranije dok operater ne omogući ovu opciju. Također je zastavica funkcionalnosti koja se može uređivati putem kontrolne ploče — pogledajte `docs/reference/FEATURE_FLAGS.md` → Izvršavanje. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Postavite na `1` da biste u potpunosti preskočili provjeru stanja baze podataka pri pokretanju. Korisno za kratkotrajne zadatke i integracijske testove. |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Postavite na `1` da biste prisilno uključili petlju provjere stanja baze podataka, čak i kada bi se ona inače preskočila (npr. za kratkotrajne zadatke). |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Postavite na `1` da biste preskočili pripremu nativnog izvršnog okruženja tokom `npm install`. Korisno u CI instalacijama ili instalacijama bez grafičkog interfejsa gdje je sqlite već izgrađen. |
| `OMNIROUTE_MIGRATIONS_DIR` | _(automatsko otkrivanje)_ | `src/lib/db/migrationRunner.ts` | Nadjačava direktorij koji izvršitelj migracija skenira. Korisno pri isporuci objedinjeno pakovanih migracija u prilagođenim verzijama. |
| `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(nije postavljeno)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Dodatni direktoriji migracija kao unosi `namespace=dir`, odvojeni razdjelnikom putanja platforme (npr. `ee=/opt/app/enterprise/db/migrations`). Datoteke pronađene u njima evidentiraju se kao `-`, tako da distribucija koja isporučuje vlastite migracije nikada nije u koliziji s numeričkim pozicijama uzvodnog projekta. Neispravno oblikovan unos, nevažeći prostor imena ili nepostojeći direktorij izaziva grešku pri pokretanju umjesto tihog preskakanja sheme. |
| `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Sigurnosni prag za veliki broj migracija na čekanju (#3416). Pokretanje se prekida ako je na postojećoj bazi podataka na čekanju više migracija od ovog broja (zaštita od obrisane tabele za praćenje). Povećajte vrijednost radi vraćanja starije sigurnosne kopije; postavite na `0` da biste onemogućili provjeru. |
| `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Radni direktorij za kontrolnu tačku izdanja `check:install-upgrade`. Potrebno mu je približno 12 GB (dva instalacijska stabla od po ~3 GB i tarball), pa se ne smije pokretati na malom tmpfs-u — na samostalno hostiranom izvršitelju `/tmp` je tmpfs od 12 GB u RAM-u, a kontrolna tačka ga je iscrpila i skratila paket. |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(podrazumijevano u kodu)_ | `src/lib/spend/batchWriter.ts` | Interval pražnjenja (ms) za paketni zapisivač potrošnje/troškova. Niže vrijednosti smanjuju objedinjavanje upisa; više vrijednosti smanjuju opterećenje baze podataka. |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(podrazumijevano u kodu)_ | `src/lib/spend/batchWriter.ts` | Maksimalan broj baferovanih unosa potrošnje prije prisilnog pražnjenja. Povećajte za implementacije s velikim QPS-om; smanjite kada je ograničena potrošnja memorije važnija. |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(nije postavljeno)_ | `open-sse/utils/proxyFetch.ts` | Postavite na `"true"` da biste ispisivali `[ProxyFetch]` zapisnike za otklanjanje grešaka na Vercel relejnoj putanji. Podrazumijevano je isključeno kako bi se izbjeglo otkrivanje naznaka usmjeravanja. |
| `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(nije postavljeno)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Apsolutna putanja lokalne izvršne datoteke jezgre proxyja (datoteka nazvana `sing-box`) koja provjerava generiranu konfiguraciju jezgre prije nego što ona zamijeni preuzetu datoteku. Ako nije postavljeno, samo se zapisuje `.generated` pored preuzete datoteke. Samo za okruženje hosta: nikada se ne pohranjuje u bazu podataka niti prihvata putem API-ja za upravljanje jer se izvršna datoteka pokreće. |
| `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(nije postavljeno)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Način ponovnog učitavanja lokalne jezgre proxyja nakon provjerene zamjene konfiguracije: JSON niz argumenata koji se izvršava bez ljuske ili tačno `external` kada vanjski posmatrač primjenjuje datoteku. Nikada se ne pohranjuje u bazu podataka niti izlaže putem API-ja. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Postavite na `"true"` ili `"1"` da biste uključili IP adrese klijenta/izlaza i prefiks računa u detaljni red zapisnika procesa `[ProxyEgress]`. Podrazumijevano ostaje ISKLJUČENO kako zapisnik procesa ne bi otkrivao IP adrese ili prefiks računa. |
| `OMNIROUTE_DEBUG` | _(nije postavljeno)_ | `bin/cli/commands/quota.mjs` | Postavite na `1` kako bi CLI naredbe za kvote ispisivale dijagnostiku trajanja pojedinačnih zahtjeva (`[omniroute] GET completed in Nms`) na stderr. |
| `OMNIROUTE_HEALTHCHECK_PATH` | _(automatski)_ | `scripts/dev/healthcheck.mjs` | Eksplicitna putanja koju provjerava provjera stanja kontejnera. Ako nije postavljena, putanja provjere izvodi se iz `OMNIROUTE_BASE_PATH`; postavljanjem se ponovo uključuje detaljni endpoint za nadzor. |
| `OMNIROUTE_DEBUG_COMPLETION` | _(nije postavljeno)_ | `bin/cli/commands/completion.mjs` | Postavite na bilo koju vrijednost koja nije prazna kako bi se ispisivala dijagnostika `[omniroute completion]` iz putanja predmemorije za CLI automatsko dovršavanje u ljusci (čitanje/osvježavanje/pisanje). Podrazumijevano je isključeno — greške tih predmemorija zanemaruju se kako nedostajuća ili oštećena predmemorija nikada ne bi onemogućila dovršavanje pomoću tabulatora. |
| `BATCH_RETRY_DURATION_MS` | `86400000` (24 h) | `open-sse/services/batchProcessor.ts` | Maksimalni vremenski period za ponovne pokušaje pojedinačnih stavki serije (ms). Stavke koje prekorače ovo trajanje označavaju se kao neuspješne. |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Osnovna odgoda (ms) za eksponencijalno povećavanje intervala između ponovnih pokušaja stavki serije. |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1 h) | `open-sse/services/batchProcessor.ts` | Gornja granica (ms) eksponencijalnog povećavanja intervala između ponovnih pokušaja stavki serije. |
| `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Maksimalan broj serija koje se istovremeno obrađuju. Povećajte za veću propusnost; zadržite nisku vrijednost kako biste izbjegli veliki broj prekoračenja ograničenja učestalosti. |
> [!IMPORTANT]
> Prije izmjene postojeće trajne baze podataka, pokretač migracije objavljuje potpunu snimku
> adresiranu sadržajem u `DATA_DIR/db_backups/`. Objavljivanje zahtijeva datotečni sistem
> koji podržava čvrste veze unutar istog datotečnog sistema bez prepisivanja, kao i trajnu sinhronizaciju datoteka. POSIX hostovi također
> zahtijevaju sinhronizaciju direktorija; na Windowsu Node može odbiti pristup direktorijskim ručkama, pa OmniRoute sinhronizira
> objavljenu datoteku i sinhronizaciju stavke direktorija tretira kao radnju koja se izvršava kada je to moguće.
> Ako montirani `DATA_DIR` ne može pružiti te garancije, pokretanje se sigurno prekida prije primjene
> migracije. Premjestite `DATA_DIR` na volumen koji podržava te primitive; nemojte koristiti
> `DISABLE_SQLITE_AUTO_BACKUP` za zaobilaženje sigurnosti migracije.
### Scenariji
| Scenarij | Konfiguracija |
| ------------------------- | --------------------------------------------------------------------------------------------------------- |
| **Lokalni razvoj** | Ostavite sve podrazumijevane vrijednosti. Baza podataka nalazi se na `~/.omniroute/omniroute.db`. |
| **Docker** | `DATA_DIR=/data` + montirajte volumen na `/data`. |
| **Šifrirano u mirovanju** | Postavite `STORAGE_ENCRYPTION_KEY` + čuvajte sigurnosne kopije ključa! Gubitak ključa = gubitak podataka. |
| **CI/Testiranje** | `DATA_DIR=/tmp/omniroute-test` — privremeno, šifriranje nije potrebno. |
---
## 3. Mreža i portovi
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `PORT` | `20128` | `src/lib/runtime/ports.ts` | Primarni port za korisnički interfejs kontrolne ploče i API krajnje tačke (režim jednog porta). |
| `OMNIROUTE_BASE_PATH` | _(prazno = korijen)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | URL podputanja za posluživanje OmniRoutea iza obrnutog proxyja (postavlja Next.js `basePath`; preusmjeravanja autentifikacije uzimaju `basePath` u obzir). Npr. `/omniroute`. U Dockeru se vrijednost ugrađuje tokom `docker build` (`ARG OMNIROUTE_BASE_PATH`); unaprijed izgrađene korijenske slike mogu jednom primijeniti drugu vrijednost tokom izvođenja pri pokretanju kontejnera, prije nego što se Next.js pokrene. Postavite `NEXT_PUBLIC_BASE_URL` na javno ishodište koje uključuje istu podputanju. |
| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(prazno = korijen)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Pregledniku vidljiva kopija vrijednosti `OMNIROUTE_BASE_PATH`, ugrađena tokom izgradnje kako bi prikaz krajnje tačke na kontrolnoj ploči prikazivao `https://host/omniroute/v1` umjesto `https://host/v1`. Ako nije postavljena, koristi se `OMNIROUTE_BASE_PATH`. Nakon promjene ponovo izvršite izgradnju (Next `basePath` se određuje tokom izgradnje). |
| `DASHBOARD_ALLOW_EMBED` | _(nije postavljeno = nikad se ne može uokviriti)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Opcionalno omogućavanje ugrađivanja HTML stranica u iframe. Kada nije postavljeno, svaka ruta isporučuje `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Postavite na `vscode` kako bi se stranice (kontrolna ploča, prijava, dokumentacija, odredišna stranica) posluživale s `frame-ancestors 'self' vscode-webview:` i bez `X-Frame-Options`, tako da ih VS Code Simple Browser može prikazati (OmniCopilotov režim `dashboardOpen: "editor"`). API površina (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, aliasi na korijenskom nivou) u oba slučaja zadržava stroga zaglavlja. Prepoznaje se samo `vscode` — `1`/`true` to ne omogućavaju. Određuje se tokom izgradnje: nakon promjene ponovo izvršite izgradnju (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` za slike; postavljanje na unaprijed izgrađenoj instalaciji nema efekta). |
| `API_PORT` | _(nije postavljeno)_ | `src/lib/runtime/ports.ts` | Kada je postavljeno, poslužuje `/v1/*` proxy API na ovom zasebnom portu. |
| `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Adresa vezivanja za API port. |
| `DASHBOARD_PORT` | _(nije postavljeno)_ | `src/lib/runtime/ports.ts` | Kada je postavljeno, poslužuje korisnički interfejs kontrolne ploče na ovom zasebnom portu. |
| `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(onemogućeno)_ | `src/sse/utils/backpressure.ts` | Ograničava broj istovremenih aktivnih veza za razgovor; zahtjevi iznad ograničenja dobijaju `503` s `Retry-After`. Pozitivan cijeli broj omogućava zaštitu; ako nije postavljeno ili je postavljeno na `0`, zaštita je onemogućena. |
| `OMNIROUTE_INSTANCE_ID` | _(nije postavljeno)_ | `src/shared/resilience/peerRouting.ts` | Stabilan, jedinstven ID ovog pristupnika pri ulančavanju OmniRoute instanci. Omogućava ulazne provjere petlji između ravnopravnih čvorova. Dozvoljeni znakovi: slova, cifre, `.`, `_`, `:` i `-`; najviše 64 znaka. |
| `OMNIROUTE_PEER_URLS` | _(nije postavljeno)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | OmniRoute osnovni URL-ovi, odvojeni zarezima, koji mogu primiti `X-OmniRoute-Peer-Trace`. Samo eksplicitno dozvoljeni upstream URL-ovi primaju metapodatke ravnopravnih instanci; svi ostali pružatelji ostaju nepromijenjeni. |
| `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | Maksimalan broj prethodno posjećenih OmniRoute instanci prihvaćenih u ulanč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 kontrolnu ploču u Docker produkcijskom načinu rada. |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Port objavljen na strani hosta za API u Docker produkcijskom načinu rada. |
| `OMNIROUTE_PORT` | _(nije postavljeno)_ | `src/lib/runtime/ports.ts` | Ima prednost nad `PORT` pri pokretanju unutar Electrona ili drugih omotača. |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Port za WebSocket server za praćenje u stvarnom vremenu. |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Adresa povezivanja za WebSocket server uživo. Postavite na `0.0.0.0` da biste ga izložili na LAN-u (također konfigurirajte `LIVE_WS_ALLOWED_ORIGINS`). |
| `LIVE_WS_ALLOWED_ORIGINS` | _(nije postavljeno)_ | `src/server/ws/liveServer.ts` | Dodatna izvorišta, odvojena zarezima, kojima je dozvoljeno otvaranje WebSocket veze uživo. Izvorišta kontrolne ploče na povratnoj petlji već su podrazumijevano dozvoljena. |
| `LIVE_WS_ALLOWED_HOSTS` | _(nije postavljeno)_ | `src/server/ws/liveServerAllowList.ts` | Dodatni nazivi hostova, odvojeni zarezima, koji su dozvoljeni za WebSocket izvorišta uživo. Za razliku od `LIVE_WS_ALLOWED_ORIGINS` (puni URL-ovi izvorišta), podudara samo dio hosta — korisno za LAN/Tailscale postavke. |
| `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(nije postavljeno)_ | `src/hooks/useLiveDashboard.ts` | Javni URL za WebSocket kontrolne ploče uživo (na strani preglednika). Postavite ga kada se ispred WS servera koristi obrnuti proxy ili Cloudflare Tunnel (npr. `wss://ws.my-ai.com/live-ws`); preglednik se povezuje tamo umjesto na `ws://hostname:20132`. Dio putanje također se koristi kao putanja za WebSocket nadogradnju (zadano: `/live-ws`). |
| `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` i `scripts/start-ws-server.mjs` | Postavite na `0` ili `false` da biste onemogućili WebSocket server u stvarnom vremenu (podrazumijevano je omogućen i povezan na povratnu petlju). CI/harness prekidač koji onemogućava samostalnu pomoćnu skriptu za WebSocket uživo. |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Ograničenje brzine releja po (tokenu, IP adresi), u zahtjevima po minuti. Čuva se u memoriji, zasebno za svaku instancu. `0` ili negativna vrijednost onemogućava ograničenje po IP dimenziji (ograničenje baze podataka po tokenu i dalje se primjenjuje). |
| `NODE_ENV` | `production` | Next.js jezgra | Kontroliše opširnost zapisivanja dnevnika, keširanje, izlaganje detalja grešaka i Next.js optimizacije. |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — zadana vrijednost u kodu) | `package.json` / Next.js 16 | Turbopack je zadani alat za objedinjavanje za `npm run dev` i `npm run build` (2–3× brže izgradnje, prema mjerenjima performansi). Postavite na `0` za povratak na webpack u sistemu Windows, kada naiđete na nekompatibilnosti izvornih povezivanja / alata za objedinjavanje, **ili na računarima s ograničenim RAM-om** — poznato je da Turbopack produkcijske izgradnje u ovoj liniji verzija Next.js-a (16.2.x) dostižu znatno veću vršnu potrošnju memorije od webpacka na velikim grafovima modula (Turbopack ispravka izbacivanja sadržaja iz memorije u Next 16.3 još nije stabilna); rezervni webpack koristi znatno manje memorije na vrhuncu. Pogledajte #6409. **Izgradnje Docker slika zadano koriste `0` (webpack)**: `Dockerfile` deklarira `ARG OMNIROUTE_USE_TURBOPACK=0`, tako da obični `docker build .` (Railway i drugi hosting servisi jednim klikom, povremeni korisnici vlastitog hostinga) ne bude prekinut zbog nedostatka memorije na sistemu za izgradnju s ograničenom memorijom; proslijedite `--build-arg OMNIROUTE_USE_TURBOPACK=1` da biste sliku izgradili pomoću Turbopacka. Pogledajte `docs/guides/DOCKER_GUIDE.md` → Resursi tokom izgradnje. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(nije postavljeno)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Postavite na `1` da biste preskočili provjeru integriteta SQLite baze podataka pri pokretanju. Korisno za brže pokretanje s velikim bazama podataka. |
| `NOTIFY_SOCKET` | _(nije postavljeno)_ | systemd (protokol sd_notify) | Postavlja systemd kada se proces izvršava pod servisnom jedinicom s integracijom sd_notify; OmniRoute ga čita (pogledajte `OMNIROUTE_DISABLE_SD_NOTIFY`) radi slanja obavijesti READY/WATCHDOG. Korisnik ga nikada ne postavlja. |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(nije postavljeno)_ | `scripts/dev/systemd-notify.mjs` | Postavite na `1` da biste onemogućili systemd sd_notify (Type=notify / WatchdogSec=), čak i kada se izvršava pod systemd jedinicom. Izvan systemd-a obavještavač ne radi ništa bez obzira na ovu postavku. |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Interval (ms) za pozadinski raspoređivač provjere ispravnosti vjerodajnica. Minimum: 10000 (10 s). |
| `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (ms) za keširani status ispravnosti vjerodajnica. |
| `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Postavite na `1` ili `true` da biste onemogućili periodično pozadinsko testiranje veza s pružaocima usluga. Pružaoci pretrage (SEARCH_VALIDATOR_CONFIGS u `src/lib/providers/validation/searchProviders.ts`, npr. `tavily-search`) uvijek su isključeni iz provjere — njihova „validacija“ predstavlja stvarni naplativi upit prema vanjskom pružaocu usluge, pa se njihova ispravnost nikada ne provjerava prema rasporedu (#9970). |
| `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Postavite na `1` da biste autentificiranom pozivaocu omogućili slanje zahtjeva na `/api/monitoring/health?deep=1`, čime se površina dovršavanja uzorkuje jednom po TTL-u. Anonimni pozivaoci nikada ne pokreću provjeru. |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Adresa povezivanja za Next.js razvojni/pokretački server. Kada je postavljena, nadjačava zadanu vrijednost `0.0.0.0`. |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Adresa povezivanja koju Playwright pokretač koristi prilikom pokretanja Next.js-a. Zadana vrijednost je `127.0.0.1` radi hermetičkih testova. **Nemojte koristiti za `omniroute serve`** — umjesto toga koristite `OMNIROUTE_SERVER_HOST` (POSIX ljuske automatski postavljaju `HOSTNAME` na naziv računara; `.env` ga ne može nadjačati). |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Adresa vezivanja za `omniroute serve`. Izbjegava koliziju s varijablom `HOSTNAME` POSIX ljuske (koju bash/zsh uvijek postavlja na naziv računara). Ako nije postavljena, koristi se `0.0.0.0`. (#6194) |
### Režimi portova
```
┌─────────────────────────── Jedan port (zadano) ─────────────────────────────┐
│ PORT=20128 │
│ → Kontrolna tabla: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Odvojeni portovi ────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → Kontrolna tabla: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ Slučaj upotrebe: Izlaganje API-ja LAN-u uz ograničavanje kontrolne table │
│ na localhost. │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker produkcija ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → Mapira portove kontejnera na portove domaćina u docker-compose.prod.yml.│
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 4. Sigurnost i autentifikacija
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Salt koji se kombinuje s hardverskim identifikatorima radi kreiranja otiska uređaja. Promijenite ga za svaku implementaciju radi izolacije. |
| `OMNIROUTE_CLI_SALT` | _(nije postavljeno = nasumični salt za svaku instalaciju, sačuvan u `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | HMAC salt za izvođenje lokalnog CLI tokena za autentifikaciju. Postavljanje ove vrijednosti rotira sve CLI tokene na uređaju i uvijek ima prednost nad sačuvanim saltom. Pogledajte `docs/security/CLI_TOKEN.md`. |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Postavlja oznaku `Secure` na kolačićima sesije. **Mora biti `true`** kada se izvršava iza HTTPS-a. |
| `REQUIRE_API_KEY` | `false` | API posrednički softver | Kada je `true`, svi posrednički zahtjevi prema `/v1/*` moraju sadržavati važeći API ključ. **Ova oznaka ne ograničava `GET /v1/models`**, koji umjesto toga prati postavku prijave na kontrolnu ploču (`requireAuthForModels`) — stoga odgovor `401` od `/v1/models` NE znači da je izvođenje inferencije zaštićeno. Pogledajte `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). |
| `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Omogućava prikazivanje punih vrijednosti API ključeva u korisničkom interfejsu kontrolne ploče. Može se konfigurisati putem oznaka funkcionalnosti kontrolne ploče; predstavlja sigurnosni rizik na dijeljenim instancama. |
| `NO_LOG_API_KEY_IDS` | _(prazno)_ | `src/lib/compliance/index.ts` | Zarezima odvojeni ID-ovi API ključeva koji zaobilaze evidentiranje zahtjeva (usklađenost s GDPR-om). |
| `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. Nije postavljeno ili je prazno: nema implicitnog ograničenja (#2289, #11017). `0` ima isto značenje (neograničeno). Pozitivan cijeli broj N omogućava N/dan, 5N/sedmicu, 20N/mjesec. Neispravno oblikovane vrijednosti koje nisu prazne vraćaju se na naslijeđene intervale od 1000/dan, 5000/sedmicu i 20000/mjesec. |
| `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | Najveća dozvoljena veličina tijela zahtjeva. Odbija korisne podatke koji premašuju ovo ograničenje. |
| `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | Stvarna tijela zahtjeva čija je veličina jednaka ovom pragu ili veća od njega prije parsiranja JSON-a preuzimaju atomsku, procesno lokalnu rezervaciju za zahtjevne operacije (BYTE putanja, uključujući `POST /v1/responses`). Primjenjuje se isti mehanizam izbjegavanja kada postoji dovoljno slobodnog kapaciteta iz [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) kao i za strukturno zahtjevne operacije; i dalje je ograničeno putem `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), tako da se problem [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) ne ponovi. |
| `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Strogo ograničenje chat rute koje se primjenjuje na bajtove pročitane tokom ograničenog unosa, uključujući zahtjeve s nedostajućim, nevažećim ili netačnim `Content-Length`; prekoračenje dobija odgovor `413`. |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(nije postavljeno — nema ograničenja broja zahtjeva)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** ovo naslijeđeno ograničenje BROJA zahtjeva sada se primjenjuje samo kada je izričito postavljeno. Ako ostane nepostavljeno (zadano), prihvat zahtjevnih chat zahtjeva umjesto toga ograničava `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — automatski izveden BAJTNI budžet dimenzioniran prema stvarnom memorijskom ograničenju procesa u **jednom procesu** (jedna V8 hrpa). Dva preklapajuća `/v1/responses` zahtjeva s približno 750k tokena ruše hrpe od približno 12 GiB (#7849) — to je upozorenje o **memorijskom budžetu**, a ne strogi proizvodni maksimum od 2. Zdrav proces (hrpa ispod omjera rasterećenja) MOŽE prihvatiti više istovremenih dugih `/v1/responses` putem `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Desetine dugih SSE klijenata (40–50) zavise od hrpe + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, a ne od „maksimalno 2“. Slijepo povećavanje ove vrijednosti radi „korištenja hosta“ ponovo uvodi #7849. Umnožite **hrpe** pomoću **N nezavisnih `DATA_DIR` direktorija** (#11024); nikada nemojte koristiti `replicas>1` nad jednom SQLite datotekom. |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(automatski izvedeno)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** nadjačavanje automatski izvedenog bajtnog budžeta unosa (25% strožeg V8/cgroup memorijskog ograničenja podijeljeno s 8x privremenim uvećanjem). Izvedene i eksplicitne vrijednosti ograničavaju se na 8 MiB–2 GiB. Tijelo veće od efektivnog budžeta odmah ne uspijeva uz `413 body_exceeds_budget`; nadmetanje između pojedinačno obradivih tijela ostaje ponovljivo uz `503`. 40–50 istovremenih dugih SSE klijenata zavisi od ovog budžeta + hrpe, a ne od strogog „maksimalno 2“. Prije podešavanja pročitajte `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` na `/api/monitoring/health`. |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Omjer rasterećenja uslijed pritiska na hrpu (`heapUsed / heap_size_limit`) za prihvat zahtjevnih zahtjeva tipa BAJT i STRUKTURA (#10183, #10268, #10437). Istovremeni zahtjevni zahtjev koji prekorači `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` odbacuje se s ponovljivim `503` samo kada je hrpa TAKOĐER na ovom omjeru ili iznad njega; ako je hrpa zdrava, prihvata se putem dodatnog kapaciteta za zdravu hrpu. |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (zadano `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Ograničeni dodatni kapacitet za brzu putanju zdrave hrpe (#10437) i za STRUKTURU i za BAJT (`admitChatRequest`, uključujući tijela ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Bez ovog ograničenja, svaki zahtjev pri zauzetoj, ali zdravoj hrpi zaobilazio je kontrolu prihvata bez gornje granice. Kada je ovoliko istovremenih rezervacija aktivno kroz putanju zdrave hrpe, daljnji zahtjevi pri zauzetosti prelaze na ISTU putanju ograničenog čekanja/rasterećenja koja se koristi pri stvarnom pritisku na hrpu. `0` potpuno onemogućava zaobilaženje. |
| `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Broj poruka pri kojem se chat zahtjev klasificira kao zahtjevan čak i kada mu je tijelo ispod bajtnog praga. |
| `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Broj alata pri kojem se chat zahtjev klasificira kao zahtjevan čak i kada mu je tijelo ispod bajtnog praga. |
| `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Konzervativna procjena broja tokena prema veličini niza koja klasificira zahtjev kao zahtjevan; ovo je približna vrijednost troška prihvata, a ne tokenizacija za naplatu pružaoca usluge. |
| `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (onemogućeno) | `src/shared/middleware/chatBodyAdmission.ts` | Opcionalno ograničenje historije chata koje se mora izričito uključiti. Zadano je onemogućeno: broj poruka je pravilo implementacije, a ne univerzalno svojstvo zahtjeva, i postavljanje ograničenja ovdje odbacuje razgovore konačnim odgovorom `413` prije nego što ih proces kompresije može učiniti obradivim. Rast hrpe ograničen je pomoću `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` i rasterećenja uslijed pritiska na hrpu. Postavite pozitivnu vrijednost u implementacijama s ograničenom memorijom kojima je potrebna stroga gornja granica; prekoračenje tada dobija strukturirani odgovor `413` koji zahtijeva sažimanje. |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Strogo ograničenje za upstream odgovor bez streaminga koji se u cijelosti pohranjuje u memoriju. Nakon prekoračenja čitač upstream odgovora se otkazuje i zahtjev brzo ne uspijeva, umjesto da neograničeni niz raste sve dok se hrpa ne iscrpi. |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Maksimalan broj bajtova proslijeđenih iz zaglavlja odgovora uzvodnog servera. Kada se budžet prekorači, zaglavlja nižeg prioriteta (npr. prilagođena `x-codex-*`, `x-oai-request-id`) odbacuju se kako bi se ostalo unutar uobičajenih ograničenja zaglavlja obrnutih proxy servera. Postavite veću vrijednost da biste proslijedili više uzvodnih metapodataka po cijenu veće veličine zaglavlja odgovora. |
| `CORS_ORIGIN` | _(nije postavljeno)_ | `src/server/cors/origins.ts` | Zastarjela CORS lista dozvoljenih izvora koja podržava samo jedan izvor. Za nova postavljanja preferirajte `CORS_ALLOWED_ORIGINS`. CORS je namijenjen samo pregledničkim API klijentima s različitih izvora; autentificirani upisi putem kontrolne ploče umjesto toga koriste zahtjeve 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 se ne šalje osim ako je eksplicitno konfigurirano `CORS_ALLOW_ALL=true`. |
| `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Izlaz za nuždu namijenjen samo razvoju, koji vraća bilo koji preglednički `Origin`. Nemojte ga omogućavati na zajedničkim ili produkcijskim postavljanjima. |
| `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Zastarjeli pseudonim. Njegova sklopka na kontrolnoj ploči (DB nadjačavanje) čita se prije ove vrijednosti okruženja; `false`, `0`, `no` ili `off` u bilo kojem od njih isključuje provjere hosta na isti način kao `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, čak i kada je sklopka te zastavice na kontrolnoj ploči sačuvana kao isključena; druge vrijednosti prepuštaju zaštitu dvjema zastavicama u nastavku. |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Isključuje provjere hosta zaštite izlaznih URL-ova, uključujući blokiranje metapodataka oblaka (cijeli 169.254.0.0/16, metadata.google.internal), na putanjama pružaoca koje slijede režim zaštite: validacija URL-a, otkrivanje modela, osnovni URL-ovi čvorova pružaoca (uključujući udaljene čvorove za ponovno rangiranje) i test rezervnog proxyja, između ostalih izlaznih putanja povezanih s pružaocem, kao što je udaljeno dohvaćanje slika/medija. Također dozvoljava privatna webhook odredišta, osim krajnjih tačaka metapodataka oblaka/lokalne veze, koje ostaju blokirane čak i kada je ova zastavica uključena. Zahtjevi za razgovor poslani putem `BaseExecutor.execute()` zadržavaju svoju provjeru metapodataka oblaka. Lokalni pružaoci rade sa zadanim postavkama: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (zadano `true`) već dozvoljava lokalne i LAN URL-ove na putanjama za validaciju, otkrivanje i čvorove pružaoca; test rezervnog proxyja i privatna webhook odredišta provjeravaju samo ovu zastavicu i blokiraju lokalne/LAN hostove dok je isključena. Nadjačava `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. Vrijednost sačuvana putem sklopke na kontrolnoj ploči ima prednost nad ovom varijablom. |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Dozvoljava URL-ove pružaoca na lokalnim/privatnim adresama (127.0.0.1, localhost, LAN, privatni rasponi) za validaciju pružaoca, otkrivanje modela, razgovor i druge izlazne putanje povezane s pružaocem kojima upravlja režim zaštite. **Zadano `true`** (lokalno kao prioritet): zaštita tada blokira krajnje tačke metapodataka oblaka — cijeli 169.254.0.0/16 zajedno s poznatim nazivima hostova metapodataka (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Postavite `false` za režim samo javnih adresa, koji blokira i privatne hostove i hostove povratne petlje. Zaštita provjerava naziv hosta ili doslovnu IP adresu kako je napisana, prije bilo kakvog DNS upita; u režimu samo javnih adresa omotač za sigurno dohvaćanje dodatno razrješava naziv hosta i odbija svaku privatnu adresu u odgovoru. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` isključuje ove provjere na putanjama navedenim u njegovom redu. Ugrađeni lokalni pružaoci, kao što su LM Studio, Ollama, vLLM, Llamafile i Triton, preskaču sve provjere hosta pri validaciji ključa i razgovoru. Vrijednost sačuvana putem sklopke na kontrolnoj ploči ima prednost nad ovom varijablom. (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Omogućava rutama `/v1/audio/*` (transkripcije, govor, prijevodi) korištenje čvora pružaoca kompatibilnog s OpenAI-jem koji se nalazi izvan localhosta. Zadano je isključeno — usmjeravanje zvuka prema udaljenom hostu mijenja izlazni identitet i mora biti eksplicitna odluka operatera. Čvorovi povratne petlje/privatni čvorovi (localhost, 127.0.0.1, 172.16-31.x) uvijek su dozvoljeni i na njih ovo ne utječe. (#3963) |
| `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Omogućava da `POST /v1/rerank` (i korak ponovnog rangiranja putem povratne petlje u memorijskom mehanizmu) koristi čvor pružaoca kompatibilnog s OpenAI-jem koji se nalazi izvan localhosta — uređaj na LAN-u ili Tailscale ravnopravni čvor koji pokreće TEI, Infinity, vLLM itd. Zadano je isključeno — usmjeravanje prema udaljenom hostu mijenja izlazni identitet i mora biti eksplicitna odluka operatera. Čvorovi povratne petlje (localhost, 127.0.0.1, 172.16-31.x) uvijek su dozvoljeni i na njih ovo ne utječe. Osnovni URL udaljenog čvora također mora proći pravila za izlazne URL-ove pružaoca (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). |
| `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(prazno)_ | `src/shared/network/localNodeHosts.ts` | Nazivi hostova (odvojeni zarezima ili razmacima) koje usmjeravanje čvorova pružatelja tretira kao lokalne — obično naziv Docker/Compose servisa za reranker, TEI ili audio sidecar na OmniRouteovoj vlastitoj Docker mreži (`http://reranker:8080/v1`), tako da čvoru nije potrebna tvrdo kodirana IP adresa kontejnera. Navedeni hostovi ispunjavaju uslove 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 im se pristupa direktno — nikada putem `HTTP(S)_PROXY` ili fiksiranog proxyja veze. I dalje šalju API ključ veze. Prihvataju se samo jednosegmentni nazivi i nazivi s domenama `.internal`/`.local`; javni FQDN-ovi, doslovne IP adrese i nazivi servisa za metapodatke u oblaku zanemaruju 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 kako bi se korisnici mogli autentificirati samo putem OIDC jedinstvene prijave. Prihvata se i neposredni pseudonim `OIDC_DISABLE_PASSWORD_LOGIN`; zastavica funkcionalnosti kontrolne ploče s istim ključem ima prednost. (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Neposredni pseudonim za `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). |
### Kontrolna lista za sigurnosno ojačavanje
```bash
# Minimalni sigurnosni zahtjevi za produkciju:
AUTH_COOKIE_SECURE=true # Zahtijeva HTTPS
REQUIRE_API_KEY=true # Autentificira sve proxy pozive
ALLOW_API_KEY_REVEAL=false # Nikada ne otkriva 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. Pravila alata i usmjeravanja
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------------------------------------------- | ------------------------------------ | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | Kontroliše pristup LLM-a pozivanju alata/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 izmjenu korisnog sadržaja (prilagođavanja prema modelu/protokolu za nadređene servise). |
| `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Interval ponovnog učitavanja (ms) za automatsko ponovno učitavanje datoteke s pravilima korisnog sadržaja. Minimum je `1000`. |
| `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Izborna opcija: usmjerava ID-ove modela `claude-*` bez prefiksa iz Claude Code klijenata kroz Claude Code OAuth račun umjesto zahtijevanja prefiksa pružaoca usluge. Eksplicitni prefiksi pružaoca usluge i dalje imaju prednost. Može se konfigurirati i putem prekidača na kontrolnoj tabli stranice Claude pružaoca usluge. |
| `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Naslijeđeno ponašanje `resolveBareModelToConnectionDefault` (#4825): zamjenjuje svaki naziv modela bez prefiksa vrijednošću `defaultModel` odabrane veze. Zadano je isključeno; zamjenjuje se samo `auto` ili prazan model, a kada je uključeno, bilježi se jedno upozorenje po paru. |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Ograničenje istovremenosti po modelu za round-robin kombinacije (#9100). Semafor round-robin kombinacije bio je strogo ograničen na 3 istovremena zahtjeva po modelu bez mogućnosti izmjene, zbog čega je promet s većom istovremenošću bio serijaliziran iza tog ograničenja. Validira se na `>= 1`, a ograničava na `<= 32`. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Opasna izborna opcija koja preskače OmniRouteovu lokalnu provjeru kontekstnog prozora / maksimalnog broja ulaznih tokena za direktne zahtjeve prema jednom modelu. Nadređeni pružaoci usluga i dalje primjenjuju svoja stvarna ograničenja; kompresija upita i vlastito ograničenje izlaznih tokena modela ostaju aktivni. Efektivni redoslijed prioriteta je zamjenska vrijednost baze podataka zastavica funkcija > varijabla okruženja > zadana vrijednost; ponovno pokretanje nije potrebno. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(nije postavljeno)_ | `open-sse/services/selfHostedEntry.ts` | Umetnuti YAML dokument `providers:` (RIC-738, D4). Kada je postavljen (sa ili bez bloka `strategy:`), `/v1/chat/completions` se preusmjerava na objedinjenu, samostalno hostovanu ulaznu tačku kompatibilnu s OpenAI-jem umjesto na oblačni procesni tok. Kada nije postavljen (zadano): ruta se prosljeđuje direktno postojećem oblačnom procesnom toku. 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 dokument `providers:` kao `OMNIROUTE_SELF_HOSTED_PROVIDERS`, za implementacije koje preferiraju datoteku umjesto umetnute varijable okruženja. Bilo koja od njih aktivira samostalno hostovanu ulaznu tačku. |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(nije postavljeno — otvorena ruta)_ | `open-sse/services/selfHostedEntry.ts` | Opcionalni zajednički API ključ za objedinjenu, samostalno hostovanu ulaznu tačku (D5 osnova, rezervirana za sistem kvota po ključu). Kada je postavljen, zahtjevi moraju uključivati `Authorization: Bearer `. Kada nije postavljen: ruta je otvorena, što odgovara postojećem obrascu samostalno hostovanog lokalnog pružaoca usluge (implementacija na povratnoj petlji/pouzdanoj mreži). |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(nije postavljeno)_ | `open-sse/services/routingStrategies.ts` | Umetnuti YAML dokument `strategy:` za deterministički mehanizam usmjeravanja (M2/RIC-740, D3) — crna/bijela lista, prekidač s periodom hlađenja, prioritet troškova, uzimanje kašnjenja u obzir, lanac rezervnih opcija. Nadjačava umetnuti blok `strategy:` 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 direktno navedene varijable okruženja. |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(nije postavljeno)_ | `open-sse/services/conversationTracker.ts` | Postavite na `1` da biste zaustavili prikupljanje historije razgovora. `resolveConversationId()` vraća rezultat koji se ne prati prije nego što pročita SQLite ili obradi historiju poruka, a obuhvaćeni su i ID-ovi sesija koje je dostavio klijent. Obrada sesija usmjeravanja ostaje nepromijenjena, a postojeći zapisi se ne brišu. Namijenjeno implementacijama koje ne koriste prikaz razgovora na kontrolnoj ploči i žele zaustaviti rast tabele interakcija. |
| `OMNIROUTE_NADIR_API_KEY` | _(nije postavljeno)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | API ključ za opcionu strategiju automatskog kombinovanog usmjerivača `nadir`, koji se koristi kada `config.nadir.apiKey` same kombinacije nije postavljen. Opcionalno: pozivi bez ključa završavaju na Nadirovom anonimnom nivou, koji ima ograničenje broja zahtjeva po IP adresi i stoga nije upotrebljiv iza zajedničkog pristupnika. Osjetljivo; preferirajte polje po kombinaciji kada kombinacije koriste različite račune. |
| `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Osnovno ishodište Nadir API-ja za donošenje odluka, koje se koristi kada `config.nadir.baseUrl` same kombinacije nije postavljen. Potrebno je samo za samostalno hostovani Nadir, koji početne dijelove upita zadržava unutar vaše mreže. Završni `/v1` je dozvoljen i uklanja se. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Sedmični period za ograničenja potrošnje u USD po API ključu (primjena ograničenja zahtjeva, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: sedmica se završava pri najranijem sedmičnom resetovanju među uzvodnim vezama kojima ključ može pristupiti ili predstavlja kliznih 7 dana kada vrijeme resetovanja nije poznato. `calendar`: lokalna sedmica od ponedjeljka u 00:00 do sljedećeg ponedjeljka u 00:00, identična za svaki ključ. `calendar` se preporučuje kada mnogo ključeva s pojedinačnim budžetima dijeli jednu grupu uzvodnih računa. Nevažeće 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 u 00:00 za sedmični period `calendar`. Ako nije postavljena ili je nevažeća: koristi se vremenska zona OmniRoute procesa (`TZ` hosta ili kontejnera, koja često nije postavljena, odnosno u slikama kontejnera koristi se koordinirano svjetsko vrijeme). Ignoriše se u režimu `provider`. |
| `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Zadani maksimalni broj alata dozvoljenih u zahtjevu (zadana vrijednost OpenAI-ja). Dozvoljeni su samo pozitivni cijeli brojevi; ako vrijednost nije postavljena ili je nevažeća, zadržava se `128`. Pružalac s poznatim/proaktivnim ograničenjem (`grok-cli` 200, `nvidia` 1536) i dalje primjenjuje vlastitu gornju granicu — ovim se mijenja samo zadana gornja granica. |
| `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(uključeno)_ | `open-sse/executors/syntxChat.ts` | SYNTX.ai pozivanje alata emulirano putem upita: ako nije postavljeno ili je postavljeno na `1`/`true`/`on`/`yes`, lokalni katalog alata umeće se u upit; bilo koja druga vrijednost (npr. `0`) preskače to umetanje. |
---
## 7. URL-ovi i sinhronizacija s oblakom
| 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 URL povratne petlje/kontejnera čak i kada je aplikacija javno dostupna 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 u vrijeme izgradnje (postavite na `minimal` da biste fizički isključili privilegovane module iz paketa). |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ samostalni izlaz_ | `scripts/build/colocate-standalone.mjs` | Zamjena direktorija samostalnog izlaza u vrijeme izgradnje koji koristi korak kolokacije nakon izgradnje. Nije postavka vremena izvođenja. |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(prazno)_ | `src/lib/cloudSync.ts` | Zajednička 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 pristupnih podataka. Zadana vrijednost je `false`. |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Postavite na `true` da biste odbili nepotpisani odgovor sinhronizacije s oblakom kada nije konfigurirana lokalna tajna (#13679). Prisutni potpis se uvijek provjerava — i uvijek odbija kada `OMNIROUTE_CLOUD_SYNC_SECRET` nije postavljen — bez obzira na ovu zastavicu. U v3.9 zadana vrijednost postaje obavezna provjera. |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Postavite na `true` da biste se vratili na jednostepeno ponašanje „uvezi sve“ iz v3.8.5 bez potvrde korisnika. |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, kontrolna ploča, sinhronizacija | Javno dostupan URL za OAuth redirect_uri, veze kontrolne ploče 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 | Preslikana vrijednost `CLOUD_URL` na klijentskoj strani. |
| `NEXT_PUBLIC_APP_URL` | _(nije postavljeno)_ | `src/shared/services/cloudSyncScheduler.ts` | Zastarjela rezervna vrijednost za `NEXT_PUBLIC_BASE_URL`. |
| `NEXT_PUBLIC_PORT` | _(nije postavljeno — koristi se `PORT`)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Rezervni port na strani klijenta za URL-ove za prikaz kada ishodište nije poznato (SSR/testovi); očitava se prije `PORT`. |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(nije postavljeno)_ | Razrješivač javnog ishodišta, URL-ovi slika | OmniRoute ishodište namijenjeno pregledniku s najvišim prioritetom, koje se koristi za generisanje javnih URL-ova i validaciju ishodišta preglednika izvan kontrolne ploče. Postavite ovo kada OpenWebUI ili neki drugi posrednik pristupa OmniRouteu putem internog URL-a, ali korisnikov preglednik mora preuzeti generisane medije putem LAN-a, tunela ili javnog ishodišta. **Nemojte** uključivati `/v1`. |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(nije postavljeno)_ | `open-sse/config/providerPluginManifestUrl.ts` | Apsolutni URL manifesta dodatka pružaoca koji se oglašava pomoćnim klijentima. Kada nije postavljeno, OmniRoute izvodi `/api/v1/provider-plugin-manifest` iz ishodišta 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žaoca iz HOST/PORT bez ishodišta zahtjeva. Postavite na `https` iza javnog proxyja koji završava TLS kada nije postavljen eksplicitni `OMNIROUTE_PROVIDER_MANIFEST_URL`. |
| `OMNIROUTE_TRUST_PROXY` | _(nije postavljeno)_ | `src/server/origin/publicOrigin.ts` | Opcionalni način pouzdanosti za proslijeđena zaglavlja javnog ishodišta. 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 čvorovima privatnog LAN-a i omogućava mostu `API_PORT` da zadrži `X-Forwarded-For` takvog čvora. 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. Zamjena 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 ishodište koje se koristi za sastavljanje URL-ova asinhronih povratnih poziva. Rezervna vrijednost s najnižim prioritetom za kie.ai povratne pozive; također se koristi kao generički javni URL za druge posrednike. |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Krajnja tačka za provjeru CrofAI kvote koju koristi stranica Upotreba. Zamijenite za posrednike / testne fišksture. |
| `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Krajnja tačka za 5-satnu / sedmičnu / mjesečnu ClinePass kvotu koju koristi stranica Upotreba. Zamijenite za posrednike / testne fišksture. |
| `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. Zamijenite za posrednike / testne fišksture. |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Sintetizirajte zaglavlja identiteta OpenCode CLI-ja (User-Agent, x-opencode-client/project, UUID-ove zahtjeva/sesije) za opencode-go/zen zahtjeve prema uzvodnim servisima koje klijent nije poslao, kako bi ih Cloudflare prihvatio pri izlazu 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žatelja usluga. Primjenjuje se samo na opencode izvršioce. Kod zahtjeva bez ključa koji nadređeni servis ograničava, konfigurirana vrijednost koja ne sadrži `opencode/= 1.17>` zamjenjuje se ovom zadanom vrijednošću umjesto da bude odbijena. |
| `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (uključeno) | `open-sse/utils/opencodeHeaders.ts` | Prosljeđuje zaglavlja za atribuciju klijentske aplikacije (`x-session-id`, `x-title`, `http-referer`) nadređenim pružateljima usluga, tako da zahtjev koji potiče iz navedenog okruženja zadržava svoj identitet kroz usmjerivač (ograničenja OpenRouter 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žatelja usluga čiji se kvarovi nadređenog servisa grupiraju prema izlaznoj IP adresi (jedna greška 429 zaustavlja svaku povezanu vezu koja dijeli tu IP adresu). Ako nije postavljeno, koristi se zadana vrijednost za besplatni nivo `opencode,opencode-go,opencode-cli`; `none`/`off`/`false`/`0` u potpunosti onemogućava kaskadu; lista odvojena zarezima zamjenjuje skup. Plaćeni planovi se grupiraju prema računu na nadređenom servisu i mogu je sigurno onemogućiti (#9611). |
| `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 (zastavica za streaming i lista alata). Zaglavlja se i dalje primjenjuju. Očitava se za svaki zahtjev, pa promjena odmah stupa na snagu. |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(nije postavljeno)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Nazivi alata odvojeni 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 koristi jedan rezervni alat za koji se modelu kaž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 Ollama Cloud koji se koristi za preuzimanje podataka o kvoti. Promijenite za releje / testne resurse. |
| `OLLAMA_USAGE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage.ts` | Ollama Cloud kolačić `__Secure-session` koji se koristi za preuzimanje podataka o kvoti sa stranice postavki. Osjetljivo; kada je konfigurirano više računa, dajte prednost polju za pojedinačnu vezu na kontrolnoj ploči. |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage.ts` | Alternativna varijabla okruženja za Ollama Cloud kolačić `__Secure-session`. Osjetljivo; kada je konfigurirano više računa, dajte prednost polju za pojedinačnu vezu na kontrolnoj 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 pseudonima. Osjetljivo; kada je konfigurirano više računa, dajte prednost polju za pojedinačnu vezu 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 korištenja servisa CodeWhisperer (AWS Kiro). Promijenite za releje / testne resurse. |
> [!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 generisani javni linkovi moraju koristiti taj naziv hosta. Bez toga OAuth povratni pozivi mogu biti neuspješni jer se redirect_uri neće podudarati, a generisani javni linkovi mogu upućivati na interno porijeklo kontejnera.
>
> Zadržite `BASE_URL` kao interni URL povratne petlje/kontejnera za zadatke između servera. Nemojte koristiti `Origin` preglednika ili javni naziv hosta za interne samostalne zahtjeve koji sadrže vjerodajnice.
>
> Autentificirani upisi na kontrolnoj ploči 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 integracije preglednika koje nisu dio kontrolne ploče: eksplicitne varijable okruženja za javni URL smatraju se pouzdanim kao prvi izbor; neobrađena zaglavlja `Forwarded` / `X-Forwarded-*` zanemaruju se osim ako je `OMNIROUTE_TRUST_PROXY` omogućen i neposredni proxy posrednik označen tokenom kao pouzdan. Nemojte koristiti CORS postavke za ispravljanje zahtjeva kontrolne ploče istog porijekla; CORS služi samo za klijente preglednika iz drugih porijekla.
---
## 8. Izlazni proxy
Usmjerite pozive prema uzvodnim LLM pružaocima usluga kroz HTTP ili SOCKS5 proxy radi kontrole izlaznog saobraćaja, geografskog usmjeravanja ili maskiranja IP adrese.
`OMNIROUTE_UPSTREAM_HTTP2_ENABLED` je zadano postavljen na `true`. Postavite ga na `false`, `0`, `no` ili
`off` kako biste nametnuli HTTP/1.1 za Undici dispatchere u `open-sse/utils/proxyDispatcher.ts`
i `open-sse/utils/proxyFetch.ts`: direktni izlazni saobraćaj, HTTP(S)/SOCKS proxyje, releje i
njihove ponovne pokušaje s novim socketom. Time se zadržavaju provjera TLS certifikata, proxy
autentifikacija, ograničenja veza i postavke održavanja veze. Ponovo pokrenite OmniRoute nakon
promjene jer se dispatcheri keširaju, a relejni agenti kreiraju se pri pokretanju.
Ova postavka ne upravlja wreq TLS fingerprintingom niti transportima specifičnim za pružaoce usluga.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------------------- | -------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Omogućava SOCKS5 proxy agenta za odlazne pozive. Isključite ga vrijednošću `false`. |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Klijentska strana | Obaviještenost klijentske strane o dostupnosti SOCKS5 proxyja. |
| `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Funkcijska zastavica koja je zadano uključena (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); vrijednost iz baze podataka kontrolne ploče ima prednost). Skupovi proxyja i rotacija po računu prestaju ponovo posluživati člana koji je upravo zakazao (odbijena TCP provjera ili odgovor 429 preko njega) tokom perioda koji se udvostručuje pri svakom ponavljanju, do maksimalnog ograničenja. `false` vraća obični odabir. |
| `SELECTOR_CONTROL_ALLOWLIST` | _(nije postavljeno)_ | `src/lib/proxySubscription/selectorGuard.ts` | Lista dozvoljenih odredišta lokalne jezgre za upravljanje selektorom izvan povratne petlje (hostovi ili IP adrese odvojeni zarezima/razmacima; `*` otvara LAN/privatne mreže, ali nikad odredišta za metapodatke ili lokalne veze). Povratna petlja preko http/https protokola zadano je dozvoljena. Kada je postavljena i nije prazna, vrijednost iz baze podataka kontrolne ploče ima prednost nad ovom varijablom. |
| `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Osnovni period (ms) izdvajanja zbog odgovora 429, koji se udvostručuje pri svakom ponavljanju. Čita se jednom pri pokretanju. Ograničeno na `1000..3600000`; vrijednost izvan raspona ili vrijednost koju nije moguće pročitati vraća se na zadanu vrijednost uz upozorenje. |
| `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Maksimalno trajanje (ms) izdvajanja zbog odgovora 429. Čita se jednom pri pokretanju. Ograničeno na `1000..3600000`; vrijednost izvan raspona ili vrijednost koju nije moguće pročitati vraća se na zadanu vrijednost uz upozorenje. Kada je maksimalna vrijednost manja od osnovne, vraća se na zadanu vrijednost. Smanjenje maksimalne vrijednosti također skraćuje pamćenje niza neuspjeha: unosi se brišu `2 x max` nakon isteka. |
| `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Funkcijska zastavica koja se uključuje po izboru (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); vrijednost iz baze podataka kontrolne ploče ima prednost). Za pružaoce usluga čija je kvota grupisana prema izlaznoj adresi, član skupa koji dijeli zabilježenu izlaznu adresu nedavno odbijenog člana rangira se odmah iza ispravnih članova. Utječe samo na redoslijed, bez isključivanja. Zahtijeva `PROXY_SKIP_RECENTLY_FAILED`, koji stvara signal odbijanja koji ova zastavica čita. |
| `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Period ograničenja (ms) koji ograničava ponovljena `proxy.set_aside` webhook upozorenja po članu skupa, tako da niz odbijanja šalje jedan događaj. Čita se pri svakom emitovanju. Ograničeno na `1000..3600000`; vrijednost izvan raspona ili vrijednost koju nije moguće pročitati tiho se vraća na zadanu vrijednost. |
| `HTTP_PROXY` | _(nije postavljeno)_ | Node.js standard | HTTP proxy za odlazne pozive. |
| `HTTPS_PROXY` | _(nije postavljeno)_ | Node.js standard | HTTPS proxy za odlazne pozive. |
| `ALL_PROXY` | _(nije postavljeno)_ | Node.js standard | Univerzalni proxy (podržava `socks5://`). |
| `OMNIROUTE_PROXY_ECHO_URL` | _(nije postavljeno)_ | `src/lib/proxyEchoTarget.ts` | Fiksira odredište za prikaz IP adrese koje koriste probe izlaznog prometa proxyja na jedan URL. Ako nije postavljeno, proba prvo pokušava `api64.ipify.org`, a zatim `api4.ipify.org`, kako tuneli koji podržavaju samo IPv4 ne bi bili prijavljeni kao nedostupni (#9694). |
| `NO_PROXY` | _(nije postavljeno)_ | Node.js standard | Nazivi hostova/IP adrese odvojeni zarezima za zaobilaženje proxyja. |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Maksimalan broj istovremenih soketa po keširanom dispečeru HTTP/SOCKS proxyja. 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 veće od `256` ograničene su na `256`. |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Vremensko ograničenje SOCKS5 rukovanja (povezivanja) u ms. Povećajte ga kada je jedan host rezidencijalnog pristupnika izložen velikom broju istovremenih zahtjeva (npr. 100 istovremenih zahtjeva) — stvarno rukovanje može trajati duže od 10 s kada je skup veza zasićen, iako je proxy dostupan, što bi se inače pogrešno prikazalo kao `[Proxy Fast-Fail] Proxy unreachable`. Ograničeno na `120000`. |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Kada je postavljeno na `false` (zadano), zahtjev čiji dodijeljeni proxy nije moguće razriješiti biva **odbijen (fail-closed)** umjesto preusmjeravanja na direktnu vezu — time se sprečava curenje stvarne IP adrese. Postavite na `true` da biste vratili raniji DIRECT rezervni način rada. |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Lažira TLS otisak koristeći wreq-js (oponaša Chrome 124). Suprotstavlja se blokiranju na osnovu JA3/JA4. |
| `TLS_FINGERPRINT_PROVIDERS` | _(nije postavljeno)_ | `open-sse/utils/proxyFetch.ts` | Lista dozvoljenih pružalaca odvojenih zarezima za novo usmjeravanje TLS-a putem proxyja (`open-sse/utils/proxyFetch.ts`). Direktni TLS zadržava ranije ponašanje kada vrijednost nije postavljena; samo se ovi pružaoci usmjeravaju kroz most za otisak Chrome 124. Groq (`api.groq.com`) je isključen čak i kada lista dozvoljenih nije postavljena jer Chrome JA3 pokreće Cloudflare 1010, dok izvorni undici uspješno pristupa API-ju. |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Omogućava kontekstu preglednika Playwright za Claude Turnstile da zanemari 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 identifikacije otiska** | `ENABLE_TLS_FINGERPRINT=true` — zahtijeva `wreq-js` (uključen) |
| **Kontrolirani izlazni promet / bez direktnog pristupa** | Ostavite `PROXY_FAIL_OPEN=false` (zadano). Zahtjevi se izričito odbijaju kada proxy nije dostupan, umjesto da podaci cure putem direktne veze. |
| **Raniji način rada / razvoj — dozvoli direktnu rezervnu vezu** | `PROXY_FAIL_OPEN=true`. Vraća ponašanje prije sigurnosnog pooštravanja: direktna veza koristi se kada razrješavanje proxyja ne uspije. |
> **Napomena (zaobilaženje NVIDIA validacije — #3226):** NVIDIA krajnja tačka za validaciju API ključa
> zastaje kada se usmjerava kroz globalni proxy/dohvat s izmijenjenim TLS-om (undici dispečer → 504).
> `src/lib/providers/validation.ts::directHttpsRequest()` namjerno zaobilazi
> zakrpu proxyja za taj jedan validacijski poziv koristeći `safeOutboundFetch({ bypassProxyPatch: true })`.
> Ovo je dokumentiran, ograničen izuzetak — **ne** utiče na izlazni promet chata/upotrebe.
> Opseg zaobilaženja fiksiran je pomoću `tests/unit/proxy-bypass-scope-guard-3226.test.ts`.
---
## 9. Integracija CLI alata
Kontroliše kako OmniRoute otkriva i pokreće CLI pomoćne procese (Claude Code, Codex itd.).
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| --------------------------------- | -------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = pretražuje sistemski PATH; `manual` = koristi samo eksplicitno navedene putanje. |
| `CLI_EXTRA_PATHS` | _(nije postavljeno)_ | `src/shared/services/cliRuntime.ts` | Dodatni PATH unosi za pronalaženje CLI binarnih datoteka (odvojeni dvotačkama). |
| `CLI_CONFIG_HOME` | _(nije postavljeno)_ | `src/shared/services/cliRuntime.ts` | Zamjenjuje početni direktorij za čitanje CLI konfiguracija (`~/.claude`, `~/.codex`). Mora biti apsolutan i unutar početnog direktorija procesa — **ili**, u kontejneru, bind-montirana putanja (tako funkcionira `/host-home`). Za sve ostalo koristi se početni direktorij. |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Dozvoljava OmniRouteu da zapisuje CLI konfiguracijske datoteke (obnavljanje tokena, podaci sesije). Postavite na `false` kako bi svaki pokušaj zapisivanja CLI konfiguracije bio neuspješan uz eksplicitnu grešku „zapisivanje je onemogućeno“. |
| `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 binarne datoteke Cursor agenta. Ako nije navedena, detekcija prvo pokušava s `agent`, a zatim prelazi 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` | Direktorij sistemskog stanja za 5dive (autorizacijski profili u vlasništvu root korisnika); odgovara zadanoj vrijednosti STATE_DIR samog 5divea. |
| `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 za detekciju i provjere stanja na strani servera; `omniroute run gemini` pronalazi binarnu datoteku `gemini` putem 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 Hermes binarne datoteke. Dijele je obje stavke kataloga (`hermes` i `hermes-agent`). |
| `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do ForgeCode CLI binarne datoteke. |
| `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do jcode CLI binarne datoteke. |
| `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do DeepSeek TUI binarne datoteke. |
| `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do CodeWhale CLI binarne datoteke. |
| `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Smelt CLI binarne datoteke. |
| `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Pi (pi-coding-agent) binarne datoteke. |
| `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Crush CLI binarne datoteke. |
| `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do binarne datoteke Oh My Pi (`omp`) agenta. |
| `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Letta CLI binarne datoteke. |
| `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Prime Agent (Prime Intellect) binarne datoteke. |
| `CLI_WINDSURF_BIN` | _(nema)_ | `src/shared/services/cliRuntime.ts` | Prilagođena putanja do Windsurf binarne datoteke. Windsurf se isporučuje **bez zadane naredbe** — otkrivanje binarne datoteke ostaje onemogućeno dok se ovo ne postavi. |
| `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Prilagođena putanja do Devin CLI binarne datoteke (v3.8.0). Koristi je Windsurf/Devin izvršitelj. |
| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | Devin Desktop `ide_version`. Vrijednosti koje ga nadjačavaju 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` | Priloženi Codeium/jezički server `extension_version`, koji se razlikuje od Desktop `ide_version`. Vrijednosti koje ga nadjačavaju moraju koristiti `x.y.z`; za nevažeće vrijednosti koristi se priložena zadana vrijednost. |
| `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Nadjačavanje Devin CLI-ja samo za agentski most. Izvršitelj prihvata samo lokalni nadređeni ACP stdio proces. |
| `DEVIN_AGENTIC_HOME` | _(obavezno)_ | `open-sse/executors/devin-cli-agentic.ts` | Apsolutna izolirana početna mapa za agentski Devin potproces; prihvaćene putanje mosta su `/home/bridge` i putanje `.sandbox` lokalne za zadatak (na Windowsu, `C:\...\.sandbox\...`). |
| `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Maksimalno trajanje jednog Devin ACP ciklusa prije nego što most prekine podređeni proces i vrati eksplicitno prekoračenje vremena. |
| `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | Glavni pseudonim modela Claude Code za izolirani most. Aktivni testni okvir zamjenjuje primjer modelom koji vraća trenutni Devin račun. |
| `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Pseudonim izoliranog mosta koji se koristi kada Claude Code zatraži svoj zadani Sonnet model. |
| `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Pseudonim izoliranog mosta koji se koristi kada Claude Code zatraži svoj zadani Opus model. |
| `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Pseudonim izoliranog mosta koji se koristi kada Claude Code zatraži svoj zadani Haiku model. |
| `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Pseudonim izoliranog mosta koji se koristi za Claude Code podagente. |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Opcionalno zamjenjuje API za upravljanje korisničkim mjestima Codeiuma koji koristi Devin CLI kvota (`GetUserStatus`). |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Zamjenjuje apsolutnu putanju do Augment (Auggie) CLI binarne datoteke koju koristi lokalni `auggie` dobavljač. Ako nije postavljeno, koristi se `CLI_AUGGIE_BIN`, a zatim pretraga varijable PATH. |
| `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Alternativna varijabla za zamjenu putanje do Augment (Auggie) CLI binarne datoteke (provjerava se nakon `AUGGIE_BIN`). |
| `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Binarna datoteka koja se koristi za stdio klijent lokalnog `zcode` dobavljača. Ako nije postavljeno, koristi se `zcode` iz varijable PATH. |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | JSON niz (≤16 stringova) dodatnih argumenata koji se prosljeđuju binarnoj datoteci `zcode` kada se pokreće putem `cliTools`. |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Radni direktorij za podproces ZCode aplikacijskog servera. |
| `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Zamjenjuje ID dobavljača koji se šalje aplikacijskom serveru. |
| `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Korijenski direktorij izvršnog okruženja ZCode aplikacijskog servera (gdje se nalaze uključeni `node` i `zcode-server.cjs`). |
| `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Node izvršna datoteka koja se koristi za pokretanje ZCode aplikacijskog servera. |
| `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Ulazna skripta aplikacijskog servera koja se koristi za pokretanje ZCode servera. |
| `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Vremensko ograničenje pokretanja (ms) nakon kojeg se pokretanje ZCode aplikacijskog servera smatra neuspjelim. |
| `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | Vremensko ograničenje RPC-a po zahtjevu (ms) za poziv ZCode aplikacijskog servera. |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Maksimalno trajanje (ms) jednog ZCode ciklusa prije nego što ga nadzornik prekine zbog isteka vremena. |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Interval provjere (ms) završetka ZCode ciklusa. |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Početni direktorij Hermes Agenta u kojem OmniRoute čita/piše Hermes CLI konfiguraciju. Odgovara varijabli okruženja koju Hermes PowerShell instalacijski program postavlja na Windowsu (`%LOCALAPPDATA%\hermes`). |
### Automatska sinhronizacija CLI profila
Ove zastavice funkcionalnosti moraju se izričito uključiti i prema zadanim postavkama su isključene. Također se mogu uključiti ili isključiti putem
CLI Code kontrolne ploče.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------- | ----------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Nakon sinhronizacije modela dobavljača, automatski ponovo zapisuje datoteke profila `~/.codex/*.config.toml` iz aktuelnog kataloga. Zahtijeva `CLI_ALLOW_CONFIG_WRITES`; nikada ne mijenja aktivnu/zadanu Codex konfiguraciju, autentifikaciju, Codex-lb postavke niti izbor dobavljača. |
| `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Nakon sinhronizacije modela dobavljača, automatski ponovo zapisuje datoteke Claude Code profila `~/.claude/profiles//settings.json` iz aktuelnog kataloga. Zahtijeva `CLI_ALLOW_CONFIG_WRITES`; nikada ne mijenja aktivnu/zadanu Claude konfiguraciju, autentifikaciju niti izbor dobavljača. |
### Docker primjer
```bash
# Montirajte binarne datoteke hosta u kontejner i navedite OmniRouteu 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 zaista bind-montirana s
hosta — uparite je s montiranjima poput `~/.codex:/host-home/.codex:rw` (pogledajte
profil `host` u datoteci `docker-compose.yml`). Putanja koja se ne nalazi unutar
matičnog direktorija korisnika kontejnera niti predstavlja bind-montiranje zanemaruje se, jer bi
se podaci zapisani tamo izgubili kada se kontejner ponovo kreira.
Slika se pokreće kao `USER node`, pa nemontirani `/root` **nije** valjana
zamjenska vrijednost.
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ---------------------------------------- | -------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(automatski)_ | `src/shared/utils/containerEnv.ts` | Prisilno uključuje (`1`/`true`) ili isključuje (`0`/`false`) otkrivanje kontejnera. Potrebno je samo na izvršnim okruženjima koja automatsko otkrivanje ne prepozna. |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Ipak dozvoljava CLI alatu zapisivanje konfiguracije na nemontiranu putanju kontejnera. CLI ekvivalent je `--allow-container-write`. |
### Pomoćne varijable za CLI binarnu datoteku (`omniroute`)
Ove varijable podešavaju ponašanje same CLI binarne datoteke `omniroute` (ne prethodno
navedeno otkrivanje pratećeg procesa).
| Varijabla | Zadano | Izvorna datoteka | Opis |
| ------------------------------------- | --------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_LANG` | _(sistemski)_ | `bin/cli/i18n.mjs` | Prisilno postavlja jezik CLI izlaza. Lokal prema standardu BCP-47 (npr. `en`, `pt-BR`). Ima prednost nad sistemskim varijablama lokala (LC_ALL, LC_MESSAGES). |
| `OMNIROUTE_SHOW_LOG` | _(nije postavljeno)_ | `bin/cli/runtime/processSupervisor.mjs` | Postavite na `1` kako bi se standardni izlaz/izlaz za greške servera proslijedio terminalu u nadziranom režimu. Ekvivalentno opciji `--log` naredbe `omniroute serve`. |
| `OMNIROUTE_CLI_TOKEN` | _(nije postavljeno)_ | `bin/cli/api.mjs` | Token za autentifikaciju mašine koji se umeće kao zaglavlje `x-omniroute-cli-token`. Automatski se generira u zadatku 8.12. |
| `GEMINI_CLI_HOME` | _(nije postavljeno)_ | `bin/cli/commands/setup-gemini.mjs` | Trajni korijenski matični direktorij za Gemini; jednokratno pokretanje koristi privremeni izolirani matični direktorij. |
| `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Period tolerancije u milisekundama prije prisilnog zaustavljanja podređenog CLI procesa kojem je poslan signal. |
| `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(nije postavljeno)_ | `bin/omniroute.mjs` | Postavite na 1 uz eksplicitni DATA_DIR kako biste preskočili datoteku varijabli okruženja zadanog korisničkog direktorija podataka. |
| `OMNIROUTE_SYNC_TOKEN` | _(nije postavljeno)_ | `bin/cli/commands/sync.mjs` | Token za sinhronizaciju za `omniroute sync bundle` (`GET /api/sync/bundle` prihvata samo token za sinhronizaciju, ne i API ključ). Ekvivalentno opciji `--token`. |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | Vremensko ograničenje HTTP zahtjeva po pokušaju (ms) za zahtjeve CLI-ja prema serveru. |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Maksimalno vrijeme (ms) koje CLI čeka krajnju tačku provjere stanja servera prije ispisivanja 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/postepenog čekanja na stderr tokom CLI naredbi. |
| `OMNIROUTE_PLUGIN_PATH` | _(nije postavljeno)_ | `bin/cli/plugins.mjs` | Prilagođeni direktorij za pronalaženje CLI dodataka (paketi `omniroute-cmd-*`). Kada nije postavljeno, zadana vrijednost je `~/.omniroute/plugins/`. Samo za CLI — nikada ne dolazi do serverskog skenera dodataka, na koji ukazuje `OMNIROUTE_PLUGINS_DIR` (odjeljak 2). |
| `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(nije postavljeno)_ | `bin/omniroute.mjs` | Sprječava CLI obavijest o ažuriranju pri završetku procesa kada je postavljeno na bilo koju vrijednost koja nije prazna. Obavijest ostaje zasebno onemogućena u CI-ju, tihom režimu i režimima netekstualnog izlaza. |
| `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(izvedeno)_ | `bin/cli/commands/doctor.mjs` | URL dostupnosti koji provjerava `omniroute doctor`. Programska opcija `livenessUrl` ima prednost; u suprotnom se ova vrijednost koristi doslovno. Ako nije postavljena, CLI izvodi krajnju tačku `/api/health/degradation` lokalne nadzorne ploče. |
| `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Putanja kataloga pružalaca koju koriste CLI naredbe za pružaoce. Programska opcija `catalogPath` ima prednost. Apsolutne putanje koriste se kakve jesu; relativne putanje razrješavaju se iz korijena projekta. Ako nije postavljena, CLI koristi direktorij konstanti pružalaca, uz naslijeđenu datoteku `providers.ts` kao rezervnu opciju. |
| `OMNIROUTE_PROVIDER_TEST_MODEL` | _(zadana vrijednost pružaoca)_ | `bin/cli/provider-test.mjs` | Globalni rezervni model za CLI testove veze s pružaocima. Redoslijed prioriteta je konfigurirani model veze, zamjenski model specifičan za pružaoca, ova vrijednost, a zatim ugrađeni testni model pružaoca. |
---
## 10. Interne integracije agenata i MCP-a
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_BASE_URL` | automatsko otkrivanje | `open-sse/mcp-server/server.ts` | Eksplicitni URL putem kojeg MCP/A2A alati pristupaju OmniRouteu. Nadjačava automatsko otkrivanje lokalnog hosta. |
| `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 MCP revizijskog dnevnika. |
| `ROUTER_API_KEY` | _(nije postavljeno)_ | Naslijeđeno | Naslijeđeni pseudonim za `OMNIROUTE_API_KEY`. |
| `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | Broj dana tokom kojih se historija A2A zadataka čuva u lokalnoj bazi podataka prije nego što svakodnevno čišćenje izbriše red. Ako nije postavljeno, nije broj ili je `<= 0`, koristi se `30`. |
| `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | Prekidač za isključivanje funkcije praćenja pogodaka A2A memorije. Postavite na `0` da biste u potpunosti preskočili pretragu prisjećanja iz memorije za zadatak; bilo koja druga vrijednost (uključujući i nepostavljenu) ostavlja je omogućenom. |
| `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Omogućava vanmrežnu/lokalnu krajnju tačku agenta za probleme za zabilježenu trijažu. Ostavite onemogućeno osim ako izričito ne pokrećete lokalne tokove rada zabilježene trijaže. |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(nije postavljeno)_ | `src/lib/issueAgent/execution.ts` | Vremensko ograničenje (ms) za jedno pokretanje zabilježene trijaže agenta za probleme. Ograničava se na interni maksimum; ako nije postavljeno ili je nevažeće, koristi se ugrađena zadana vrijednost. |
| `OMNIROUTE_CONTEXT` | _(aktivni kontekst)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Kontekst/profil udaljenog načina rada CLI-ja za `omniroute` naredbe; nadjačava aktivni kontekst u lokalnom spremištu konteksta. Ekvivalentno opciji `--context `. |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Onemogućava opcionalni `keytar` pozadinski sistem za pohranu CLI vjerodajnica u privjesku ključeva operativnog sistema. Kada je omogućeno, vjerodajnice ostaju u datoteci `config.json` s načinom pristupa `0600`, a CLI prikazuje jednokratno upozorenje o korištenju rezervne opcije; namijenjeno za svjesno korištenje bez grafičkog interfejsa/u kontejneru. |
| `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Primjenjuje kontrolu pristupa zasnovanu na opsezima za pozive MCP alata. |
| `OMNIROUTE_MCP_SCOPES` | _(svi)_ | `open-sse/mcp-server/server.ts` | Opsezi odvojeni zarezima: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. |
| `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | Komprimira 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` | Vremensko ograničenje za prekid (ms) internih upravljačkih čitanja MCP servera (stanje, otpornost, kombinacije, kvota, korištenje). |
| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Vremensko ograničenje prekida (ms) za MCP korake koji čekaju pružaoca usluge (`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, jedna po indeksiranom korijenskom direktoriju). Ograničeno na najmanje `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 kvota pružaoca usluge. |
| `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Razmak (ms) između uzastopnih OAuth dohvatanja kvota tokom masovne sinhronizacije; OAuth veze se dohvaćaju jedna po jedna kako bi se izbjeglo preopterećenje nadređenog servisa. `0` isključuje ovo ponašanje (istovremeno izvršavanje). |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Minimalni interval (ms) između uzastopnih dohvatanja kvota s nadređenog servisa na putanji provjere/nadzora prije svakog zahtjeva; raspoređuje istovremene mrežne pozive tako da mnogo računa s jedne IP adrese ne preoptereti nadređeni servis. Povezano s dohvaćanjem kvota za Codex (`/wham/usage`), DeepSeek, Bailian (oba mjesta dohvatanja), OpenCode i Crof (#6009, #6911). Generička putanja otpreme `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/itd.) još nije obuhvaćena — prati se zasebno. Pogoci u kešu ostaju nepromijenjeni. `0` onemogućava; ograničeno na `0..5000`. |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Odgoda (ms) prije osvježavanja ograničenja pružaoca usluge nakon stvarnog događaja korištenja, čime se API-ju za kvote nadređenog servisa daje vrijeme da registruje potrošnju. |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | automatsko otkrivanje | `open-sse/services/adobeFireflyBrowserLogin.ts` | Apsolutna putanja do sistemske izvršne datoteke preglednika Chrome ili Edge koja se koristi za interaktivnu prijavu na Adobe Firefly i obnovu izvan ekrana. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Održava IMS i stanje rizika preglednika ažurnim pomoću Chrome CDP sesija ograničenih na račun. Postavite na `0` da onemogućite obnovu putem preglednika. |
| `ADOBE_FIREFLY_SESSION_DISK` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Čuva popravljene Adobe sesije u `DATA_DIR` između ponovnih 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 slanja zahtjeva za generisanje u Adobe Firefly; `0` onemogućava razmak. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Dodatni period mirovanja u milisekundama nakon svakog trećeg uspješnog slanja Adobe zahtjeva. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | Osnovno eksponencijalno čekanje u milisekundama nakon privremenih Adobe 408 odgovora; kombinovano s razmakom između slanja tokom najviše pet pokušaja. |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Onemogućava sve pozadinske usluge (sinhronizaciju, određivanje cijena, osvježavanje modela). Korisno za CI/testiranje. |
| `OMNIROUTE_HEADLESS` | _(nije postavljeno)_ | `src/lib/system/headless.ts` | Pokretanje samo proxy mehanizma: 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 kada se otkrije automatizirano testiranje. Postavite `1` da nadjačate heuristiku testiranja. |
| `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | Učestalost provjere resetovanja budžeta (ms). Minimalno `10000`. |
| `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | Učestalost proaktivnog oporavka veze nakon perioda hlađenja (ms): ponovo provjerava veze čiji je prolazni `rate_limited_until` istekao, izvan kritične putanje zahtjeva. Minimalno `5000`. |
| `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | Onemogućava planer proaktivnog oporavka veze nakon perioda hlađenja (lijeni oporavak u `getProviderCredentials` i dalje se primjenjuje). |
| `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Učestalost čišćenja keša rezonovanja (ms). Minimalno `60000`. |
| `OMNIROUTE_REASONING_MIN_BUDGET` | _nije postavljeno_ (onemogućeno) | `open-sse/services/reasoningTokenBuffer.ts` | Opcionalna donja granica izlaznih budžeta za modele razmišljanja: pozivaočev `max_tokens` u rasponu `[256, floor)` povećava se do donje granice (ograničeno izlaznim limitom modela). Nije postavljeno = budžeti klijenta nikada se ne povećavaju (#9507). |
| `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _nije postavljeno_ (onemogućeno) | `open-sse/services/learnedReasoningEffortCaps.ts` | Opcionalni ID-ovi pružalaca odvojeni zarezima (ili `*`): kada odgovor 400/422 za `reasoning_effort` ne navodi nijedan prihvaćeni skup, pokušava ponovo s jednim nivoom niže (nikada ispod `low`) i pamti taj nivo samo ako je na probni zahtjev odgovoreno (#14895). |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Cron izraz (UTC) za zadatak izvoza evidencije poziva koji obrađuje svako omogućeno odredište za izvoz evidencije. |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Interval provjeravanja (ms) za ponovno učitavanje konfiguracije bez prekida rada. Vrijednost manja od `1000` se odbija. |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(omogućeno)_ | `src/lib/db/apiKeys.ts` | Postavite na `1` da biste zaobišli Redis keš za provjeru autentičnosti API ključeva (prisiljava čitanje iz baze podataka). |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | Vjeruje pravilima RTK filtera projekta kojima upravlja korisnik 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 kontrolne ploče ima prednost nad ovom varijablom okruženja. |
| `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | Maksimalan broj istovremenih sinhronih RTK/Caveman radnika; višak zadataka čeka po FIFO principu. |
| `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Vremensko ograničenje po zadatku u milisekundama. Radnici kojima istekne vrijeme prekidaju se, a zahtjev se propušta neizmijenjen. |
| `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | Vrijeme neaktivnosti u milisekundama prije nego što se neiskorišteni radnik za kompresiju prekine. |
| `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Ograničenje V8 memorije gomile stare generacije u MB za svakog radnika za kompresiju, u svim režimima (minimalno `128`). Zadatak koji ga premaši propušta se nekomprimiran umjesto da povećava memorijsku gomilu mrežnog prolaza. |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Glavni prekidač T02 zaštitnog mehanizma po mehanizmu za složene cjevovode. **Opcionalno (podrazumijevano isključeno)** — kada je uključeno, mehanizam koji više puta prijavi izuzetak kroz više zahtjeva preskače se (zahtjev se propušta) tokom perioda hlađenja; isključeno = naslijeđeno ponašanje identično na nivou bajtova. |
| `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Broj uzastopnih neuspjeha kroz više zahtjeva prije nego što se zaštitni mehanizam za dati mehanizam aktivira. |
| `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Broj milisekundi tokom kojih se otvoreni mehanizam preskače prije poluotvorene provjere. |
| `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | T08/H8 faktor postepenog povećanja na osnovu povratnih informacija o CCR preuzimanju: svako prethodno preuzimanje pohranjenog bloka linearno povećava njegov efektivni `minChars` (često preuzimani sadržaj se manje komprimuje; `>=3` preuzimanja = nikad se ne komprimuje). `1` onemogućava postepeno povećanje (samo binarno preskakanje na pragu). |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | Trajna CCR pohrana blokova (#9061). Koristi SQLite kao podlogu za pohranu u memoriji kako bi blok preživio LRU izbacivanje, TTL, ponovno pokretanje ili preuzimanje koje završi na drugoj instanci. Postavite na `false` da bi se blokovi čuvali samo u memoriji. Blokovi veći od 512KB i izvršna okruženja u oblaku bez obzira na to ostaju ograničeni na memoriju. |
| `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Glavni prekidač T08/H5 zamrzavanja prefiksa na osnovu zabilježene upotrebe. **Opcionalno (zadano isključeno)** — kada je uključeno, sistemski upit zabilježen `>=` praga tretira se kao stabilan prefiks koji se može keširati i izuzima se iz kompresije čak i za pružaoce koje statička heuristika keša ne prepozna (zamrzavanje samo _čuva_, nikad ne mijenja). |
| `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Broj zapažanja sistemskog upita prije nego što se počne tretirati kao zamrznuti stabilni prefiks. |
| `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Skripta za početno postavljanje postavlja na `true` nakon početnog podešavanja. Kontroliše vidljivost čarobnjaka za podešavanje. |
| `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Rezervna opcija: dozvoljava tijelu zahtjeva da nadjača polje Antigravity projekta. |
| `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Pravilo za Google One AI kredite: `off` nikad ne dodaje kredite, `retry` ih dodaje jednom nakon odgovarajuće greške kvote 429, a `always` ih dodaje pri prvom zahtjevu. |
| `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Dozvoljava prevodiocu Antigravity zahtjeva da preskoči strogu provjeru potpisa CLI zahtjeva kada nadređeni servis odbije stvarne potpise (način za otklanjanje grešaka/zastarjeli CLI). 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 datoteke tokena za Antigravity CLI (agy) pri automatski otkrivenom uvozu lokalne prijave. |
### OAuth CLI most (interno)
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------- | --------------------- | ------------------------------- | ---------------------------------------------------- |
| `OMNIROUTE_SERVER` | automatsko otkrivanje | `src/lib/oauth/config/index.ts` | URL servera za CLI↔OmniRoute autentifikacijski most. |
| `OMNIROUTE_TOKEN` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Autentifikacijski token za CLI most. |
| `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | ID korisnika za sesije CLI mosta. |
| `SERVER_URL` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Naslijeđeni pseudonim za `OMNIROUTE_SERVER`. |
| `CLI_TOKEN` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Naslijeđeni pseudonim za `OMNIROUTE_TOKEN`. |
| `CLI_USER_ID` | _(nije postavljeno)_ | `src/lib/oauth/config/index.ts` | Naslijeđeni pseudonim za `OMNIROUTE_USER_ID`. |
---
## 11. Vjerodajnice OAuth pružatelja
Ugrađene vjerodajnice za **lokalni razvoj**. Za udaljene implementacije registrujte vlastite vjerodajnice u konzoli za programere svakog pružatelja.
| Varijabla | Pružatelj | Napomene |
| ------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Javni klijent — tajna nije potrebna. |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Zamjenski URI za preusmjeravanje. Zadana vrijednost: `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) | Opcionalna zamjenska vrijednost za ID javnog klijenta Muse CLI toka za uređaje. Ostavite nepostavljeno da biste koristili 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 | Opcionalna zamjenska vrijednost za ID OAuth klijenta za GitHub Enterprise Copilot. Ako nije postavljena, koristi javnu zadanu vrijednost varijable `GITHUB_OAUTH_CLIENT_ID`. |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | Opcionalna zamjenska vrijednost za ID integracije GitHub Copilot klijenta koji se šalje u zaglavljima `Copilot-Integration-Id` i `Editor-Plugin-Version`. Zadana vrijednost je `copilot-developer-cli`. |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | Rezervni API ključ koji koristi `open-sse/executors/devin-cli.ts` kada vjerodajnica za pojedinačnu vezu nije dostupna. Opcionalno. |
| `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Prilagođena putanja do izvršne datoteke Devin CLI (`devin`). Razrješava je `open-sse/executors/devin-cli.ts`. |
| `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | ID OAuth klijenta za GitLab Duo. Registrujte aplikaciju na `https://gitlab.com/-/profile/applications` s URI-jem za preusmjeravanje `/callback` i opsezima `api, read_user, openid, profile, email`. Ako nije postavljen, koristi `GITLAB_OAUTH_CLIENT_ID`. |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Tajna OAuth klijenta za GitLab Duo. Opcionalno — PKCE tok ne zahtijeva tajnu. Ako nije postavljena, koristi `GITLAB_OAUTH_CLIENT_SECRET`. |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Zamjenski osnovni URL za GitLab (GitLab s vlastitim hostingom). Zadana vrijednost je `https://gitlab.com`. Ako nije postavljen, koristi `GITLAB_BASE_URL`. |
| `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Zastarjela rezervna opcija za `GITLAB_DUO_BASE_URL`. Koristi se kada varijanta `_DUO_` 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 kako biste omogućili Qoder OAuth. |
| `QODER_OAUTH_TOKEN_URL` | Qoder | — |
| `QODER_OAUTH_USERINFO_URL` | Qoder | — |
| `QODER_OAUTH_CLIENT_ID` | Qoder | — |
| `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Rezervni direktni API ključ (zaobilazi OAuth). |
| `QODER_CLI_WORKSPACE` | Qoder | ID radnog prostora za Qoder CLI. |
| `OMNIROUTE_QODER_WORKSPACE` | Qoder | Alias za `QODER_CLI_WORKSPACE`. |
| `QODER_CLI_CONFIG_DIR` | Qoder | Zamjenjuje direktorij konfiguracije za Qoder CLI (izolirana PAT sesija, sprječava prepisivanje podataka za prijavu putem preglednika). |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Frontend `tk` token koji se šalje kao `validated` na `/api/chat`. Obavezan je kada Blackbox provodi podudaranje tokena; u suprotnom OmniRoute kao rezervnu opciju koristi nasumični UUID. Pogledajte problem #2252. |
| `VISION_BRIDGE_BASE_URL` | Zaštitni mehanizam Vision Bridge | Osnovni URL kompatibilan s OpenAI-jem za vision-bridge pozive koji nisu Anthropic. Zadano koristi zastarjelu OpenAI URL varijablu okruženja ili api.openai.com. Usmjerite ga na OmniRouteovu `/v1` samopetlju ili bilo koju krajnju tačku kompatibilnu s OpenAI-jem (Gemini OpenAI-compat, OpenRouter). Problem #2232. Kada je URL OmniRouteov vlastiti `/v1`, podzahtjev za opisivanje šalje `x-omniroute-admission-bypass: internal` i autentificira se pomoću razriješene vjerodajnice samopetlje (`sk_omniroute` sentinel u lokalnom načinu rada ili `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350), kako bi implementacije s `REQUIRE_API_KEY=true` funkcionirale. |
| `VISION_BRIDGE_API_KEY` | Zaštitni mehanizam Vision Bridge | API ključ za gornji URL. Zamjenjuje OpenAI / Google varijable okruženja po pružaocu za vision-bridge pozive koji nisu Anthropic. Anthropic modeli zadržavaju svoju namjensku putanju Anthropic ključa. Problem #2232. |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Zaštitni mehanizam Vision Bridge | Koliko dugo se ishod usmjeravanja „nema upotrebljivog kandidata“ pohranjuje u predmemoriju, u ms (zadano `30000`). Nevažeće ili negativne vrijednosti vraćaju se na zadanu vrijednost; `0` onemogućava negativnu predmemoriju. Izvor: `src/lib/guardrails/visionBridgeRouter.ts`. |
> [!WARNING]
>
> 1. Idite na [Google Cloud Console → Vjerodajnice](https://console.cloud.google.com/apis/credentials)
> 2. Kreirajte OAuth 2.0 ID klijenta (vrsta: „Web application“)
> 3. Dodajte URL svog servera kao autorizirani URI za preusmjeravanje
> 4. Zamijenite vrijednosti vjerodajnica u `.env`.
---
## 12. Zamjene User-Agent vrijednosti pružatelja usluga
Zamijenite zaglavlje `User-Agent` koje se šalje svakom nadređenom pružatelju usluga. Izvršna bazna klasa ga dinamički određuje tokom izvođenja:
```
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` kako biste nazive alata vanjskog harnessa proslijedili Anthropic-u bez izmjena na obje putanje usmjerene prema Anthropic-u (izvorni OAuth i CLIProxyAPI). Izvršitelj prema zadanim postavkama deterministički dodjeljuje pseudonime nazivima alata koji nisu iz Claude Codea (kanonsko mapiranje Claude Codea gdje postoji, inače PascalCase) i vraća ih na izvorne nazive u odgovoru putem `_toolNameMap`, tako da harnessi s alatima imenovanim u snake_case formatu 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` | Zasebno zamijenite verziju Codex klijenta, nezavisno od punog UA niza |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | Zasebno zamijenite oglašenu verziju Claude Codea, nezavisno od `CLAUDE_USER_AGENT`. Anthropic ograničava pristup nekim modelima na osnovu ove vrijednosti (#12417). |
| `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Zamijenite sufiks od 3 znaka koji OmniRoute dodaje vrijednosti `cc_version=` u Claude bloku za naplatu. Povećajte ga zajedno s `CLAUDE_CODE_CLIENT_VERSION` — fiksiranje samo verzije oglašava par `version.revision` koji nijedna stvarna binarna datoteka ne emitira. |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | Zasebno zamijenite 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` | Zamijenite `clientId` (javni ID) Kiro koda uređaja za prijavu putem društvenih mreža |
| `KIRO_VERIFY_FULL_CRC` | `false` | Opcionalno: potpuna provjera CRC-a poruke za svaki okvir u Kiro toku događaja (za otklanjanje grešaka u oštećenim tokovima) |
| `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 zamjene User-Agent vrijednosti za **bilo kojeg** pružatelja usluga koristeći obrazac `{PROVIDER_ID}_USER_AGENT`. Izvršitelj dinamički konstruira naziv varijable okruženja.
---
## 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 vremenskog ograničenja
Sve vrijednosti su izražene u **milisekundama**. Centralizirano razrješavanje nalazi se u `src/shared/utils/runtimeTimeouts.ts`.
### Hijerarhija vremenskih ograničenja
```
REQUEST_TIMEOUT_MS (globalno nadjačavanje)
├─→ FETCH_TIMEOUT_MS (pozivi prema vanjskim pružateljima, 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 | Zadana vrijednost | 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` | Ukupno vremensko ograničenje HTTP zahtjeva za pozive prema nadređenom pružaocu usluge. |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | Maksimalna tišina između neobrađenih bajtova iz nadređenog izvora prije prekida. Modeli s proširenim razmišljanjem rijetko pauziraju >90 s. |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Maksimalno ukupno trajanje aktivnog SSE toka; nikada se ne poništava pri prijemu bajtova iz nadređenog izvora i nezavisno je od `REQUEST_TIMEOUT_MS`. Izvedeno je iz najveće vrijednosti `timeoutMs` po modelu u registru (1200000, Codex), uz marginu od 60000, tako da model kojem je dopušteno koristiti puni vremenski budžet nikada ne bude prekinut usred odgovora. Postavite na `0` da biste ga onemogućili. |
| `OMNIROUTE_SSE_COMMENTS` | _(onemogućeno)_ | Određuje smije li OmniRoute emitovati SSE linije komentara `:` (npr. `: keepalive` signal aktivnosti i završne metapodatke `x-omniroute-*`). Zadano je onemogućeno (#10524) jer strogi klijenti kompatibilni s OpenAI-jem izvršavaju JSON.parse za svaku SSE liniju i ruše se na komentarima `:`; to ne utiče na `data:` signale aktivnosti. Postavite `on`/`true`/`1`/`yes` da biste ih ponovo omogućili. Koristi ga `open-sse/utils/sseHeartbeat.ts`. |
| `SSE_COALESCE_MS` | `0` (isključeno) | Izborno: spaja uzastopne Claude događaje `content_block_delta` (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 nikada se ne spajaju. Primjenjuje se na svaki tip delte, osim ako je postavljena varijabla za određeni tip navedena ispod. Koristi ga `open-sse/utils/sseDeltaCoalesce.ts`. |
| `SSE_COALESCE_THINKING_MS` | `0` (isključeno) | Nadjačavanje vrijednosti `SSE_COALESCE_MS` za tip `thinking_delta`. |
| `SSE_COALESCE_TEXT_MS` | `0` (isključeno) | Nadjačavanje vrijednosti `SSE_COALESCE_MS` za tip `text_delta`. |
| `SSE_COALESCE_INPUT_JSON_MS` | `0` (isključeno) | Nadjačavanje vrijednosti `SSE_COALESCE_MS` za tip `input_json_delta`. |
| `SSE_FRAME_COALESCE_MS` | `0` (isključeno) | Izborno: grupiše SSE okvire proslijeđene unutar N ms u jedno zapisivanje klijentu. Prvi i završni okviri (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) nikada se ne odgađaju; kada je grupisanje uključeno, ITL mjeri razmake između grupa. Koristi ga `open-sse/utils/sseOutputSink.ts`. |
| `SSE_STALL_WATCHDOG` | `timer` | Implementacija nadzornika zastoja bajtova za odgovore koji se prenose tokom. `timer` ponovo aktivira jedan mjerač vremena za svaki segment iz nadređenog izvora (aktivira se tačno po isteku budžeta zastoja); `interval` održava jednu provjeru po toku s periodom `clamp(budget/4, 1s, 5s)`, pa se zastoj aktivira unutar budžeta + perioda. Koristi ga `open-sse/utils/streamStallWatchdog.ts`. |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | Vrijeme za prijem prvog SSE događaja koji nije ping. Nasljeđuje `REQUEST_TIMEOUT_MS` kada je postavljen. |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Maksimalni prilagodljivi vremenski prozor spremnosti za prvi događaj kod velikih zahtjeva za prijenos tokom, zahtjeva koji intenzivno koriste alate ili zahtijevaju visok nivo rezonovanja. |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Sigurnosni prekidač za heuristiku `/goal`. Postavite `false`/`0`/`off` da biste potpuno onemogućili otkrivanje — vremenska ograničenja spremnosti i oporavak toka nikada se ne povećavaju na osnovu tijela/zaglavlja zahtjeva, čime se ublažava pojačavanje vremenskog ograničenja kojim upravlja klijent. |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Maksimalni vremenski prozor spremnosti za prvi događaj kod otkrivenih pokretanja agenta `/goal` ili zahtjeva nametnutih pomoću `x-omniroute-agent-goal`. |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Automatski omogućava rani oporavak toka za otkrivena pokretanja agenta `/goal`. Postavite `false`/`0`/`off` da biste onemogućili izričito uključivanje specifično za cilj. Ovo može samo DODATI oporavak povrh zadane postavke operatora — nikada ne nadjačava eksplicitno isključivanje u postavkama `STREAM_RECOVERY_ENABLED`/baze podataka. |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Uklanja nestandardne SSE događaje `codex.*` (npr. `codex.rate_limits`) koji uzrokuju prekid OpenAI SDK funkcije `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)_ | Izborni transport Codex aplikacijskog servera. WebSocket krajnja tačka (`ws://`/`wss://`) lokalnog pomoćnog procesa `codex app-server`. Kada se postavi zajedno s tokenom, Codex zahtjevi usmjeravaju se putem JSON-RPC-a prema pomoćnom procesu umjesto prema HTTP Responses API-ju. Može se postaviti i za svaku vezu putem `providerSpecificData.codexAppServerUrl`. Koristi ga `open-sse/executors/codex/appServerConfig.ts`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(nije postavljeno)_ | Ugrađeni token mogućnosti/nositelja koji se predstavlja aplikacijskom serveru. Nadjačavanje za pojedinačnu vezu: `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. Zamjena po konekciji: `providerSpecificData.codexAppServerTokenFile`. |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Radni direktorij u kojem se izvršava potez app-servera. Zamjena po konekciji: `providerSpecificData.codexAppServerCwd`. |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(nije postavljeno)_ | Politika odobravanja proslijeđena potezu app-servera (npr. `never`, `on-request`). Zamjena po konekciji: `providerSpecificData.codexAppServerApprovalPolicy`. |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(nije postavljeno)_ | Politika izoliranog okruženja proslijeđena potezu app-servera (npr. `read-only`, `workspace-write`, `danger-full-access`). Kada nije postavljeno, izvršitelj podrazumijevano koristi `workspace-write` (sigurnije; prethodno `danger-full-access`). Zamjena po konekciji: `providerSpecificData.codexAppServerSandbox`. |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Automatski odobrava vlastite upite app-servera za odobrenje (izvršavanje naredbi/datoteka/dozvola na hostu). Podrazumijevano isključeno — upiti se automatski odbijaju; pozivi alata testnog okruženja nisu pogođeni (prolaze kroz zasebno prosljeđivanje `item/tool/call`). Prihvata `true`/`1`/`yes`. Zamjena 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 za streaming zahtjeve (ms). `0` onemogućava ovo ograničenje; eksplicitni `fetchStartTimeoutCapMs` pružatelja ima prednost. |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 s) | Maksimalno čekanje na početak odgovora (ms) za svaki direktni pokušaj bez proxyja. Nakon isteka vremena pokušaj se jednom ponavlja putem nove utičnice; postavite `0` da biste onemogućili ograničenje i zadržali prethodno ponašanje. |
| `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 min) | Donja granica čekanja na početak 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`), kako izvorno Ollama hladno pokretanje ne bi bilo prekinuto zbog gornje podrazumijevane vrijednosti od 30 s. 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. Ne utiče na udaljene hostove. |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Gornja granica (ms) za RETRY pokušaj putem nove utičnice nakon isteka vremena čekanja na početak odgovora združenog pokušaja iznad (#13703). Primjenjuje se samo kada je pozivalac već priložio vlastiti signal krajnjeg roka (kaskada razriješene konekcije/modela/pružatelja/`FETCH_TIMEOUT_MS`); taj signal je stvarno ograničenje i aktivira se prvi u predviđenoj putanji, pa je ovo velikodušna zaštitna mjera, a ne fiksno ograničenje — bez nje je ponovni pokušaj koristio isti kratki prozor `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` kao združeni pokušaj i vraćao 504 za ispravne modele zaključivanja sa sporim TTFB-om. Nikada nije dozvoljena vrijednost ispod gornje fiksne donje granice; kada pozivalac uopće ne dostavi signal krajnjeg roka, ponovni pokušaj zadržava nepromijenjenu fiksnu donju granicu. |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Vrijeme za prijem cijelog tijela odgovora. |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Vremensko ograničenje za uspostavljanje TCP konekcije. |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Vremensko ograničenje neaktivnosti keep-alive utičnice. |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Vremensko ograničenje za proxy TLS otiska (wreq-js). |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Ograničava vrijeme do prvog bajta posebno za tijelo transporta TLS otiska wreq-js; sam `TLS_CLIENT_TIMEOUT_MS` ne može otkriti zastoj tijela jer se razrješava čim zaglavlja stignu (#12656). Istek vremena otkazuje wreq čitač i prebacuje se na direktni/proxy dispečer; `0` onemogućava nadzor. |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Samo za OpenCode izvršitelj i samo dok je zastavica funkcionalnosti `OPENCODE_RESPONSES_STALL_ROTATION` uključena (podrazumijevano isključena): ograničava čekanje na prvi bajt tijela streaming Responses odgovora nakon njegovih zaglavlja (#13484). Responses tok započinje s `response.created`, pa tišina nakon ovog prozora predstavlja zastoj: nalog se privremeno stavlja na hlađenje, a zahtjev se jednom preusmjerava na sljedeći nalog; drugi zastoj odmah završava neuspjehom. `0` onemogućava zaštitu čak i kada je zastavica uključena. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= isključeno) | Samo za OpenCode izvršitelj: ograničava čekanje na zaglavlja uzvodnog odgovora pri streaming Responses pozivu kada je drugi nalog još uvijek dostupan — zahtjev na čekanju prestaje čekati i nastavlja dalje umjesto da zadržava cijeli prozor za zaglavlja. Pogođeni su samo streaming Responses pozivi (Responses tok započinje s `response.created`, pa tišina ovdje predstavlja red čekanja, a ne generiranje); chat completions i pozivi bez streaminga ostaju nepromijenjeni, a prozor samo skraćuje efektivnu gornju granicu početka dohvatanja, nikada je ne produžava. Predložena vrijednost pri omogućavanju: `30000`. `0` onemogućava. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Samo OpenCode izvršitelj: koliko puta po zahtjevu prethodno ograničenje čekanja zaglavlja može preći na sljedeći račun. Posljednji preostali račun uvijek zadržava puni period za zaglavlja. |
| `OPENCODE_PARK_AND_RESUME` | `false` | Samo OpenCode izvršitelj: parkira zahtjev uz signal održavanja nakon ponovljenih privremenih grešaka 429 (ili svježeg markera opterećenja skupa), a zatim ponovo izvršava jednu ograničenu etapu preko najviše 3 uzastopna računa umjesto raspoređivanja na cijelu flotu (#13924). Podrazumijevano isključeno: svaka greška 429 prelazi na sljedeći račun tačno kao i ranije. |
| `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Samo OpenCode izvršitelj: kada su svi računi spremni nakon perioda hlađenja u etapi ponovnog izvršavanja parkiranog zahtjeva sklonjeni zbog memorije odbijanja proxyja, ipak ih koristi umjesto da ništa ne izvrši ponovo (#14851, nastavak na #14750). Podrazumijevano isključeno: etapa ponovnog izvršavanja je u tom slučaju prazna, kao prije #14750. |
| `STREAM_READINESS_STALL_RETRY` | `false` | Samo razgovor putem streaminga: kada se prvo tijelo odgovora uzvodnog servisa zaustavi prije stvaranja upotrebljivog događaja, pokreće drugi, ograničeni pokušaj kroz istu putanju usmjeravanja, s istim budžetom spremnosti i bez penaliziranja računa. Podrazumijevano isključeno: zaustavljeno prvo tijelo dovodi do neuspjeha zahtjeva bez ponovnog pokušaja. |
| `OPENCODE_POOL_RESELECT` | `false` | Samo OpenCode izvršitelj: nakon greške 429 od pružaoca grupisanog prema izlaznoj vezi, na računu bez proxyja u kontekstu ambijentalnog skupa, traži od skupa veza drugog člana za sljedeći pokušaj umjesto ponovnog pokušaja putem iste izlazne adrese. Određuje redoslijed, nikada ne isključuje: iscrpljeni skup zadržava trenutno ponašanje. Podrazumijevano isključeno: svaka greška 429 prelazi na sljedeći račun tačno kao i ranije. |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(nije postavljeno)_ | Samo OpenCode izvršitelj: zamjenska putanja markera opterećenja skupa koji se čita prije parkiranja (`{since, reason, ttl_s}`, podrazumijevano `/tmp/opencode-pool-strain.json`, #13924). Svjež marker parkira bez ponovnog brojanja; ako ne postoji ili je zastario, koristi se rezervni brojač naleta. |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Vremensko ograničenje proxy skoka za zahtjeve mosta `/v1`. |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Usmjerava Firecrawl izvršitelj za web-dohvatanje na instancu s vlastitim hostingom (API ključ nije obavezan izvan oblaka). |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Vremensko ograničenje po zahtjevu za Firecrawl izvršitelj web-dohvatanja. |
| `TAVILY_BASE_URL` | _(nije postavljeno)_ | Osnovni URL za Tavily dohvat kvote `/usage` (ograničenja pružaoca); zanemaruje se kada pokazuje na `api.tavily.com`. Ako nije postavljeno, koristi se osnovni URL veze. |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Ukupno vremensko ograničenje serverskog zahtjeva za most. |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Vrijeme za slanje zaglavlja odgovora putem mosta. |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Vremensko ograničenje neaktivnosti za održavanje veze mosta. |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Vremensko ograničenje sirovog socketa (0 = onemogućeno). |
| `SHUTDOWN_TIMEOUT_MS` | `30000` | Period odgode nakon 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 postavljeno. |
| `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Vremensko ograničenje (ms) za unaprijed postavljene konfiguracije `validationRead` i `modelsProbe` u `src/shared/network/safeOutboundFetch.ts`. Povećajte ga za spore krajnje tačke (Cerebras, Cloudflare AI, Groq) kako biste spriječili kolebanje između stanja aktivno/greška na kontrolnoj ploči. Za nevažeće (<1000) ili nenumeričke vrijednosti koristi se rezervna vrijednost od 8000ms. |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Vremensko ograničenje dohvatanja specifično za posrednik u `open-sse/utils/proxyFetch.ts` (#9158). Posrednik koji se ne odaziva mora prijaviti grešku prije vremenskog ograničenja klijenta/agenta (~30s), kako bi pozivaoci vidjeli grešku specifičnu za posrednik umjesto generičkog vremenskog ograničenja uzvodnog servisa. Ograničeno na `29000` kako bi se uvijek prvo aktiviralo. |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Zajednička odgoda ponovnog pokušaja za putanje direktno/posrednik/proxy s jednim ponovnim pokušajem u `open-sse/utils/proxyFetch.ts` (#9158). `0` = odmah ponovi pokušaj. |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Vremensko ograničenje izvornog wreq-js zahtjeva (`claudeTlsClient.ts`). |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Dodatni period za apsolutni JS krajnji rok koji se dodaje na izvorno vremensko ograničenje. |
| `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Vremensko ograničenje izvornog wreq-js zahtjeva (`perplexityTlsClient.ts`). |
| `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Apsolutna tolerancija JS krajnjeg roka dodana povrh izvornog vremenskog ograničenja. |
| `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (isključeno) | Dodaje "Imate ugrađenu web-pretragu. Odgovarajte na pitanja direktno koristeći rezultate pretrage." sistemskoj poruci pozivaoca (`perplexity-web/protocol.ts`). Podrazumijevano je isključeno — Perplexity svakako pretražuje, a rečenica se pojavljuje u odgovorima kao metakomentar za klijente za programiranje. Postavite na `1`/`true`/`yes`/`on` da biste je vratili. |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Izvorno vremensko ograničenje zahtjeva wreq-js (`grokTlsClient.ts`). |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Apsolutna tolerancija JS krajnjeg roka dodana povrh izvornog vremenskog ograničenja. |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Izvorno vremensko ograničenje zahtjeva wreq-js (`notionTlsClient.ts`); `notion-web` ga po zahtjevu povećava na `180000` za duga generisanja. |
| `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Apsolutna tolerancija JS krajnjeg roka dodana povrh izvornog vremenskog ograničenja. |
| `OMNIROUTE_BROWSER_POOL` | `on` | Zajednički skup Playwright preglednika za razgovor s web-kolačićima podržan preglednikom (`browserPool.ts`); postavite na `off` da biste ga onemogućili. |
| `OBSCURA_BIN` | `auto-detect` | Putanja do izvršne datoteke `obscura` koju kao primarni pogon koriste skup preglednika i izvršitelj Cloudflare Playgrounda (`open-sse/services/obscura.ts`); automatski se otkriva iz sistemske putanje PATH kada nije postavljena. |
| `OBSCURA_CDP_ENDPOINT` | _(nije postavljeno)_ | Usmjerite na već pokrenutu instancu Obscura (`http://host:port`) umjesto pokretanja nove; modul nije vlasnik tog procesa (`open-sse/services/obscura.ts`). |
| `OBSCURA_PORT` | `random free port` | Eksplicitni port za pokrenuti `obscura serve`; slobodan port bira se automatski kada nije postavljen (`open-sse/services/obscura.ts`). |
| `WEB_COOKIE_USE_BROWSER` | `0` | Usmjerite zahtjev za razgovor s web-kolačićima na putanju podržanu preglednikom (`browserBackedChat.ts`); postavite na `1` da biste omogućili. |
| `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Osnovni URL za izvršitelj Kimi Web (međunarodni kimi.ai Connect-RPC) (`kimi-web.ts`); promijenite samo za zrcalne/proxy krajnje tačke. |
| `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Puna krajnja tačka razgovora za izvršitelj Kimi Web (`kimi-web.ts`). |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | _(automatski otkriveno)_ | Putanja do sistemske izvršne datoteke Chrome/Edge za interaktivnu prijavu putem preglednika u Adobe Firefly (`adobeFireflyBrowserLogin.ts`); nadjačava automatsko otkrivanje za svaki operativni sistem. |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ samostalni izlaz_ | Zamjena direktorija samostalnog izlaza u vrijeme izgradnje koji koristi korak kolokacije nakon izgradnje (`scripts/build/colocate-standalone.mjs`); odnosi se na alate za izgradnju, a ne na vrijeme izvođenja. |
Pokušaji kombinovanih ciljeva nasljeđuju razriješeno vremensko ograničenje uzvodnog zahtjeva (`FETCH_TIMEOUT_MS` ili
`REQUEST_TIMEOUT_MS` kada ono određuje podrazumijevanu vrijednost dohvaćanja). Postavite `targetTimeoutMs` u kombinaciji,
podrazumijevanim vrijednostima kombinacije ili zamjeni dobavljača samo da biste ubrzali prelazak kombinacije na rezervni cilj; vrijednosti iznad
trenutnog uzvodnog vremenskog ograničenja ograničavaju se na uzvodno vremensko ograničenje.
`comboTimeoutMs` je zaseban ukupni vremenski budžet cijele kombinacije kroz sve ciljeve za prebacivanje.
Ostavite ga nepostavljenim ili postavite na `0` da biste zadržali neograničeno ponavljanje (fiksno sigurnosno zaustavljanje nakon 10 minuta u
`comboPredicates.ts` i dalje se primjenjuje). Pozitivna vrijednost zamjenjuje tu
sigurnosnu mrežu za kombinaciju. Postavite `comboTimeoutMs` na vrijednost dužu od `targetTimeoutMs` kako bi za prebacivanje
i dalje ostalo vremena nakon sporog prvog cilja.
### Pragovi prekidača strujnog kola
Podešavanje prekidača strujnog kola na nivou dobavljača. Podrazumijevane vrijednosti odražavaju skalirane vrijednosti koje se koriste od v3.6 za više od 500 veza.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------------------------- | ----------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | Prag uzastopnih neuspjeha za OAuth pružaoce prije aktiviranja prekidača. |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | Period resetovanja (ms) za prekidač OAuth pružaoca. |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | Prag uzastopnih neuspjeha za pružaoce s API ključem. |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | Period resetovanja (ms) za prekidač pružaoca s API ključem. |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Prag uzastopnih neuspjeha za lokalne pružaoce (Ollama, LM Studio, ...). |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | Period resetovanja (ms) za prekidač lokalnog pružaoca. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: broj neuspjeha unutar perioda prije nego što cijeli OAuth pružalac uđe u period hlađenja. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: klizni period brojanja neuspjeha (ms) za OAuth pružaoce. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: period hlađenja (ms) nakon dostizanja praga OAuth pružaoca. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | OAuth pružalac ulazi u stanje DEGRADED nakon ovoliko neuspjeha. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | Maksimalni množilac povećanja `resetTimeout` za OAuth pružaoca. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | OAuth pružalac povećava odgodu nakon ovoliko otvorenih ciklusa. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: broj neuspjeha unutar perioda prije nego što cijeli pružalac s API ključem uđe u period hlađenja. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: klizni period brojanja neuspjeha (ms) za pružaoce s API ključem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: period hlađenja (ms) nakon dostizanja praga pružaoca s API ključem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | Pružalac s API ključem ulazi u stanje DEGRADED nakon ovoliko neuspjeha. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | Maksimalni množilac povećanja `resetTimeout` za pružaoca s API ključem. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | Pružalac s API ključem povećava odgodu nakon ovoliko otvorenih ciklusa. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: broj neuspjeha prije nego što cijeli lokalni pružalac uđe u period hlađenja. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: klizni period brojanja neuspjeha (ms) za lokalne pružaoce. |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Prekidač na nivou pružaoca: period hlađenja (ms) nakon dostizanja praga lokalnog pružaoca. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Period hlađenja po ključu (ms) koji se primjenjuje pri rotaciji više API ključeva kada odgovor uzvodnog servisa 429 ne sadrži `Retry-After` (#14573). Vrijednosti koje nisu pozitivne ili nisu numeričke vraćaju se na zadanu vrijednost. |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Dubina odgode pri kojoj se pružalac pina predmemorije konteksta smatra trajno neispravnim te se pin odbacuje radi prelaska na rezervnog pružaoca. |
| `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Period zaštite od čestih promjena (ms) koji toleriše kratka privremena hlađenja prije odbacivanja pina predmemorije konteksta. |
### Scenariji
| Scenarij | Konfiguracija |
| ------------------------------------- | ------------------------------------------------------- |
| **Dugotrajno generisanje koda** | `REQUEST_TIMEOUT_MS=900000` (15 min) |
| **Ograničeno ukupno trajanje toka** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 min) |
| **Brzi neuspjeh za produkcijski API** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` |
| **Modeli s produženim 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 | Zadana vrijednost | Opis |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_MEMORY_MB` | _automatski_ (fizički sistem); **`1024` u Docker slici** | **Preporučeno** ograničenje V8 heap memorije (MB) za Docker/samostalno pokretanje. Kada nije postavljeno, dinamički se kalibrira (~35% sistemskog RAM-a, ograničeno na `[512, 4096]`); `512` je samo donja granica kada se ukupna memorija ne može očitati. U `run-standalone.mjs` (Docker CMD), **eksplicitna** vrijednost dodaje se kao `--max-old-space-size` i ima **prednost** nad konfliktnom NODE_OPTIONS heap zastavicom (posljednja V8 zastavica). `omniroute serve` i dalje daje prednost postojećoj NODE_OPTIONS heap vrijednosti (#5238). Nemojte postavljati obje na različite brojeve — proces bilježi upozorenje koje navodi obje vrijednosti i pobjednika. **Službena Docker slika uvijek postavlja `1024`, tako da se kalibracija u njoj nikada ne izvršava.** Coding-agent `/v1/responses` zahtijeva `8192`–`12288` uz dodatni cgroup memorijski prostor — pogledajte [Docker vodič — RAM tokom izvršavanja](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). |
| `OMNIROUTE_RSS_PRESSURE_MB` | _automatski_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; isključeno kada `OMNIROUTE_MEMORY_MB` nije postavljeno) | `open-sse/utils/resourcePressure.ts` | Apsolutni osigurač za RSS procesa (MB) za nativnu/vanjsku memoriju koju V8 `heapUsed` ne može vidjeti; iznad te vrijednosti novi zahtjevi dobijaju 503 `resource_pressure`. RSS rijetko opada nakon naglog skoka, pa ga koristite zajedno s `OMNIROUTE_PRESSURE_SELF_RESTART`. |
| `PROMPT_CACHE_MAX_SIZE` | `50` | Maksimalan broj keširanih unosa sistemskih upita. |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Maksimalna ukupna veličina keša upita. |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 min) | TTL unosa keša upita. |
| `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: pri dostizanju ograničenja indeks najmanje nedavno korištenog korijena izbacuje se i ponovo izrađuje pri njegovom sljedećem upitu. Ograničeno na minimalnu vrijednost `1`; nenumerička vrijednost vraća se na zadanu vrijednost. |
| `STREAM_HISTORY_MAX` | `50` | Maksimalan broj nedavnih događaja toka u baferu prikaza uživo na kontrolnoj ploči. |
| `CONTEXT_LENGTH_DEFAULT` | _(nije postavljeno)_ | Globalno nadjačavanje dužine konteksta (u tokenima) za svakog pružaoca koji nema varijablu `CONTEXT_LENGTH_`. Kada je postavljeno, ono **zamjenjuje** vrijednosti iz kataloga, nadjačavanja na kontrolnoj ploči i registra za te pružaoce; kada nije postavljeno, OmniRoute koristi svoj ugrađeni lanac, čija je krajnja rezervna vrijednost `128000`. Pogledajte [Dužina konteksta po pružaocu](#per-provider-context-length-context_length_provider). |
| `USAGE_TOKEN_BUFFER` | `100` | Dodatna rezerva tokena pri praćenju 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**, čiji se naziv izrađuje iz ID-a pružaoca tokom izvršavanja, pa se ne može
navesti red po red u gornjoj tabeli niti u `.env.example`.
**Naziv.** `CONTEXT_LENGTH_`, gdje je `` ID pružaoca usluge napisan velikim slovima, pri čemu je
svaki znak izvan raspona `A-Z` / `0-9` zamijenjen znakom `_`. ID pružaoca usluge je kanonski ID nakon
razrješavanja aliasa (`provider` dio niza `provider/model` nakon što je kratki alias
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 (prazna vrijednost, `0`, negativna vrijednost, nenumerička vrijednost) se zanemaruje i razrješavanje prelazi na sljedeći korak.
| ID pružaoca usluge | 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`, koristi se prvi korak koji daje vrijednost:
1. `CONTEXT_LENGTH_` za tog pružaoca usluge.
2. `CONTEXT_LENGTH_DEFAULT` (globalno nadjačavanje putem okruženja).
3. Prozor za pojedinačni model: trajno pohranjeno nadjačavanje konteksta (postavljeno na kontrolnoj ploči ili automatski fiksirano pomoću
usklađivača otkrivanja, pogledajte `CONTEXT_WINDOW_RECONCILE_INTERVAL`), a u suprotnom sinhronizovana
vrijednost iz kataloga / models.dev.
4. `defaultContextLength` registra pružaoca usluge.
5. Heuristike naziva modela (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` /
`codex` 400000).
6. Ugrađene zadane vrijednosti za pojedinačne pružaoce usluga, a zatim `128000`.
Oba koraka s okruženjem primjenjuju se na **cijelog pružaoca usluge**: svaki model tog pružaoca usluge dobija
isto ograničenje i imaju prednost nad nadjačavanjima za pojedinačne modele na kontrolnoj ploči. Kada samo jednom modelu pružaoca usluge
treba drugačiji prozor, umjesto toga koristite nadjačavanje za pojedinačni model na kontrolnoj ploči.
**Opseg.** Ovaj lanac određuje provjeru kontekstnog prozora u vrijeme zahtjeva (
odbijanje `context_length_exceeded` / "Unos premašuje kontekstni prozor" u
`open-sse/handlers/chatCore.ts`), budžete za kompresiju upita i ograničenja konteksta kombinacija. 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 nadjačavanje putem okruženja.
**Primjer.** Pružalac usluge čiji model prihvata prozor od 1.050.000 tokena, dok katalog navodi
128.000:
```dotenv
CONTEXT_LENGTH_AGENTROUTER=1050000
```
Ponovo pokrenite server nakon izmjene: vrijednost se čita iz okruženja serverskog procesa.
U **desktop aplikaciji** server se pokreće kao podređeni proces i ne vidi sistemsku varijablu
postavljenu nakon pokretanja aplikacije; dodajte red u datoteku `.env` koju aplikacija učitava (redoslijed pretraživanja opisan je u
[Electron vodiču: Pretraživanje datoteke okruženja](../guides/ELECTRON_GUIDE.md#environment-file-lookup)),
zatim potpuno zatvorite i ponovo pokrenite aplikaciju.
### Kompresija
| Varijabla | Zadana vrijednost | Opis |
| ------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | nije postavljeno | Vjeruj projektnoj datoteci `.rtk/filters.json` bez hash vrijednosti u `.rtk/trust.json`. Koristite samo u kontrolisanom lokalnom razvojnom okruženju. |
### Mehanizam memorije (plan 21)
### Trošak memorije, vještina i osvježavanja tokena u petlji događaja (#10349)
OmniRoute je **jedan Node proces**. Izdvajanje/preuzimanje memorije, umetanje vještina i osvježavanje tokena pružaoca usluge izvršavaju se u toj **istoj petlji događaja** kao `GET /healthz` i kontrolna ploča. Ne izvršavaju se u radnoj niti.
| Posao | Kôd | Zadana vrijednost | Kontrola operatera |
| --------------------------------- | ---------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Izdvajanje / preuzimanje memorije | `src/lib/memory/` | **memoryEnabled** na kontrolnoj ploči (zadano uključeno) | Isključite **Postavke → Memorija**. Ne postoji zaseban env prekidač osim isključivanja funkcionalnosti u postavkama. |
| Umetanje vještina | `src/lib/skills/injection.ts` | **skillsEnabled** na kontrolnoj ploči (zadano uključeno) | Isključite **Postavke → Memorija/Vještine** (`skillsEnabled`). Postavke sandboxa u nastavku samo ograničavaju izvršavanje nakon što je umetanje već uključeno. |
| Osvježavanje tokena | `src/sse/services/tokenRefresh.ts` | Uključeno za povezane OAuth/web pružaoce usluga | Prekinite vezu s pružaocem usluge ili pustite da tokeni ostanu važeći; trenutno ne postoji env varijabla `TOKEN_REFRESH=0`. |
Ako je `/healthz` spor na neopterećenom računaru, prvo isključite memoriju i vještine, a zatim provjerite opterećenje kataloga/kompresije (#10303, #9685). Ove funkcionalnosti prepuštaju izvršavanje na tačkama `await`, ali se i dalje nadmeću za jednu nit.
Postavke sloja za ugrađivanje, vektorskog spremišta i ponovnog rangiranja za podsistem trajne memorije (`src/lib/memory/`).
| Varijabla | Zadana vrijednost | Opis |
| ------------------------------------ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 min) | TTL za predmemoriju embeddinga u memoriji (po potpisu izvora/modela/dimenzije). |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Maksimalan broj LRU unosa koji se čuvaju u predmemoriji embeddinga. |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | ID HF repozitorija za opcionalni lokalni MiniLM cjevovod `@huggingface/transformers` (~23 MB int8, ~400 MB RAM-a). |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | ID HF repozitorija za statički potion/Model2Vec embedder zasnovan na tabeli pretraživanja. Preuzima se po potrebi u direktorij predmemorije. |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Direktorij koji se koristi za predmemoriranje datoteka statičkog potion modela. Ako nije postavljeno, zadano se nalazi unutar `DATA_DIR`. |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | Zamjenjuje osnovni URL za Hugging Face Hub koji koristi `staticPotion.ts` (npr. mirror krajnja tačka za izolovana okruženja). |
| `MEMORY_VEC_TOP_K` | `20` | Zadani top-K koji koristi `sqlite-vec` vektorska pretraga grubom silom unutar `src/lib/memory/vectorStore.ts`. |
| `MEMORY_RRF_K` | `60` | Konstanta `k` za Reciprocal Rank Fusion pri hibridnom FTS5 + vektorskom dohvatanju (sqlite-vec recept). |
| `VECTOR_STORE_DISABLE_VEC` | `false` | Testna/dijagnostička tačka u `getVectorStore()` (`src/lib/memory/vectorStore.ts`): kada je `true`, prisilno postavlja vektorsko spremište na `null` (simulira cloud/WASM okruženje bez `sqlite-vec`), svodeći dohvatanje memorije na FTS5 pretragu ključnih riječi. Ostavite nepostavljeno u produkciji. |
| `NOTION_API_KEY` | _(nije postavljeno)_ | API ključ za Notion pozadinski sistem (koristi ga poznata unaprijed postavljena konfiguracija pozadinskog sistema u `genericBackend.ts`). |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Osnovni URL za Notion API (može se promijeniti za samostalno hostovane Notion alternative). |
| `OBSIDIAN_API_KEY` | _(nije postavljeno)_ | API ključ za pozadinski sistem Obsidian Vault (koristi ga poznata unaprijed postavljena konfiguracija pozadinskog sistema u `genericBackend.ts`). |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Osnovni URL za Obsidian Vault API (može se promijeniti za udaljeni trezor). |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | Glavni prekidač za TV6 propadanje memorije prema tipu. **Opcionalno (zadano isključeno)** — čišćenje **briše** propale memorije. Kada je isključeno, `access_count`/`last_accessed_at` predstavljaju isključivo telemetriju 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 i epizodnu memoriju imunom. Trajni tipovi (`factual`/`procedural`/`semantic`) uvijek su imuni. Sat propadanja ponovo se postavlja prema `last_accessed_at`. |
| `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | Memorija ubrizgana `>=` ovoliko puta postaje imuna na propadanje bez obzira na tip. `0` onemogućava imunitet na osnovu pristupa. |
| `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (onemogućeno) | Interval (u sekundama) za opcionalno periodično čišćenje propale memorije u `src/lib/memory/typedDecay.ts`. `0`/nije postavljeno = nema periodičnog čišćenja. Potrebno je dvostruko uključivanje: također zahtijeva `MEMORY_TYPED_DECAY_ENABLED=true`. |
| `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(nije postavljeno)_ | ID-ovi pružalaca odvojeni zarezima (bez razlikovanja velikih i malih slova) koji prihvataju `system` poruku **samo na indeksu 0** (`src/lib/memory/injection.ts`). Za njih umetanje memorije usred niza, sigurno za predmemoriju, nije sigurno u razgovorima s više razmjena, pa se memorija umjesto toga spaja/dodaje na početak kao vodeća sistemska poruka. Zadano uključuje samo `xiaomi-mimo`/`mimo`; proširite za samostalno hostovane krajnje tačke kompatibilne s OpenAI-jem (npr. Qwen3.5+/3.6) čiji predložak razgovora nameće isto ograničenje jedne vodeće sistemske poruke. |
### Primjer Docker konfiguracije s malo RAM-a
`128` je samo za nadzornu ploču. Agenti za kodiranje na ovoj hrpi nailaze na `FATAL ERROR` tokom dugih `/v1/responses` zahtjeva. Nemojte koristiti ovaj primjer kao Claude/Codex/Grok pristupnik.
```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 pružaoce usluga
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 h) | `src/lib/catalog/openrouterCatalog.ts` | TTL predmemorije kataloga OpenRouter modela. |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Uključi prikladna `name` polja za prikaz u odgovorima `/v1/models`. Onemogućite za klijente koji očekuju samo ID-ove. |
| `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 s) | `src/app/api/v1/models/catalogCache.ts` | Ograničenje čekanja na hladnoj putanji za objedinjenu ponovnu izgradnju kataloga `GET /v1/models` (#12627). Nakon isteka vremena, poslužuje 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 usmjeravanje te se kao rezerva koristi registar (#12849). Redovi koji nikada nisu dobili vremensku oznaku smatraju se zastarjelim. |
| `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 s) | `src/lib/usage/analyticsResponseCache.ts` | Vrijeme tokom kojeg se spor odgovor `GET /api/usage/analytics` ponovo koristi za isti niz upita (#15629). Vrijednost `0` onemogućava predmemoriju. |
| `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1 s) | `src/lib/usage/analyticsResponseCache.ts` | Predmemoriraju se samo analitički odgovori za čiju je izradu bilo potrebno najmanje ovoliko vremena, tako da male instance uvijek prikazuju svježe podatke. |
| `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Maksimalno vrijeme čekanja na NanoBanana zadatke generiranja slika. |
| `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Učestalost provjere statusa NanoBanana zadataka. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Osnovna odgoda za eksponencijalno produžavanje čekanja pri ponovnom pokušaju slanja zahtjeva za Adobe Firefly uvećavanje. |
| `AWS_REGION` | _(nije postavljeno)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Regija koja se koristi za izradu AWS Bedrock krajnjih tačaka (Kiro, zvuk). |
| `AWS_DEFAULT_REGION` | _(nije postavljeno)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Rezervna vrijednost kada `AWS_REGION` nije postavljen. |
| `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 izvršne datoteke desktop verzije Chromea za izvršitelj Cloudflare AI Playground, koja se koristi kada provjera otiska preglednika bez grafičkog interfejsa blokira Chromium isporučen s Playwrightom. |
| `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) | `open-sse/executors/codebuddy/shared.ts` | Opcionalno ograničenje dužine sistemskih upita pozivatelja koji se šalju CodeBuddyju (CN i International). Prema zadanim postavkama, samo se upit koji sadrži oznaku identiteta agenta za kodiranje zamjenjuje neutralnim upitom (Tencentov filter sadržaja odbija takve upite); dugi upiti se zadržavaju. Cijeli broj > 0 također zamjenjuje svaki sistemski upit duži od navedenog broja znakova; vrijednost koja nije postavljena, `0` ili vrijednost koja nije cijeli broj 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` | Nadjačava osnovnu adresu Cloudflare REST API-ja koju koristi implementator Workers releja grupe proxy servera (#4640 / 9router#1360). |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Zadani naziv worker projekta predložen u modalu „Implementiraj relej“ grupe proxy servera. |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Postavite na `false` da biste sakrili opciju Cloudflare Workers releja na kartici Grupe proxy servera. |
| `CLOUDFLARED_BIN` | automatsko otkrivanje | `src/lib/cloudflaredTunnel.ts` | Prilagođena putanja do izvršne datoteke `cloudflared`. |
| `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 datoteke `config.yml` (s `tunnel:`, `credentials-file:`, `ingress:`). Kada je postavljena, OmniRoute pokreće `tunnel --config run` (imenovani tunel) umjesto privremenog brzog tunela. |
| `CLOUDFLARED_HOSTNAME` | _(iz konfiguracije ingressa)_ | `src/lib/cloudflaredTunnel.ts` | Zamjenska vrijednost javnog naziva hosta imenovanog tunela (npr. `ai.example.com`), prijavljena kao `publicUrl`/`apiUrl`. Kada nije postavljena, čita se iz prvog naziva hosta `ingress` u konfiguraciji. |
| `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | Zamjenjuje osnovni URL Deno Deploy REST API-ja koji koristi alat za implementaciju releja skupa proxy servera (#4643 / 9router#1437). |
| `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Zadani naziv Deno Deploy aplikacije predložen u modalu „Deploy Relay“ za skup proxy servera. |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Postavite na `false` da biste sakrili opciju Deno Deploy releja na kartici skupa proxy servera. |
| `SEARCH_CACHE_TTL_MS` | `300000` (5 min) | `open-sse/services/searchCache.ts` | TTL za keširanje odgovora API-ja za pretraživanje (Perplexity, Brave itd.). |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Prikazuje eksperimentalno korisničko sučelje pružatelja kompatibilnog s CC-om za releje namijenjene isključivo Claude Codeu. |
| `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | Zamjenjuje host na kojem ugrađena instanca 9routera osluškuje. |
| `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | Zamjenjuje port na kojem ugrađena instanca 9routera osluškuje. |
| `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | Host za povezivanje WebSocket proxyja ugrađene usluge (zadano samo povratna petlja). |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Port za WebSocket proxy server ugrađene usluge. |
| `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | Host CLIProxyAPI mosta (naslijeđena integracija). |
| `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | Port CLIProxyAPI mosta. |
| `CLIPROXYAPI_API_KEY` | _(prazno)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | Rezervni ključ podatkovne ravni kada postavka `cliproxyapi_api_key` nije prisutna. |
| `CLIPROXYAPI_MANAGEMENT_KEY` | _(prazno)_ | `src/lib/services/cliproxyAccountHealth.ts` | Upravljački ključ za očitavanja stanja računa iz eksterno upravljane instance CLIProxyAPI-ja. |
| `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | Direktorij konfiguracije CLIProxyAPI-ja. |
| `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfejs hosta na kojem docker-compose objavljuje pomoćni kontejner `cliproxyapi` (#12578). Njegov podatkovni volumen sadrži OAuth/API vjerodajnice pružatelja, a fiksirana slika nema mogućnost zamjene ključeva podatkovne ravni `api-keys` putem varijabli okruženja (samo montirani `config.yaml`), pa `0.0.0.0` izlaže uslugu koja sadrži vjerodajnice cijelom LAN-u. |
| `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | Zamijenite port na kojem ugrađeni Mux (coder/mux) demon za orkestraciju agenata osluškuje (uvijek 127.0.0.1). |
| `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | Zamijenite port na kojem ugrađeni open-wa demon (automatizacija WhatsApp Weba) osluškuje (uvijek 127.0.0.1). |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Host za povezivanje ugrađene usluge Dario (prema zadanim postavkama samo povratna petlja). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port ugrađene usluge Dario. |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Host za povezivanje ugrađene usluge Dario (prema zadanim postavkama samo povratna petlja). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port ugrađene usluge Dario. |
| `LOCAL_HOSTNAMES` | _(prazno)_ | `open-sse/config/providerRegistry.ts` | Dodatni nazivi hostova, odvojeni zarezima, koji se tretiraju kao „lokalni“ (nazivi Docker usluga itd.). |
`ENABLE_CC_COMPATIBLE_PROVIDER` namijenjen je isključivo posrednicima trećih strana koji prihvataju samo
Claude Code klijente. OmniRoute prepisuje zahtjeve kako bi ih ti posrednici prihvatili. Ako želite koristiti samo
Claude Code CLI ili niste sigurni šta su ti posrednici, ostavite ovu opciju onemogućenom i umjesto toga dodajte
standardnog pružaoca kompatibilnog s Anthropic API-jem.
---
## 21. Zdravlje proxyja
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Vremensko ograničenje brze provjere zdravlja. |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Vremenski period (u satima) za izračunavanje prosječne latencije proxyja kandidata u strategiji skupa optimiziranoj prema latenciji. |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL predmemorije rezultata provjere zdravlja. |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL predmemorije za neuspjele provjere zdravlja proxyja. Ova vrijednost treba biti kraća od `PROXY_HEALTH_CACHE_TTL_MS` kako bi se privremena prekoračenja vremena proxyja pri visokoj konkurentnosti brzo ponovo pokušala, bez onemogućavanja brzog prekida za proxyje koji zaista ne rade. |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Postavite na `false` da biste onemogućili pozadinski planer zdravlja proxyja koji periodično provjerava registrirane proxyje. |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval ciklusa pozadinskog planera zdravlja u ms (minimalno `60000`). |
| `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Interval provjere u ms za edge-relay proxyje (`deno`/`vercel`/`cloudflare`), čije provjere aktiviraju naplativu serverless izolovanu instancu (minimalno `60000`). |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Interval pozadinskog prolaza oporavka u ms: koliko često se prethodno neispravni proxyji ponovo provjeravaju kako bi se oporavljeni proxy vratio u rotaciju bez ponovnog pokretanja. Za vrijednosti manje od `60000` koristi se zadana vrijednost. |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Odredište provjere dostupnosti koje koriste planer i krajnja tačka `/api/settings/proxies/auto-test`. Postavite ga na interni URL ili URL koji sami hostujete kako biste izbjegli javno zadano odredište. |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Broj provjera koje se istovremeno pokreću po grupi, a dijele ih planer i krajnja tačka `/api/settings/proxies/auto-test`. Zaokružuje se naniže na najmanje 1 i ograničava na najviše 50. |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Kašnjenje u ms između slanja dviju provjera unutar grupe. Bez njega cijela grupa kreće istovremeno, pa zajednička izlazna IP adresa može aktivirati ograničenje brzine ciljnog odredišta. Postavite na `0` da biste onemogućili razmak; ograničeno je na najviše 5000. |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Postavite na "false" kako biste prestali provjeravati stvarni host pružaoca usluge dodijeljenog proxyju (`GET /models`, bez API ključa) i umjesto toga uvijek koristili `PROXY_HEALTH_TEST_URL`. |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Kada je `false` (zadano), automatizovane provjere dostupnosti (planer + dugme "Testiraj sve" krajnje tačke `/api/settings/proxies/auto-test`) služe **samo za čitanje** i nikada ne mijenjaju status proxyja — samo operater postavlja status aktivan/neaktivan, tako da nepouzdana provjera ne može onesposobiti dodijeljeni proxy (#6246). Postavite na `true` da biste vratili ranije ponašanje provjere i postavljanja statusa. |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Funkcijska zastavica s izričitim uključivanjem (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz baze podataka kontrolne ploče ima prednost). `true` (ili `1`, `yes`) ponovo pokušava obraditi prazne prevedene odgovore strimovanja kroz uobičajeni put vjerodajnica (do `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` ponovnih pokušaja), umjesto prikazivanja praznog odgovora 200 ili odgovora 502 s praznim sadržajem. |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Funkcijska zastavica s izričitim uključivanjem (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nadjačavanje iz baze podataka kontrolne ploče ima prednost). `true` (ili `1`, `yes`) prikazuje zapažanja o izlaznom saobraćaju skupa, samo za čitanje, ispod skupa proxyja na kontrolnoj ploči (različite izlazne IP adrese, veze i najveći broj zabilježen iza jedne IP adrese tokom posljednja 24 h, prema zapisniku proxyja). Nikada se ne koristi za usmjeravanje. |
| `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Funkcionalna zastavica s izričitim uključivanjem (pogledajte [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); postavka iz baze podataka kontrolne ploče ima prednost). `true` (ili `1`, `yes`) prihvata datirane opažene adrese koje je operator dostavio za svakog člana skupa te ih spaja s očitanjem dnevnika radi prikaza i redoslijeda u skupu. |
| `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Period posmatranja u satima za zapise izlaznog prometa koje je dostavio operator (očitava se pri svakom čitanju; ponovno pokretanje nije potrebno). Ograničeno na 1..168; vrijednost izvan raspona, nenumerička ili prazna vrijednost vraća se na 24 uz jedno upozorenje za cijeli proces, bez izazivanja greške. |
| `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Postavite na `true` kako biste omogućili planeru da automatski ukloni proxyje nakon uzastopnih ponovljenih 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 na `true` kako biste omogućili planeru da, umjesto uklanjanja, privremeno onemogući proxy (status `dead`, nikada se ne briše) nakon uzastopnih ponovljenih neuspjeha. Nedestruktivna alternativa za `PROXY_AUTO_REMOVE`: proxy se odmah isključuje iz razrješavanja skupa/rotacije (filter aktivnog statusa koji koristi razrješavanje skupa opsega već ga isključuje) i automatski se ponovo aktivira čim ponovo počne uspješno prolaziti provjere. Dijeli prag `PROXY_AUTO_REMOVE_AFTER`. Ako su obje zastavice `true`, `PROXY_AUTO_REMOVE` ima prednost. |
| `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Pasivno preskakanje s izričitim uključivanjem: kada je `true`, planer preskače aktivnu provjeru krajnje tačke ako njen nedavni produkcijski promet već potvrđuje ispravnost (najmanje jedan uspjeh i nijedan neuspjeh pripisan proxyju unutar perioda, uz tačno jednog opaženog pružaoca usluge). Podrazumijevano je isključeno: svaki proxy se provjerava. |
| `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Period produkcijskog prometa u ms koji se uzima u obzir za pasivno preskakanje (ograničeno na `60000..599999`). Kraći je od desetominutnog intervala provjere kako bi nedavni neuspjeh imao prednost umjesto da bude ublažen. |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Omogućava OAuth tokovima i tokovima validacije pružaoca usluge da zaobiđu prikvačeni proxy i povežu se direktno kada prethodne provjere dostupnosti proxyja ne uspiju. Efektivni redoslijed prioriteta je postavka iz baze podataka funkcionalnih zastavica > varijabla okruženja > podrazumijevana vrijednost. |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 s) | `src/lib/resilience/settings.ts` | Zadani budžet **čekanja u redu**: koliko dugo zahtjev može čekati na slobodno mjesto kod pružaoca i ostati u redu prije nego što bude odbijen, a da nikad ne stigne do nadređenog servisa. Tajmer se poništava kada izvršavanje zadatka započne — izvršavanje je zasebno ograničeno putem `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Varijabla okruženja postavlja samo zadanu vrijednost: trajno pohranjena vrijednost `resilienceSettings.requestQueue.maxWaitMs`, a zatim vrijednost `rateLimitOverrides.maxWaitMs` za pojedinačnu vezu, imaju prednost nad njom. |
| `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 min) | `open-sse/services/rateLimitManager.ts` | Gornja granica vremena tokom kojeg prihvaćeni zahtjev može ostati u izvršavanju prije nego što njegova rezervacija ograničenja brzine istekne — odvojeno od budžeta čekanja u redu kako sporo pokretanje dohvata na neinkrementalnim pristupnicima ne bi isteklo (#12027). |
| `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (onemogućeno) | `open-sse/services/rateLimitManager.ts` | Ograničenje prijema u red: odbija zahtjev odgovorom 429 `queue_full` kada je ovoliki broj zahtjeva već u redu. `0` = neograničeno (zadano). |
| `RATE_LIMIT_AUTO_ENABLE` | _(nije postavljeno)_ | `open-sse/services/rateLimitManager.ts` | Prisilno uključuje/isključuje zaštitni mehanizam za automatsko omogućavanje ograničenja brzine, bez obzira na trajno pohranjenu postavku Kontrolne ploče. Prihvata `true`/`1`/`on` za prisilno uključivanje, odnosno `false`/`0`/`off` za prisilno isključivanje. |
| `PROVIDER_COOLDOWN_ENABLED` | _(nije postavljeno → isključeno)_ | `open-sse/services/providerCooldownTracker.ts` | Globalno praćenje perioda čekanja između zahtjeva za pružaoca/vezu, koje se uključuje po želji. Zadano je ISKLJUČENO (preklapa se s Periodom čekanja veze / Prekidačem strujnog kruga pružaoca). Prihvata `true`/`1`/`on` za omogućavanje. |
| `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | Minimalni period čekanja (ms) prije ponovnog pokušaja s neuspješnim pružaocem/vezom. Eksponencijalno se povećava s uzastopnim neuspjesima. Koristi se samo kada je `PROVIDER_COOLDOWN_ENABLED` omogućen. |
| `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 min) | `open-sse/services/providerCooldownTracker.ts` | Maksimalno ograničenje perioda čekanja (ms) prije ponovnog pokušaja s neuspješnim pružaocem/vezom bez obzira na okolnosti. Koristi se samo kada je `PROVIDER_COOLDOWN_ENABLED` omogućen. |
| `STREAM_RECOVERY_ENABLED` | _(nije postavljeno → isključeno)_ | `src/lib/resilience/settings.ts` (početna vrijednost) → `open-sse/services/streamRecovery.ts` (logika) | **Šta:** transparentan oporavak prekinutih tokova nadređenog servisa (port iz free-claude-code). Zadržava početni SSE prozor do `STREAM_RECOVERY.HOLDBACK_MS` (750 ms), tako da se prekid _prije potvrde_ — onaj koji se dogodi prije nego što ijedan bajt stigne do klijenta — ponovo otvara i pokušava neprimjetno. **Kada omogućiti:** nestabilni/nadređeni servisi koji često prekidaju tok na početku bez prenesenih bajtova; ostavite ISKLJUČENO ako ne možete prihvatiti do 750 ms dodatnog vremena do prvog tokena za svaki tok. Prihvata `true`/`1`/`on`. Postavlja početnu vrijednost trajno pohranjene postavke Otpornosti; postavka Kontrolne ploče ima prednost nakon što se postavi. |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(nije postavljeno → isključeno)_ | `src/lib/resilience/settings.ts` (početna vrijednost) → `open-sse/services/streamRecovery.ts` (logika) | **Šta:** nastavak usred toka (Faza 4.4) — nakon prekida _poslije potvrde_ (bajtovi su već stigli do klijenta), ponovo šalje zahtjev s djelimičnim tekstom kao unaprijed popunjenim odgovorom asistenta i spaja nedostajući sufiks. Samo OpenAI-kompatibilni tokovi običnog teksta; nikad se ne aktivira dok je poziv alata u toku. **Kada omogućiti:** za duga generisanja koja se prekinu usred odgovora i kada prihvatate da oporavljeni završetak stigne odjednom, a ne 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 nadzornik korisnog izlaza aktivnog toka. Otkriva tokove koji nastavljaju slati dijelove, ali ostaju ispod konfigurisane brzine izlaza asistenta; signali aktivnosti, događaji korištenja, prazne razlike te faze alata/rezonovanja ne predstavljaju se lažno kao napredak. Odvojeno od isteka vremena zbog neaktivnosti i krajnjeg vremenskog roka. |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Period odgode prije procjene propusnosti, ograničen na 0–600000 ms. |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Klizni prozor korisnog izlaza, ograničen na 1000–600000 ms; prije prekida potreban je jedan potpuni prozor. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Minimalna brzina izlaza asistenta u UTF-8 bajtovima (konzervativna zamjena za tokene), ograničena na 1–1000000. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Minimalni uzorak korisnog izlaza veći od nule koji se smatra mjerljivim, ograničen na 1–1000000 bajtova. |
| `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Razmak (ms) između provjera ispravnosti tokena pružalaca usluge pri pokretanju. |
| `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Minimalno nasumično odstupanje (ms) koje se dodaje na `HEALTHCHECK_STAGGER_MS` između provjera ispravnosti tokena pružalaca usluge kako bi se spriječilo naglo opterećenje (Problem #1220). |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Maksimalno nasumično odstupanje (ms) koje se dodaje na `HEALTHCHECK_STAGGER_MS` između provjera ispravnosti tokena pružalaca usluge kako bi se spriječilo naglo opterećenje (Problem #1220). |
| `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Veličina grupe istovremenih provjera za početni ciklus provjere ispravnosti tokena; veće vrijednosti paralelno provjeravaju više veza, dok manje vrijednosti smanjuju naglo opterećenje (Problem #7875, regresija problema #7719). |
| `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Broj automatskih ponovnih pokušaja pri odgovorima o periodu čekanja na nivou modela prije vraćanja greške klijentu. |
| `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Maksimalni interval eksponencijalnog čekanja (u sekundama) između ponovnih pokušaja nakon perioda hlađenja. Ograničen je ovom vrijednošću bez obzira na uzvodni `Retry-After`. |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL Headroom proxyja za uštedu tokena. Životni ciklus kontrolne ploče (`api/headroom/*`) prema zadanim postavkama pokreće lokalni `headroom-ai` CLI na povratnoj adresi; promijenite samo ako želite usmjeriti na vanjski Docker sidecar proxy. |
### Konstante za podešavanje oporavka toka
Ponašanje zadržavanja pri oporavku podešava se pomoću konstanti čije su vrijednosti direktno zapisane u
`open-sse/config/constants.ts` (`STREAM_RECOVERY`), a ovdje su prikazane kao referenca —
njihova izmjena zahtijeva uređivanje koda, a ne varijable okruženja:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — koliko dugo se početni SSE prozor zadržava
kako bi se nakon ranog prekida mogao izvršiti ponovni pokušaj prije nego što se bilo koji bajt pošalje klijentu.
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — čvrsto ograničenje zadržanog prozora; slanje
(pražnjenje međuspremnika + prosljeđivanje) izvršava se čim se nakupi ovoliko bajtova, bez obzira na tajmer.
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — maksimalan broj transparentnih ponovnih otvaranja uzvodnog
toka dok zadržani sadržaj još nije poslan.
> **Ograničenje brzine po pružatelju zasnovano na kliznom prozoru (bez varijable okruženja):** rezervni mehanizam
> ograničenja brzine po pružatelju zasnovan na kliznom prozoru, prenesen iz FCC-a, postoji u kodu
> (`open-sse/services/providerDefaultRateLimit.ts`, povezan putem
> `open-sse/services/rateLimitManager.ts`), ali se isporučuje s **praznom zadanom mapom**
> i trenutno **nema varijablu okruženja za operatera** — omogućava se samo putem testne kuke /
> izmjene koda. Namjerno nije naveden u gornjoj tabeli. Ograničivač releja po `(token, IP)`
> koji _ima_ postavku jeste `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 pružatelja usluga, tuneli, sigurnosne kopije i ostalo vezano za izvršavanje
Krajnje tačke za kvote pružatelja usluga, mrežni tuneli (Tailscale, Ngrok, MITM proxy za otklanjanje grešaka), 1Proxy izlazni skup, sigurnosne kopije baze podataka i mala premošćavanja po funkcionalnosti na koja se pozivaju izvršni sloj ili skripte.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | Redis niz za povezivanje s pozadinskim sistemom ograničivača brzine. |
| `ALIBABA_CODING_PLAN_HOST` | _(produkcijski host)_ | `open-sse/services/bailianQuotaFetcher.ts` | Zamjenjuje host koji se koristi za dohvaćanje kvota Alibaba Bailian paketa za programiranje. |
| `ALIBABA_CODING_PLAN_QUOTA_URL` | izvedeno iz hosta | `open-sse/services/bailianQuotaFetcher.ts` | Zamjenjuje puni URL kvote za Alibaba Bailian. |
| `QWEN_CLOUD_COOKIE` | _(nije postavljeno)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Kolačić konzolne sesije za prolaz kvota ličnog Token Plana usluge Qwen Cloud / Model Studio (API ključ za inferenciju ne može ga očitati). Kopirajte cijelo zaglavlje zahtjeva `Cookie` — ono sadrži `login_qwencloud_ticket` — iz bilo kojeg poziva `api.json` prema `cs-data.qwencloud.com` na home.qwencloud.com › Billing › Subscription (F12 › Network). Osjetljivo i vezano za sesiju; preporučuje se polje `qwenCloudCookie` na kontrolnoj tabli za pojedinačnu vezu. |
| `QWEN_CLOUD_SEC_TOKEN` | _(nije postavljeno)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Ručno zamjenjuje `sec_token` za konzolni prolaz Token Plana. Osjetljivo; kada nije postavljeno, dohvaćač ga pronalazi iz HTML-a kontrolne table pomoću kolačića. |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Zamjenjuje host prolaza za dohvaćanje kvote ličnog Token Plana (npr. `bailian-singapore-cs.alibabacloud.com` za konzolu Model Studio). |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | URL kontrolne table koji se koristi za pronalaženje `sec_token` iz HTML-a prijavljene sesije. |
| `XIAOMI_MIMO_CONSOLE_COOKIE` | _(nije postavljeno)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Kolačić konzolne sesije za API kvote Xiaomi MiMo Token Plana (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — API ključ za inferenciju ne može ga očitati). Kopirajte cijelo zaglavlje zahtjeva `Cookie` — ono sadrži `api-platform_serviceToken` i `userId` — iz bilo kojeg zahtjeva prema `platform.xiaomimimo.com` na stranici Token Plana (F12 › Network). Osjetljivo i vezano za sesiju; preporučuje se polje `xiaomiMimoConsoleCookie` na kontrolnoj tabli za pojedinačnu vezu. |
| `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Mjesečni budžet (Credits) za Xiaomi MiMo rezervnu opciju koju prati OmniRoute i koja se koristi kada nije konfiguriran kolačić konzole. Zadana vrijednost je 4,1 milijarda za Lite paket; postavite je na broj Credits za paket (Standard 11 milijardi / Pro 38 milijardi / Max 82 milijarde). Postavka `providerSpecificData.monthlyTokenLimit` po konekciji ima prednost nad ovom varijablom okruženja. |
| `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Zamjenska putanja korisničkog interfejsa konzole za dohvaćanje kvote besplatnog nivoa za vizuelne/medijske modele u Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Zamjenska putanja korisničkog interfejsa konzole za dohvaćanje kvote besplatnog nivoa za multimodalne modele u Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Zamjenska putanja korisničkog interfejsa konzole za dohvaćanje kvote besplatnog nivoa za audio modele u Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(nije postavljeno)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Opcionalna putanja do lokalne JSON zamjenske datoteke za ugrađenu listu dozvoljenih tekstualnih modela besplatnog nivoa kompanije Alibaba. Ako nije dostupna, 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šavanja pri izračunavanju budžeta upita. |
| `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Broj najnovijih umetnutih slika koje se zadržavaju pri uklanjanju starijih radi uklapanja u kontekstni prozor (#8560). |
| `MODEL_ALIAS_COMPAT_ENABLED` | omogućeno | `open-sse/services/model.ts` | Uključuje ili isključuje naslijeđeni sloj kompatibilnosti pseudonima modela koji koriste stariji klijenti. |
| `OMNIROUTE_EMERGENCY_FALLBACK` | omogućeno | `open-sse/services/emergencyFallback.ts` | Postavite na `false` (ili `0`) da onemogućite rezervni mehanizam za hitne slučajeve pri iscrpljenju budžeta, koji preusmjerava neuspjele zahtjeve na besplatni model `nvidia`/`openai/gpt-oss-120b`. Važeći redoslijed prioriteta je zamjenska postavka baze podataka Feature Flags > varijabla okruženja > zadana vrijednost; ako nije dostupna, servis koristi izvornu vrijednost varijable okruženja. |
| `COMMAND_CODE_CALLBACK_PORT` | _(nije postavljeno)_ | `src/app/api/providers/command-code/auth/shared.ts` | Lokalni port koji se koristi za povratne pozive u OAuth stilu iz CLI pomoćnog alata Command Code. |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Vrijednost koja se šalje kao zaglavlje `x-command-code-version` uzvodnom servisu Command Code. Promijenite je da biste povećali verziju CLI-ja. |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Osnovni URL uzvodnog servisa Command Code za korištenje/kvotu koji koristi telemetrija za dohvaćanje kvote pametnog telefona. Promijenite ga za samostalno hostovani/alternativni Command Code API. |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Lokalni port za vezivanje MITM proxyja za otklanjanje grešaka. |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Postavite na `1` da onemogućite uzvodnu TLS provjeru (samo za razvoj). |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Vrijeme čekanja neaktivne utičnice (ms) za proksirane veze; neaktivne utičnice koje prekorače ovo vrijeme prekidaju se kako bi se izbjeglo curenje poluotvorenih tunela. |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Port na kojem Antigravity MITM most osluškuje. |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Krajnja tačka usmjerivača na koju most prosljeđuje Antigravity saobraćaj. |
| `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Zamjenjuje direktorij iz kojeg most učitava svoj TLS materijal. Model certifikata bira se kao kod AgentBridge servera: `server.crt`/`server.key` za naslijeđenu instalaciju krajnjeg certifikata, a inače `ca.crt`/`ca.key` (korijenski CA, po jedan krajnji certifikat za svaki presretnuti host; prisilno omogućeno postavkom `MITM_ROOT_CA_ENABLED=true`). Most se zatvara pri pokretanju ako nedostaju datoteke za aktivni model. |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Opširnost dnevnika odluka o usmjeravanju: `0` ih utišava, a više vrijednosti bilježe više odluka o zaobilaženju/usmjeravanju. |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Postavite na `true` da biste uključili model korijenskog CA-a i krajnjeg certifikata za svaki host (#6684). Nove instalacije dobijaju ga automatski; instalacije s prethodno postojećim pouzdanim naslijeđenim krajnjim certifikatom zadržavaju naslijeđeni certifikat s fiksnim SAN-om osim ako se ovaj model izričito ne uključi. |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Postavlja MITM upravitelj ZA pokrenuti proces proxyja (`root-ca` \| `legacy`) — odražava odluku o migraciji certifikata; nije namijenjeno ručnom postavljanju. |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Postavite na `1` (istinito) da biste uklonili početni `sudo` iz MITM naredbi za pouzdavanje certifikata — za implementacije bez root pristupa / s korisničkim prostorima imena, gdje operater ručno smatra CA pouzdanim (npr. putem Nodeovog mehanizma za dodatne CA certifikate). |
| `SKIP_ANTIGRAVITY_DNS` | _(nije postavljeno)_ | `src/mitm/dns/provision.ts` | Postavite na `true` da biste u potpunosti preskočili dodavanje DNS unosa u `/etc/hosts` za nazive hostova Antigravity proxyja — za kontejnere bez dostupnog sudo/root pristupa. |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(nije postavljeno)_ | `src/mitm/dns/dnsConfig.ts` | Postavite na `1` da biste preskočili zapisivanje u datoteku hosts prilikom dodavanja/uklanjanja DNS unosa — za izolovana testna okruženja ili ona samo za čitanje. |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Zaštita samo za testiranje/CI: postavite na `1` kako instalacija/deinstalacija pouzdanosti certifikata ne bi izvršavala nikakvu radnju, tako da testni paket nikada ne mijenja spremište pouzdanih certifikata OS-a. Automatski se postavlja tokom konfiguracije testova i CI tokova rada. |
| `CHANGELOG_BASE_REF` | _(automatski)_ | `scripts/check/check-changelog-integrity.mjs` | Eksplicitna osnovna referenca za zaštitu od neželjenog brisanja CHANGELOG-a (zadano je osnovna grana PR-a u CI-ju ili najviša `release/v*`). |
| `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Postavite na `true` da biste omogućili pozadinski raspoređivač za automatsku sinhronizaciju skupa besplatnih proxyja. Opcionalno je i 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ćite 1proxy kao izvor besplatnih proxyja. Postavite na `false` da biste ga onemogućili. |
| `FREE_PROXY_1PROXY_API_URL` | _(pogledajte oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Zamjenski 1proxy API URL. |
| `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Maksimalan broj proxyja koji se preuzima iz 1proxyja po sinhronizaciji. |
| `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ćava Proxifly kao besplatni izvor proxy servera. Postavite na `false` da biste ga onemogućili. |
| `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Broj proxy servera koji se preuzimaju pri svakoj 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ćava IPLocate kao besplatni izvor proxy servera. Dostupno samo uz izričito uključivanje. |
| `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Zamjenski osnovni URL za IPLocate listu proxy servera. |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Omogućava Webshare kao izvor skupa proxy servera. Postavite na `false` da biste ga onemogućili; također zahtijeva da bude postavljen `FREE_PROXY_WEBSHARE_API_KEY`. |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(nema)_ | `src/lib/freeProxyProviders/webshare.ts` | API token Webshare računa (`Authorization: Token `). Obavezan je — pružalac usluge ostaje onemogućen bez njega. |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Zamjenski URL API-ja za Webshare listu proxy servera. |
| `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Maksimalan broj proxy servera koji se uvoze pri svakoj Webshare sinhronizaciji. |
| `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Prikaži/sakrij dugme Deploy Vercel Relay na kartici Proxy Pool. |
| `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Zamjenski osnovni URL za Vercel API (za testiranje). |
| `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Zadani naziv projekta koji je unaprijed unesen u modalni prozor za implementaciju Vercel Relaya. |
| `TAILSCALE_BIN` | _(automatsko otkrivanje)_ | `src/lib/tailscaleTunnel.ts` | Eksplicitna putanja do izvršne datoteke `tailscale`. |
| `TAILSCALED_BIN` | _(automatsko otkrivanje)_ | `src/lib/tailscaleTunnel.ts` | Eksplicitna putanja do binarne datoteke demona `tailscaled`. |
| `TAILSCALE_AUTHKEY` | _(nije postavljeno)_ | `src/lib/tailscaleTunnel.ts` | Unaprijed dijeljeni Tailscale ključ za autentifikaciju za neinteraktivni način rada / rad bez grafičkog interfejsa putem `tailscale up` (prosljeđuje se pomoću `--auth-key=`). Kada nije postavljen, prijava se vraća na interaktivni URL za autentifikaciju u pregledniku. |
| `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 datoteka sigurnosnih kopija koje se zadržavaju prilikom ručnog/planiranog čišćenja sigurnosnih kopija. Snimci migracije adresirani su prema sadržaju i ponovo se koriste za identično stanje baze podataka; ne uklanjaju se unutar vremenskog okvira istovremene migracije. Nadjačava vrijednost sačuvanu u Postavke → Zadržavanje sigurnosnih kopija baze podataka. |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Maksimalna starost (u danima) sigurnosnih kopija koje se zadržavaju prilikom ručnog/planiranog čišćenja. Vrijednost `0` onemogućava uklanjanje na osnovu starosti. Snimci migracije ne uklanjaju se unutar vremenskog okvira istovremene migracije. Nadjačava vrijednost sačuvanu u Postavke → Zadržavanje sigurnosnih kopija baze podataka. |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Interval pokretanja (ms) serverskog zadatka koji izvršava `backup-schedule.json`. Mora ostati znatno ispod jednominutne granularnosti crona; vrijednosti manje od `5000` ili vrijednosti koje se ne mogu raščlaniti vraćaju se na `30000`. |
| `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Naznaka izvršnog okruženja kontejnera za provjeru dozvola ulazne tačke. Postavite na `podman` za bilo koju Podman topologiju. Budući da kontejner ne može utvrditi je li mehanizam lokalni ili mu se pristupa putem Podman Machine, upozorenje ostaje neutralno u pogledu topologije i upućuje na `contrib/podman/README.md`. |
| `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Pozadinski sistem spremišta potrošnje udjela kvote: `sqlite` (zadano) ili `redis`. |
| `QUOTA_STORE_REDIS_URL` | _(nije postavljeno)_ | `src/lib/quota/storeFactory.ts` | Redis niz za povezivanje 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 skupa (0..1); na toj ili višoj vrijednosti skup prelazi u strogi način rada (bez posuđivanja). |
| `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Množitelj rezultata (0..1) koji se primjenjuje na odredište kada mu politika meke kvote smanji prioritet. |
| `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Množitelj rezultata (0..1) koji se primjenjuje na iscrpljenog pružaoca (`credits_exhausted`/`rate_limited`) pri auto-combo bodovanju kada je preventivno ograničenje kvote ISKLJUČENO (#4540). |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Period čuvanja (u danima) za `quota_consumption` grupe prije automatskog čišćenja (`gcQuotaConsumption`). |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Opcionalno uključivanje (zadano ISKLJUČENO): omogućava strogo ograničenje kvote automatskog usmjeravanja koje odbacuje kandidate s niskom kvotom prije bodovanja. |
| `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Opcionalno uključivanje (zadano ISKLJUČENO): kada filter `auto/:` ne pronađe povezane kandidate, vraća prethodno ponašanje korištenja punog (nefiltriranog) skupa umjesto vraćanja praznog skupa. Zadana vrijednost ISKLJUČENO znači da `:free` označava „samo besplatni nivo“. |
| `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Ograničenje veličine panela (svedeno na raspon 1–10) za varijantu emitiranja `auto/*:chaos` — jedan zahtjev prosljeđuje se na najviše ovoliko modela različitih pružalaca. |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(zadana vrijednost mehanizma)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Podešavanje minimalne veličine panela koje se prosljeđuje obrađivaču chaos emitovanja; ako nije postavljeno, zadržava se zadana vrijednost mehanizma. |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(zadana vrijednost mehanizma)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Strogo vremensko ograničenje (ms) za cjelokupno chaos prosljeđivanje panela; ako nije postavljeno, zadržava se zadana vrijednost mehanizma. |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Putanja do Grok CLI datoteke `auth.json` koja se koristi za dohvaćanje sedmične kvote servisa grok-web; promijenite je za testove ili nestandardnu instalaciju CLI-ja. |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(nije postavljeno)_ | `src/mitm/manager.ts` | Dodatni CA certifikat (PEM) kojem se vjeruje za AgentBridge uzvodne TLS veze. |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Maksimalan broj zabilježenih zahtjeva koji se čuvaju u kružnom međuspremniku Inspektora saobraćaja. |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Maksimalna veličina zabilježenog tijela zahtjeva/odgovora (KB) prije skraćivanja. |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Lokalni port za HTTP proxy Inspektora saobraćaja. |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Automatski pokreće HTTP proxy inspektora pri pokretanju sistema. |
| `INSPECTOR_LLM_HOSTS_EXTRA` | _(nije postavljeno)_ | `src/lib/inspector/captureState.ts` | Dodatni nazivi hostova (odvojeni zarezima) koji se pri bilježenju tretiraju kao LLM krajnje tačke. |
| `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | Maskira tajne (zaglavlja za autentifikaciju / API ključeve) u zabilježenom saobraćaju. |
| `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | Broj minuta prije nego što zaštita sistemskog proxyja automatski vrati postavke proxyja operativnog sistema. |
| `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(automatski)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Token za autentifikaciju internog prijema snimljenog prometa u inspektor. |
| `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Maksimalan broj paralelnih kolona u načinu rada za poređenje u Playgroundu. |
| `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(nije postavljeno)_ | `src/app/(dashboard)/dashboard/playground/` | Zadani model za radnju „poboljšaj prompt“ u Playgroundu (ako nije postavljeno, koristi se aktivni model). |
| `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Glavni prekidač za isključivanje Bifrost sidecar proxyja. Kada je postavljeno na `0`, ruta vraća 503 sa zaglavljem `X-Bifrost-Killswitch`, a operater se preusmjerava na TS putanju. Koristi se za onemogućavanje sidecara bez ponovnog postavljanja (incident rutera nivoa 1, rotacija ključeva). |
| `BIFROST_BASE_URL` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Kada je postavljeno, ruta Bifrost sidecar proxyja prosljeđuje promet `/v1/chat/completions` ovom Go pristupniku umjesto TS obrađivaču releja. Nije postavljeno → 503 s rezervnom opcijom. Završna kosa crta se uklanja. |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Port na koji se nadzirana ugrađena usluga Bifrost veže (`127.0.0.1:`) kada OmniRoute upravlja životnim ciklusom Bifrost sidecara. Zadana vrijednost je `8080`. |
| `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Port na koji se nadzirana usluga za kompresiju LLMLingua veže (`127.0.0.1:`). Zadana vrijednost je `20135`. |
| `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | Osnovni URL za lokalni demon HTTP mikrousluge za kompresiju LLMLingua. Zadana vrijednost je `http://127.0.0.1:20135`. |
| `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | ID Hugging Face modela koji nadzirani LLMLingua sidecar učitava (prosljeđuje se okruženju podređenog procesa). |
| `BIFROST_API_KEY` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | API ključ za Bifrost pristupnik (šalje se kao `Authorization: Bearer ...`). Ako nije postavljen, ruta očekuje da zahtjev sadrži važeći OmniRoute API ključ; ovaj ključ služi samo za autentifikaciju na strani pristupnika. |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Kada je postavljeno na true, Bifrost sidecar ruta šalje odgovore nazad putem SSE-a kroz gateway umjesto putem TS izvršitelja streaminga. Postavite na `0` da biste prisilili JSON odgovore bez streaminga kroz gateway. |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Vremensko ograničenje po zahtjevu prilikom prosljeđivanja na Bifrost gateway (ms). Nakon isteka vremena ruta vraća TS relejnu putanju putem zaglavlja `X-Bifrost-Fallback`. |
| `OMNIROUTE_BIFROST_KEY` | _(nije postavljeno)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Alias za `BIFROST_API_KEY` (koriste ga skripte koje čitaju varijable okruženja putem prefiksa `OMNIROUTE_*`). `BIFROST_API_KEY` ima prednost kada su obje postavljene. |
| `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Pozadinski sistem releja za `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript relej (zadano kada Bifrost nije konfiguriran); `auto` odabire Bifrost kada je `BIFROST_BASE_URL` postavljen i `BIFROST_ENABLED` ≠ `0`, uz automatski povratak na TS ako sidecar nije dostupan; `bifrost` prisilno koristi Bifrost (strogo, bez povratka). Autentifikacija/ograničavanje brzine/zaštita od ubrizgavanja/lista dopuštenih uvijek se prvo izvršavaju u Next ruti. Odgovori sadrže `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 alias za `OMNIROUTE_RELAY_BACKEND` (iste vrijednosti `ts \| bifrost \| auto`). `OMNIROUTE_RELAY_BACKEND` ima prednost kada su obje postavljene. |
| `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | Period čekanja (ms) nakon neuspješnog Bifrost sidecar koraka u načinu rada `auto`, prije nego što relej ponovo pokuša koristiti sidecar; dok period čekanja traje, zahtjev usmjerava direktno na TS putanju, a zatim ponovo provjerava dostupnost. `0` onemogućava ovu funkciju. 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` putem HTTPS-a (ekvivalentno opciji `--tls-cert`). Mora biti uparen s `OMNIROUTE_TLS_KEY`; samostalni server tada završava TLS na istom osluškivaču (`wss://` radi bez promjena). Nije postavljeno → obični HTTP. Navođenje samo certifikata ili ključa, odnosno nečitljive putanje, zapisuje upozorenje i ostaje na HTTP-u. |
| `OMNIROUTE_TLS_KEY` | _(nije postavljeno)_ | `bin/cli/commands/serve.mjs` | Putanja do PEM TLS privatnog ključa za HTTPS u `omniroute serve` (ekvivalentno opciji `--tls-key`). Mora biti uparen s `OMNIROUTE_TLS_CERT`. Pogledajte `OMNIROUTE_TLS_CERT`. |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Glavni prekidač za rute `/api/local/*`. Kada nije postavljen ili je `0`, sve rute `/api/local/*` vraćaju 503 u produkciji. Mora biti `1` u implementacijama koje nisu na loopback interfejsu kako bi se omogućili Redis pokretač i slični pokretači lokalnih usluga jednim klikom. Dodatna zaštita uz klasifikaciju zaštitnika ruta `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` u `src/server/authz/routeGuard.ts`). |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(nije postavljeno)_ | `src/lib/security/localEndpoints.ts` | Bearer token za pozivaoce ruta `/api/local/*` koji nisu na loopback interfejsu (npr. desktop aplikacija). Kada je postavljen, zahtjevi s IP adresa koje nisu loopback moraju sadržavati `Authorization: Bearer `. Obavezan je kada je `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` u implementacijama koje nisu na loopback interfejsu. |
| `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Naziv kontejnera za pokretač Redisa jednim klikom (`omniroute redis up`). Koriste ga i CLI i GUI `RedisLauncherPanel`. |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Port hosta za pokretač Redisa jednim klikom. Promijenite ga ako host već koristi port 6379. Interni port kontejnera ostaje 6379. |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Interfejs hosta na kojem pokretač Redisa jednim klikom objavljuje servis. Pokretač pokreće Redis BEZ lozinke, pa vezivanje za `0.0.0.0` omogućava svakom hostu na vašem LAN-u neautentificiran pristup Redisu — proširite dostupnost samo ako sami postavite i lozinku za instancu. |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfejs hosta na kojem docker-compose objavljuje Redis pomoćni servis (#9286). Redis iz compose konfiguracije radi bez `requirepass`; kontejneri aplikacije pristupaju mu preko compose mreže (`redis:6379`) — objavljeni port postoji samo za alate na strani hosta. `0.0.0.0` izlaže neautentificirani Redis cijelom LAN-u. |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | Port hosta za Redis pomoćni servis iz compose konfiguracije. |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Interfejs hosta na kojem docker-compose objavljuje vlastite portove aplikacije za kontrolnu ploču/API/live-WS (#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 cijelom LAN-u/WAN-u — proširite dostupnost tek kada je `REQUIRE_API_KEY=true` ili kada posrednički proxy ispred njega primjenjuje vlastitu autentifikaciju. |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfejs hosta na kojem docker-compose objavljuje Qdrant pomoćni servis za memoriju (#12578). Primjenjuje se isto obrazloženje za izlaganje LAN-u kao i za `REDIS_BIND_HOST`. |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfejs hosta na kojem docker-compose objavljuje Bifrost pomoćni servis usmjerivača (#12578). Primjenjuje se isto obrazloženje za izlaganje LAN-u kao i za `REDIS_BIND_HOST`. |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Prefiks prostora imena koji se primjenjuje na svaki OmniRoute Redis ključ (ograničivač brzine, keš autentifikacije, spremište kvota, zaštitni prekidač zagrijavanja). Sprječava kolizije ključeva kada se Redis instanca dijeli s drugim aplikacijama (#11042). |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(nije postavljeno — mehanizam je onemogućen)_ | `src/lib/api/internalServiceAuth.ts` | Dijeljena tajna za interne REST prijelaze 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 izvornog pozivatelja. Poredi se pomoću `timingSafeEqual`. |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(nije postavljeno)_ | `src/lib/api/internalServiceAuth.ts` | Varijanta tokena interne usluge u tajnoj datoteci: putanja do datoteke čiji je sadržaj, nakon uklanjanja okolnih praznina, token. Provjerava se samo kada ugrađena varijabla nije postavljena. |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Obogaćuje listu pružalaca usluga na kontrolnoj ploči sedmičnom statistikom rangiranja s OpenRoutera (#9324). Podrazumijevano je uključeno; postavite na `false` da biste u potpunosti preskočili pozadinsko dohvaćanje (ne blokira i nikada nije fatalno). |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24 h) | `src/lib/catalog/openrouterProviderStats.ts` | Vrijeme važenja keša za snimak statistike pružalaca usluga s OpenRoutera, u milisekundama. |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Redis slika koju koristi pokretač Redisa jednim klikom. Po potrebi promijenite na `redis:8-alpine` ili privatni mirror registra. |
| `QDRANT_HOST` | `qdrant` | _(opcijski profil klastera)_ | Naziv hosta Qdrant pomoćnog kontejnera kada je aktivan `--profile memory`. Podrazumijevana vrijednost upućuje na naziv qdrant usluge unutar mreže; promijenite je za vanjsku implementaciju. Koristi se samo kada je `qdrantEnabled` postavljen na `true` u kodu (`src/lib/memory/vectorStore.ts:108`). |
| `QDRANT_PORT` | `6333` | _(opcijski profil klastera)_ | REST port Qdrant pomoćnog kontejnera. |
| `QDRANT_GRPC_PORT` | `6334` | _(opcijski profil klastera)_ | gRPC port Qdrant pomoćnog kontejnera. Koriste ga klijentske biblioteke koje za operacije streaminga preferiraju gRPC umjesto REST-a. |
| `QDRANT_API_KEY` | _(nije postavljeno)_ | _(opcijski profil klastera)_ | Opcijski API ključ za Qdrant Cloud ili autentificiranu lokalnu instancu. Prazno → zaglavlje `api-key` se ne šalje. |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(opcijski profil klastera)_ | Naziv kolekcije za vektorske reprezentacije memorije razgovora u OmniRouteu. Kreira se pri prvom pokretanju s brojem dimenzija `QDRANT_VECTOR_SIZE`. |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(opcijski profil klastera)_ | Naziv podrazumijevanog modela za vektorske reprezentacije zabilježen u metapodacima Qdrant kolekcije. Stvarne vektorske reprezentacije generira pružalac usluge na kojeg upućuje polje `embeddingModel` u postavkama OmniRoutea. |
| `QDRANT_VECTOR_SIZE` | `1536` | _(opcionalni profil klastera)_ | Dimenzija vektora ugrađivanja. Mora odgovarati modelu koji koristite za ugrađivanje (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). |
| `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(opcionalni profil klastera)_ | Tačnost pri izgradnji HNSW indeksa. Veća vrijednost = sporija izgradnja, brže pretraživanje. |
| `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Glavni prekidač za rotaciju računa koju može konfigurirati operater. Kada je `false`, nijedna od klasa `OMNIROUTE_ROTATE_*` u nastavku ne pokreće prebacivanje na rezervni račun (isključeno glavno stanje također blokira podrazumijevano omogućene klase 429/500/502). Omogućava nadzornom frontendu (npr. desktop aplikaciji VibeProxy) da preslika vlastita pravila rotacije na backend mehanizam za prebacivanje računa. |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Period čekanja (u sekundama) koji se primjenjuje na račun s ograničenom stopom kada nadređeni servis ne pruži izričitu informaciju o poništavanju. `0` = koristi podrazumijevani period čekanja mehanizma umjesto fiksnog nadjačavanja. |
| `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Odraz postavke frontenda „ne označavaj kao ograničeno stopom bez vremena poništavanja“. |
| `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | Omogućavanje prebacivanja po statusu za greške `429`. Kada je `false` (i `OMNIROUTE_ROTATION_ENABLED=true`), greška `429` više ne pokreće rotaciju računa, nego se vraća klijentu. |
| `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj grešaka `429` unutar perioda `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` potreban prije rotacije računa. `1` (podrazumijevano) odmah pokreće rotaciju, čime se zadržava dosadašnje ponašanje. |
| `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni vremenski okvir (u sekundama) unutar kojeg se greške `429` broje prema pragu `OMNIROUTE_ROTATE_429_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | Omogućavanje prebacivanja po statusu za serverske greške `5xx` (isključujući `502`, koja ima vlastitu klasu). Kada je `false`, ove greške više ne pokreću rotaciju računa. |
| `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj grešaka `5xx` unutar perioda `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` potreban prije rotacije računa. `1` (podrazumijevano) odmah pokreće rotaciju. |
| `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni vremenski prozor (u sekundama) tokom kojeg se `5xx` greške broje prema pragu `OMNIROUTE_ROTATE_500_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | Omogućavanje rezervnog prebacivanja za greške statusa `502` (neispravan mrežni prolaz). Kada je `false`, greške `502` više ne pokreću rotaciju računa. |
| `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj grešaka `502` unutar `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` potreban prije rotacije računa. Vrijednost `1` (zadana) odmah pokreće rotaciju. |
| `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni vremenski prozor (u sekundama) tokom kojeg se `502` greške broje prema pragu `OMNIROUTE_ROTATE_502_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | Opcionalno omogućavanje (zadano ISKLJUČENO): kada je `true`, obična greška `400` (neispravan zahtjev) također pokreće rotaciju računa. Ovo je samo dodatno ponašanje — nikada ne blokira postojeće ponašanje mehanizma, prema kojem se prebacivanje i dalje vrši ako greška `400` sadrži tekst o ograničenju brzine ili kvoti, bez obzira na ovu zastavicu. |
| `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Broj grešaka `400` unutar `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` potreban prije rotacije računa (uzima se u obzir samo kada je `OMNIROUTE_ROTATE_ON_400=true`). |
| `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Klizni vremenski prozor (u sekundama) tokom kojeg se `400` greške broje prema pragu `OMNIROUTE_ROTATE_400_THRESHOLD`. |
### Claude planer zagrijavanja
Zagrijavanje pokretano Cronom za Anthropic OAuth veze koje su uključene, tako da se petosatni period ograničenja brzine otvara trivijalnim zakazanim zahtjevom umjesto prvim stvarnim zahtjevom (#8848). Planer je isključen osim ako je `OMNIROUTE_WARMUP_ENABLED` istinit **i** veza je označena u `settings.claudeWarmup.connections`; prazna lista veza znači da se ništa ne zagrijava čak ni kada je varijabla okruženja uključena.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------ | --------------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_WARMUP_ENABLED` | _(nije postavljeno → isključeno)_ | `src/lib/warmupScheduler.ts` | Glavni prekidač za planer zagrijavanja. Prihvata `1`/`true`/`yes`/`on` (bez obzira na velika i mala slova, uz uklonjene razmake). Bilo koja druga vrijednost ili nepostavljena vrijednost ostavlja planer isključenim. |
| `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Cron izraz s pet polja za ciklus zagrijavanja, koji se procjenjuje u vremenskoj zoni `America/Los_Angeles` (Anthropicova vremenska zona resetovanja), bez obzira na sat hosta. |
| `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | Broj konekcija koje se paralelno zagrijavaju po ciklusu. Ograničeno na `1`-`10`; za nenumeričku vrijednost koristi se rezervna vrijednost `3`. |
| `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | Model koji se koristi za zahtjev zagrijavanja. Promijenite samo ako zadani model nije dostupan u vašem paketu; odaberite najjeftiniji model koji ipak otvara vremenski prozor. |
### VNC sesije za prijavu putem preglednika i alias direktorija podataka
Kontejnerizirani Chromium+VNC koji se koristi za interaktivno prikupljanje vjerodajnica za prijavu putem preglednika (`/api/vnc-session`), uz zastarjeli alias `DATA_DIR`. Sve je opcionalno — zadane VNC postavke koriste uključenu sliku `omniroute-vnc-chromium:local` i mijenjaju se samo za prilagođenu sliku kontejnera, portove ili podešavanje životnog ciklusa.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Oznaka Docker slike za Chromium+VNC kontejner za prijavu. Izgradite `docker/vnc-browser/chromium` ili ovdje navedite prilagođenu sliku. |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Binarna datoteka kontejnerskog izvršnog okruženja koja 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` | Port Chrome DevTools Protocola 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 hosta koji sadrži trajno pohranjene profile za prijavu putem preglednika. |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 min) | `src/lib/vncSession/manifest.ts` | Vrijeme čekanja u stanju mirovanja (ms) prije uklanjanja neaktivne VNC sesije. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 min) | `src/lib/vncSession/manifest.ts` | Čvrsto ograničenje (ms) trajanja jedne 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` | Vrijeme čekanja (ms) da preglednik u kontejneru postane spreman za CDP. |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Vrijeme čekanja (ms) za preuzimanje snimljene 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 koje se prosljeđuju Chromiumu u kontejneru. |
| `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 drugi kontejneri ne mogu pristupiti njegovom portu CDP mosta. |
| `VIBEPROXY_DATA_DIR` | _(nije postavljeno)_ | `open-sse/services/notionThreadSessions.ts` | **Zastarjeli alias** za `DATA_DIR`, koji se provjerava tek nakon što ni `DATA_DIR` ni `OMNIROUTE_DATA_DIR` nisu postavljeni. Određuje lokaciju predmemorije sesija Notion web-niti (`/notion-web-thread-sessions.json`). |
---
## 26. Testni i E2E okvir
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 sve
vrijednosti u nastavku nepostavljene u produkcijskim okruženjima.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| -------------------------------------- | ------------------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | E2E režim inicijalizacije (`auth`, `fresh`, `reuse`) za Playwright pokretač. |
| `OMNIROUTE_E2E_PASSWORD` | koristi `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Administratorska lozinka koja se umeće u Playwright okruženje. |
| `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Onemogućava lokalnu provjeru stanja tokom Playwright izvršavanja. |
| `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Onemogućava petlju provjere stanja OAuth tokena tokom testiranja. |
| `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(nije postavljeno)_ | `src/lib/tokenHealthCheck.ts` | Pružaoci odvojeni zarezima koji su isključeni iz proaktivnog ciklusa osvježavanja tokena (npr. `codex,openai`). Ciljana alternativa potpunom onemogućavanju provjere stanja — pružaoci s kratkim TTL-om nastavljaju se osvježavati, dok kaskadni pružaoci ostaju isključivo reaktivni. |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Utišava poruke provjere stanja u Playwright standardnom izlazu. |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Preskače Next.js produkcijsku izgradnju prije pokretanja Playwrighta (CI optimizacija). |
| `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Preskače OmniRoute kuku za deinstalaciju (CI je koristi kako bi `node_modules` ostao netaknut). |
| `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | Vrijeme čekanja (ms) da server postane dostupan prije pokretanja testova ekosistema/protokola. |
| `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | URL na kojem Electron okvir za osnovno testiranje očekuje da upakovana aplikacija bude dostupna. |
| `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Ukupno vrijeme isteka (ms) prije nego što okvir za osnovno testiranje odustane. |
| `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | Period stabilizacije (ms) nakon učitavanja stranice. |
| `ELECTRON_SMOKE_APP_EXECUTABLE` | _(automatski)_ | `scripts/dev/smoke-electron-packaged.mjs` | Eksplicitna putanja do izvršne datoteke upakovane Electron aplikacije. |
| `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | Direktorij podataka za Electron osnovno testiranje. |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Postavite na `1` kako biste sačuvali direktorij s testnim podacima nakon izvršavanja. |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Postavite na `1` za prosljeđivanje Electron zapisa na stdout tokom izvršavanja. |
| `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: ponovo pokrenite koristeći isti direktorij s podacima i provjerite da drugo pokretanje odabire izvorni SQLite upravljački program. |
| `CLI_DEVIN_BIN` | _(pretraga u PATH-u)_ | `open-sse/executors/devin-cli.ts` | Nadjačajte putanju do izvršne datoteke Devin CLI-ja. |
### Proces prevođenja dokumentacije
Koristi ga `scripts/i18n/run-translation.mjs` (naredba `npm run i18n:run`).
Svih pet varijabli je standardno nepostavljeno — postavite ih u `.env` samo na računarima
koji trebaju moći pokretati prevodilac dokumentacije.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ----------------------------------- | ----------------- | ---------------------------------- | ------------------------------------------------------------------------- |
| `OMNIROUTE_TRANSLATION_API_URL` | _(nepostavljeno)_ | `scripts/i18n/run-translation.mjs` | Osnovni URL kompatibilan s OpenAI-jem za pozadinski sistem prevođenja. |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(nepostavljeno)_ | `scripts/i18n/run-translation.mjs` | Bearer token za pozadinski sistem 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_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Vremensko ograničenje po zahtjevu u milisekundama. |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Paralelni zahtjevi za prevođenje pri obradi više datoteka / lokalizacija. |
---
## 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 | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Maksimalno vrijeme čekanja na mjesto za prihvat zahtjevnog chat zahtjeva prije ponovljivog odgovora `503`; kratko ograničeno čekanje serijalizira nalete agenata umjesto trenutnog odgovora `503`. Vrijednost `0` vraća trenutno odbijanje. |
| `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Budžet bajtova na čekanju za proces prihvata: ograničava ukupan broj baferovanih bajtova tijela zahtjeva zadržanih na nivou cijelog procesa kako čekanje ne bi povećalo korištenje heap memorije (#4380). Zahtjevi koji premašuju budžet odmah dobijaju ponovljivi odgovor `503`. |
| `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | Zastarjela postavka bez učinka od #10110: trake za prihvat po sesiji uklonjene su u korist jednog budžeta na nivou cijelog procesa. Prihvaća se radi kompatibilnosti konfiguracije; zanemaruje se. |
| `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Zastarjela postavka bez učinka od #10110: trake za prihvat po sesiji uklonjene su u korist jednog budžeta na nivou cijelog procesa. Prihvaća se radi kompatibilnosti konfiguracije; zanemaruje se. |
| `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (isključeno) | `open-sse/services/admission/runtime.ts` | Prilagodljive virtuelne trake za prihvat tokom izvršavanja (#9654): glavni prekidač za prilagodljivi pristupni mehanizam po korisniku sistema (sistem 2). Razlikuje se od zastarjelih varijabli traka po vezi iznad (TTL_MS / MAX_SESSIONS, bez učinka od #10110). Funkcijska zastavica istog naziva na kontrolnoj ploči; varijabla okruženja ima prednost nad vrijednošću postavljenom na kontrolnoj ploči; zahtijeva ponovno pokretanje. |
| `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | Ograničava koliko dugo poziv za trenutno pokretanje čeka na zadatak koji je već u toku prije pokretanja zadatka iz reda čekanja. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Održava IMS i stanje rizika preglednika ažurnim putem Chrome CDP sesija ograničenih na račun; postavite `0` da biste onemogućili. |
| `ADOBE_FIREFLY_SESSION_DISK` | omogućeno | `open-sse/services/adobeFireflySession.ts` | Trajno pohranjuje popravljene Adobe sesije unutar `DATA_DIR`; postavite `0` kako bi se stanje čuvalo samo u memoriji. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Minimalni razmak između slanja Adobe Firefly zahtjeva za generisanje. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Dodatni period mirovanja nakon svakog trećeg uspješnog Adobe zahtjeva. |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Pravi bezglavi način rada namijenjen samo za otklanjanje grešaka; Adobe colligo obično odbija tako nastalu sesiju rizika. |
| `CHROME_PATH` | automatsko otkrivanje | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Opcionalna apsolutna putanja do izvršne datoteke preglednika Chrome koju koriste izvršitelji upravljani preglednikom kada automatsko otkrivanje platforme nije dovoljno. |
| `TELEGRAM_BOT_TOKEN` | _(nije postavljeno)_ | `src/lib/telegram/config.ts` | BotFather token koji omogućava dolazni webhook i potpisuje `initData` Mini aplikacije. |
| `TELEGRAM_WEBHOOK_SECRET` | _(nije postavljeno)_ | `src/lib/telegram/config.ts` | Dijeljena tajna registrirana putem `setWebhook` i provjerena u odnosu na zaglavlje `X-Telegram-Bot-Api-Secret-Token` pri svakoj webhook isporuci. Obavezna je za webhook putanju; ako nije postavljena, webhook isporuke odbijaju se odgovorom 503. |
| `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Model koji se koristi za odgovore u Telegram chatu. |
| `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Zamjenski osnovni URL za Bot API, namijenjen proxyjima ili samostalno hostovanim Bot API serverima. |
| `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 biste preskočili generisanje `.tar.gz` tar arhiva tokom pripreme opcionalnih ML/pregledničkih paketa za samostalno Electron stablo (direktoriji paketa i `optional-packs.index.json` i dalje se generišu). Koristi ga tok rada za izdavanje desktop verzije radi smanjenja veličine artefakata koji se prenose. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Omogućava registraciju ruta za slike iz xAI pretplate; zadano je onemogućeno kako bi putanja za slike koja koristi API ključ ostala nepromijenjena. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Period čekanja po ključu, u milisekundama, kada odgovor `429` ne sadrži upotrebljivu naznaku `Retry-After`. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | omogućeno | `open-sse/services/estimatorCalibration.ts` | Postavite na `off`, `0` ili `false` da biste onemogućili bilježenje i primjenu kalibracije procjenitelja u memoriji. |
| `NEXT_MANUAL_SIG_HANDLE` | _(interno)_ | `scripts/dev/standalone-server-ws.mjs` | Interna zamjena rukovatelja signalima samostalnog servera; obično je postavlja i uklanja pokretač, umjesto da je konfiguriraju operateri. |
### ChatGPT Web (Codex)
Globalne zadane vrijednosti za bezglavi preglednik i odlazni tunel alata. Vrijednosti veze postavljene na kontrolnoj ploči imaju prednost.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(automatsko otkrivanje)_ | `open-sse/executors/chatgpt-web-codex.ts` | Eksplicitna Chrome/Chromium putanja za rad putem npm-a, systemd-a i PM2-a. |
| `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`. |
| `CDP_PROXY_TOKEN` | _(nije postavljeno)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Ako je postavljeno, svaki zahtjev prema CDP proxy sidecaru mora poslati ovu vrijednost u zaglavlju `X-Omni-Cdp-Token` (#13679). Bez vrijednosti proxy prosljeđuje zahtjeve bez autentifikacije — tada zaštitu pruža 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 cikluse 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 zapisnike. |
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | Tačan naziv novokreiranog 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` | Kada je postavljeno na `1`, dijagnostičke slike preglednika snimaju se na svakoj kontrolnoj tački. |
| `CODEX_CHATGPT_WEB_LAUNCHER` | _(nije postavljeno)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Opcionalna apsolutna putanja do trajne binarne datoteke pokretača. |
| `CODEX_CHATGPT_WEB_BUN` | _(automatsko otkrivanje)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Opcionalna apsolutna putanja do binarne datoteke Bun runtimea. |
| `CODEX_WEB_GPT_BUN` | _(nije postavljeno)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Naslijeđena rezervna opcija za `CODEX_CHATGPT_WEB_BUN`; nove postavke koriste kanonski naziv. |
---
## OmniConductor Bridge
Dugotrajni SSE potrošač koji preslikava zadatke OmniConductor čvorišta u lokalni A2A TaskManager (`src/lib/conductor/`). Opcionalno — most se pokreće samo kada je postavljen `CONDUCTOR_HUB_URL`. Samo na strani servera: token čvorišta nikada ne smije dospjeti do preglednika.
| Varijabla | Zadana vrijednost | Izvorna datoteka | Opis |
| ------------------------------ | ----------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CONDUCTOR_HUB_URL` | _(prazno)_ | `src/lib/conductor/boot.ts` | Osnovni URL OmniConductor čvorišta (npr. `http://127.0.0.1:7910`). Nije postavljeno = most je onemogućen. |
| `CONDUCTOR_HUB_TOKEN` | _(prazno)_ | `src/lib/conductor/boot.ts` | Vjerodajnica čvorišta za SSE kanal — kreirajte ravnopravni čvor vrste `spokesperson` na čvorištu (`POST /v1/peers`, administratorski pristup). |
| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(prazno)_ | `src/lib/conductor/hubProxy.ts` | Vjerodajnica za dolazno delegiranje A2A→čvorište zadataka (`POST /v1/tasks`); koristi `CONDUCTOR_HUB_TOKEN` kao rezervnu vrijednost kada nije postavljena. |
| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Osnovni URL usluge spokesperson (Faro) iza proxyja za razgovor na kontrolnoj ploči (`/api/conductor/ask`). |
### Raspoređivanje 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 | Zadana vrijednost | Izvorna datoteka | Opis |
| ---------------------------------- | ----------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Kada je `1`, preskače veze čiji budžet tokena po vremenskom okviru (`rateLimitOverrides.tpm`, tabela `provider_quota_state`) ne može pokriti procijenjeni trošak zahtjeva prije slanja. Dopušta nastavak u slučaju greške kada budžet nije konfigurisan. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(uključeno)_ | `open-sse/services/estimatorCalibration.ts` | Kalibracija procjenitelja tokena zaštite konteksta na osnovu povratnih informacija (#14931): EMA omjera `usage.prompt_tokens` / procjena po kombinaciji (pružalac, model, prisutnost alata), ograničena na 0,15–2,0, samo u memoriji. `off`, `0` ili `false` onemogućava bilježenje i primjenu. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Registruje rute slika `xai-oauth` (`xao`) i `grok-cli`. Funkcijska zastavica kontrolne ploče istog naziva; nadjačavanje iz baze podataka ima prednost nad ovom vrijednošću. |