# Environment Variables Reference (Română) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/ENVIRONMENT.md) · 🇪🇹 [am](../../../am/docs/reference/ENVIRONMENT.md) · 🇸🇦 [ar](../../../ar/docs/reference/ENVIRONMENT.md) · 🇦🇿 [az](../../../az/docs/reference/ENVIRONMENT.md) · 🇧🇬 [bg](../../../bg/docs/reference/ENVIRONMENT.md) · 🇧🇩 [bn](../../../bn/docs/reference/ENVIRONMENT.md) · 🇧🇦 [bs](../../../bs/docs/reference/ENVIRONMENT.md) · 🇨🇿 [cs](../../../cs/docs/reference/ENVIRONMENT.md) · 🇩🇰 [da](../../../da/docs/reference/ENVIRONMENT.md) · 🇩🇪 [de](../../../de/docs/reference/ENVIRONMENT.md) · 🇬🇷 [el](../../../el/docs/reference/ENVIRONMENT.md) · 🇪🇸 [es](../../../es/docs/reference/ENVIRONMENT.md) · 🇪🇪 [et](../../../et/docs/reference/ENVIRONMENT.md) · 🇮🇷 [fa](../../../fa/docs/reference/ENVIRONMENT.md) · 🇫🇮 [fi](../../../fi/docs/reference/ENVIRONMENT.md) · 🇫🇷 [fr](../../../fr/docs/reference/ENVIRONMENT.md) · 🇮🇪 [ga](../../../ga/docs/reference/ENVIRONMENT.md) · 🇮🇳 [gu](../../../gu/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ha](../../../ha/docs/reference/ENVIRONMENT.md) · 🇮🇱 [he](../../../he/docs/reference/ENVIRONMENT.md) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇺 [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) --- > Referință completă pentru fiecare variabilă de mediu recunoscută de OmniRoute. > Pentru un șablon de pornire rapidă, consultați [`.env.example`](../../.env.example). > [!IMPORTANT] > Fiecare variabilă documentată aici trebuie să apară și în `.env.example`, iar > fiecare variabilă din `.env.example` trebuie să apară aici. `npm run check:env-doc-sync` > impune această regulă la commit și în CI. Pentru a omite intenționat o variabilă, adăugați-o în > lista de permisiuni din `scripts/check/check-env-doc-sync.mjs`. --- ## Cuprins - [1. Secrete obligatorii](#1-required-secrets) - [2. Stocare și bază de date](#2-storage--database) - [3. Rețea și porturi](#3-network--ports) - [4. Securitate și autentificare](#4-security--authentication) - [5. Igienizarea datelor de intrare și protecția PII](#5-input-sanitization--pii-protection) - [6. Politici pentru instrumente și rutare](#6-tool--routing-policies) - [7. URL-uri și sincronizare cu cloudul](#7-urls--cloud-sync) - [8. Proxy de ieșire](#8-outbound-proxy) - [9. Integrarea instrumentelor CLI](#9-cli-tool-integration) - [10. Integrări cu agenți interni și MCP](#10-internal-agent--mcp-integrations) - [11. Credențiale pentru furnizorii OAuth](#11-oauth-provider-credentials) - [12. Suprascrieri User-Agent pentru furnizori](#12-provider-user-agent-overrides) - [13. Compatibilitatea amprentei CLI](#13-cli-fingerprint-compatibility) - [14. Furnizori de chei API](#14-api-key-providers) - [15. Setări pentru expirarea timpului de așteptare](#15-timeout-settings) - [16. Jurnalizare](#16-logging) - [17. Optimizarea memoriei](#17-memory-optimization) - [18. Sincronizarea prețurilor](#18-pricing-sync) - [19. Sincronizarea modelelor (dezvoltare)](#19-model-sync-dev) - [20. Setări specifice furnizorilor](#20-provider-specific-settings) - [21. Starea proxy-ului](#21-proxy-health) - [22. Depanare](#22-debugging) - [23. Integrarea cu GitHub](#23-github-integration) - [24. Sandbox pentru abilități (v3.8.0+)](#24-skills-sandbox-v380) - [27. Flux radar (găzduire proprie)](#27-radar-feed-self-hosting) - [Scenarii de implementare](#deployment-scenarios) - [Audit: variabile eliminate / neutilizate](#audit-removed--dead-variables) --- ## 1. Secrete obligatorii Secretele neconfigurate marcate cu **Da** sunt generate automat la prima rulare (`JWT_SECRET`, `API_KEY_SECRET`) și persistate în `server.env` din directorul de date — configurați-le explicit atunci când acel director este efemer. Excepția este `OMNIROUTE_WS_BRIDGE_SECRET`: nu este persistat în `server.env` — punctele de intrare ale serverului generează la fiecare boot o valoare efemeră pe care o poate folosi doar puntea din proces, de aceea clienții externi ai punții trebuie să o configureze explicit. | Variabilă | Obligatorie | Valoare implicită | Fișier sursă | Descriere | | ---------------------------- | --------------------- | ------------------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `JWT_SECRET` | **Da** | _(niciuna)_ | `src/lib/auth` | Semnează/verifică toate cookie-urile de sesiune ale panoului de control (JWT). Generați cu `openssl rand -base64 48`. | | `API_KEY_SECRET` | **Da** | _(niciuna)_ | `src/lib/db/apiKeys.ts` | Cheie de criptare AES pentru valorile cheilor API stocate în SQLite. Generați cu `openssl rand -hex 32`. | | `INITIAL_PASSWORD` | Nu | _(neconfigurată)_ | `src/lib/auth/managementPassword.ts` | Setează parola panoului de control la pornire, cât timp niciuna nu este salvată; este ignorată odată ce există o parolă salvată. Instalările npm și din sursă copiază `.env.example` în `.env`, deci pornesc cu substituentul său public cunoscut `CHANGEME`: înlocuiți-l înainte de primul boot sau setați `INITIAL_PASSWORD=` (gol) în acel `.env` pentru a crea parola în asistentul de configurare inițială la prima vizită, așa cum face o valoare neconfigurată (implicită în imaginea Docker). Schimbați o parolă salvată în Panou de control → Setări → Securitate sau rulați `omniroute reset-password` (`node bin/reset-password.mjs` într-un checkout din sursă) cu `DATA_DIR` configurat către directorul de date al serverului. | | `OMNIROUTE_WS_BRIDGE_SECRET` | **Da** (în producție) | _(neconfigurată)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Secret partajat pentru puntea WebSocket internă Codex Responses. Autentifică solicitările punții dintre releul WS Electron/browser și OmniRoute. ⚠️ **OBLIGATORIU în producție — când nu este configurat, toate solicitările către puntea WS sunt respinse.** Generați cu `openssl rand -base64 32`. | | `OMNIROUTE_SW_BUILD_ID` | Nu | _(SHA git)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Identificator explicit pentru invalidarea cache-ului service worker-ului pentru shell-ul PWA (#11779); primul în lanțul de rezoluție. | | `SOURCE_VERSION` | Nu | _(neconfigurată)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Al doilea în lanț — configurat de sistemele de compilare PaaS (de exemplu, în stil Heroku) drept commit-ul implementat. | | `NEXT_PUBLIC_SW_BUILD_ID` | Nu | _(derivată)_ | `src/shared/components/PwaRegister.tsx` | Valoare publică din timpul compilării, utilizată de client pentru a înregistra `/sw.js?v=…`; derivată din cele două valori de mai sus, apoi din SHA-ul git. | | `OMNIROUTE_PEER_STAMP_TOKEN` | Nu (automat) | _(automat la fiecare pornire)_ | `src/server/authz/policies/management.ts` | Secret per proces care dovedește că marcajul IP de peer de încredere provine de la propriul server HTTP al OmniRoute (`scripts/dev/peer-stamp.mjs`). Middleware-ul authz consideră de încredere caracterul local al solicitării (restricționarea rutelor LOCAL_ONLY la loopback/LAN) numai când marcajul conține acest token. Este generat automat la fiecare pornire — lăsați-l neconfigurat; fixați-l doar pentru configurațiile cu mai multe procese care trebuie să partajeze marcajul. | | `OMNIROUTE_TRUSTED_PROXIES` | Nu | _(neconfigurată)_ | `scripts/dev/peer-stamp.mjs` | Adrese IP sau intervale CIDR separate prin virgulă ale proxy-urilor inverse ale căror valori `X-Forwarded-For` / `X-Real-IP` pot fi considerate de încredere de lista de permisiuni/interdicții IP, pe lângă adresele loopback, adresele din rețele private și nodurile periferice Cloudflare, care sunt întotdeauna de încredere. Este necesar doar pentru un proxy aflat la orice altă adresă publică; în caz contrar, filtrul evaluează adresa proprie a proxy-ului. | ### Comenzi de generare ```bash # Generați toate cele patru secrete simultan: 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] > Nu trimiteți niciodată în sistemul de control al versiunilor fișiere `.env` care conțin secrete reale. Fișierul `.gitignore` exclude deja `.env`, dar verificați înainte de a publica modificările. --- ## 2. Stocare și bază de date OmniRoute utilizează **SQLite** (prin `better-sqlite3`) pentru toate datele persistente. Aceste variabile controlează locația datelor, criptarea și ciclul de viață. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Directorul rădăcină pentru baza de date SQLite, copiile de siguranță și fișierele de date. Suprascrieți-l pentru volume Docker sau căi personalizate. | | `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(nesetată)_ | `src/lib/dataPaths.ts` | Mecanism de evitare pentru protecția DATA_DIR din teste/evaluări (#10428). Testele și sondele de evaluare/afișare Node (`-e`/`--eval`/`-p`/`--print`, inclusiv formele `--eval=`/`--print=`) fără `DATA_DIR` sunt redirecționate către un director temporar de unică folosință, astfel încât să nu poată deschide baza de date reală a operatorului; setați la `1` pentru a permite din nou utilizarea directorului real. | | `OMNIROUTE_BUILD_SHA` | _(nesetată)_ | `src/lib/monitoring/buildSha.ts` | SHA-ul Git al artefactului care rulează. Inscripționat de `npm run build:release`; poate fi injectat în containerele livrate fără santinela `dist/BUILD_SHA`. Expus ca `system.buildSha` la `/api/monitoring/health`. | | `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Referința cu care poarta de proveniență pentru împachetarea artefactului verifică SHA-ul buildului (#10427). | | `OMNIROUTE_ALLOW_CANARY_BUILD` | _(nesetată)_ | `scripts/build/buildProvenance.ts` | Setați la `1` pentru a permite împachetarea unui build al cărui SHA nu se află pe linia de lansare, înregistrându-l drept un canary intenționat în loc ca verificarea să eșueze (#10427). | | `OMNIROUTE_SMOKE_API_KEY` | _(nesetată)_ | `scripts/ops/deploy-canary.mjs` | Cheia API pentru sonda smoke a implementării canary, trimisă ca `Authorization: Bearer` la `/v1/chat/completions`. Este utilizată numai de scriptul de implementare (#10429), niciodată de server. Nu are legătură cu variabilele `OMNIROUTE_SMOKE_*` ale infrastructurii opționale de teste smoke CLI (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` în `tests/integration/upstream-cli-smoke.int.test.ts`) — consultați [Integrări CLI → Verificare smoke reală](../guides/CLI-INTEGRATIONS.md). | | `OMNIROUTE_BUILDING` | _(nesetată)_ | `src/lib/buildPhase.ts` | Semnal pentru faza de build (#10060): setat la `1` de `scripts/build/build-next-isolated.mjs` și moștenit de fiecare worker de build lansat, astfel încât stratul bazei de date să returneze un stub no-op în loc să încarce add-on-ul nativ better-sqlite3 (care întrerupe workerul la ieșire). Nu este setat niciodată pentru serverul care rulează. | | `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Setați la `1` pentru a omite verificarea opțională dinaintea buildului pentru dependențele native în cazul arborilor vendorizați exotici. Aceasta nu face posibil buildul în lipsa unei dependențe; utilizați-o numai când dependențele native sunt furnizate printr-un canal separat. | | `OMNIROUTE_DATA_DIR` | _(nesetată)_ | `open-sse/executors/promptql/threadSticky.ts` | **Alias de rezervă** pentru `DATA_DIR`, verificat numai când `DATA_DIR` nu este setată. Utilizat pentru a localiza memoria cache pe disc a sesiunilor persistente per fir de execuție ale executorului PromptQL (`/promptql-thread-sessions.json`); dacă niciuna dintre variabile nu este setată, memoria cache rămâne doar în memorie (nu este păstrată între reporniri). | | `OMNIROUTE_PLUGINS_DIR` | _(nesetată)_ | `src/lib/plugins/scanner.ts` | Directorul citit de **scanerul de pluginuri din timpul rulării** — și rădăcina în care instalează managerul de pluginuri — care suprascrie valoarea implicită derivată din directorul personal (#11827). Direcționați-l către arborele de pluginuri montat prin bind în Docker/K8s, în loc să mutați HOME doar pentru a reloca calea de scanare (HOME controlează și orice alt comportament relativ la directorul personal). Nesetată = `~/.omniroute/plugins` sau `/tmp/.omniroute/plugins` atunci când procesul nu exportă deloc un director personal — evitând astfel nedetectarea silențioasă. Directorul rezolvat este înregistrat o singură dată la pornire ca `scanner.dir_resolved`, împreună cu valoarea de intrare care a prevalat. Numai pe partea de server: pluginurile de comenzi CLI își păstrează propriul `OMNIROUTE_PLUGIN_PATH` (secțiunea 9). | | `STORAGE_ENCRYPTION_KEY` | _(gol = dezactivat)_ | `src/lib/db/encryption.ts` | Cheie AES pentru criptarea în repaus a întregii baze de date SQLite. Generați-o cu `openssl rand -hex 32`. | | `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | Eticheta versiunii cheii de criptare. Incrementați-o când efectuați rotația cheii pentru a permite decriptarea copiilor de siguranță vechi. | | `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | Când este `true`, omite copiile de siguranță de rutină/anterioare scrierii ale fișierului SQLite (salvarea/ștergerea tarifelor models.dev, scrierea setărilor). Copiile de siguranță manuale și cele anterioare restaurării sunt create în continuare. Aceasta **nu** dezactivează instantaneul de siguranță durabil obligatoriu al executorului de migrări și nici protecția împotriva migrării în masă pentru o bază de date persistentă existentă. Copiile de siguranță care nu sunt manuale sunt limitate la cel mult una la fiecare 60 de minute. În panoul de control, **Setări → Stocare** poate dezactiva independent copierea de siguranță automată de rutină. | | `OMNIROUTE_CRYPT_KEY` | _(nesetat)_ | `src/lib/db/encryption.ts` | **Alias vechi** pentru `STORAGE_ENCRYPTION_KEY`. Este acceptat ca soluție de rezervă atunci când variabila principală lipsește. | | `OMNIROUTE_API_KEY_BASE64` | _(nesetat)_ | `src/lib/db/encryption.ts` | **Alias vechi** (format codificat Base64) acceptat ca soluție de rezervă. Este decodificat automat înainte de utilizare. | | `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(nesetat)_ | `src/lib/db/core.ts` | Suprascrie intervalul verificării periodice a stării SQLite (ms). Când nu este setat, valorile implicite sunt derivate din `NODE_ENV`. | | `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(eliminat)_ | `src/lib/db/walMaintenance.ts` | **Eliminat.** Un apel periodic `wal_checkpoint(TRUNCATE)` în timpul funcționării poate invalida maparea wal-index partajată și poate provoca oprirea procesului cu SIGBUS (#13973), astfel că planificatorul nu mai există. Variabila este inactivă: o valoare pozitivă înregistrează o singură avertizare privind perimarea, în timp ce `0` sau o valoare nesetată nu generează nimic. WAL este întreținut prin puncte de control PASSIVE (mai jos) și trunchiat de punctul de control efectuat la oprire. | | `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 min.) | `src/lib/db/walMaintenance.ts` | Suprascrie intervalul frecvent pentru `wal_checkpoint(PASSIVE)` (ms). Menține redus numărul cadrelor WAL în așteptare, astfel încât punctele de control să rămână rapide, iar dimensiunea fișierului WAL să rămână limitată între trunchierile efectuate la oprire. `0` dezactivează funcționalitatea. | | `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Când o verificare PASSIVE găsește fișierul WAL peste această dimensiune, execută `wal_checkpoint(RESTART)`, astfel încât WAL să reînceapă fără a rescrie wal-index-ul mapat. Punctele de control în modul de trunchiere în timpul funcționării au fost eliminate (consultați rândul `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). | | `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Setați la `1`/`true`/`yes`/`on` pentru a închide procesul după ce presiunea critică asupra resurselor se menține timp de `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, permițând unui supervizor (systemd `Restart=always`, politica de repornire Docker) să pornească din nou un proces curat, în loc să furnizeze răspunsuri 503 pe termen nelimitat. | | `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 min.) | `open-sse/utils/resourcePressure.ts` | Durata pentru care presiunea critică trebuie să persiste înainte de declanșarea ieșirii pentru autorepornire. | | `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Setați la `1`/`true`/`yes`/`on` pentru a ignora `/proc/pressure/memory` (`psi_some` / `psi_full`) la nivelul întregii gazde atunci când un vecin zgomotos declanșează răspunsuri 503, deși acest proces funcționează normal (#13124). Protecțiile pentru cgroup și heap-ul V8 rămân active. De asemenea, PSI nu mai este luat în calcul ca dovadă a limitării de către nucleu pentru `cgroup_high`: un total cgroup peste `memory.high` devine atunci critic numai la creșterea valorii `high`/`max` din `memory.events`. Fără `memory.events`, raportul brut este păstrat. | | `OMNIROUTE_SQLJS_WASM_PATH` | _(detectare automată)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Calea explicită (absolută sau relativă la cwd) către `sql-wasm.wasm` când se utilizează adaptorul de rezervă WASM `sql.js`. Când nu este setată, este detectată automat prin intermediul dependențelor pachetului și al amplasărilor candidate. | | `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Numărul de zile pentru care punctele de control, fișierele de intrare/ieșire/eroare referențiate și rândul unei sarcini Batch API aflate într-o stare finală (finalizată/eșuată/anulată/expirată) sunt păstrate înainte de ștergere de procesul automat de curățare. Se aplică numai după activarea `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`; corespunde perioadei de păstrare a rezultatelor Batch API oferite de OpenAI. Nu afectează ruta `DELETE /api/v1/batches/delete-completed` declanșată de operator, care rămâne necondiționată (fără filtru de vechime) în mod intenționat. | | `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Când este `true`, permite procesului automat de curățare să șteargă sarcinile terminale Batch API (și punctele lor de control) care au depășit `OMNIROUTE_BATCH_RETENTION_DAYS` și să golească conținutul BLOB al fișierelor încărcate care au depășit propriul `expires_at`. Dezactivată implicit: fiecare instalare existentă păstrează aceste date exact ca înainte, până când un operator activează opțiunea. Este și un indicator de funcționalitate editabil din panoul de control — consultați `docs/reference/FEATURE_FLAGS.md` → Runtime. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Setați la `1` pentru a omite complet verificarea stării bazei de date la pornire. Util pentru sarcini de scurtă durată și teste de integrare. | | `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Setați la `1` pentru a forța activarea buclei de verificare a stării bazei de date, chiar și atunci când în mod normal ar fi omisă (de exemplu, pentru sarcini de scurtă durată). | | `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Setați la `1` pentru a omite inițializarea mediului de execuție nativ în timpul `npm install`. Util în instalările CI/fără interfață grafică în care sqlite este deja compilat. | | `OMNIROUTE_MIGRATIONS_DIR` | _(detectare automată)_ | `src/lib/db/migrationRunner.ts` | Suprascrie directorul scanat de executorul de migrări. Util când migrările incluse în pachet sunt livrate în versiuni personalizate. | | `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(nesetat)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Directoare suplimentare de migrări, sub forma unor intrări `namespace=dir` separate prin delimitatorul de căi al platformei (de exemplu, `ee=/opt/app/enterprise/db/migrations`). Fișierele găsite acolo sunt înregistrate ca `-`, astfel încât o distribuție care livrează propriile migrări nu intră niciodată în conflict cu pozițiile numerice din sursa principală. O intrare formatată incorect, un spațiu de nume nevalid sau un director lipsă generează o eroare la pornire, în loc ca schema să fie omisă în mod silențios. | | `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Prag de siguranță pentru un număr mare de migrări în așteptare (#3416). Pornirea este anulată dacă există mai multe migrări în așteptare decât acest număr într-o bază de date existentă (protecție împotriva unui tabel de urmărire golit). Măriți valoarea pentru a restaura o copie de siguranță mai veche; setați la `0` pentru a dezactiva verificarea. | | `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Director de lucru pentru verificarea de lansare `check:install-upgrade`. Necesită aproximativ 12 GB (doi arbori de instalare de ~3 GB plus arhiva tar), deci nu trebuie să ruleze pe un tmpfs mic — pe executorul autogăzduit, `/tmp` este un tmpfs de 12 GB susținut de RAM, iar verificarea l-a epuizat, trunchiind pachetul. | | `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(implicit în cod)_ | `src/lib/spend/batchWriter.ts` | Intervalul de golire (ms) pentru modulul de scriere grupată a cheltuielilor/costurilor. Valorile mai mici reduc comasarea scrierilor; valorile mai mari reduc concurența la accesarea bazei de date. | | `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(implicit în cod)_ | `src/lib/spend/batchWriter.ts` | Numărul maxim de înregistrări de cheltuieli păstrate în memorie înainte de o golire forțată. Măriți valoarea pentru implementările cu un număr mare de interogări pe secundă; micșorați-o atunci când limitarea memoriei este mai importantă. | | `OMNIROUTE_PROXY_FETCH_DEBUG` | _(nesetat)_ | `open-sse/utils/proxyFetch.ts` | Setați la `"true"` pentru a emite jurnale de depanare `[ProxyFetch]` pe ruta de retransmisie Vercel. Dezactivată implicit pentru a evita divulgarea indiciilor despre rutare. | | `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(nesetat)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Calea absolută a binarului local al nucleului proxy (un fișier numit `sing-box`), care verifică o configurație de nucleu generată înainte ca aceasta să înlocuiască fișierul adoptat. Dacă nu este setată, se scrie doar `.generated` lângă fișierul adoptat. Exclusiv pentru mediul gazdă: nu este stocată niciodată în baza de date și nici acceptată prin API-ul de administrare, deoarece binarul este executat. | | `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(nesetat)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Modul în care nucleul proxy local se reîncarcă după înlocuirea unei configurații verificate: o matrice JSON de argumente executată fără shell sau exact `external` atunci când un observator extern aplică fișierul. Nu este stocată niciodată în baza de date și nici expusă prin API. | | `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Setați la `"true"` sau `"1"` pentru a include adresele IP ale clientului/ieșirii și prefixul contului în linia detaliată de jurnal de proces `[ProxyEgress]`. Menținută DEZACTIVATĂ implicit, astfel încât jurnalul de proces să nu divulge adresele IP sau prefixul contului. | | `OMNIROUTE_DEBUG` | _(nesetat)_ | `bin/cli/commands/quota.mjs` | Setați la `1` pentru a afișa în stderr diagnosticări privind durata fiecărei cereri (`[omniroute] GET completed in Nms`) din comenzile CLI pentru cote. | | `OMNIROUTE_HEALTHCHECK_PATH` | _(automat)_ | `scripts/dev/healthcheck.mjs` | Calea explicită verificată de controlul stării de funcționare al containerului. Dacă nu este setată, calea este derivată din `OMNIROUTE_BASE_PATH`; setarea acesteia reactivează utilizarea endpointului de monitorizare aprofundată. | | `OMNIROUTE_DEBUG_COMPLETION` | _(nesetat)_ | `bin/cli/commands/completion.mjs` | Setați la orice valoare nevidă pentru a emite diagnosticări `[omniroute completion]` din căile memoriei cache pentru completarea în shell a CLI-ului (citire/reîmprospătare/scriere). Implicit este dezactivată — aceste memorii cache eșuează silențios, astfel încât o memorie cache lipsă sau coruptă să nu afecteze niciodată completarea cu tasta Tab. | | `BATCH_RETRY_DURATION_MS` | `86400000` (24h) | `open-sse/services/batchProcessor.ts` | Intervalul maxim de reîncercare pentru elementele individuale din lot (ms). Elementele care depășesc această durată sunt marcate ca eșuate. | | `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Întârzierea de bază (ms) pentru temporizarea exponențială a reîncercărilor elementelor din lot. | | `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | Limita maximă (ms) pentru temporizarea exponențială între reîncercările elementelor din lot. | | `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Numărul maxim de loturi procesate simultan. Măriți valoarea pentru a crește debitul; mențineți-o scăzută pentru a evita valurile de depășire a limitelor de rată. | > [!IMPORTANT] > Înainte de a modifica o bază de date persistentă existentă, instrumentul de migrare publică un instantaneu complet, > adresat după conținut, în `DATA_DIR/db_backups/`. Publicarea necesită un sistem de fișiere > care acceptă legături dure pe același sistem de fișiere, fără suprascriere, precum și sincronizarea durabilă a fișierelor. Gazdele POSIX necesită și > sincronizarea directoarelor; pe Windows, Node poate respinge descriptorii de directoare, astfel încât OmniRoute golește > fișierul publicat și tratează sincronizarea intrării de director ca fiind realizată în măsura posibilului. > Dacă volumul montat la `DATA_DIR` nu poate oferi aceste garanții, pornirea eșuează în mod sigur înainte de aplicarea > unei migrări. Mutați `DATA_DIR` pe un volum care oferă aceste primitive; nu utilizați > `DISABLE_SQLITE_AUTO_BACKUP` pentru a ocoli măsurile de siguranță ale migrării. ### Scenarii | Scenariu | Configurație | | ---------------------- | -------------------------------------------------------------------------------------------------------- | | **Dezvoltare locală** | Păstrați toate valorile implicite. Baza de date se află la `~/.omniroute/omniroute.db`. | | **Docker** | `DATA_DIR=/data` + montați un volum la `/data`. | | **Criptare în repaus** | Setați `STORAGE_ENCRYPTION_KEY` + păstrați copii de rezervă ale cheii! Pierderea ei = pierderea datelor. | | **CI/Testare** | `DATA_DIR=/tmp/omniroute-test` — efemer, nu este necesară criptarea. | --- ## 3. Rețea și porturi | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | Portul principal atât pentru interfața Dashboard, cât și pentru endpoint-urile API (mod cu un singur port). | | `OMNIROUTE_BASE_PATH` | _(gol = rădăcină)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | Subcale URL pentru publicarea OmniRoute în spatele unui proxy invers (setează `basePath` din Next.js; redirecționările de autentificare țin cont de `basePath`). De ex., `/omniroute`. În Docker, valoarea este încorporată în timpul `docker build` (`ARG OMNIROUTE_BASE_PATH`); imaginile precompilate pentru rădăcină pot aplica o valoare diferită în timpul execuției, o singură dată la pornirea containerului, înainte de inițializarea Next.js. Setați `NEXT_PUBLIC_BASE_URL` la originea publică, incluzând aceeași subcale. | | `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(gol = rădăcină)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Corespondentul vizibil în browser al `OMNIROUTE_BASE_PATH`, încorporat în timpul compilării, astfel încât afișarea endpoint-ului în dashboard să indice `https://host/omniroute/v1` în loc de `https://host/v1`. Dacă nu este setat, folosește `OMNIROUTE_BASE_PATH`. Recompilați după modificare (`basePath` din Next este stabilit în timpul compilării). | | `DASHBOARD_ALLOW_EMBED` | _(nesetat = nu poate fi încadrat niciodată)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Activează opțional încorporarea paginilor HTML într-un iframe. Când nu este setat, fiecare rută este livrată cu `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Setați la `vscode` pentru a publica paginile (dashboard, autentificare, documentație, pagina de destinație) cu `frame-ancestors 'self' vscode-webview:` și fără `X-Frame-Options`, astfel încât VS Code Simple Browser să le poată reda (modul `dashboardOpen: "editor"` din OmniCopilot). Suprafața API (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, aliasurile de la nivelul rădăcinii) păstrează anteturile stricte în ambele cazuri. Este recunoscută numai valoarea `vscode` — `1`/`true` nu o activează. La compilare: recompilați după modificare (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` pentru imagini; setarea acesteia într-o instalare precompilată nu are efect). | | `API_PORT` | _(nesetat)_ | `src/lib/runtime/ports.ts` | Când este setat, publică API-ul proxy `/v1/*` pe acest port separat. | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Adresa de ascultare pentru portul API. | | `DASHBOARD_PORT` | _(nesetat)_ | `src/lib/runtime/ports.ts` | Când este setat, publică interfața Dashboard pe acest port separat. | | `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(dezactivat)_ | `src/sse/utils/backpressure.ts` | Limitează conexiunile de chat simultane aflate în curs; cererile care depășesc limita primesc `503` cu `Retry-After`. Un număr întreg pozitiv activează protecția; o valoare nesetată/`0` o dezactivează. | | `OMNIROUTE_INSTANCE_ID` | _(nesetat)_ | `src/shared/resilience/peerRouting.ts` | ID stabil și unic pentru acest gateway atunci când sunt înlănțuite instanțe OmniRoute. Activează verificările buclelor de rutare între instanțe pentru traficul de intrare. Caractere permise: litere, cifre, `.`, `_`, `:` și `-`; maximum 64 de caractere. | | `OMNIROUTE_PEER_URLS` | _(nesetat)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | URL-uri de bază OmniRoute separate prin virgulă, care pot primi `X-OmniRoute-Peer-Trace`. Doar URL-urile upstream incluse explicit în lista de permisiuni primesc metadate despre instanțele peer; ceilalți furnizori nu sunt afectați. | | `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | Numărul maxim de instanțe OmniRoute vizitate anterior acceptate într-o solicitare înlănțuită (`1`-`32`). Instanțele repetate sau epuizarea limitei returnează HTTP `508 Loop Detected`. | | `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Portul publicat pe gazdă pentru panoul de control în modul de producție Docker. | | `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Portul publicat pe gazdă pentru API în modul de producție Docker. | | `OMNIROUTE_PORT` | _(nesetat)_ | `src/lib/runtime/ports.ts` | Are prioritate față de `PORT` când rulează în Electron sau în alte aplicații-container. | | `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Portul serverului WebSocket pentru monitorizare în timp real. | | `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Adresa de ascultare pentru serverul WebSocket live. Setați la `0.0.0.0` pentru a-l expune în LAN (configurați și `LIVE_WS_ALLOWED_ORIGINS`). | | `LIVE_WS_ALLOWED_ORIGINS` | _(nesetat)_ | `src/server/ws/liveServer.ts` | Origini suplimentare, separate prin virgulă, cărora li se permite să deschidă o conexiune WebSocket live. Originile loopback ale panoului de control sunt deja permise în mod implicit. | | `LIVE_WS_ALLOWED_HOSTS` | _(nesetat)_ | `src/server/ws/liveServerAllowList.ts` | Nume de gazdă suplimentare, separate prin virgulă, permise pentru originile WebSocket live. Spre deosebire de `LIVE_WS_ALLOWED_ORIGINS` (URL-uri complete ale originilor), se verifică doar porțiunea de gazdă — util pentru configurații LAN/Tailscale. | | `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(nesetat)_ | `src/hooks/useLiveDashboard.ts` | URL-ul public pentru conexiunea WebSocket a panoului de control live (în browser). Setați-l când serverul WS este accesat printr-un proxy invers sau Cloudflare Tunnel (de exemplu, `wss://ws.my-ai.com/live-ws`); browserul se conectează acolo în loc de `ws://hostname:20132`. Porțiunea de cale este utilizată și drept cale pentru upgrade-ul WebSocket (implicit: `/live-ws`). | | `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` și `scripts/start-ws-server.mjs` | Setați la `0` sau `false` pentru a dezactiva serverul WebSocket în timp real (activat implicit și legat la interfața loopback). Comutator CI/harness care dezactivează scriptul auxiliar WebSocket live autonom. | | `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Limita de rată per (token, IP) pentru relay, în solicitări/minut. Stocată în memorie, per instanță. Valoarea `0` sau una negativă dezactivează filtrul pe dimensiunea IP (limita din baza de date per token continuă să se aplice). | | `NODE_ENV` | `production` | Nucleul Next.js | Controlează nivelul de detaliere al jurnalizării, memorarea în cache, expunerea detaliilor erorilor și optimizările Next.js. | | `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — valoare implicită în cod) | `package.json` / Next.js 16 | Turbopack este instrumentul de împachetare implicit pentru `npm run dev` și `npm run build` (compilări de 2-3 ori mai rapide, conform testelor de performanță). Setați la `0` pentru a reveni la webpack pe Windows, atunci când întâmpinați incompatibilități legate de legăturile native / compatibilitatea instrumentului de împachetare, **sau pe sisteme cu memorie RAM limitată** — se știe din sursele upstream că, pentru această serie de versiuni Next.js (16.2.x), compilările de producție Turbopack ating vârfuri de utilizare a memoriei mult mai mari decât webpack în cazul grafurilor mari de module (remedierea din Turbopack pentru eliberarea memoriei din Next 16.3 nu este încă stabilă); varianta de rezervă webpack atinge vârfuri mult mai mici. Consultați #6409. **Compilările imaginilor Docker folosesc implicit `0` (webpack)**: `Dockerfile` declară `ARG OMNIROUTE_USE_TURBOPACK=0`, astfel încât un simplu `docker build .` (Railway și alte servicii de găzduire cu configurare printr-un singur clic, instanțe autogăzduite ad-hoc) să nu fie oprit din cauza lipsei de memorie pe un sistem de compilare cu memorie limitată; transmiteți `--build-arg OMNIROUTE_USE_TURBOPACK=1` pentru a compila imaginea cu Turbopack. Consultați `docs/guides/DOCKER_GUIDE.md` → Resurse la momentul compilării. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(nesetat)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Setați la `1` pentru a omite verificarea stării de integritate SQLite la pornire. Util pentru o pornire mai rapidă în cazul bazelor de date mari. | | `NOTIFY_SOCKET` | _(nesetat)_ | systemd (protocolul sd_notify) | Setată de systemd atunci când procesul rulează sub o unitate de serviciu cu integrare sd_notify; OmniRoute o citește (consultați `OMNIROUTE_DISABLE_SD_NOTIFY`) pentru a trimite notificări READY/WATCHDOG. Nu trebuie setată niciodată de utilizator. | | `OMNIROUTE_DISABLE_SD_NOTIFY` | _(nesetat)_ | `scripts/dev/systemd-notify.mjs` | Setați la `1` pentru a dezactiva sd_notify din systemd (Type=notify / WatchdogSec=), chiar și atunci când aplicația rulează sub o unitate systemd. Notificatorul nu efectuează nicio operațiune în afara systemd, indiferent de această setare. | | `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Intervalul (ms) pentru planificatorul din fundal care verifică starea acreditărilor. Minim: 10000 (10 s). | | `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (ms) pentru starea memorată în cache a acreditărilor. | | `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Setați la `1` sau `true` pentru a dezactiva testarea periodică în fundal a conexiunilor furnizorilor. Furnizorii de căutare (SEARCH_VALIDATOR_CONFIGS din `src/lib/providers/validation/searchProviders.ts`, de exemplu `tavily-search`) sunt întotdeauna excluși din verificare — „validarea” lor este o interogare upstream reală și facturată, astfel încât starea lor nu este verificată niciodată după un temporizator (#9970). | | `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Setați la `1` pentru a permite unui apelant autentificat să solicite `/api/monitoring/health?deep=1`, care eșantionează o dată per TTL suprafața de completări. Apelanții anonimi nu declanșează niciodată verificarea. | | `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Adresa de asociere pentru serverul Next.js de dezvoltare/pornire. Atunci când este setată, înlocuiește valoarea implicită `0.0.0.0`. | | `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Adresa de asociere utilizată de executorul Playwright la lansarea Next.js. Valoarea implicită este `127.0.0.1` pentru teste ermetice. **Nu utilizați pentru `omniroute serve`** — utilizați în schimb `OMNIROUTE_SERVER_HOST` (shell-urile POSIX setează automat `HOSTNAME` la numele sistemului; `.env` nu o poate înlocui). | | `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Adresa de ascultare pentru `omniroute serve`. Evită conflictul cu variabila `HOSTNAME` a shell-ului POSIX (setată întotdeauna de bash/zsh la numele mașinii). Revine la `0.0.0.0` când nu este setată. (#6194) | ### Moduri pentru porturi ``` ┌─────────────────────────── Un singur port (implicit) ───────────────────────┐ │ PORT=20128 │ │ → Panou: http://localhost:20128 │ │ → API: http://localhost:20128/v1/chat/completions │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── Porturi separate ────────────────────────────────┐ │ DASHBOARD_PORT=20128 │ │ API_PORT=20129 │ │ API_HOST=0.0.0.0 │ │ → Panou: http://localhost:20128 │ │ → API: http://0.0.0.0:20129/v1/chat/completions │ │ Caz de utilizare: Expuneți API-ul în LAN, restricționând Panoul la localhost.│ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── Docker în producție ────────────────────────────┐ │ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │ │ → Mapează porturile containerului la porturile gazdei în docker-compose.prod.yml.│ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 4. Securitate și autentificare | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Salt combinat cu identificatorii hardware pentru amprentarea mașinii. Modificați-l pentru fiecare implementare, pentru izolare. | | `OMNIROUTE_CLI_SALT` | _(nesetat = salt aleatoriu pentru fiecare instalare, stocat persistent în `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | Salt HMAC pentru derivarea tokenului local de autentificare CLI. Setarea acestei valori rotește toate tokenurile CLI de pe mașină și are întotdeauna prioritate față de saltul stocat persistent. Consultați `docs/security/CLI_TOKEN.md`. | | `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Setează atributul `Secure` pentru cookie-urile de sesiune. **Trebuie să fie `true`** atunci când aplicația rulează în spatele HTTPS. | | `REQUIRE_API_KEY` | `false` | Middleware API | Când este `true`, toate cererile proxy `/v1/*` trebuie să includă o cheie API validă. **Acest indicator nu controlează accesul la `GET /v1/models`**, care urmează în schimb configurația de autentificare a panoului de control (`requireAuthForModels`) — prin urmare, un răspuns `401` de la `/v1/models` NU înseamnă că inferența este protejată. Consultați `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). | | `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Permite afișarea valorilor complete ale cheilor API în interfața panoului de control. Se poate configura din secțiunea Feature Flags a panoului de control; reprezintă un risc de securitate în instanțele partajate. | | `NO_LOG_API_KEY_IDS` | _(gol)_ | `src/lib/compliance/index.ts` | ID-uri de chei API, separate prin virgule, pentru care se omite jurnalizarea cererilor (conformitate cu RGPD). | | `DEFAULT_RATE_LIMIT_PER_DAY` | _(nesetat = nelimitat)_ | `src/shared/utils/apiKeyPolicy.ts` | Buget alternativ de cereri pe zi, aplicat cheilor API a căror coloană `rate_limits` este null. Nesetat sau gol: fără limită implicită (#2289, #11017). `0` are aceeași semnificație (nelimitat). Un număr întreg pozitiv N activează N/zi, 5N/săptămână, 20N/lună. Valorile nevalide și nevide revin la intervalele moștenite de 1000/zi, 5000/săptămână și 20000/lună. | | `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | Dimensiunea maximă permisă a corpului cererii. Respinge sarcinile utile care depășesc această limită. | | `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | Corpurile efective ale cererilor care ating sau depășesc acest prag obțin în mod atomic, înainte de analizarea JSON, permisul local procesului pentru sarcini grele (calea BYTE, inclusiv `POST /v1/responses`). Aceeași excepție pentru marja de capacitate disponibilă din [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) ca pentru cererile cu structură complexă; rămâne limitată de `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), astfel încât problema [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) să nu reapară. | | `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Limită strictă pentru rutele de chat, aplicată asupra octeților citiți în timpul ingestiei limitate, inclusiv pentru cererile cu `Content-Length` absent, nevalid sau incorect; depășirea limitei primește `413`. | | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(nesetat — fără limită privind numărul de cereri)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** această limită moștenită privind NUMĂRUL de cereri se aplică acum numai când este setată explicit. Dacă rămâne nesetată (valoarea implicită), admiterea cererilor de chat cu sarcină mare este controlată în schimb de `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — un buget de OCTEȚI derivat automat, dimensionat pe baza limitei reale de memorie a procesului, într-un **singur proces** (un singur heap V8). Două cereri `/v1/responses` suprapuse, de aproximativ 750k tokenuri, provoacă întreruperea heap-urilor de aproximativ 12 Gi (#7849) — un avertisment privind **bugetul de memorie**, nu o limită strictă a produsului de 2. Un proces sănătos (cu heap-ul sub raportul de eliminare) POATE admite mai multe cereri `/v1/responses` lungi simultan prin `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Zeci de clienți SSE de lungă durată (40–50) țin de heap + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, nu de „maximum 2”. Creșterea fără discernământ a acestei valori pentru „a utiliza gazda” reintroduce #7849. Multiplicați **heap-urile** folosind **N directoare `DATA_DIR` independente** (#11024); nu utilizați niciodată `replicas>1` pentru un singur fișier SQLite. | | `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(derivat automat)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** suprascriere pentru bugetul de octeți de ingestie derivat automat (25% din cea mai restrictivă limită de memorie V8/cgroup, împărțită la amplificarea tranzitorie de 8x). Valorile derivate și explicite sunt limitate la intervalul 8 MiB–2 GiB. Un corp mai mare decât bugetul efectiv eșuează imediat cu `413 body_exceeds_budget`; concurența dintre corpuri care pot fi procesate individual produce în continuare un `503` reîncercabil. 40–50 de clienți SSE de lungă durată țin de acest buget + heap, nu de o limită strictă de „maximum 2”. Consultați `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` la `/api/monitoring/health` înainte de ajustare. | | `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Raportul de eliminare la presiunea heap-ului (`heapUsed / heap_size_limit`) pentru admiterea cererilor cu sarcină mare pe bază de OCTEȚI și STRUCTURĂ (#10183, #10268, #10437). O cerere simultană cu sarcină mare care depășește `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` este eliminată cu eroarea reîncercabilă `503` numai când heap-ul se află ȘI el la acest raport sau peste acesta; pe un heap sănătos, cererea este admisă în schimb prin marja de capacitate sănătoasă. | | `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (implicit `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Capacitate suplimentară limitată pentru calea rapidă cu heap sănătos (#10437), atât pentru STRUCTURĂ, cât și pentru OCTEȚI (`admitChatRequest`, inclusiv corpuri ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Fără această limită, fiecare cerere ocupată, dar cu heap sănătos, ocolea admiterea fără niciun plafon. După ce atâtea concesiuni simultane devin active prin calea cu heap sănătos, cererile ocupate ulterioare trec la ACEEAȘI cale de așteptare limitată/eliminare utilizată în condiții de presiune reală asupra heap-ului. `0` dezactivează complet ocolirea. | | `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Numărul de mesaje care clasifică o cerere de chat ca având sarcină mare, chiar și atunci când corpul acesteia este sub pragul de octeți. | | `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Numărul de instrumente care clasifică o cerere de chat ca având sarcină mare, chiar și atunci când corpul acesteia este sub pragul de octeți. | | `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Estimare conservatoare a numărului de tokenuri pe baza dimensiunii șirurilor, care clasifică o cerere ca având sarcină mare; aceasta este o aproximare a costului de admitere, nu tokenizarea utilizată de furnizor pentru facturare. | | `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (dezactivat) | `src/shared/middleware/chatBodyAdmission.ts` | Limită opțională, activată explicit, pentru istoricul conversației. Dezactivată implicit: numărul de mesaje reprezintă o politică de implementare, nu o proprietate universală a unei cereri, iar impunerea unei limite aici respinge conversațiile cu un `413` definitiv înainte ca procesul de comprimare să le poată face procesabile. Creșterea heap-ului este limitată de `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` și de eliminarea la presiunea heap-ului. Setați o valoare pozitivă pentru implementările cu memorie limitată care necesită un plafon strict; depășirea acestuia primește apoi un răspuns structurat `413`, indicând că este necesară compactarea. | | `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Limită strictă pentru un răspuns upstream fără streaming, stocat integral în memorie. După depășirea acesteia, cititorul upstream este anulat, iar cererea eșuează rapid, în loc să extindă necontrolat un șir până la epuizarea heap-ului. | | `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Numărul maxim de octeți transmiși din anteturile răspunsului upstream. Când bugetul este depășit, anteturile cu prioritate mai mică (de ex., cele personalizate `x-codex-*`, `x-oai-request-id`) sunt eliminate pentru a rămâne în limitele uzuale ale anteturilor proxy-urilor inverse. Setați o valoare mai mare pentru a transmite mai multe metadate upstream, cu prețul unor anteturi de răspuns mai mari. | | `CORS_ORIGIN` | _(nesetat)_ | `src/server/cors/origins.ts` | Listă CORS veche de permisiuni pentru o singură origine. Pentru implementările noi, utilizați de preferință `CORS_ALLOWED_ORIGINS`. CORS este destinat doar clienților API din browser care folosesc origini diferite; operațiunile de scriere autentificate din panoul de control folosesc în schimb cereri de aceeași origine și protecție CSRF asociată sesiunii. | | `CORS_ALLOWED_ORIGINS` | _(nesetat)_ | `src/server/cors/origins.ts` | Listă CORS de permisiuni, separată prin virgule. Nu se trimite niciun caracter generic decât dacă `CORS_ALLOW_ALL=true` este configurat explicit. | | `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Mecanism de evitare destinat exclusiv dezvoltării, care permite reflectarea oricărei valori `Origin` din browser. Nu îl activați în implementări partajate sau de producție. | | `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Alias vechi. Valoarea comutatorului său din panoul de control (o suprascriere din baza de date) este citită înaintea acestei valori de mediu; `false`, `0`, `no` sau `off` în oricare dintre ele dezactivează verificările gazdei la fel ca `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, chiar și atunci când comutatorul acelei opțiuni din panoul de control este salvat ca dezactivat; alte valori lasă controlul protecției în seama celor două opțiuni de mai jos. | | `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Dezactivează verificările gazdei efectuate de protecția URL-urilor de ieșire, inclusiv blocarea metadatelor cloud (întregul interval 169.254.0.0/16, metadata.google.internal), pe traseele furnizorului care urmează modul protecției: validarea URL-urilor, descoperirea modelelor, URL-urile de bază ale nodurilor furnizorului (inclusiv nodurile de reclasificare la distanță) și testul proxy-ului de rezervă, printre alte trasee de ieșire adiacente furnizorului, precum preluarea imaginilor/conținutului media la distanță. De asemenea, permite ținte webhook private, cu excepția endpointurilor de metadate cloud/link-local, care rămân blocate chiar și cu această opțiune activată. Cererile de chat expediate prin `BaseExecutor.execute()` își păstrează verificarea metadatelor cloud. Furnizorii locali funcționează cu valorile implicite: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (implicit `true`) permite deja URL-uri locale și LAN pe traseele de validare, descoperire și ale nodurilor furnizorului; testul proxy-ului de rezervă și țintele webhook private consultă numai această opțiune și blochează gazdele locale/LAN cât timp este dezactivată. Suprascrie `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. O valoare salvată prin comutatorul din panoul de control are prioritate față de această variabilă. | | `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Permite URL-uri ale furnizorilor la adrese locale/private (127.0.0.1, localhost, LAN, intervale private) pentru validarea furnizorului, descoperirea modelelor, chat și celelalte trasee de ieșire adiacente furnizorului guvernate de modul protecției. **Implicit `true`** (prioritate locală): protecția blochează atunci endpointurile de metadate cloud — întregul interval 169.254.0.0/16 plus numele de gazdă cunoscute pentru metadate (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Setați `false` pentru modul exclusiv public, care blochează și gazdele private și de loopback. Protecția verifică numele gazdei sau literalul IP exact așa cum este scris, înaintea oricărei căutări DNS; în modul exclusiv public, învelișul pentru preluare sigură rezolvă suplimentar numele gazdei și refuză orice răspuns privat. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` dezactivează aceste verificări pe traseele enumerate în rândul său. Furnizorii locali integrați, precum LM Studio, Ollama, vLLM, Llamafile și Triton, omit toate verificările gazdei pentru validarea cheii și chat. O valoare salvată prin comutatorul din panoul de control are prioritate față de această variabilă. (#5066) | | `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Permite rutelor `/v1/audio/*` (transcrieri, vorbire, traduceri) să utilizeze un nod furnizor compatibil cu OpenAI, găzduit în afara localhost. Dezactivat implicit — rutarea conținutului audio către o gazdă la distanță schimbă identitatea traficului de ieșire și trebuie să fie o decizie explicită a operatorului. Nodurile loopback/private (localhost, 127.0.0.1, 172.16-31.x) sunt permise întotdeauna și nu sunt afectate. (#3963) | | `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Permite ca `POST /v1/rerank` (și etapa de reclasificare loopback a motorului de memorie) să utilizeze un nod furnizor compatibil cu OpenAI, găzduit în afara localhost — un sistem din LAN sau un peer Tailscale care rulează TEI, Infinity, vLLM etc. Dezactivat implicit — rutarea către o gazdă la distanță schimbă identitatea traficului de ieșire și trebuie să fie o decizie explicită a operatorului. Nodurile loopback (localhost, 127.0.0.1, 172.16-31.x) sunt permise întotdeauna și nu sunt afectate. URL-ul de bază al unui nod la distanță trebuie, de asemenea, să respecte politica pentru URL-urile de ieșire ale furnizorului (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). | | `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(gol)_ | `src/shared/network/localNodeHosts.ts` | Nume de gazdă (separate prin virgulă sau spații albe) pe care rutarea nodurilor furnizor le tratează ca fiind locale — de obicei, numele serviciului Docker/Compose al unui reranker, TEI sau serviciu auxiliar audio din propria rețea Docker a OmniRoute (`http://reranker:8080/v1`), astfel încât nodul să nu necesite un IP de container codificat explicit. Gazdele enumerate sunt eligibile pentru `/v1/rerank`, `/v1/audio/*` și verificarea locală a stării de funcționare fără activarea `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` pentru fiecare nod la distanță și sunt apelate direct — niciodată prin `HTTP(S)_PROXY` sau proxy-ul fixat al unei conexiuni. Acestea trimit în continuare cheia API a conexiunii. Sunt acceptate numai numele cu o singură etichetă și numele `.internal`/`.local`; FQDN-urile publice, adresele IP literale și numele serviciilor de metadate cloud sunt ignorate și se afișează un avertisment. (#14635) | | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Când OIDC este activat, dezactivează autentificarea prin parolă, astfel încât utilizatorii să se poată autentifica numai prin autentificarea unică OIDC. Aliasul simplu `OIDC_DISABLE_PASSWORD_LOGIN` este, de asemenea, acceptat; indicatorul de funcționalitate din panoul de control cu aceeași cheie are prioritate. (#10889) | | `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Alias simplu pentru `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). | ### Listă de verificare pentru consolidarea securității ```bash # Cerințe minime de securitate pentru producție: AUTH_COOKIE_SECURE=true # Necesită HTTPS REQUIRE_API_KEY=true # Autentifică toate apelurile proxy ALLOW_API_KEY_REVEAL=false # Nu expune niciodată cheile în interfața cu utilizatorul CORS_ALLOWED_ORIGINS=https://your.domain.com MAX_BODY_SIZE_BYTES=5242880 # Limită de 5 MB ``` --- ## 5. Igienizarea datelor de intrare și protecția PII OmniRoute oferă o protecție pe două niveluri: scanarea împotriva injectării la nivelul cererii și eliminarea PII la nivelul răspunsului. > **⚠️ Limitări:** Aceste mecanisme de protecție sunt detectări euristice care funcționează pe principiul _efortului rezonabil_, nu un firewall complet împotriva injectării de prompturi sau un sistem DLP pentru PII. Ele pot genera rezultate fals pozitive (prompturi inofensive de tip personaj/RPG semnalate) și fals negative (scriere leet, spațiere, modele în alte limbi decât engleza). Acestea nu sunt suficiente de unele singure pentru conformitate. Ajustați modurile și testați-le folosind traficul propriu înainte de a vă baza pe ele. ### La nivelul cererii: protecție împotriva injectării de prompturi | Variabilă | Valoare implicită | Fișier sursă | Descriere | | --------------------------------- | ----------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | Activează scanarea mesajelor primite pentru detectarea modelelor de injectare a prompturilor. | | `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Politica privind injectarea: `warn` = doar înregistrare în jurnal, `block` = respingerea cererii cu codul 400. Opțiunea veche `redact` **nu** elimină textul injectat; utilizați `PII_REDACTION_ENABLED` pentru rescrierea PII din cereri. | | `INJECTION_GUARD_MODE` | _(nesetat)_ | `src/middleware/promptInjectionGuard.ts` | Alias vechi pentru `INPUT_SANITIZER_MODE` — același comportament. | | `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | Severitatea minimă pe care `MODE=block` o respinge: `high` (implicit), `medium` sau `low`. Modelele cu severitate medie sunt doar monitorizate, cu excepția cazului în care pragul este redus. | | `INJECTION_GUARD_BLOCK_THRESHOLD` | _(nesetat)_ | `src/shared/utils/injectionSeverity.ts` | Alias vechi pentru `INPUT_SANITIZER_BLOCK_THRESHOLD` — același comportament. | | `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | Când este `true`, maschează PII din cererile primite (independent de modul de injectare). | | `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | Maschează modelele cunoscute de chei API/tokenuri secrete din conținutul cererilor și răspunsurilor. Opțional; reflectă comportamentul `PII_REDACTION_ENABLED`. | ### La nivelul răspunsului: igienizarea PII | Variabilă | Valoare implicită | Fișier sursă | Descriere | | -------------------------------- | ----------------- | ------------------------- | --------------------------------------------------------------------------------------------------- | | `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | Scanează răspunsurile LLM pentru detectarea PII divulgate înainte de a le returna clientului. | | `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = maschează PII, `warn` = doar înregistrare în jurnal, `block` = elimină întregul răspuns. | ### Igienizarea contextului rutelor tokenizate VS Code | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------------------- | ----------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | Elimină contextul implicit al editorului activ (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) din cererile `/v1/vscode/[token]/*` și maschează conținutul fișierelor sensibile atașate explicit. Securizat în mod implicit; setați la `0` pentru dezactivare. | ### Scenarii | Scenariu | Configurație | | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Conformitate pentru companii** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (blocarea injectărilor + mascarea PII din cereri/răspunsuri; modurile sunt independente) | | **Doar monitorizare** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — înregistrează în jurnal, dar nu blochează niciodată | | **Utilizare personală** | Lăsați-le pe toate dezactivate — fără costuri suplimentare | --- ## 6. Politici pentru instrumente și rutare | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------------------------------------------- | ---------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | Controlează accesul LLM la instrumente/apelarea funcțiilor. `allowlist` = doar instrumentele enumerate, `denylist` = toate, cu excepția celor enumerate, `disabled` = fără restricții. | | `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | Calea către fișierul JSON cu reguli de manipulare a sarcinii utile (ajustări în amonte pentru fiecare model/protocol). | | `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Intervalul de reîncărcare (ms) pentru reîncărcarea dinamică a fișierului cu reguli pentru sarcina utilă. Minimum `1000`. | | `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Opțiune facultativă: rutează ID-urile de modele `claude-*` fără prefix de la clienții Claude Code prin contul OAuth Claude Code, în loc să necesite un prefix de furnizor. Prefixele explicite de furnizor au în continuare prioritate. Poate fi configurată și printr-un comutator din panoul de control, pe pagina furnizorului Claude. | | `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Comportament vechi `resolveBareModelToConnectionDefault` (#4825): înlocuiește orice nume de model fără prefix cu `defaultModel` al conexiunii selectate. Dezactivat implicit; doar `auto` sau un model gol este înlocuit; când este activat, înregistrează un avertisment per pereche. | | `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Limită de concurență per model pentru combinațiile round-robin (#9100). Semaforul combinației round-robin era limitat strict la 3 solicitări concurente per model, fără posibilitate de suprascriere, serializând traficul cu concurență mai mare în spatele acestei limite. Validat la `>= 1`, limitat la `<= 32`. | | `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Opțiune facultativă periculoasă care omite verificarea locală OmniRoute a ferestrei de context / numărului maxim de tokenuri de intrare pentru solicitările directe către un singur model. Furnizorii din amonte își aplică în continuare limitele reale; comprimarea promptului și limita proprie a modelului pentru tokenurile de ieșire rămân active. Ordinea efectivă de prioritate este: suprascrierea din baza de date Feature Flags > variabila de mediu > valoarea implicită; nu este necesară repornirea. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(nesetat)_ | `open-sse/services/selfHostedEntry.ts` | Document YAML `providers:` în linie (RIC-738, D4). Când este setat (cu sau fără un bloc `strategy:`), `/v1/chat/completions` este redirecționat către punctul de intrare unificat, autogăzduit și compatibil cu OpenAI, în locul fluxului cloud. Când nu este setat (valoarea implicită), ruta continuă direct către fluxul cloud existent. Consultați `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(nesetat)_ | `open-sse/services/selfHostedEntry.ts` | Calea către un fișier YAML care conține același document `providers:` ca `OMNIROUTE_SELF_HOSTED_PROVIDERS`, pentru implementările care preferă un fișier în locul unei variabile de mediu în linie. Oricare dintre acestea activează punctul de intrare autogăzduit. | | `OMNIROUTE_SELF_HOSTED_API_KEY` | _(nesetat — rută deschisă)_ | `open-sse/services/selfHostedEntry.ts` | Cheie API partajată opțională pentru punctul de intrare unificat autogăzduit (schelet D5, rezervat pentru sistemul de cote per cheie). Când este setată, solicitările trebuie să includă `Authorization: Bearer `. Când nu este setată, ruta este deschisă, în conformitate cu modelul existent al furnizorului local autogăzduit (implementare în buclă locală/rețea de încredere). | | `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(nesetat)_ | `open-sse/services/routingStrategies.ts` | Document YAML `strategy:` în linie pentru motorul de rutare deterministă (M2/RIC-740, D3) — listă neagră/listă albă, întrerupător cu perioadă de așteptare, prioritate în funcție de cost, rutare bazată pe latență, lanț de rezervă. Suprascrie, pentru fiecare cheie, un bloc `strategy:` în linie imbricat în `OMNIROUTE_SELF_HOSTED_PROVIDERS`. Consultați `docs/routing/DETERMINISTIC_ROUTING.md`. | | `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(nesetat)_ | `open-sse/services/routingStrategies.ts` | Calea către un fișier YAML care conține același document `strategy:` ca `OMNIROUTE_SELF_HOSTED_STRATEGY`, pentru implementările care preferă un fișier în locul unei variabile de mediu inline. | | `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(nesetat)_ | `open-sse/services/conversationTracker.ts` | Setați la `1` pentru a opri colectarea istoricului conversațiilor. `resolveConversationId()` returnează un rezultat neurmărit înainte de a citi SQLite sau de a analiza istoricul mesajelor, iar ID-urile de sesiune furnizate de client sunt incluse și ele. Gestionarea sesiunilor de rutare rămâne neschimbată, iar înregistrările existente nu sunt șterse. Pentru implementările care nu utilizează vizualizarea conversațiilor din panoul de control și doresc ca tabelul de replici să nu mai crească. | | `OMNIROUTE_NADIR_API_KEY` | _(nesetat)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | Cheia API pentru strategia opțională de rutare auto-combo `nadir`, utilizată atunci când `config.nadir.apiKey` din configurația combo nu este setată. Opțional: apelurile fără cheie ajung la nivelul anonim al Nadir, care are o limită de rată per adresă IP și, prin urmare, nu poate fi utilizat în spatele unui gateway partajat. Sensibilă; preferați câmpul specific fiecărei configurații combo atunci când acestea utilizează conturi diferite. | | `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Originea de bază a API-ului de decizie Nadir, utilizată atunci când `config.nadir.baseUrl` din configurația combo nu este setată. Este necesară numai pentru o instanță Nadir găzduită local, care păstrează începuturile prompturilor în propria rețea. Un sufix `/v1` este acceptat și eliminat. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Intervalul săptămânal pentru limitele de utilizare în USD per cheie API (aplicarea limitelor la solicitări, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: săptămâna se încheie la cea mai apropiată resetare săptămânală dintre conexiunile din amonte pe care cheia le poate accesa sau reprezintă o perioadă glisantă de 7 zile atunci când nu este cunoscută nicio resetare. `calendar`: săptămâna locală, de luni, ora 00:00, până în următoarea zi de luni, ora 00:00, identică pentru fiecare cheie. `calendar` este recomandat atunci când un grup de conturi din amonte este partajat de mai multe chei cu bugete individuale. Valorile nevalide revin la `provider`. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(fusul orar al procesului)_ | `src/lib/usage/apiKeyUsageLimits.ts` | Fusul orar IANA (de exemplu, `Asia/Shanghai`) care definește ora 00:00 de luni pentru intervalul săptămânal `calendar`. Dacă nu este setat sau este nevalid: fusul orar al procesului OmniRoute (`TZ` al gazdei sau containerului, care adesea nu este setat, adică Timpul Universal Coordonat, în imaginile de container). Ignorat în modul `provider`. | | `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Numărul maxim implicit de instrumente permise într-o solicitare (valoarea implicită OpenAI). Sunt acceptate numai numere întregi pozitive; valorile nesetate sau nevalide păstrează `128`. Un furnizor cu o limită cunoscută/proactivă (`grok-cli` 200, `nvidia` 1536) își aplică în continuare propria limită — această opțiune modifică doar plafonul implicit. | | `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(activat)_ | `open-sse/executors/syntxChat.ts` | Apelarea instrumentelor emulată prin prompt în SYNTX.ai: dacă nu este setată sau are valoarea `1`/`true`/`on`/`yes`, injectează catalogul local de instrumente în prompt; orice altă valoare (de exemplu, `0`) omite această injectare. | --- ## 7. URL-uri și sincronizare în cloud | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------------------- | --------------------------------------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL-ul de pe server utilizat de sarcinile interne de sincronizare pentru a apela `/api/sync/cloud`. Păstrați-l ca URL de loopback/container chiar și atunci când aplicația este expusă public printr-un proxy. | | `CLOUD_URL` | _(gol)_ | `src/lib/cloudSync.ts` | URL-ul endpointului de retransmisie în cloud (funcționalitate premium). | | `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | Timpul de expirare HTTP pentru solicitările de sincronizare în cloud. | | `OMNIROUTE_BUILD_PROFILE` | `full` | Configurația de compilare Webpack | Profil pentru compilare (setați la `minimal` pentru a exclude fizic modulele privilegiate din pachet). | | `OMNIROUTE_STANDALONE_DIR` | _ieșirea standalone .build/_ | `scripts/build/colocate-standalone.mjs` | Suprascriere la compilare pentru directorul de ieșire standalone utilizat de etapa de colocare de după compilare. Nu este o setare pentru execuție. | | `OMNIROUTE_CLOUD_SYNC_SECRET` | _(gol)_ | `src/lib/cloudSync.ts` | Secret partajat utilizat pentru verificarea semnăturii HMAC-SHA256 a răspunsurilor Cloud Sync. | | `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Setați la `true` pentru a permite endpointului Cloud Sync să suprascrie acreditările locale. Valoarea implicită este `false`. | | `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Setați la `true` pentru a respinge un răspuns Cloud Sync nesemnat atunci când nu este configurat niciun secret local (#13679). O semnătură prezentă este verificată întotdeauna — și respinsă întotdeauna când `OMNIROUTE_CLOUD_SYNC_SECRET` nu este setat — indiferent de acest indicator. În v3.9, valoarea implicită devine impunerea verificării. | | `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Setați la `true` pentru a reveni la comportamentul într-un singur pas „importă tot” din v3.8.5, fără confirmarea utilizatorului. | | `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, Panou de control, sincronizare | URL-ul public pentru redirect_uri OAuth, linkurile din Panoul de control și URL-urile publice generate. Setați-l la URL-ul public stabil atunci când callbackurile OAuth sau linkurile generate pentru browser trebuie să utilizeze o gazdă canonică de proxy invers. | | `NEXT_PUBLIC_CLOUD_URL` | _(gol)_ | Pe partea de client | Oglinda pe partea de client a `CLOUD_URL`. | | `NEXT_PUBLIC_APP_URL` | _(nesetat)_ | `src/shared/services/cloudSyncScheduler.ts` | Variantă de rezervă moștenită pentru `NEXT_PUBLIC_BASE_URL`. | | `NEXT_PUBLIC_PORT` | _(nesetat — revine la `PORT`)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Port de rezervă pe partea de client pentru URL-urile afișate atunci când nu este cunoscută nicio origine (SSR/teste); citit înainte de `PORT`. | | `OMNIROUTE_PUBLIC_BASE_URL` | _(nesetat)_ | Resolverul originii publice, URL-uri de imagini | Originea OmniRoute orientată către browser cu cea mai mare prioritate, utilizată pentru generarea URL-urilor publice și validarea originii browserului în afara tabloului de bord. Setați această variabilă atunci când OpenWebUI sau un alt releu accesează OmniRoute printr-un URL intern, dar browserul utilizatorului trebuie să preia conținutul media generat dintr-o rețea LAN, printr-un tunel sau de la o origine publică. **Nu** includeți `/v1`. | | `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(nesetat)_ | `open-sse/config/providerPluginManifestUrl.ts` | URL-ul absolut al manifestului pluginului furnizorului, comunicat clienților sidecar. Când nu este setat, OmniRoute derivă `/api/v1/provider-plugin-manifest` din originea cererii sau din HOST/PORT. | | `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Protocol utilizat la derivarea URL-ului manifestului pluginului furnizorului din HOST/PORT, în absența unei origini a cererii. Setați-l la `https` în spatele unui proxy public care termină TLS atunci când nu este setat niciun `OMNIROUTE_PROVIDER_MANIFEST_URL` explicit. | | `OMNIROUTE_TRUST_PROXY` | _(nesetat)_ | `src/server/origin/publicOrigin.ts` | Mod opțional de încredere pentru antetele redirecționate ale originii publice. Nedefinit = nu acordați încredere antetelor `Forwarded` / `X-Forwarded-*` pentru decizii de securitate. `true` / `loopback` acordă încredere gazdei/protocolului redirecționat doar de la un proxy loopback marcat cu un token. `private` / `lan` acordă încredere și peerilor proxy din rețeaua LAN privată și permite punții `API_PORT` să păstreze antetul `X-Forwarded-For` al unui astfel de peer. În producție, preferați un `NEXT_PUBLIC_BASE_URL` explicit. | | `KIE_CALLBACK_URL` | _(nesetat)_ | `open-sse/utils/kieTask.ts` | URL public de apel invers pentru sarcinile kie.ai asincrone. Suprascriere cu cea mai mare prioritate, înainte de `OMNIROUTE_KIE_CALLBACK_URL` și `OMNIROUTE_PUBLIC_URL`. | | `OMNIROUTE_KIE_CALLBACK_URL` | _(nesetat)_ | `open-sse/utils/kieTask.ts` | Denumire alternativă pentru `KIE_CALLBACK_URL`. Este folosită ca variantă de rezervă când variabila principală nu este setată. | | `OMNIROUTE_PUBLIC_URL` | _(nesetat)_ | `open-sse/utils/kieTask.ts` | Origine publică utilizată pentru compunerea URL-urilor de apel invers asincron. Variantă de rezervă cu cea mai mică prioritate pentru apelurile inverse kie.ai; utilizată și ca URL public generic pentru alte relee. | | `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Endpoint de interogare a cotei CrofAI utilizat de pagina Utilizare. Suprascrieți-l pentru relee / dispozitive de test. | | `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Endpoint pentru cotele ClinePass pe 5 ore / săptămânale / lunare, utilizat de pagina Utilizare. Suprascrieți-l pentru relee / dispozitive de test. | | `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Endpoint oficial OpenCode Go pentru utilizare, autentificat prin cheie API și folosit de pagina Utilizare. Suprascrieți-l pentru relee / dispozitive de test. | | `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Sintetizează antetele de identitate ale CLI-ului OpenCode (User-Agent, x-opencode-client/project, UUID-uri de cerere/sesiune) pentru cererile către opencode-go/zen din amonte pe care clientul nu le-a trimis, astfel încât Cloudflare să le accepte la ieșirea din VPS (#6210/#5997). Activat implicit începând cu #10571; dezactivați cu `false`/`0`/`no`/`off`. | | `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | User-Agent implicit utilizat când `OPENCODE_SYNTHESIZE_CLI_HEADERS` este activată și nu este setată nicio suprascriere `_USER_AGENT` specifică furnizorului. Se aplică numai executorilor opencode. Pentru o solicitare fără cheie pe care serviciul upstream o restricționează, o valoare configurată care nu conține `opencode/= 1.17>` este înlocuită cu această valoare implicită, în loc ca solicitarea să fie refuzată. | | `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (activat) | `open-sse/utils/opencodeHeaders.ts` | Redirecționează anteturile de atribuire ale aplicației client (`x-session-id`, `x-title`, `http-referer`) către furnizorii upstream, astfel încât o solicitare inițiată într-un harness enumerat să-și păstreze identitatea prin router (restricțiile editorilor OpenRouter se bazează pe acestea). `0`/`false`/`no`/`off` păstrează identitatea registrului/operatorului și elimină valorile furnizate de client. Anteturile personalizate configurate de operator au întotdeauna prioritate față de valorile clientului. | | `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | Valoarea antetului `x-opencode-client` sintetizat când `OPENCODE_SYNTHESIZE_CLI_HEADERS` este activată. | | `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | Valoarea antetului `x-opencode-project` sintetizat când `OPENCODE_SYNTHESIZE_CLI_HEADERS` este activată. | | `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(nesetat)_ | `open-sse/config/providerErrorRules.ts` | Setul efectiv de furnizori ale căror eșecuri upstream sunt grupate după adresa IP de ieșire (un răspuns 429 suspendă toate conexiunile asociate care partajează acea adresă IP). Dacă nu este setată, se utilizează valoarea implicită pentru nivelul gratuit `opencode,opencode-go,opencode-cli`; `none`/`off`/`false`/`0` dezactivează complet cascada; o listă separată prin virgule înlocuiește setul. Planurile plătite sunt grupate upstream după cont și pot dezactiva această opțiune în siguranță (#9611). | | `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(nesetat)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Setați la `off` pentru a opri ajustarea corpului solicitărilor OpenCode fără cheie (indicatorul de streaming și lista de instrumente). Anteturile sunt aplicate în continuare. Valoarea este citită la fiecare solicitare, astfel încât o modificare intră imediat în vigoare. | | `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(nesetat)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Nume de instrumente separate prin virgule, care trebuie declarate într-o solicitare OpenCode fără cheie ce nu conține niciunul, atunci când încă nu a fost observat nimic pentru modelul respectiv. O valoare goală revine la un singur substituent pe care modelului i se indică să nu îl apeleze. Cel mult 32 de intrări, `[A-Za-z_][A-Za-z0-9_-]{0,63}`; intrările nevalide sunt ignorate. | | `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | URL-ul setărilor Ollama Cloud utilizat pentru extragerea cotei. Poate fi suprascris pentru relee / configurații de testare. | | `OLLAMA_USAGE_COOKIE` | _(nesetat)_ | `open-sse/services/usage.ts` | Cookie-ul Ollama Cloud `__Secure-session` utilizat pentru extragerea cotei din pagina de setări. Sensibil; când sunt configurate mai multe conturi, este de preferat câmpul Dashboard specific fiecărei conexiuni. | | `OLLAMA_CLOUD_USAGE_COOKIE` | _(nesetat)_ | `open-sse/services/usage.ts` | Variabilă de mediu alternativă pentru cookie-ul Ollama Cloud `__Secure-session`. Sensibilă; când sunt configurate mai multe conturi, este de preferat câmpul Dashboard specific fiecărei conexiuni. | | `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(nesetat)_ | `open-sse/services/usage.ts` | Variabilă de mediu alternativă pentru cookie-ul Ollama Cloud `__Secure-session`, utilizată înaintea aliasurilor mai scurte. Sensibilă; când sunt configurate mai multe conturi, este de preferat câmpul Dashboard specific fiecărei conexiuni. | | `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | Endpoint pentru limitele de utilizare CodeWhisperer (AWS Kiro). Poate fi suprascris pentru relee / configurații de testare. | > [!IMPORTANT] > Când implementați în spatele unui proxy invers (nginx, Caddy), setați `NEXT_PUBLIC_BASE_URL` la URL-ul public stabil (de exemplu, `https://omniroute.example.com`) atunci când callbackurile OAuth sau linkurile publice generate trebuie să utilizeze acel nume de gazdă. Fără această setare, callbackurile OAuth pot eșua deoarece redirect_uri nu va corespunde, iar linkurile publice generate pot indica spre originea internă a containerului. > > Păstrați `BASE_URL` ca URL intern de loopback/container pentru sarcinile server-la-server. Nu utilizați un `Origin` al browserului sau un nume de gazdă public pentru solicitările interne către sine care includ credențiale. > > Operațiunile de scriere autentificate din panoul de control nu necesită un URL de bază public static: panoul de control trimite solicitări nesigure către aceeași origine, cu un token CSRF asociat sesiunii. OmniRoute centralizează în continuare validarea originii publice pentru integrările de browser care nu provin din panoul de control: variabilele de mediu explicite pentru URL-ul public sunt considerate de încredere cu prioritate; anteturile brute `Forwarded` / `X-Forwarded-*` sunt ignorate, cu excepția cazului în care `OMNIROUTE_TRUST_PROXY` este activată, iar proxy-ul imediat este marcat cu un token ca fiind de încredere. Nu utilizați setările CORS pentru a remedia solicitările panoului de control către aceeași origine; CORS este destinat exclusiv clienților de browser între origini diferite. --- ## 8. Proxy pentru traficul de ieșire Direcționați apelurile către furnizorii LLM din amonte printr-un proxy HTTP sau SOCKS5 pentru controlul traficului de ieșire, rutare geografică sau mascarea adresei IP. `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` are valoarea implicită `true`. Setați-o la `false`, `0`, `no` sau `off` pentru a forța HTTP/1.1 în dispecerii Undici din `open-sse/utils/proxyDispatcher.ts` și `open-sse/utils/proxyFetch.ts`: trafic de ieșire direct, proxy-uri HTTP(S)/SOCKS, relee și reîncercările acestora cu socketuri noi. Această setare păstrează verificarea certificatelor TLS, autentificarea proxy-ului, limitele conexiunilor și setările keep-alive. Reporniți OmniRoute după modificare, deoarece dispecerii sunt păstrați în cache, iar agenții de releu sunt creați la pornire. Comutatorul nu controlează amprentarea TLS wreq sau transporturile specifice furnizorilor. | Variabilă | Implicit | Fișier sursă | Descriere | | ---------------------------------------- | ----------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Activează agentul proxy SOCKS5 pentru apelurile către servicii din amonte. Dezactivați-l cu `false`. | | `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Pe partea de client | Permite clientului să determine disponibilitatea SOCKS5. | | `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Indicator de funcționalitate activat implicit (consultați [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); o suprascriere din baza de date a panoului de control are prioritate). Grupurile de proxy-uri și rotația per cont nu mai reutilizează un membru care tocmai a eșuat (sondă TCP refuzată sau răspuns 429 prin acesta) pentru o perioadă care se dublează la fiecare repetare, până la o limită maximă. `false` restabilește selecția simplă. | | `SELECTOR_CONTROL_ALLOWLIST` | _(nesetat)_ | `src/lib/proxySubscription/selectorGuard.ts` | Listă de permisiuni pentru țintele locale de control al selectorului dincolo de interfața loopback (gazde sau adrese IP separate prin virgule/spații; `*` permite accesul la rețeaua LAN/privată, dar niciodată la adrese metadata/link-local). Accesul loopback prin http/https este permis implicit. O valoare din baza de date a panoului de control are prioritate față de această variabilă atunci când este setată și nu este goală. | | `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Perioada de bază (ms) pentru punerea deoparte în urma unui răspuns 429, dublată la fiecare repetare. Este citită o singură dată la pornire. Limitată la `1000..3600000`; o valoare în afara intervalului sau care nu poate fi citită revine la valoarea implicită și generează un avertisment. | | `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Limita maximă (ms) pentru punerea deoparte în urma unui răspuns 429. Este citită o singură dată la pornire. Limitată la `1000..3600000`; o valoare în afara intervalului sau care nu poate fi citită revine la valoarea implicită și generează un avertisment. Când limita maximă este mai mică decât valoarea de bază, se revine la valoarea implicită. Reducerea limitei maxime scurtează și perioada de uitare a seriilor: intrările sunt eliminate la `2 x max` după expirare. | | `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Indicator de funcționalitate cu activare opțională (consultați [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); o suprascriere din baza de date a panoului de control are prioritate). Pentru furnizorii a căror cotă este grupată după adresa de ieșire, clasează un membru al grupului care partajează adresa de ieșire observată a unui membru refuzat recent imediat sub membrii sănătoși. Afectează doar ordinea, fără a exclude vreodată membri. Necesită `PROXY_SKIP_RECENTLY_FAILED`, care produce semnalul de refuz pe care îl utilizează. | | `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Fereastra de limitare (ms) care restricționează alertele webhook `proxy.set_aside` repetate pentru fiecare membru al grupului, astfel încât o rafală de refuzuri să trimită un singur eveniment. Este citită la fiecare emitere. Limitată la `1000..3600000`; o valoare în afara intervalului sau care nu poate fi citită revine silențios la valoarea implicită. | | `HTTP_PROXY` | _(nesetat)_ | Standard Node.js | Proxy HTTP pentru apelurile către servicii din amonte. | | `HTTPS_PROXY` | _(nesetat)_ | Standard Node.js | Proxy HTTPS pentru apelurile către servicii din amonte. | | `ALL_PROXY` | _(nesetat)_ | Standard Node.js | Proxy universal (acceptă `socks5://`). | | `OMNIROUTE_PROXY_ECHO_URL` | _(nesetat)_ | `src/lib/proxyEchoTarget.ts` | Fixează ținta de verificare a IP-ului de ieșire prin proxy la un singur URL. Dacă nu este setată, verificarea încearcă `api64.ipify.org`, apoi `api4.ipify.org`, astfel încât tunelurile exclusiv IPv4 să nu fie raportate ca inactive (#9694). | | `NO_PROXY` | _(nesetat)_ | Standard Node.js | Nume de gazde/IP-uri separate prin virgulă pentru ocolirea proxy-ului. | | `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Numărul maxim de socketuri concurente pentru fiecare dispecer proxy HTTP/SOCKS memorat în cache. Fluxurile SSE de lungă durată, precum Codex `/v1/responses`, necesită mai mult de o conexiune atunci când mai multe cereri utilizează același proxy la nivel de cont. Valorile mai mari de `256` sunt limitate. | | `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Timpul de expirare, în ms, pentru negocierea SOCKS5 (conectare). Măriți-l atunci când o singură gazdă gateway rezidențială este solicitată cu un nivel ridicat de concurență (de exemplu, 100 de cereri simultane) — negocierea efectivă poate depăși 10 s când grupul este saturat, chiar dacă proxy-ul este accesibil, ceea ce altfel apare în mod eronat ca `[Proxy Fast-Fail] Proxy unreachable`. Limitat la `120000`. | | `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Când este `false` (implicit), o cerere al cărei proxy atribuit nu poate fi rezolvat este **refuzată (fail-closed)** în loc să revină la o conexiune directă — prevenind scurgerile IP-ului real. Setați la `true` pentru a restabili mecanismul DIRECT anterior. | | `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Falsifică amprenta TLS folosind wreq-js (imită Chrome 124). Contracarează blocarea JA3/JA4. | | `TLS_FINGERPRINT_PROVIDERS` | _(nesetat)_ | `open-sse/utils/proxyFetch.ts` | Listă de furnizori permiși, separați prin virgulă, pentru noua rutare TLS prin proxy (`open-sse/utils/proxyFetch.ts`). TLS direct își păstrează comportamentul anterior când variabila nu este setată; numai acești furnizori sunt rutați prin puntea de amprentare Chrome-124. Groq (`api.groq.com`) este exclus chiar și când lista de permisiuni nu este setată, deoarece JA3 de la Chrome declanșează Cloudflare 1010, în timp ce undici nativ poate accesa API-ul. | | `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Permite contextului de browser Playwright pentru Claude Turnstile să ignore erorile certificatelor HTTPS. | ### Scenarii | Scenariu | Configurație | | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **SOCKS5 prin tunel SSH** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` | | **Proxy HTTP corporativ** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` | | **Protecție împotriva amprentării** | `ENABLE_TLS_FINGERPRINT=true` — necesită `wreq-js` (inclus) | | **Ieșire controlată / fără acces direct** | Păstrați `PROXY_FAIL_OPEN=false` (implicit). Cererile eșuează definitiv când proxy-ul nu este disponibil, în loc să producă scurgeri printr-o conexiune directă. | | **Mod anterior / dezvoltare — permite revenirea la conexiunea directă** | `PROXY_FAIL_OPEN=true`. Restabilește comportamentul anterior consolidării securității: conexiunea directă este utilizată când rezolvarea proxy-ului eșuează. | > **Notă (ocolirea validării NVIDIA — #3226):** Punctul final NVIDIA pentru validarea cheii API > se blochează atunci când este rutat prin fetch-ul global modificat pentru proxy/TLS (dispecer undici → 504). > `src/lib/providers/validation.ts::directHttpsRequest()` ocolește în mod intenționat > modificarea pentru proxy pentru acel unic apel de validare, folosind `safeOutboundFetch({ bypassProxyPatch: true })`. > Aceasta este o excepție documentată, cu domeniu de aplicare limitat — **nu** afectează traficul de ieșire pentru conversații/utilizare. > Domeniul de aplicare al ocolirii este fixat prin `tests/unit/proxy-bypass-scope-guard-3226.test.ts`. --- ## 9. Integrarea instrumentelor CLI Controlează modul în care OmniRoute descoperă și lansează procesele auxiliare CLI (Claude Code, Codex etc.). | Variabilă | Valoare implicită | Fișier sursă | Descriere | | --------------------------------- | -------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = caută în PATH-ul sistemului; `manual` = utilizează numai căi explicite. | | `CLI_EXTRA_PATHS` | _(nesetat)_ | `src/shared/services/cliRuntime.ts` | Intrări PATH suplimentare pentru descoperirea binarelor CLI (separate prin două puncte). | | `CLI_CONFIG_HOME` | _(nesetat)_ | `src/shared/services/cliRuntime.ts` | Suprascrie directorul personal pentru citirea configurațiilor CLI (`~/.claude`, `~/.codex`). Trebuie să fie absolut și în interiorul directorului personal al procesului — **sau**, într-un container, o cale montată prin bind (astfel funcționează `/host-home`). Pentru orice altă valoare, se revine la directorul personal. | | `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Permite OmniRoute să scrie fișierele de configurare CLI (reîmprospătarea tokenului, datele sesiunii). Setați la `false` pentru ca fiecare scriere în configurația CLI să eșueze cu o eroare explicită „scrierile sunt dezactivate”. | | `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Claude. | | `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Codex. | | `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Droid. | | `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI OpenClaw. | | `CLI_CURSOR_BIN` | `agent`, apoi `cursor` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul agentului Cursor. Dacă nu este specificată, detectarea încearcă mai întâi `agent`, apoi revine la `cursor`. | | `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Cline. | | `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI 5dive. | | `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | Directorul de stare al sistemului pentru 5dive (profiluri de autentificare deținute de root); reflectă valoarea implicită STATE_DIR proprie a 5dive. | | `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Continue. | | `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Qoder. | | `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Qwen Code. | | `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Aider. | | `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Goose. | | `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Google Gemini — numai pentru detectarea și verificările de stare pe server; `omniroute run gemini` rezolvă binarul `gemini` din PATH-ul sistemului. | | `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Kilo Code. | | `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI OpenCode. | | `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul Hermes. Partajată de ambele intrări din catalog (`hermes` și `hermes-agent`). | | `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI ForgeCode. | | `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI jcode. | | `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul TUI DeepSeek. | | `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI CodeWhale. | | `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Smelt. | | `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul Pi (pi-coding-agent). | | `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Crush. | | `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul agentului Oh My Pi (`omp`). | | `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul CLI Letta. | | `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul Prime Agent (Prime Intellect). | | `CLI_WINDSURF_BIN` | _(niciuna)_ | `src/shared/services/cliRuntime.ts` | Cale personalizată către binarul Windsurf. Windsurf este livrat **fără nicio comandă implicită** — detectarea binarului rămâne dezactivată până când această variabilă este setată. | | `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Cale personalizată către binarul CLI Devin (v3.8.0). Utilizată de executorul Windsurf/Devin. | | `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | `ide_version` pentru Devin Desktop. Valorile de suprascriere trebuie să utilizeze formatul `x.y.z`; valorile nevalide revin la valoarea implicită verificată. | | `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | `extension_version` pentru Codeium/serverul de limbaj inclus, distinctă de `ide_version` pentru Desktop. Valorile de suprascriere trebuie să utilizeze formatul `x.y.z`; valorile nevalide folosesc valoarea implicită inclusă. | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Suprascriere a CLI-ului Devin exclusiv pentru puntea agentică. Executorul acceptă doar sursa locală ACP stdio. | | `DEVIN_AGENTIC_HOME` | _(obligatoriu)_ | `open-sse/executors/devin-cli-agentic.ts` | Director personal absolut și izolat pentru subprocesul Devin agentic; căile acceptate de punte sunt `/home/bridge` și căile `.sandbox` locale sarcinii (pe Windows, `C:\...\.sandbox\...`). | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Durata maximă a unei execuții ACP Devin înainte ca puntea să încheie procesul copil și să returneze explicit o expirare a timpului. | | `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | Aliasul principal al modelului Claude Code pentru puntea izolată. Sistemul de testare activ înlocuiește exemplul cu un model returnat de contul Devin curent. | | `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Aliasul punții izolate utilizat când Claude Code solicită modelul Sonnet implicit. | | `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Aliasul punții izolate utilizat când Claude Code solicită modelul Opus implicit. | | `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Aliasul punții izolate utilizat când Claude Code solicită modelul Haiku implicit. | | `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Aliasul punții izolate utilizat pentru subagenții Claude Code. | | `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Suprascriere opțională pentru API-ul Codeium de gestionare a licențelor utilizat de cota Devin CLI (`GetUserStatus`). | | `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Suprascriere prin cale absolută pentru binarul CLI Augment (Auggie) utilizat de furnizorul local `auggie`. În lipsa acesteia, se utilizează `CLI_AUGGIE_BIN`, apoi se efectuează o căutare în PATH. | | `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Suprascriere alternativă pentru calea binarului CLI Augment (Auggie) (verificată după `AUGGIE_BIN`). | | `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Binar utilizat pentru clientul stdio al furnizorului local `zcode`. În lipsa acestuia, se utilizează `zcode` din PATH. | | `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | Matrice JSON (≤16 șiruri) de argumente suplimentare transmise binarului `zcode` atunci când este lansat prin `cliTools`. | | `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Director de lucru pentru subprocesul serverului de aplicații ZCode. | | `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Suprascriere pentru ID-ul furnizorului trimis serverului de aplicații. | | `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Rădăcina mediului de execuție al serverului de aplicații ZCode (unde se află pachetele `node` și `zcode-server.cjs`). | | `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Executabil Node utilizat pentru a găzdui serverul de aplicații ZCode. | | `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Script de intrare al serverului de aplicații utilizat pentru a găzdui serverul ZCode. | | `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Timp-limită de pornire (ms) după care lansarea unui server de aplicații ZCode este considerată eșuată. | | `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | Timp-limită RPC per solicitare (ms) pentru un apel către serverul de aplicații ZCode. | | `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Durata maximă (ms) a unei iterații ZCode înainte ca supervizorul să o întrerupă din cauza depășirii timpului-limită. | | `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Interval de interogare (ms) pentru finalizarea unei iterații ZCode. | | `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Directorul principal Hermes Agent în care OmniRoute citește/scrie configurația Hermes CLI. Corespunde variabilei de mediu pe care programul de instalare Hermes PowerShell o setează în Windows (`%LOCALAPPDATA%\hermes`). | ### Sincronizarea automată a profilurilor CLI Aceste indicatoare de funcționalitate sunt opționale și sunt dezactivate în mod implicit. De asemenea, pot fi activate sau dezactivate din panoul de control CLI Code. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------- | ----------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | După sincronizarea modelelor unui furnizor, rescrie automat fișierele de profil `~/.codex/*.config.toml` folosind catalogul actual. Necesită `CLI_ALLOW_CONFIG_WRITES`; nu modifică niciodată configurația Codex activă/implicită, autentificarea, setările Codex-lb sau alegerea furnizorului. | | `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | După sincronizarea modelelor unui furnizor, rescrie automat fișierele de profil Claude Code `~/.claude/profiles//settings.json` folosind catalogul actual. Necesită `CLI_ALLOW_CONFIG_WRITES`; nu modifică niciodată configurația Claude activă/implicită, autentificarea sau alegerea furnizorului. | ### Exemplu Docker ```bash # Montați binarele gazdei în container și indicați-i aplicației OmniRoute unde se află: 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` intră în vigoare numai atunci când calea este efectiv montată prin bind de pe gazdă — asociați-o cu montări precum `~/.codex:/host-home/.codex:rw` (consultați profilul `host` din `docker-compose.yml`). O cale care nu se află nici în directorul home al utilizatorului containerului, nici într-o montare bind este ignorată, deoarece scrierile în acea locație ar fi pierdute la recrearea containerului. Imaginea rulează ca `USER node`, astfel încât un `/root` nemontat **nu** este o suprascriere validă. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------------------- | ----------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_CONTAINER` | _(automat)_ | `src/shared/utils/containerEnv.ts` | Forțează activarea (`1`/`true`) sau dezactivarea (`0`/`false`) detectării containerului. Este necesară doar pentru mediile de execuție pe care detectarea automată nu le identifică. | | `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Permite oricum instrumentului CLI să scrie configurația într-o cale nemontată din container. Echivalentul CLI este `--allow-container-write`. | ### Instrumente auxiliare pentru binarul CLI (`omniroute`) Aceste variabile ajustează comportamentul propriu al binarului CLI `omniroute` (nu detectarea procesului sidecar descrisă mai sus). | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------- | ------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_LANG` | _(sistem)_ | `bin/cli/i18n.mjs` | Forțează limba de afișare a CLI-ului. Localizare BCP-47 (de ex. `en`, `pt-BR`). Suprascrie variabilele de mediu pentru localizarea sistemului (LC_ALL, LC_MESSAGES). | | `OMNIROUTE_SHOW_LOG` | _(nesetat)_ | `bin/cli/runtime/processSupervisor.mjs` | Setați la `1` pentru a redirecționa stdout/stderr ale serverului către terminal în modul supravegheat. Echivalent cu opțiunea `--log` pentru `omniroute serve`. | | `OMNIROUTE_CLI_TOKEN` | _(nesetat)_ | `bin/cli/api.mjs` | Token de autentificare a mașinii injectat ca antet `x-omniroute-cli-token`. Generat automat în sarcina 8.12. | | `GEMINI_CLI_HOME` | _(nesetat)_ | `bin/cli/commands/setup-gemini.mjs` | Rădăcina persistentă a directorului home Gemini; execuția unică folosește un director home temporar și izolat. | | `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Perioada de grație, în milisecunde, înainte de oprirea forțată a unui proces copil CLI căruia i s-a trimis un semnal. | | `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(nesetat)_ | `bin/omniroute.mjs` | Setați la 1 împreună cu un DATA_DIR explicit pentru a omite fișierul de mediu implicit al directorului de date al utilizatorului. | | `OMNIROUTE_SYNC_TOKEN` | _(nesetat)_ | `bin/cli/commands/sync.mjs` | Token de sincronizare pentru `omniroute sync bundle` (`GET /api/sync/bundle` acceptă numai un token de sincronizare, nu o cheie API). Echivalent cu `--token`. | | `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | Timpul maxim de așteptare HTTP per încercare (ms) pentru solicitările CLI → server. | | `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Timpul maxim (ms) în care CLI-ul așteaptă endpointul de verificare a stării serverului înainte de a afișa un avertisment de expirare. Util pentru pornirile la rece lente (de ex. Windows). Poate fi setat și prin `--ready-timeout`. | | `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | Setați la `1` pentru a afișa în stderr diagnosticele privind reîncercările și temporizarea progresivă în timpul comenzilor CLI. | | `OMNIROUTE_PLUGIN_PATH` | _(nesetat)_ | `bin/cli/plugins.mjs` | Director personalizat pentru descoperirea pluginurilor CLI (pachete `omniroute-cmd-*`). Când nu este setat, valoarea implicită este `~/.omniroute/plugins/`. Exclusiv pentru CLI — nu ajunge niciodată la scanerul de pluginuri de pe server, care este configurat prin `OMNIROUTE_PLUGINS_DIR` (secțiunea 2). | | `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(nesetat)_ | `bin/omniroute.mjs` | Suprimă notificarea CLI privind actualizările la încheierea procesului atunci când este setată la orice valoare nevidă. Notificarea rămâne dezactivată independent în CI, în modul silențios și în modurile de ieșire non-text. | | `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(derivat)_ | `bin/cli/commands/doctor.mjs` | URL de disponibilitate verificat de `omniroute doctor`. O opțiune programatică `livenessUrl` are prioritate; în caz contrar, această valoare este utilizată textual. Dacă nu este setată, CLI-ul derivă endpointul `/api/health/degradation` al panoului de control local. | | `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Calea catalogului de furnizori utilizată de comenzile CLI pentru furnizori. O opțiune programatică `catalogPath` are prioritate. Căile absolute sunt utilizate ca atare; căile relative sunt rezolvate pornind de la rădăcina proiectului. Dacă nu este setată, CLI-ul utilizează directorul constantelor furnizorilor, cu fișierul vechi `providers.ts` drept rezervă. | | `OMNIROUTE_PROVIDER_TEST_MODEL` | _(valoarea implicită a furnizorului)_ | `bin/cli/provider-test.mjs` | Model global de rezervă pentru testele CLI de conectare la furnizori. Ordinea priorității este: modelul conexiunii configurate, suprascrierea modelului specifică furnizorului, această valoare, apoi modelul de testare integrat al furnizorului. | --- ## 10. Integrări interne pentru agenți și MCP | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_BASE_URL` | detectare automată | `open-sse/mcp-server/server.ts` | URL explicit prin care instrumentele MCP/A2A pot accesa OmniRoute. Suprascrie detectarea automată a localhost. | | `OMNIROUTE_API_KEY` | _(nesetat)_ | Module MCP/A2A | Cheie API pentru apelurile interne ale instrumentelor MCP și ale abilităților A2A. | | `OMNIROUTE_API_KEY_ID` | _(nesetat)_ | `open-sse/mcp-server/audit.ts` | ID-ul cheii pentru atribuirea jurnalelor de audit MCP. | | `ROUTER_API_KEY` | _(nesetat)_ | Moștenit | Alias moștenit pentru `OMNIROUTE_API_KEY`. | | `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | Numărul de zile în care istoricul sarcinilor A2A este păstrat în baza de date locală înainte ca operațiunea zilnică de curățare să șteargă un rând. Dacă valoarea este nesetată, nenumerică sau `<= 0`, se revine la `30`. | | `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | Comutator de dezactivare pentru funcționalitatea de observabilitate a accesărilor memoriei A2A. Setați la `0` pentru a omite complet căutarea în memoria reamintită pentru o sarcină; orice altă valoare (inclusiv dacă este nesetată) o menține activată. | | `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Activează endpointul offline/local al Issue Agent pentru triaj înregistrat. Lăsați-l dezactivat dacă nu rulați în mod explicit fluxuri de lucru locale de triaj înregistrat. | | `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(nesetat)_ | `src/lib/issueAgent/execution.ts` | Timpul de expirare (ms) pentru o singură rulare de triaj înregistrat a Issue Agent. Este limitat la un maxim intern; revine la valoarea implicită încorporată atunci când este nesetat sau nevalid. | | `OMNIROUTE_CONTEXT` | _(context activ)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Contextul/profilul modului la distanță al CLI pentru comenzile `omniroute`; suprascrie contextul activ din spațiul local de stocare a contextelor. Echivalent cu `--context `. | | `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Dezactivează backendul opțional `keytar` pentru portcheiul sistemului de operare utilizat pentru acreditările contextului CLI. Când este activată opțiunea, acreditările rămân în `config.json` cu modul `0600`, iar CLI emite o singură dată un avertisment privind mecanismul alternativ; destinat operării intenționate fără interfață grafică/în containere. | | `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Impune controlul accesului bazat pe domenii pentru apelurile instrumentelor MCP. | | `OMNIROUTE_MCP_SCOPES` | _(toate)_ | `open-sse/mcp-server/server.ts` | Domenii separate prin virgulă: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | Comprimă descrierile instrumentelor MCP înainte de serializarea manifestului. Valori de activare: `1`, `true`, `on`. | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | Algoritm/profil de compresie. Valori de dezactivare: `0`, `false`, `off`. | | `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | Intervalul de timp (ms) înainte de anulare pentru citirile interne de administrare ale serverului MCP (stare, reziliență, combinații, cotă, utilizare). | | `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Buget de abandonare (ms) pentru salturile MCP care așteaptă un furnizor (`route_request`, `web_search`, `web_fetch`). | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | Numărul maxim de instanțe ale indexului corpusului local păstrate în memoria cache (LRU, câte una pentru fiecare director rădăcină indexat). Limitat la un minim de `1`. | | `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | Intervalul de sincronizare a catalogului de modele, în ore. | | `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | Intervalul de interogare a limitelor de rată și a cotelor furnizorului. | | `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Pauza (ms) dintre preluările consecutive ale cotelor OAuth într-o sincronizare în masă; conexiunile OAuth sunt preluate pe rând pentru a evita trimiterea bruscă de cereri către un serviciu din amonte. `0` dezactivează această limitare (execuție concurentă). | | `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Intervalul minim (ms) dintre preluările consecutive ale cotelor din amonte pe calea de verificare preliminară/monitorizare per cerere; eșalonează apelurile concurente de rețea, astfel încât mai multe conturi de la aceeași adresă IP să nu trimită brusc cereri către serviciul din amonte. Integrat în mecanismele de preluare a cotelor pentru Codex (`/wham/usage`), DeepSeek, Bailian (ambele locații de preluare), OpenCode și Crof (#6009, #6911). Calea generică de distribuire `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/etc.) nu este încă acoperită — este urmărită separat. Accesările reușite ale memoriei cache nu sunt afectate. `0` dezactivează; limitat la intervalul `0..5000`. | | `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Întârzierea (ms) înainte de reîmprospătarea limitelor furnizorului după un eveniment real de utilizare, oferind API-ului de cote din amonte timp să înregistreze consumul. | | `OMNIROUTE_LOGIN_BROWSER_PATH` | detectare automată | `open-sse/services/adobeFireflyBrowserLogin.ts` | Calea absolută către un executabil Chrome sau Edge din sistem, utilizat pentru autentificarea interactivă în Adobe Firefly și reînnoirea în afara ecranului. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | activat | `open-sse/services/adobeFireflySession.ts` | Menține actualizate starea IMS și starea de risc a browserului prin sesiuni Chrome CDP asociate contului. Setați la `0` pentru a dezactiva reînnoirea prin browser. | | `ADOBE_FIREFLY_SESSION_DISK` | activat | `open-sse/services/adobeFireflySession.ts` | Păstrează sesiunile Adobe reparate în `DATA_DIR` între repornirile procesului. Setați la `0` pentru a păstra sesiunile numai în memorie. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Intervalul minim, în milisecunde, dintre trimiterile de generare Adobe Firefly; `0` dezactivează intervalul. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Perioada suplimentară de pauză, în milisecunde, după fiecare a treia trimitere Adobe reușită. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | Întârzierea de bază pentru reîncercare, în milisecunde, după răspunsuri Adobe 408 tranzitorii; combinată cu intervalul dintre trimiteri pentru cel mult cinci încercări. | | `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Dezactivează toate serviciile din fundal (sincronizare, stabilirea prețurilor, reîmprospătarea modelelor). Util pentru CI/testare. | | `OMNIROUTE_HEADLESS` | _(nesetat)_ | `src/lib/system/headless.ts` | Pornire exclusivă a motorului proxy: omite subsistemele opționale, `/dashboard` → 404. Echivalent cu `omniroute serve --headless`. Consultați [HEADLESS.md](../guides/HEADLESS.md). | | `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(nesetat)_ | `src/lib/config/runtimeSettings.ts` | Forțează activarea sarcinilor din fundal atunci când este detectată testarea automată. Setați la `1` pentru a suprascrie euristica de testare. | | `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | Cadența verificării resetării bugetului (ms). Valoare minimă `10000`. | | `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | Cadența recuperării proactive după perioada de așteptare a conexiunii (ms): revalidează conexiunile al căror `rate_limited_until` temporar a expirat, în afara căii critice a solicitării. Valoare minimă `5000`. | | `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | Dezactivează planificatorul de recuperare proactivă după perioada de așteptare a conexiunii (recuperarea întârziată din `getProviderCredentials` se aplică în continuare). | | `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Cadența curățării memoriei cache pentru raționament (ms). Valoare minimă `60000`. | | `OMNIROUTE_REASONING_MIN_BUDGET` | _nesetat_ (dezactivat) | `open-sse/services/reasoningTokenBuffer.ts` | Prag minim opțional pentru bugetele de ieșire ale modelelor de gândire: valoarea `max_tokens` a apelantului din intervalul `[256, prag)` este mărită până la prag (limitată de plafonul de ieșire al modelului). Nesetat = bugetele clienților nu sunt mărite niciodată (#9507). | | `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _nesetat_ (dezactivat) | `open-sse/services/learnedReasoningEffortCaps.ts` | ID-uri opționale ale furnizorilor, separate prin virgule (sau `*`): când un răspuns 400/422 pentru `reasoning_effort` nu specifică niciun set acceptat, se reîncearcă o singură dată cu un nivel mai jos (niciodată sub `low`), iar acel nivel este memorat doar dacă sondarea primește răspuns (#14895). | | `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Expresie cron (UTC) pentru sarcina de export al jurnalului de apeluri, care procesează fiecare destinație activată pentru exportul jurnalelor. | | `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Interval de interogare (ms) pentru reîncărcarea la cald a configurației. Valorile mai mici de `1000` sunt respinse. | | `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(activat)_ | `src/lib/db/apiKeys.ts` | Setați la `1` pentru a ocoli memoria cache de autentificare a cheilor API bazată pe Redis (forțează citirile din baza de date). | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | Consideră de încredere regulile de filtrare RTK ale proiectului, gestionate de utilizator, fără verificări stricte ale semnăturii. | | `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | Limită de caractere pentru trunchierea proactivă Lite a rezultatelor instrumentelor când `lite.maxToolLength` este nesetat. Interval 256–1000000. Setarea din tabloul de bord are prioritate față de această variabilă de mediu. | | `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | Numărul maxim de procese de lucru sincrone RTK/Caveman concurente; sarcinile excedentare așteaptă în ordinea FIFO. | | `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Timp-limită per sarcină, în milisecunde. Procesele de lucru care depășesc timpul-limită sunt încheiate, iar solicitarea continuă fără modificări. | | `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | Durata de inactivitate, în milisecunde, înainte ca un proces de lucru de compresie neutilizat să fie încheiat. | | `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Plafonul memoriei heap pentru generația veche V8, în MB, pentru fiecare proces de lucru de compresie, în toate modurile (valoare minimă `128`). O sarcină care îl depășește continuă fără compresie, în loc să mărească memoria heap a gateway-ului. | | `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Comutator principal pentru întrerupătorul de circuit per motor al pipeline-ului suprapus T02. **Opțional (dezactivat implicit)** — când este activat, un motor care generează în mod repetat excepții în mai multe solicitări este omis (continuare fără eroare) pe durata unei perioade de așteptare; dezactivat = comportament vechi identic la nivel de octet. | | `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Numărul de eșecuri consecutive în solicitări diferite înainte ca întrerupătorul unui motor să se deschidă. | | `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Numărul de milisecunde în care un motor deschis rămâne omis înaintea unei probe în stare semi-deschisă. | | `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | Rampă de feedback pentru recuperarea CCR T08/H8: fiecare recuperare anterioară a unui bloc stocat îi mărește liniar valoarea efectivă `minChars` (conținutul recuperat frecvent este comprimat mai puțin; `>=3` recuperări = nu este comprimat niciodată). `1` dezactivează rampa (omiterea binară se produce numai la prag). | | `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | Stocare durabilă a blocurilor CCR (#9061). Folosește SQLite ca suport pentru stocarea în memorie, astfel încât un bloc să supraviețuiască eliminării LRU, perioadei TTL, unei reporniri sau unei recuperări direcționate către altă instanță. Setați la `false` pentru a păstra blocurile numai în memorie. Blocurile de peste 512KB și mediile de execuție cloud rămân exclusiv în memorie, indiferent de setare. | | `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Comutator principal pentru înghețarea prefixului observată prin utilizare T08/H5. **Activare opțională (dezactivată implicit)** — când este activat, un prompt de sistem observat de `>=` ori pragul stabilit este tratat ca un prefix stabil care poate fi memorat în cache și este protejat de compresie chiar și pentru furnizorii pe care euristica statică a cache-ului nu îi detectează (înghețarea doar _protejează_, nu modifică niciodată). | | `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Numărul de observări ale unui prompt de sistem înainte ca acesta să fie tratat drept prefix stabil înghețat. | | `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Setată la `true` de scriptul de inițializare după configurarea inițială. Controlează vizibilitatea expertului de configurare. | | `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Mecanism de excepție: permite corpului cererii să suprascrie câmpul de proiect Antigravity. | | `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Politica pentru creditele Google One AI: `off` nu injectează niciodată credite, `retry` le injectează o singură dată după o eroare eligibilă de cotă 429, iar `always` le injectează la prima cerere. | | `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Permite translatorului de cereri Antigravity să omită validarea strictă a semnăturii cererii CLI atunci când serviciul din amonte refuză semnături reale (mod de depanare/CLI învechit). O valoare diferită de zero activează omiterea. | | `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | Suprascrie calea fișierului cu tokenul CLI Antigravity (agy) pentru importul autentificării locale detectate automat. | ### Punte OAuth CLI (internă) | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------- | ------------------ | ------------------------------- | --------------------------------------------------------------- | | `OMNIROUTE_SERVER` | detectare automată | `src/lib/oauth/config/index.ts` | URL-ul serverului pentru puntea de autentificare CLI↔OmniRoute. | | `OMNIROUTE_TOKEN` | _(nesetat)_ | `src/lib/oauth/config/index.ts` | Token de autentificare pentru puntea CLI. | | `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | ID-ul utilizatorului pentru sesiunile punții CLI. | | `SERVER_URL` | _(nesetat)_ | `src/lib/oauth/config/index.ts` | Alias vechi pentru `OMNIROUTE_SERVER`. | | `CLI_TOKEN` | _(nesetat)_ | `src/lib/oauth/config/index.ts` | Alias vechi pentru `OMNIROUTE_TOKEN`. | | `CLI_USER_ID` | _(nesetat)_ | `src/lib/oauth/config/index.ts` | Alias vechi pentru `OMNIROUTE_USER_ID`. | --- ## 11. Credențiale furnizor OAuth Credențiale încorporate pentru **dezvoltare locală**. Pentru implementări la distanță, înregistrați-vă propriile credențiale la consola de dezvoltatori a fiecărui furnizor. | Variabilă | Furnizor | Note | | :------------------------------------------ | :--------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Client public — nu este necesar un secret. | | `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Suprascrie URI-ul de redirecționare. Implicit: `https://platform.claude.com/oauth/code/callback` | | `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Client public. | | `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Necesită un `_SECRET` corespondent. | | `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — | | `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | Client public. | | `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | Suprascriere opțională pentru ID-ul clientului public Muse CLI device-flow. Lăsați necompletat pentru a utiliza clientul public încorporat. | | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Necesită un `_SECRET` corespondent. | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Client public. | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Suprascriere opțională pentru ID-ul clientului OAuth al GitHub Enterprise Copilot. Revine la valoarea implicită publică a `GITHUB_OAUTH_CLIENT_ID` când este necompletat. | | `COPILOT_INTEGRATION_ID` | GitHub Copilot | Suprascriere opțională pentru ID-ul de integrare a clientului GitHub Copilot trimis în antetele `Copilot-Integration-Id` și `Editor-Plugin-Version`. Implicit este `copilot-developer-cli`. | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | Cheia API de rezervă utilizată de `open-sse/executors/devin-cli.ts` atunci când nu este disponibilă nicio credențială per-conexiune. Opțional. | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Cale personalizată către binarul Devin CLI (`devin`). Rezolvată de `open-sse/executors/devin-cli.ts`. | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | ID-ul clientului OAuth pentru GitLab Duo. Înregistrați o aplicație la `https://gitlab.com/-/profile/applications` cu URI-ul de redirecționare `/callback` și scopurile `api, read_user, openid, profile, email`. Revine la `GITLAB_OAUTH_CLIENT_ID`. | | `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Secretul clientului OAuth pentru GitLab Duo. Opțional — fluxul PKCE nu necesită un secret. Revine la `GITLAB_OAUTH_CLIENT_SECRET`. | | `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Suprascrie URL-ul de bază GitLab (GitLab auto-găzduit). Implicit este `https://gitlab.com`. Revine la `GITLAB_BASE_URL`. | | `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Rezervă veche pentru `GITLAB_DUO_BASE_URL`. Utilizată atunci când varianta `_DUO_` nu este setată. | | `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Rezervă veche pentru `GITLAB_DUO_OAUTH_CLIENT_ID` consumată de `src/lib/oauth/constants/oauth.ts`. | | `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Rezervă veche pentru `GITLAB_DUO_OAUTH_CLIENT_SECRET` consumată de `src/lib/oauth/constants/oauth.ts`. | | `QODER_OAUTH_CLIENT_SECRET` | Qoder | — | | `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Setați pentru a activa Qoder OAuth. | | `QODER_OAUTH_TOKEN_URL` | Qoder | — | | `QODER_OAUTH_USERINFO_URL` | Qoder | — | | `QODER_OAUTH_CLIENT_ID` | Qoder | — | | `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Cheie API directă de rezervă (ocolește OAuth). | | `QODER_CLI_WORKSPACE` | Qoder | ID-ul spațiului de lucru pentru Qoder CLI. | | `OMNIROUTE_QODER_WORKSPACE` | Qoder | Alias pentru `QODER_CLI_WORKSPACE`. | | `QODER_CLI_CONFIG_DIR` | Qoder | Suprascrie directorul de configurare Qoder CLI (sesiune PAT izolată, evită suprascrierea unei autentificări de browser). | | `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Token `tk` frontend de trimis ca `validated` pe `/api/chat`. Necesar atunci când Blackbox impune potrivirea token-urilor; altfel OmniRoute revine la un UUID aleatoriu. Vezi problema #2252. | | `VISION_BRIDGE_BASE_URL` | Barieră de protecție Vision Bridge | URL de bază compatibil OpenAI pentru apeluri vision-bridge non-Anthropic. Implicit la variabila de mediu URL OpenAI veche sau api.openai.com. Indică spre bucla internă `/v1` a OmniRoute sau orice punct final compatibil OpenAI (Gemini OpenAI-compat, OpenRouter). Problema #2232. Când URL-ul este propriul `/v1` al OmniRoute, sub-cererea de descriere trimite `x-omniroute-admission-bypass: internal` și se autentifică cu credențialul de buclă internă rezolvat (sentinela `sk_omniroute` în modul local, sau `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) astfel încât implementările `REQUIRE_API_KEY=true` să funcționeze. | | `VISION_BRIDGE_API_KEY` | Barieră de protecție Vision Bridge | Cheie API pentru URL-ul de mai sus. Suprascrie variabilele de mediu OpenAI / Google per-furnizor pentru apelurile vision-bridge non-Anthropic. Modelele Anthropic își păstrează calea dedicată cheii Anthropic. Problema #2232. | | `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Barieră de protecție Vision Bridge | Cât timp este stocat în cache un rezultat de rutare "fără candidat utilizabil", în ms (implicit `30000`). Valorile invalide sau negative revin la valoarea implicită; `0` dezactivează cache-ul negativ. Sursa: `src/lib/guardrails/visionBridgeRouter.ts`. | > [!WARNING] > > 1. Accesați [Google Cloud Console → Credențiale](https://console.cloud.google.com/apis/credentials) > 2. Creați un ID client OAuth 2.0 (tip: "Aplicație web") > 3. Adăugați URL-ul serverului dvs. ca URI de redirecționare autorizat > 4. Înlocuiți valorile credențialelor în `.env`. --- ## 12. Suprascrieri User-Agent pentru furnizori Suprascrieți antetul `User-Agent` trimis fiecărui furnizor upstream. Acesta este rezolvat dinamic în timpul execuției de clasa de bază a executorului: ``` process.env[`${PROVIDER_ID}_USER_AGENT`] ``` > **Sursă:** `open-sse/executors/base.ts` → `buildHeaders()` | Variabilă | Valoare implicită | Când trebuie actualizată | | -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Când Anthropic lansează o nouă versiune CLI | | `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Setați la `1`/`true` pentru a transmite textual numele instrumentelor din sisteme terțe către Anthropic pe ambele căi direcționate către Anthropic (OAuth nativ și CLIProxyAPI). În mod implicit, executorul atribuie în mod determinist aliasuri numelor instrumentelor care nu aparțin Claude Code (maparea canonică Claude Code acolo unde există, în caz contrar PascalCase) și le inversează în răspuns prin `_toolNameMap`, astfel încât sistemele cu instrumente snake_case să nu fie refuzate ca fiind clienți terți identificați prin amprentă. Numai pentru depanare. | | `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | Când OpenAI actualizează Codex CLI | | `CODEX_CLIENT_VERSION` | `0.155.0` | Suprascrieți versiunea clientului Codex independent de șirul UA complet | | `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | Suprascrieți versiunea Claude Code declarată independent de `CLAUDE_USER_AGENT`. Anthropic restricționează unele modele pe baza acestei valori (#12417). | | `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Suprascrieți sufixul de 3 caractere pe care OmniRoute îl adaugă la `cc_version=` în blocul de facturare Claude. Incrementați-l împreună cu `CLAUDE_CODE_CLIENT_VERSION` — fixarea doar a versiunii declară o pereche `version.revision` pe care niciun binar real nu o emite. | | `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | Suprascrieți versiunea Copilot CLI declarată independent de `GITHUB_USER_AGENT` | | `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | Când GitHub Copilot Chat este actualizat | | `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | Când Antigravity IDE este actualizat | | `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | Când Kiro IDE este actualizat | | `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | Suprascrieți `clientId` (ID public) pentru codul de dispozitiv social Kiro | | `KIRO_VERIFY_FULL_CRC` | `false` | Opțional: validare CRC completă pentru fiecare cadru din fluxul de evenimente Kiro (pentru depanarea fluxurilor corupte) | | `QODER_USER_AGENT` | `Qoder-Cli` | Când Qoder CLI este actualizat | | `CURSOR_USER_AGENT` | `Cursor/3.3` | Când Cursor este actualizat | > [!TIP] > Puteți adăuga suprascrieri User-Agent pentru **orice** furnizor folosind modelul `{PROVIDER_ID}_USER_AGENT`. Executorul construiește dinamic numele variabilei de mediu. --- ## 13. Compatibilitatea amprentei CLI Când este activată, OmniRoute reordonează anteturile HTTP și câmpurile corpului JSON pentru a corespunde exact semnăturii instrumentelor CLI oficiale. Acest lucru reduce riscul de marcare a contului, păstrând în același timp IP-ul proxy-ului. **Sursă:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts` ### Pentru fiecare furnizor | Variabilă | Activare | Efect | | ------------------------ | -------- | -------------------------------------------- | | `CLI_COMPAT_CODEX` | `=1` | Imită semnătura solicitărilor Codex CLI | | `CLI_COMPAT_CLAUDE` | `=1` | Imită semnătura solicitărilor Claude Code | | `CLI_COMPAT_GITHUB` | `=1` | Imită semnătura solicitărilor GitHub Copilot | | `CLI_COMPAT_ANTIGRAVITY` | `=1` | Imită semnătura solicitărilor Antigravity | | `CLI_COMPAT_CURSOR` | `=1` | Imită semnătura solicitărilor Cursor | | `CLI_COMPAT_KIMI_CODING` | `=1` | Imită semnătura solicitărilor Kimi Coding | | `CLI_COMPAT_KILOCODE` | `=1` | Imită semnătura solicitărilor Kilo Code | | `CLI_COMPAT_CLINE` | `=1` | Imită semnătura solicitărilor Cline | ### Global | Variabilă | Activare | Efect | | ---------------- | -------- | ------------------------------------------------------------------------- | | `CLI_COMPAT_ALL` | `=1` | Activează simultan compatibilitatea amprentei pentru **toți** furnizorii. | ### Suprascrieri ale identității Kimi Coding CLI | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------- | --------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------- | | `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | Suprascrie versiunea Kimi CLI trimisă în timpul apelurilor OAuth/API. | | `KIMI_CODING_DEVICE_ID` | _(valoare capturată)_ | `src/lib/oauth/providers/kimi-coding.ts` | Suprascrie ID-ul capturat al dispozitivului Kimi utilizat în anteturile clientului. | > [!NOTE] > Această funcționalitate operează împreună cu suprascrierile User-Agent (§12). Sistemul de amprentare gestionează ordinea anteturilor și a câmpurilor din corp, în timp ce suprascrierile User-Agent gestionează șirul UA specific. Ambele pot fi activate independent. --- ## 14. Furnizori cu cheie API Chei API pentru furnizorii care utilizează autentificarea directă. **Configurare preferată:** Panou de control → Furnizori → Adăugați o cheie API. Setarea prin variabile de mediu este o alternativă pentru implementările Docker sau fără interfață grafică. Model recunoscut: `{PROVIDER_ID}_API_KEY` | Variabilă | Furnizor | | ------------------ | ---------------------------------------------------------------------- | | `DEEPSEEK_API_KEY` | DeepSeek | | `NVIDIA_API_KEY` | NVIDIA NIM | | `JINA_AI_API_KEY` | Jina AI (Foundation API + soluție de rezervă Reader) | | `JINA_API_KEY` | Jina AI (alias pentru `JINA_AI_API_KEY`) | | `GEMINI_API_KEY` | Gemini (Google AI Studio) încorporări + soluție de rezervă pentru chat | | `GOOGLE_API_KEY` | Gemini (alias pentru `GEMINI_API_KEY`) | > [!NOTE] > Intrările statice `${PROVIDER}_API_KEY` pentru Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius și Qianfan au fost eliminate în v3.8.0 deoarece mediul de execuție nu le mai citește — acești furnizori se bazează exclusiv pe Panoul de control / `data/provider-credentials.json` / baza de date criptată. Consultați secțiunea _Audit: variabile eliminate / neutilizate_ din partea de jos a acestui document pentru instrucțiunile de migrare. > [!TIP] > Cheile setate prin Panoul de control sunt stocate criptat în SQLite și au prioritate față de variabilele de mediu. > > **Jina:** încorporările `jina-ai/…`, reclasificarea, clasificarea, segmentarea și `jina-search` **nu** facturează o cheie de mediu a clusterului atunci când există o conexiune `jina-ai` (sau `jina-reader` partajată) în panoul de control — `getProviderCredentials` completează mai întâi valorile existente. `JINA_AI_API_KEY` / `JINA_API_KEY` sunt utilizate numai când nu există nicio cheie utilizabilă în panoul de control. Jurnalele de apeluri atribuie soluția de rezervă din mediu drept `connection_id=env:JINA_AI_API_KEY`. Cardul Reader (`jina-reader`, `r.jina.ai`) nu deservește niciodată `/v1/embeddings` sau `/v1/rerank`. > > **Gemini:** `gemini/gemini-embedding-2` (alias `google/gemini-embedding-2`) utilizează mai întâi conexiunea `gemini` din panoul de control. `GEMINI_API_KEY` / `GOOGLE_API_KEY` sunt utilizate numai când nu există nicio cheie utilizabilă în panoul de control. Jurnalele de apeluri atribuie soluția de rezervă din mediu drept `connection_id=env:GEMINI_API_KEY`. Traficul multimodal nativ utilizează `x-goog-api-key` pentru `:embedContent` / `:batchEmbedContents` — N elemente OpenAI `input` devin N vectori. --- ## 15. Setări pentru expirarea timpului Toate valorile sunt exprimate în **milisecunde**. Rezoluția este centralizată în `src/shared/utils/runtimeTimeouts.ts`. ### Ierarhia timpilor de expirare ``` REQUEST_TIMEOUT_MS (suprascriere globală) ├─→ FETCH_TIMEOUT_MS (apeluri către furnizorii din amonte, implicit: 600000) │ ├─→ FETCH_HEADERS_TIMEOUT_MS (moștenește valoarea din FETCH_TIMEOUT_MS) │ ├─→ FETCH_BODY_TIMEOUT_MS (moștenește valoarea din FETCH_TIMEOUT_MS) │ ├─→ TLS_CLIENT_TIMEOUT_MS (moștenește valoarea din FETCH_TIMEOUT_MS) │ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (independent, implicit: 10000) │ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (independent, implicit: 15000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (independent, implicit: 0 = dezactivat, recomandat: 30000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (independent, implicit: 2) │ ├── FETCH_CONNECT_TIMEOUT_MS (independent, implicit: 30000) │ └── FETCH_KEEPALIVE_TIMEOUT_MS (independent, implicit: 4000) ├─→ STREAM_IDLE_TIMEOUT_MS (moștenește valoarea din REQUEST_TIMEOUT_MS, implicit: 600000) ├─→ STREAM_ACTIVE_TIMEOUT_MS (independent, implicit: 1260000; 0 dezactivează) ├─→ STREAM_READINESS_TIMEOUT_MS (moștenește valoarea din REQUEST_TIMEOUT_MS, implicit: 80000) ├─→ STREAM_READINESS_MAX_TIMEOUT_MS (limitează extinderile adaptive ale timpului de pregătire, implicit: 180000) └─→ API_BRIDGE_PROXY_TIMEOUT_MS (moștenește valoarea din REQUEST_TIMEOUT_MS, implicit: 30000) ├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (derivat, implicit: 300000) ├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (implicit: 60000) ├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (implicit: 5000) └── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (implicit: 0 = dezactivat) ``` | Variabilă | Valoare implicită | Descriere | | ----------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | _(nesetat)_ | Scurtătură globală — suprascrie valorile implicite pentru `FETCH_TIMEOUT_MS` și `STREAM_IDLE_TIMEOUT_MS`. | | `FETCH_TIMEOUT_MS` | `600000` | Timpul de expirare total al solicitării HTTP pentru apelurile către furnizorii din amonte. | | `STREAM_IDLE_TIMEOUT_MS` | `600000` | Perioada maximă de inactivitate între octeții bruți din amonte înainte de anulare. Modelele cu raționament extins rareori fac pauze >90s. | | `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Durata totală maximă de viață a fluxului SSE activ; nu se resetează niciodată la primirea octeților din amonte și este independentă de `REQUEST_TIMEOUT_MS`. Este derivată din cea mai mare valoare `timeoutMs` per model din registru (1200000, Codex), plus o marjă de 60000, astfel încât un model căruia i se permite să-și utilizeze întregul buget să nu fie oprit niciodată în mijlocul răspunsului. Setați la `0` pentru dezactivare. | | `OMNIROUTE_SSE_COMMENTS` | _(dezactivat)_ | Stabilește dacă OmniRoute poate emite linii de comentariu SSE `:` (de exemplu, semnalul periodic `: keepalive` și trailerele de metadate `x-omniroute-*`). Este dezactivat implicit (#10524), deoarece clienții strict compatibili cu OpenAI apelează JSON.parse pentru fiecare linie SSE și se blochează la comentariile `:`; semnalele periodice `data:` nu sunt afectate. Setați `on`/`true`/`1`/`yes` pentru reactivare. Utilizat de `open-sse/utils/sseHeartbeat.ts`. | | `SSE_COALESCE_MS` | `0` (dezactivat) | Opțional: combină evenimentele Claude `content_block_delta` consecutive (același index de bloc și același tip de deltă) trimise clienților Claude, efectuând golirea cel puțin la fiecare N ms. Fără pierderi; evenimentele `signature_delta` și cele de delimitare nu sunt combinate niciodată. Se aplică fiecărui tip de deltă, cu excepția cazului în care este setată mai jos o variabilă specifică tipului. Utilizat de `open-sse/utils/sseDeltaCoalesce.ts`. | | `SSE_COALESCE_THINKING_MS` | `0` (dezactivat) | Suprascriere per tip a `SSE_COALESCE_MS` pentru `thinking_delta`. | | `SSE_COALESCE_TEXT_MS` | `0` (dezactivat) | Suprascriere per tip a `SSE_COALESCE_MS` pentru `text_delta`. | | `SSE_COALESCE_INPUT_JSON_MS` | `0` (dezactivat) | Suprascriere per tip a `SSE_COALESCE_MS` pentru `input_json_delta`. | | `SSE_FRAME_COALESCE_MS` | `0` (dezactivat) | Opțional: grupează cadrele SSE redirecționate într-un interval de N ms într-o singură scriere către client. Primul cadru și cadrele terminale (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) nu sunt întârziate niciodată; când gruparea este activată, ITL măsoară intervalele dintre grupuri. Utilizat de `open-sse/utils/sseOutputSink.ts`. | | `SSE_STALL_WATCHDOG` | `timer` | Implementarea mecanismului de supraveghere a blocării octeților pentru răspunsurile transmise în flux. `timer` rearmează câte un temporizator pentru fiecare fragment din amonte (se declanșează exact la limita de blocare); `interval` păstrează o singură verificare per flux, cu perioada `clamp(budget/4, 1s, 5s)`, astfel încât o blocare este detectată în intervalul buget + perioadă. Utilizat de `open-sse/utils/streamStallWatchdog.ts`. | | `STREAM_READINESS_TIMEOUT_MS` | `80000` | Timpul disponibil pentru primirea primului eveniment SSE care nu este de tip ping. Moștenește `REQUEST_TIMEOUT_MS` atunci când acesta este setat. | | `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Fereastra adaptivă maximă de așteptare a primului eveniment pentru solicitările în flux mari, care utilizează intensiv instrumente sau necesită un nivel ridicat de raționament. | | `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Comutator de oprire pentru euristica `/goal`. Setați `false`/`0`/`off` pentru a dezactiva complet detectarea — timpii de expirare pentru disponibilitate și recuperarea fluxului nu sunt niciodată extinse pe baza corpului/antetelor solicitării, reducând riscul amplificării timpului de expirare controlate de client. | | `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Fereastra maximă de așteptare a primului eveniment pentru execuțiile de agent `/goal` detectate sau pentru solicitările forțate prin `x-omniroute-agent-goal`. | | `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Activează automat recuperarea timpurie a fluxului pentru execuțiile de agent `/goal` detectate. Setați `false`/`0`/`off` pentru a dezactiva activarea specifică obiectivului. Aceasta poate doar ADĂUGA recuperarea peste valoarea implicită a operatorului — nu suprascrie niciodată o dezactivare explicită din `STREAM_RECOVERY_ENABLED`/setările bazei de date. | | `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Elimină evenimentele SSE nestandard `codex.*` (de exemplu, `codex.rate_limits`) care provoacă eșecul `responses.stream()` din SDK-ul OpenAI cu o eroare 502. ACTIVAT implicit (#11014). Setați `0`/`false`/`no`/`off` pentru a le redirecționa. | | `OMNIROUTE_CODEX_APPSERVER_WS` | _(nesetat)_ | Transport opțional prin app-server Codex. Endpoint-ul WebSocket (`ws://`/`wss://`) al unui sidecar local `codex app-server`. Când este setat împreună cu un token, solicitările Codex sunt rutate prin JSON-RPC către sidecar în locul API-ului HTTP Responses. Poate fi setat și per conexiune prin `providerSpecificData.codexAppServerUrl`. Utilizat de `open-sse/executors/codex/appServerConfig.ts`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(nesetat)_ | Token inline de capabilitate/purtător prezentat app-serverului. Suprascriere per conexiune: `providerSpecificData.codexAppServerToken`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(nesetat)_ | Calea către un fișier care conține tokenul de capabilitate al app-server-ului (din `codex app-server --ws-token-file`). Se utilizează când `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` nu este setat. Suprascriere per conexiune: `providerSpecificData.codexAppServerTokenFile`. | | `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Directorul de lucru în care rulează tura app-server-ului. Suprascriere per conexiune: `providerSpecificData.codexAppServerCwd`. | | `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(nesetat)_ | Politica de aprobare transmisă turei app-server-ului (de ex. `never`, `on-request`). Suprascriere per conexiune: `providerSpecificData.codexAppServerApprovalPolicy`. | | `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(nesetat)_ | Politica sandbox transmisă turei app-server-ului (de ex. `read-only`, `workspace-write`, `danger-full-access`). Când nu este setată, executorul folosește implicit `workspace-write` (securizat; anterior `danger-full-access`). Suprascriere per conexiune: `providerSpecificData.codexAppServerSandbox`. | | `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Aprobă automat solicitările de aprobare proprii ale app-server-ului (executarea comenzilor/fișierelor/permisiunilor pe gazdă). Dezactivat implicit — solicitările sunt refuzate automat; apelurile instrumentelor harness nu sunt afectate (acestea trec prin mecanismul separat de transmitere `item/tool/call`). Acceptă `true`/`1`/`yes`. Suprascriere per conexiune: `providerSpecificData.codexAppServerAutoApprove`. | | `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Timp pentru primirea anteturilor răspunsului. | | `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | Timpul maxim de așteptare pentru anteturile răspunsului în cazul solicitărilor în flux (ms). `0` dezactivează această limită; o valoare explicită `fetchStartTimeoutCapMs` a furnizorului are prioritate. | | `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 s) | Timpul maxim de așteptare pentru începerea răspunsului (ms) pentru fiecare încercare directă, fără proxy. La expirarea timpului, se reîncearcă o dată pe un socket nou; setați `0` pentru a dezactiva limita și a păstra comportamentul anterior. | | `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 min) | Pragul minim de așteptare pentru începerea răspunsului (ms) în cazul încercărilor directe, fără proxy, a căror gazdă țintă este privată/LAN/loopback (de exemplu, `localhost`, `host.docker.internal`, `192.168.x.x`), astfel încât o pornire la rece a instanței Ollama native să nu fie întreruptă de valoarea implicită de 30 s de mai sus. Acționează ca prag minim: timpul efectiv de așteptare este valoarea mai mare dintre această valoare și `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; `0` sau o valoare nevalidă elimină pragul minim local. Gazdele la distanță nu sunt afectate. | | `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Limita maximă (ms) pentru încercarea RETRY pe un socket nou după expirarea timpului de așteptare pentru începerea răspunsului la încercarea din pool menționată mai sus (#13703). Se aplică numai când apelantul a atașat deja propriul semnal de termen-limită (cascada rezolvată conexiune/model/furnizor/`FETCH_TIMEOUT_MS`); acel semnal este limita reală și se declanșează primul în fluxul prevăzut, astfel încât aceasta este o măsură de siguranță generoasă, nu o limită fixă — fără ea, reîncercarea reutiliza aceeași fereastră scurtă `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` ca încercarea din pool și producea erori 504 pentru modelele funcționale de raționament cu TTFB lent. Nu poate avea niciodată o valoare mai mică decât pragul minim fix de mai sus; când apelantul nu furnizează deloc un semnal de termen-limită, reîncercarea păstrează neschimbat pragul minim fix. | | `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Timp pentru primirea corpului complet al răspunsului. | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Timpul-limită pentru stabilirea conexiunii TCP. | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Timpul-limită de inactivitate pentru socketul keep-alive. | | `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Timpul-limită pentru proxy-ul de amprentare TLS (wreq-js). | | `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Limitează timpul până la primul octet în mod specific pentru corpul transportului de amprentare TLS wreq-js; `TLS_CLIENT_TIMEOUT_MS` nu poate detecta singur un corp blocat, deoarece se finalizează imediat ce sosesc anteturile (#12656). Expirarea timpului anulează cititorul wreq și revine la dispecerul direct/proxy; `0` dezactivează mecanismul de monitorizare. | | `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Numai pentru executorul OpenCode și numai cât timp indicatorul de funcționalitate `OPENCODE_RESPONSES_STALL_ROTATION` este activat (implicit dezactivat): limitează așteptarea pentru primul octet din corpul unui răspuns Responses transmis în flux, după primirea anteturilor sale (#13484). Un flux Responses se deschide cu `response.created`, astfel încât absența datelor după această perioadă indică o blocare: contul intră într-o perioadă de pauză, iar solicitarea este rotită o singură dată către contul următor; o a doua blocare eșuează imediat. `0` dezactivează protecția chiar și când indicatorul este activat. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= dezactivat) | Numai pentru executorul OpenCode: limitează așteptarea anteturilor răspunsului din amonte pentru un apel Responses transmis în flux atunci când mai este disponibil un alt cont — o solicitare aflată în coadă nu mai așteaptă întreaga fereastră pentru anteturi și trece mai departe. Sunt afectate numai apelurile Responses transmise în flux (fluxul Responses se deschide cu `response.created`, astfel încât absența datelor în acel punct indică o coadă, nu generarea); completările de chat și apelurile netransmise în flux rămân neafectate, iar fereastra doar scurtează limita maximă efectivă pentru începerea preluării, fără să o extindă vreodată. Valoare recomandată la activare: `30000`. `0` dezactivează. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Doar executorul OpenCode: de câte ori per solicitare limita de așteptare a antetelor de mai sus poate trece la contul următor. Ultimul cont rămas păstrează întotdeauna întreaga fereastră pentru antete. | | `OPENCODE_PARK_AND_RESUME` | `false` | Doar executorul OpenCode: suspendă solicitarea cu un semnal periodic după răspunsuri 429 tranzitorii repetate (sau un marcaj recent de suprasolicitare a pool-ului), apoi reia o singură etapă limitată, de până la 3 conturi secvențiale, în loc să distribuie solicitarea către întreaga flotă (#13924). Dezactivat implicit: fiecare răspuns 429 trece la contul următor exact ca înainte. | | `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Doar executorul OpenCode: când fiecare cont pregătit după perioada de așteptare din etapa de reluare este pus deoparte de memoria refuzurilor proxy-ului, folosește-le oricum în loc să nu reia nimic (#14851, continuare pentru #14750). Dezactivat implicit: etapa de reluare este goală în acest caz, la fel ca înainte de #14750. | | `STREAM_READINESS_STALL_RETRY` | `false` | Doar pentru chat în flux: când primul corp al răspunsului din amonte se blochează înainte de a produce un eveniment utilizabil, efectuează o a doua încercare limitată prin aceeași cale de rutare, cu același buget de pregătire și fără penalizarea contului. Dezactivat implicit: blocarea primului corp determină eșuarea solicitării fără reîncercare. | | `OPENCODE_POOL_RESELECT` | `false` | Doar executorul OpenCode: după un răspuns 429 de la un furnizor grupat în funcție de ieșire, pentru un cont fără proxy într-un context de pool ambiant, solicită pool-ului de conexiuni un alt membru pentru următoarea încercare, în loc să încerce din nou aceeași adresă de ieșire. Stabilește ordinea, fără a exclude: un pool epuizat păstrează comportamentul actual. Dezactivat implicit: fiecare răspuns 429 trece la contul următor exact ca înainte. | | `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(nesetat)_ | Doar executorul OpenCode: suprascrie calea marcajului de suprasolicitare a pool-ului citit înainte de suspendare (`{since, reason, ttl_s}`, implicit `/tmp/opencode-pool-strain.json`, #13924). Un marcaj recent determină suspendarea fără renumărare; dacă lipsește sau este învechit, se revine la contorul de rafale. | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Timpul de expirare al saltului prin proxy pentru solicitările punții `/v1`. | | `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Direcționează executorul Firecrawl pentru preluare web către o instanță găzduită autonom (cheia API este opțională în afara cloudului). | | `FIRECRAWL_TIMEOUT_MS` | `30000` | Timpul de expirare per solicitare pentru executorul Firecrawl de preluare web. | | `TAVILY_BASE_URL` | _(nesetat)_ | URL-ul de bază pentru componenta Tavily de preluare a cotei `/usage` (Limitele furnizorului); este ignorat când indică spre `api.tavily.com`. Dacă nu este setat, se utilizează URL-ul de bază al conexiunii. | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Timpul total de expirare al solicitării serverului pentru punte. | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Timpul disponibil pentru trimiterea antetelor răspunsului prin punte. | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Timpul de expirare pentru inactivitatea conexiunii persistente a punții. | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Timpul de expirare al socketului brut (0 = dezactivat). | | `SHUTDOWN_TIMEOUT_MS` | `30000` | Perioada de grație la SIGTERM/SIGINT înainte de închiderea forțată. | | `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | Valoare de rezervă utilizată de `src/shared/utils/fetchTimeout.ts` când `FETCH_TIMEOUT_MS` nu este setată. | | `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Timpul de expirare (ms) pentru presetările `validationRead` și `modelsProbe` din `src/shared/network/safeOutboundFetch.ts`. Măriți-l pentru endpointuri lente (Cerebras, Cloudflare AI, Groq), pentru a preveni alternarea frecventă între activ/eroare în panoul de control. Revine la 8000ms pentru valori nevalide (<1000) sau nenumerice. | | `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Timpul de expirare specific releului pentru preluare în `open-sse/utils/proxyFetch.ts` (#9158). Un releu blocat trebuie să eșueze înainte de timpul de expirare al clientului/agentului (~30s), astfel încât apelanții să vadă o eroare specifică releului în locul unui timp de expirare generic din amonte. Limitat la `29000`, astfel încât să se declanșeze întotdeauna primul. | | `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Temporizarea comună dintre reîncercări pentru căile directă/releu/proxy cu o singură reîncercare din `open-sse/utils/proxyFetch.ts` (#9158). `0` = reîncearcă imediat. | | `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Timpul de expirare nativ al solicitării wreq-js (`claudeTlsClient.ts`). | | `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Perioada de grație pentru termenul-limită absolut JS, adăugată peste timpul de expirare nativ. | | `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Timpul de expirare nativ al solicitării wreq-js (`perplexityTlsClient.ts`). | | `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Perioadă de grație pentru termenul-limită absolut JS, adăugată peste timeout-ul nativ. | | `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (dezactivat) | Adaugă „Ai o funcție integrată de căutare pe web. Răspunde direct la întrebări folosind rezultatele căutării.” la mesajul de sistem al apelantului (`perplexity-web/protocol.ts`). Este dezactivat în mod implicit — Perplexity caută oricum, iar propoziția apare în răspunsuri drept metacomentariu pentru clienții de programare. Setați la `1`/`true`/`yes`/`on` pentru restabilire. | | `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Timeout nativ pentru solicitările wreq-js (`grokTlsClient.ts`). | | `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Perioadă de grație pentru termenul-limită absolut JS, adăugată peste timeout-ul nativ. | | `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Timeout nativ pentru solicitările wreq-js (`notionTlsClient.ts`); `notion-web` îl mărește pentru fiecare solicitare la `180000` pentru generările de lungă durată. | | `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Perioadă de grație pentru termenul-limită absolut JS, adăugată peste timeout-ul nativ. | | `OMNIROUTE_BROWSER_POOL` | `on` | Pool de browsere Playwright partajat pentru conversații cu cookie-uri web gestionate prin browser (`browserPool.ts`); setați la `off` pentru dezactivare. | | `OBSCURA_BIN` | `auto-detect` | Calea către binarul `obscura` utilizat ca motor principal de pool-ul de browsere și de executorul Cloudflare Playground (`open-sse/services/obscura.ts`); este detectat automat în PATH-ul sistemului dacă nu este setat. | | `OBSCURA_CDP_ENDPOINT` | _(nesetat)_ | Indică o instanță Obscura care rulează deja (`http://host:port`), în loc să pornească una; modulul nu deține acel proces (`open-sse/services/obscura.ts`). | | `OBSCURA_PORT` | `random free port` | Port explicit pentru procesul `obscura serve` pornit; dacă nu este setat, se alege automat un port liber (`open-sse/services/obscura.ts`). | | `WEB_COOKIE_USE_BROWSER` | `0` | Direcționează o solicitare de conversație cu cookie-uri web către fluxul gestionat prin browser (`browserBackedChat.ts`); `1` pentru activare. | | `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | URL de bază pentru executorul Kimi Web (Connect-RPC internațional kimi.ai) (`kimi-web.ts`); suprascrieți-l numai pentru endpoint-uri oglindă/proxy. | | `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Endpoint complet de conversație pentru executorul Kimi Web (`kimi-web.ts`). | | `OMNIROUTE_LOGIN_BROWSER_PATH` | _(detectat automat)_ | Calea către un executabil Chrome/Edge de sistem pentru autentificarea interactivă Adobe Firefly prin browser (`adobeFireflyBrowserLogin.ts`); suprascrie detectarea automată specifică fiecărui sistem de operare. | | `OMNIROUTE_STANDALONE_DIR` | _ieșirea standalone .build/_ | Suprascriere la compilare pentru directorul de ieșire standalone utilizat de etapa de colocare ulterioară compilării (`scripts/build/colocate-standalone.mjs`); instrumente de compilare, nu de execuție. | Încercările țintelor combo moștenesc timeout-ul rezolvat al solicitării upstream (`FETCH_TIMEOUT_MS` sau `REQUEST_TIMEOUT_MS` atunci când acesta furnizează valoarea implicită pentru preluare). Setați `targetTimeoutMs` într-un combo, în valorile implicite ale combo-ului sau într-o suprascriere a furnizorului numai pentru a accelera trecerea combo-ului la ținta de rezervă; valorile care depășesc timeout-ul upstream curent sunt limitate la timeout-ul upstream. `comboTimeoutMs` este un buget separat, raportat la timpul de ceas, pentru întregul combo și aplicat tuturor țintelor de failover. Lăsați-l nesetat sau setați-l la `0` pentru a păstra iterarea nelimitată (se aplică în continuare o oprire de siguranță codificată fix la 10 minute în `comboPredicates.ts`). O valoare pozitivă înlocuiește această măsură de siguranță pentru combo. Păstrați `comboTimeoutMs` mai mare decât `targetTimeoutMs`, astfel încât failover-ul să mai aibă timp după o primă țintă lentă. ### Pragurile întrerupătorului de circuit Configurarea întrerupătorului de circuit la nivel de furnizor. Valorile implicite reflectă valorile scalate utilizate începând cu v3.6 pentru peste 500 de conexiuni. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------------------------------- | ----------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | Pragul de eșecuri consecutive pentru furnizorii OAuth înainte de declanșarea întrerupătorului. | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | Intervalul de resetare (ms) pentru întrerupătorul furnizorilor OAuth. | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | Pragul de eșecuri consecutive pentru furnizorii cu cheie API. | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | Intervalul de resetare (ms) pentru întrerupătorul furnizorilor cu cheie API. | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Pragul de eșecuri consecutive pentru furnizorii locali (Ollama, LM Studio, ...). | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | Intervalul de resetare (ms) pentru întrerupătorul furnizorilor locali. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: numărul de eșecuri din interval înainte ca întregul furnizor OAuth să intre în perioada de așteptare. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: intervalul glisant de numărare a eșecurilor (ms) pentru furnizorii OAuth. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: perioada de așteptare (ms) după atingerea pragului furnizorului OAuth. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | Furnizorul OAuth intră în starea DEGRADED la acest număr de eșecuri. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | Multiplicatorul maxim de creștere pentru resetTimeout al furnizorului OAuth. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | Furnizorul OAuth escaladează după acest număr de cicluri deschise. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: numărul de eșecuri din interval înainte ca întregul furnizor cu cheie API să intre în perioada de așteptare. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: intervalul glisant de numărare a eșecurilor (ms) pentru furnizorii cu cheie API. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: perioada de așteptare (ms) după atingerea pragului furnizorului cu cheie API. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | Furnizorul cu cheie API intră în starea DEGRADED la acest număr de eșecuri. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | Multiplicatorul maxim de creștere pentru resetTimeout al furnizorului cu cheie API. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | Furnizorul cu cheie API escaladează după acest număr de cicluri deschise. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: numărul de eșecuri înainte ca întregul furnizor local să intre în perioada de așteptare. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: intervalul glisant de numărare a eșecurilor (ms) pentru furnizorii locali. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Întrerupător la nivel de furnizor: perioada de așteptare (ms) după atingerea pragului furnizorului local. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Perioada de așteptare per cheie (ms), aplicată de rotația cu mai multe chei API atunci când un răspuns 429 din amonte nu conține `Retry-After` (#14573). Pentru valorile nepozitive sau nenumerice se utilizează valoarea implicită. | | `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Nivelul de backoff la care furnizorul asociat unui pin din memoria cache de context este considerat persistent indisponibil, iar pinul este eliminat pentru a permite comutarea în caz de eroare. | | `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Interval anti-fluctuație (ms) care tolerează perioade de așteptare tranzitorii scurte înainte de eliminarea unui pin din memoria cache de context. | ### Scenarii | Scenariu | Configurare | | ----------------------------------------- | ------------------------------------------------------- | | **Generare de cod de lungă durată** | `REQUEST_TIMEOUT_MS=900000` (15 min) | | **Limitarea duratei totale a fluxului** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 min) | | **Eșec rapid pentru API-ul de producție** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` | | **Modele cu raționament extins** | `STREAM_IDLE_TIMEOUT_MS=300000` (5 min între fragmente) | --- ## 16. Jurnalizare Sistemul de jurnalizare scrie atât în stdout, cât și în fișiere jurnal rotite. Întreaga configurație este citită de `src/lib/logEnv.ts`. | Variabilă | Valoare implicită | Descriere | | ----------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `APP_LOG_LEVEL` | `info` | Nivelul minim de jurnalizare: `debug`, `info`, `warn`, `error`. | | `APP_LOG_FORMAT` | `text` | Formatul ieșirii: `text` (lizibil pentru oameni) sau `json` (structurat). | | `APP_LOG_TO_FILE` | `true` | Scrie jurnalele într-un fișier, pe lângă stdout. | | `APP_LOG_FILE_PATH` | `logs/application/app.log` | Calea fișierului jurnal (relativă la rădăcina proiectului sau la `DATA_DIR`). | | `APP_LOG_MAX_FILE_SIZE` | `50M` | Dimensiunea maximă a fișierului înainte de rotire. Acceptă: `50M`, `1G`, `512K` sau octeți simpli. | | `APP_LOG_RETENTION_DAYS` | `7` | Numărul de zile pentru păstrarea fișierelor jurnal de aplicație rotite. | | `APP_LOG_MAX_FILES` | `20` | Numărul maxim de copii de rezervă ale fișierelor jurnal rotite. | | `CALL_LOG_RETENTION_DAYS` | `7` | Numărul de zile pentru păstrarea în baza de date a intrărilor din jurnalul de solicitări/apeluri. | | `CALL_LOG_MAX_ENTRIES` | `10000` | Numărul maxim de intrări în jurnalul de apeluri din memoria tampon. | | `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | Numărul maxim de rânduri în tabelul SQLite `call_logs` înainte de curățare. | | `ENABLE_REQUEST_LOGS` | _(nesetat)_ | Activează sau dezactivează forțat jurnalizarea detaliată a solicitărilor, suprascriind setarea din tabloul de bord. | | `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 oră) | Vârsta maximă a intrărilor orfane din jurnalul solicitărilor active înainte de curățarea din memorie. | | `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | Stochează fragmentele fluxului în artefactele conductei atunci când `call_log_pipeline_enabled=true`. Opțional (`true`) — dezactivat implicit pentru a economisi spațiu pe disc. | | `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | Dimensiunea maximă, în KB, a artefactului jurnalului de apeluri al conductei atunci când `call_log_pipeline_enabled=true`. | | `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | Numărul maxim de rânduri în tabelul SQLite `proxy_logs` înainte de curățare. | | `PROXY_LOG_INCLUDE_IPS` | `false` | Include adresele IP ale clientului/ieșirii și prefixele conturilor în jurnalele de consolă `[ProxyEgress]`. Înregistrările jurnalului proxy din tabloul de bord/baza de date păstrează toate detaliile. | | `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | Setați la `"true"` sau `"1"` pentru a înregistra `first_chunk_ms` (intervalul de la începerea trimiterii până la primul octet util din corp) în rândurile jurnalului proxy. Încapsulează fiecare corp din amonte într-un flux passthrough leneș și actualizează rândul după sosirea octetului; este dezactivat implicit, astfel încât răspunsurile să fie transmise nemodificate. | | `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 min) | Frecvența cu care `src/lib/logRotation.ts` reverifică dimensiunea fișierului jurnal activ. | | `CHAT_LOG_TEXT_LIMIT` | `65536` | Lungimea maximă a șirului păstrat în artefactele jurnalului de chat (implicit 64 KB). | | `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | Numărul de elemente păstrate de la sfârșitul matricei la trunchierea sarcinilor utile din jurnalul de chat. | | `CHAT_LOG_MAX_DEPTH` | `6` | Adâncimea maximă de imbricare înainte ca sarcinile utile din jurnalul de chat să fie trunchiate. | | `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | Numărul maxim de chei ale obiectelor păstrate în sarcinile utile din jurnalul de chat (0 = nelimitat). | | `CHAT_LOG_MAX_BODY_KB` | `1024` | Dimensiunea întregului corp al solicitării/răspunsului (KB) înainte ca acesta să fie înlocuit cu un rezumat simplu în locul clonei complete. Măriți această valoare dacă, în conversațiile agentice lungi, în tabloul de bord apare un substituent în locul mesajelor reale. | | `CHAT_DEBUG_FILE` | `false` | Când este true, `serializeArtifactForStorage` omite trunchierea bazată pe dimensiune. Numai pentru depanare. | --- ## 17. Optimizarea memoriei | Variabilă | Valoare implicită | Descriere | | ----------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_MEMORY_MB` | _automat_ (sistem fizic); **`1024` în imaginea Docker** | Limita **recomandată** pentru heap-ul V8 în Docker/modul independent (MB). Când nu este setată, este calibrată dinamic (~35% din memoria RAM a sistemului, limitată la intervalul `[512, 4096]`); `512` este doar limita minimă atunci când memoria totală nu poate fi citită. În `run-standalone.mjs` (Docker CMD), o valoare **explicită** este adăugată ca `--max-old-space-size` și **are prioritate** față de un indicator pentru heap contradictoriu din NODE_OPTIONS (ultima opțiune V8). `omniroute serve` continuă să prefere o setare existentă pentru heap din NODE_OPTIONS (#5238). Nu le setați pe ambele la valori diferite — procesul înregistrează un avertisment care menționează ambele valori și valoarea câștigătoare. **Imaginea Docker oficială setează întotdeauna `1024`, deci calibrarea nu se execută niciodată acolo.** `/v1/responses` pentru agentul de programare necesită `8192`–`12288`, plus o marjă pentru cgroup — consultați [Ghidul Docker — memoria RAM la rulare](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). | | `OMNIROUTE_RSS_PRESSURE_MB` | _automat_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; dezactivată când `OMNIROUTE_MEMORY_MB` nu este setată) | `open-sse/utils/resourcePressure.ts` | Siguranță absolută pentru RSS-ul procesului (MB), destinată memoriei native/externe pe care `heapUsed` din V8 nu o poate detecta; peste această valoare, solicitările noi primesc răspunsul 503 `resource_pressure`. RSS scade rareori după un vârf, deci utilizați-o împreună cu `OMNIROUTE_PRESSURE_SELF_RESTART`. | | `PROMPT_CACHE_MAX_SIZE` | `50` | Numărul maxim de intrări memorate în cache pentru prompturile de sistem. | | `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Dimensiunea totală maximă a cache-ului pentru prompturi. | | `PROMPT_CACHE_TTL_MS` | `300000` (5 min) | Durata de viață a unei intrări din cache-ul pentru prompturi. | | `SEMANTIC_CACHE_MAX_SIZE` | `100` | Numărul maxim de răspunsuri cu temperature=0 memorate în cache. | | `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Dimensiunea totală maximă a cache-ului semantic. | | `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 min) | Durata de viață a unei intrări din cache-ul semantic. | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | Rădăcinile corpusurilor locale care păstrează simultan un index activ în memorie (`src/lib/localCorpus/configured.ts`). LRU: la atingerea limitei, indexul rădăcinii utilizate cel mai puțin recent este eliminat și reconstruit la următoarea interogare a acesteia. Valoarea este limitată la minimum `1`; o valoare nenumerică revine la valoarea implicită. | | `STREAM_HISTORY_MAX` | `50` | Numărul maxim de evenimente recente de flux din memoria tampon a vizualizării în timp real din panoul de control. | | `CONTEXT_LENGTH_DEFAULT` | _(nesetată)_ | Suprascriere globală a lungimii contextului (tokenuri) pentru fiecare furnizor care nu are o variabilă `CONTEXT_LENGTH_`. Când este setată, aceasta **înlocuiește** valorile din catalog, suprascrierea din panoul de control și valorile din registru pentru furnizorii respectivi; când nu este setată, OmniRoute utilizează lanțul său încorporat, a cărui ultimă opțiune este `128000`. Consultați [Lungimea contextului pentru fiecare furnizor](#per-provider-context-length-context_length_provider). | | `USAGE_TOKEN_BUFFER` | `100` | Marjă suplimentară de tokenuri rezervată la monitorizarea cotelor de utilizare. | ### Lungimea contextului pentru fiecare furnizor (`CONTEXT_LENGTH_`) `open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) citește și o formă **specifică fiecărui furnizor**, al cărei nume este construit din ID-ul furnizorului în timpul rulării, astfel încât aceasta nu poate fi enumerată rând cu rând în tabelul de mai sus sau în `.env.example`. **Nume.** `CONTEXT_LENGTH_`, unde `` este ID-ul furnizorului scris cu majuscule, cu fiecare caracter din afara intervalelor `A-Z` / `0-9` înlocuit cu `_`. ID-ul furnizorului este cel canonic după rezolvarea aliasului (partea `provider` a unui șir `provider/model` după ce un alias scurt a fost rezolvat). Nodurile personalizate compatibile cu OpenAI sau Anthropic folosesc ID-ul de nod generat, astfel încât UUID-ul face parte din numele variabilei. Valoarea este un număr întreg pozitiv de tokenuri; orice altceva (valoare goală, `0`, valoare negativă, valoare nenumerică) este ignorat, iar rezolvarea trece la pasul următor. | ID furnizor | Numele variabilei | | ----------------------------------------------------------- | -------------------------------------------------------------------------- | | 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 | **Precedență.** Pentru o pereche `provider/model`, primul pas care produce o valoare are prioritate: 1. `CONTEXT_LENGTH_` pentru furnizorul respectiv. 2. `CONTEXT_LENGTH_DEFAULT` (suprascriere globală prin variabilă de mediu). 3. Fereastra per model: o suprascriere persistentă a contextului (setată în panoul de control sau fixată automat de reconciliatorul de descoperire, consultați `CONTEXT_WINDOW_RECONCILE_INTERVAL`), în caz contrar valoarea sincronizată din catalog / models.dev. 4. Valoarea `defaultContextLength` din registrul furnizorului. 5. Euristici bazate pe numele modelului (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` / `codex` 400000). 6. Valorile implicite încorporate per furnizor, apoi `128000`. Ambii pași bazați pe variabile de mediu se aplică **întregului furnizor**: fiecare model al furnizorului primește aceeași limită, iar aceștia au prioritate față de suprascrierile per model din panoul de control. Când doar un model al unui furnizor necesită o fereastră diferită, utilizați în schimb o suprascriere per model în panoul de control. **Domeniu de aplicare.** Acest lanț controlează verificarea ferestrei de context la momentul solicitării (respingerea `context_length_exceeded` / „Intrarea depășește fereastra de context” din `open-sse/handlers/chatCore.ts`), bugetele pentru comprimarea promptului și limitele de context pentru combinații. Valoarea `context_length` publicată de `GET /v1/models` poate proveni în continuare din metadatele catalogului sau registrului și nu este garantat că reflectă suprascrierea prin variabila de mediu. **Exemplu.** Un furnizor al cărui model acceptă o fereastră de 1.050.000 de tokenuri, în timp ce catalogul raportează 128.000: ```dotenv CONTEXT_LENGTH_AGENTROUTER=1050000 ``` Reporniți serverul după modificare: valoarea este citită din mediul procesului serverului. În **aplicația desktop**, serverul rulează ca proces copil și nu vede o variabilă de sistem setată după pornirea aplicației; adăugați linia în fișierul `.env` încărcat de aplicație (ordinea de căutare este descrisă în [Ghidul Electron: căutarea fișierului de mediu](../guides/ELECTRON_GUIDE.md#environment-file-lookup)), apoi închideți complet și reporniți aplicația. ### Comprimare | Variabilă | Valoare implicită | Descriere | | ------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | nesetată | Consideră de încredere fișierul `.rtk/filters.json` al proiectului fără un hash `.rtk/trust.json`. Utilizați numai în dezvoltarea locală controlată. | ### Motor de memorie (planul 21) ### Costul asupra buclei de evenimente al memoriei, abilităților și reîmprospătării tokenurilor (#10349) OmniRoute este un **singur proces Node**. Extragerea/recuperarea memoriei, injectarea abilităților și reîmprospătarea tokenurilor furnizorului rulează în **aceeași buclă de evenimente** ca `GET /healthz` și panoul de control. Acestea nu rulează într-un fir de execuție worker. | Activitate | Cod | Valoare implicită | Control pentru operator | | --------------------------------- | ---------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | Extragerea / recuperarea memoriei | `src/lib/memory/` | **memoryEnabled** în panoul de control (activată implicit) | Dezactivați **Settings → Memory**. Nu există un comutator de oprire separat prin variabilă de mediu, în afară de dezactivarea funcționalității din setări. | | Injectarea abilităților | `src/lib/skills/injection.ts` | **skillsEnabled** în panoul de control (activată implicit) | Dezactivați **Settings → Memory/Skills** (`skillsEnabled`). Opțiunile sandbox de mai jos doar limitează execuția după ce injectarea este deja activată. | | Reîmprospătarea tokenurilor | `src/sse/services/tokenRefresh.ts` | Activată pentru furnizorii OAuth/web conectați | Deconectați furnizorul sau lăsați tokenurile să rămână valide; în prezent nu există o variabilă de mediu `TOKEN_REFRESH=0`. | Dacă `/healthz` răspunde lent pe un sistem fără activitate, dezactivați mai întâi memoria și abilitățile, apoi verificați încărcarea produsă de catalog/comprimare (#10303, #9685). Aceste funcționalități cedează execuția în punctele `await`, dar concurează în continuare pentru unicul fir de execuție. Opțiuni pentru stratul de înglobare, depozitul vectorial și rerangare pentru subsistemul de memorie persistentă (`src/lib/memory/`). | Variabilă | Valoare implicită | Descriere | | ------------------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 min) | TTL pentru memoria cache în memorie a înglobărilor (pentru fiecare semnătură sursă/model/dimensiune). | | `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Numărul maxim de intrări LRU păstrate în memoria cache a înglobărilor. | | `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | ID-ul depozitului HF pentru conducta locală MiniLM opțională `@huggingface/transformers` (~23 MB int8, ~400 MB RAM). | | `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | ID-ul depozitului HF pentru generatorul de înglobări static potion/Model2Vec bazat pe un tabel de căutare. Este descărcat la cerere în directorul cache. | | `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Directorul utilizat pentru stocarea în cache a fișierelor modelului static potion. Dacă nu este setat, valoarea implicită se află sub `DATA_DIR`. | | `HF_HUB_ENDPOINT` | `https://huggingface.co` | Suprascrie adresa URL de bază Hugging Face Hub utilizată de `staticPotion.ts` (de exemplu, un endpoint oglindă pentru configurații izolate de rețea). | | `MEMORY_VEC_TOP_K` | `20` | Valoarea top-K implicită utilizată de căutarea vectorială prin forță brută `sqlite-vec` din `src/lib/memory/vectorStore.ts`. | | `MEMORY_RRF_K` | `60` | Constanta `k` pentru Reciprocal Rank Fusion în regăsirea hibridă FTS5 + vectorială (rețeta sqlite-vec). | | `VECTOR_STORE_DISABLE_VEC` | `false` | Punct de control pentru teste/diagnosticare în `getVectorStore()` (`src/lib/memory/vectorStore.ts`): când este `true`, forțează depozitul vectorial la `null` (simulează un mediu cloud/WASM fără `sqlite-vec`), reducând regăsirea memoriei la căutarea după cuvinte-cheie FTS5. Lăsați variabila nesetată în producție. | | `NOTION_API_KEY` | _(nesetat)_ | Cheie API pentru backendul Notion (utilizată de presetarea de backend cunoscută din `genericBackend.ts`). | | `NOTION_API_URL` | `https://api.notion.com/v1` | Adresa URL de bază pentru API-ul Notion (poate fi suprascrisă pentru alternative Notion găzduite local). | | `OBSIDIAN_API_KEY` | _(nesetat)_ | Cheie API pentru backendul Obsidian Vault (utilizată de presetarea de backend cunoscută din `genericBackend.ts`). | | `OBSIDIAN_API_URL` | `http://localhost:27123` | Adresa URL de bază pentru API-ul Obsidian Vault (poate fi suprascrisă pentru un seif la distanță). | | `MEMORY_TYPED_DECAY_ENABLED` | `false` | Comutator principal pentru degradarea memoriei tipizate TV6. **Opțional (dezactivat implicit)** — procesul de curățare **șterge** memoriile degradate. Când este dezactivat, `access_count`/`last_accessed_at` reprezintă doar telemetrie și nu se șterge nimic. | | `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (în zile) după care se degradează o memorie `episodic` neutilizată. Valoarea `0` face imună și memoria episodică. Tipurile durabile (`factual`/`procedural`/`semantic`) sunt întotdeauna imune. Cronometrul degradării este recalculat pe baza `last_accessed_at`. | | `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | O memorie injectată de cel puțin acest număr de ori devine imună la degradare, indiferent de tip. Valoarea `0` dezactivează imunitatea bazată pe acces. | | `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (dezactivat) | Intervalul (în secunde) pentru procesul periodic opțional de curățare a memoriilor degradate din `src/lib/memory/typedDecay.ts`. `0`/nesetat = fără proces periodic. Necesită activare dublă: trebuie setat și `MEMORY_TYPED_DECAY_ENABLED=true`. | | `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(nesetat)_ | ID-uri de furnizori separate prin virgulă (fără a ține cont de majuscule/minuscule) care acceptă un mesaj `system` **numai la indexul 0** (`src/lib/memory/injection.ts`). Pentru aceștia, inserarea memoriei în mijlocul matricei, sigură pentru cache, nu este sigură în conversațiile cu mai multe schimburi, astfel încât memoria este îmbinată/adăugată la început ca mesaj system principal. Valoarea implicită include numai `xiaomi-mimo`/`mimo`; extindeți lista pentru endpointuri compatibile cu OpenAI găzduite local (de exemplu, Qwen3.5+/3.6) al căror șablon de chat impune aceeași restricție privind un singur mesaj system inițial. | ### Exemplu Docker cu memorie RAM redusă `128` este destinat exclusiv tabloului de bord. Agenții de programare care folosesc această memorie heap întâmpină `FATAL ERROR` în timpul solicitărilor `/v1/responses` de lungă durată. Nu utilizați acest exemplu ca gateway Claude/Codex/Grok. ```bash OMNIROUTE_MEMORY_MB=128 PROMPT_CACHE_MAX_SIZE=20 PROMPT_CACHE_MAX_BYTES=524288 # 512 KB SEMANTIC_CACHE_MAX_SIZE=25 SEMANTIC_CACHE_MAX_BYTES=1048576 # 1 MB STREAM_HISTORY_MAX=10 ``` --- ## 18. Sincronizarea tarifelor Sincronizarea automată a datelor despre tarifele modelelor din surse externe. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------- | ----------------- | ------------------------ | ---------------------------------------------- | | `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | Activează sincronizarea periodică a tarifelor. | | `PRICING_SYNC_INTERVAL` | `86400` (24h) | `src/lib/pricingSync.ts` | Intervalul de sincronizare în secunde. | | `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | Surse de date separate prin virgulă. | --- ## Sincronizarea ELO Arena | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------- | ----------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Sincronizarea periodică a clasamentului ELO Arena AI, configurabilă din indicatoarele de funcționalitate ale panoului de control sau prin valoarea `false` pentru dezactivare. | | `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | Forma prefixului utilizată pentru ID-urile modelelor în `GET /v1/models`. `dual` publică atât prefixul aliasului scurt, cât și prefixul furnizorului canonic pentru fiecare model (compatibilitate retroactivă — dublează aproximativ catalogul); `alias` emite un singur ID pentru fiecare model; `canonical` emite numai prefixul complet al ID-ului furnizorului (furnizorii al căror alias este deja ID-ul canonic își păstrează unica intrare). Clienții pot suprascrie această opțiune pentru fiecare cerere cu `?prefix=alias`. Consultați [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). | | `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | Intervalul de sincronizare în secunde. | --- ## Furnizorul PromptQL Playground (neoficial/experimental) Punte de sesiune GraphQL pentru prompt.ql.app, realizată prin inginerie inversă (`src/shared/constants/providers/web-cookie.ts`). Toate opțiunile sunt facultative — valorile implicite indică punctele terminale publice ale mediului Playground; suprascrieți-le numai pentru o implementare PromptQL auto-găzduită/alternativă. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | | `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | Punct terminal GraphQL utilizat pentru operațiunile de chat/sesiune. | | `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | Punct terminal GraphQL utilizat pentru interogarea soldului/utilizării creditelor. | | `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | Punct terminal utilizat pentru reîmprospătarea tokenului în regim best-effort. | | `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | Durata maximă (ms) de interogare a `thread_events` înainte de expirarea timpului. | --- ## Furnizor web HyperAgent (neoficial/experimental) Punte de sesiune obținută prin inginerie inversă pentru hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). Opțional — valoarea implicită indică endpointul public pentru facturare/utilizare; suprascrieți-o numai pentru o implementare HyperAgent autogăzduită/alternativă. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------- | --------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------ | | `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | Endpoint utilizat pentru preluarea blocurilor de credite pentru facturare/utilizare. | --- ## Cote de utilizare Kilo Code Consultarea soldului personal în USD și a utilizării Kilo Pass pentru furnizorul Kilo Code. Opțional — valoarea implicită indică API-ul public Kilo; suprascrieți-o numai pentru un releu/un mediu de testare. Autentificarea utilizează tokenul de acces OAuth existent al conexiunii. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | -------------- | --------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------- | | `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | URL de bază utilizat pentru preluarea soldului personal Kilo Code și a utilizării Kilo Pass. | --- ## Furnizor web Adobe Firefly (neoficial/experimental) Reîmprospătarea sesiunii controlată prin browser pentru furnizorul web Adobe Firefly (`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`, `open-sse/services/adobeFireflyClient.ts`). Opțional — toate valorile implicite sunt optimizate pentru o instalare desktop obișnuită. > **Eliminat în #9255.** Vechiul mediu de execuție Chrome atașat prin CDP (adobeFireflyChromeRuntime.ts) a fost > înlocuit cu un serviciu de autentificare prin browser bazat pe Playwright, iar parametrii săi nu mai există. Variabilele > ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART, împreună cu > ADOBE_FIREFLY_LOGIN_WAIT_MS și ADOBE_FIREFLY_FORTER_WAIT_MS, nu sunt citite nicăieri în > baza de cod — setarea lor nu are niciun efect. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------ | ----------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Setați la `1` pentru Chrome cu adevărat fără interfață grafică (cunoscut ca nefuncțional pentru generare; numai pentru depanare). | | `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | Activarea/dezactivarea menținerii proactive a browserului pregătit. `0` dezactivează pregătirea proactivă (recuperarea după eroarea 408 în mijlocul lotului se aplică în continuare). | | `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Setați la `0` pentru a dezactiva salvarea persistentă pe disc a sesiunii Adobe Firefly. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(nesetat)_ | `open-sse/services/adobeFireflySession.ts` | Intervalul minim (ms) impus între trimiteri succesive, suprascriind valoarea implicită încorporată. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(nesetat)_ | `open-sse/services/adobeFireflySession.ts` | Interval suplimentar (ms) adăugat după un lot finalizat cu succes, suprascriind valoarea implicită încorporată. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(nesetat)_ | `open-sse/services/adobeFireflyClient.ts` | Întârzierea de bază (ms) înainte de trimiterea unei cereri de generare, suprascriind valoarea implicită încorporată. | --- ## 19. Sincronizarea modelelor (dezvoltare) | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------------------- | ----------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MODELS_DEV_SYNC_ENABLED` | _(nesetată)_ | `src/lib/modelsDevSync.ts` | Suprascriere strictă pentru sincronizarea prețurilor models.dev. Nesetată = respectă Setări > AI (`modelsDevSyncEnabled`). `0`/`false`/`off`/`no` **are prioritate față de baza de date** și omite atât sincronizarea periodică, cât și scanările SQL/JSON `getModelsDevPricing()` (pentru recuperare atunci când panoul de control este blocat în aceeași buclă de evenimente). `1`/`true`/`on`/`yes` forțează activarea sincronizării. Salvarea/ștergerea prețurilor apelează în continuare `backupDbFile("pre-write")`, care nu efectuează nicio operațiune în cadrul limitării de 60 de minute sau când este setată `DISABLE_SQLITE_AUTO_BACKUP`. | | `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 h) | `src/lib/modelsDevSync.ts` | Intervalul de sincronizare a catalogului de modele în timpul dezvoltării, exprimat în secunde. | | `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 h) | `src/lib/contextWindowResolver.ts` | Intervalul (în secunde) pentru reconciliatorul cu autocorectare al ferestrei de context (5004): fixează ferestrele declarate de furnizor, descoperite prin `/models`, drept suprascrieri `auto:discovery` atunci când diferă de catalog. Setați la `0` pentru dezactivare. Reutilizează datele deja sincronizate (fără preluări noi); nu suprascrie niciodată suprascrierile `manual`. | --- ## 20. Setări specifice furnizorilor | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 h) | `src/lib/catalog/openrouterCatalog.ts` | Durata de viață a cache-ului catalogului de modele OpenRouter. | | `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Include câmpuri `name` ușor de afișat în răspunsurile `/v1/models`. Dezactivați pentru clienții care așteaptă doar ID-uri. | | `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 s) | `src/app/api/v1/models/catalogCache.ts` | Limita de așteptare pe calea rece pentru o reconstruire comasată a catalogului `GET /v1/models` (#12627). La expirarea timpului, este furnizat ultimul răspuns 200 valid, dacă există unul. | | `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 de zile) | `src/lib/db/models/activeSyncedCatalog.ts` | Vârsta după care lista sincronizată de modele a unei conexiuni încetează să mai fie autoritară pentru rutare și revine permisiv la registru (#12849). Rândurile care nu au primit niciodată un marcaj temporal sunt considerate învechite. | | `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 s) | `src/lib/usage/analyticsResponseCache.ts` | Perioada în care un răspuns lent `GET /api/usage/analytics` este reutilizat pentru același șir de interogare (#15629). `0` dezactivează cache-ul. | | `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1 s) | `src/lib/usage/analyticsResponseCache.ts` | Sunt memorate în cache numai răspunsurile analitice a căror generare a durat cel puțin atât, astfel încât instanțele mici să vadă întotdeauna date actualizate. | | `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Durata maximă de așteptare pentru sarcinile de generare a imaginilor NanoBanana. | | `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Frecvența interogării stării sarcinilor NanoBanana. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Întârzierea de bază pentru temporizarea exponențială a reîncercărilor de trimitere pentru mărirea rezoluției cu Adobe Firefly. | | `AWS_REGION` | _(nesetat)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Regiunea utilizată pentru construirea endpointurilor AWS Bedrock (Kiro, audio). | | `AWS_DEFAULT_REGION` | _(nesetat)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Valoare de rezervă atunci când `AWS_REGION` nu este setată. | | `CLOUDFLARE_ACCOUNT_ID` | _(nesetat)_ | `open-sse/executors/cloudflare-ai.ts` | ID-ul contului pentru Cloudflare Workers AI. | | `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(nesetat)_ | `open-sse/executors/cloudflare-playground.ts` | Calea completă către binarul Chrome pentru desktop pentru executorul Cloudflare AI Playground, utilizată atunci când verificarea amprentei în modul headless blochează Chromium inclus cu Playwright. | | `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) | `open-sse/executors/codebuddy/shared.ts` | Limită opțională de lungime pentru prompturile de sistem ale apelantului trimise către CodeBuddy (CN și International). În mod implicit, numai un prompt care conține un marcaj de identitate al unui agent de programare este înlocuit cu unul neutru (filtrul de conținut Tencent le respinge); prompturile lungi sunt păstrate. Un număr întreg > 0 înlocuiește, de asemenea, orice prompt de sistem mai lung decât numărul respectiv de caractere; o valoare nesetată, `0` sau o valoare care nu este număr întreg dezactivează limita. Fiecare înlocuire înregistrează regula declanșată (marcaj de identitate sau lungime). | | `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Suprascrie baza API-ului REST Cloudflare utilizată de instrumentul de implementare a releului Workers pentru grupul de proxy-uri (#4640 / 9router#1360). | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Numele implicit al proiectului worker sugerat în fereastra modală „Deploy Relay” a grupului de proxy-uri. | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Setați la `false` pentru a ascunde opțiunea de releu Cloudflare Workers din fila Proxy Pool. | | `CLOUDFLARED_BIN` | detectare automată | `src/lib/cloudflaredTunnel.ts` | Cale personalizată către binarul `cloudflared`. | | `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Protocol de transport pentru tunel: `http2` (implicit), `quic` sau `auto`. | | `CLOUDFLARED_CONFIG` | _(nesetat)_ | `src/lib/cloudflaredTunnel.ts` | Calea către un fișier `config.yml` cloudflared gestionat local (cu `tunnel:`, `credentials-file:`, `ingress:`). Când este setată, OmniRoute execută `tunnel --config run` (tunel denumit) în locul unui tunel rapid efemer. | | `CLOUDFLARED_HOSTNAME` | _(din ingress-ul configurației)_ | `src/lib/cloudflaredTunnel.ts` | Suprascriere pentru numele de gazdă public al tunelului denumit (de ex., `ai.example.com`), raportat ca `publicUrl`/`apiUrl`. Când nu este setat, acesta este citit din primul nume de gazdă `ingress` al configurației. | | `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | Suprascrie baza API-ului REST Deno Deploy utilizată de componenta de implementare a releului pentru grupul de proxy-uri (#4643 / 9router#1437). | | `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Numele implicit al aplicației Deno Deploy sugerat în fereastra modală „Deploy Relay” a grupului de proxy-uri. | | `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Setați la `false` pentru a ascunde opțiunea de releu Deno Deploy din fila Proxy Pool. | | `SEARCH_CACHE_TTL_MS` | `300000` (5 min) | `open-sse/services/searchCache.ts` | TTL pentru memorarea în cache a răspunsurilor API-urilor de căutare (Perplexity, Brave etc.). | | `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Afișează interfața experimentală pentru furnizori compatibili cu CC, destinată releelor exclusiv pentru Claude Code. | | `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | Suprascrie gazda pe care ascultă instanța 9router încorporată. | | `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | Suprascrie portul pe care ascultă instanța 9router încorporată. | | `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | Gazda de asociere pentru proxy-ul WebSocket al serviciului încorporat (doar loopback în mod implicit). | | `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Portul serverului proxy WebSocket al serviciului încorporat. | | `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | Gazda punții CLIProxyAPI (integrare moștenită). | | `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | Portul punții CLIProxyAPI. | | `CLIPROXYAPI_API_KEY` | _(gol)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | Cheie alternativă pentru planul de date atunci când setarea `cliproxyapi_api_key` lipsește. | | `CLIPROXYAPI_MANAGEMENT_KEY` | _(gol)_ | `src/lib/services/cliproxyAccountHealth.ts` | Cheie de administrare pentru citirea stării conturilor dintr-o instanță CLIProxyAPI gestionată extern. | | `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | Directorul de configurare CLIProxyAPI. | | `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfața gazdei pe care docker-compose publică serviciul auxiliar `cliproxyapi` (#12578). Volumul său de date conține acreditările OAuth/API ale furnizorului, iar imaginea fixată nu permite suprascrierea cheilor `api-keys` din planul de date prin variabile de mediu (doar printr-un fișier `config.yaml` montat), astfel încât `0.0.0.0` expune întregii rețele LAN un serviciu care conține acreditări. | | `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | Suprascrie portul pe care ascultă daemonul încorporat Mux (coder/mux) pentru orchestrarea agenților (întotdeauna 127.0.0.1). | | `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | Suprascrie portul pe care ascultă daemonul încorporat open-wa (automatizare WhatsApp Web) (întotdeauna 127.0.0.1). | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Gazda de conectare/asociere a serviciului încorporat Dario (în mod implicit, doar interfața loopback). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Portul serviciului încorporat Dario. | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Gazda de conectare/asociere a serviciului încorporat Dario (în mod implicit, doar interfața loopback). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Portul serviciului încorporat Dario. | | `LOCAL_HOSTNAMES` | _(gol)_ | `open-sse/config/providerRegistry.ts` | Nume de gazdă suplimentare, separate prin virgulă, tratate drept „locale” (nume de servicii Docker etc.). | `ENABLE_CC_COMPATIBLE_PROVIDER` este destinat exclusiv releelor terțe care acceptă clienți Claude Code. OmniRoute rescrie solicitările astfel încât releele respective să le accepte. Dacă doriți doar să utilizați Claude Code CLI sau nu sunteți sigur ce sunt aceste relee, păstrați această opțiune dezactivată și adăugați în schimb un furnizor obișnuit compatibil cu Anthropic. --- ## 21. Starea proxy-urilor | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Timpul de expirare pentru verificarea rapidă a stării. | | `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Intervalul de timp (în ore) utilizat pentru calcularea latenței medii a proxy-urilor candidate în strategia de grup optimizată pentru latență. | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL-ul memoriei cache pentru rezultatul verificării stării. | | `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL-ul memoriei cache pentru verificările nereușite ale stării proxy-ului. Păstrați această valoare mai mică decât `PROXY_HEALTH_CACHE_TTL_MS`, astfel încât expirările temporare ale proxy-urilor în condiții de concurență ridicată să fie reîncercate rapid, fără a dezactiva mecanismul de eșec rapid pentru proxy-urile cu adevărat nefuncționale. | | `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Setați la `false` pentru a dezactiva planificatorul de fundal pentru starea proxy-urilor, care verifică periodic proxy-urile înregistrate. | | `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Intervalul, în ms, dintre ciclurile planificatorului de fundal pentru verificarea stării (minimum `60000`). | | `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Intervalul de verificare în ms pentru proxy-urile edge-relay (`deno`/`vercel`/`cloudflare`), ale căror verificări activează o instanță serverless facturată (minimum `60000`). | | `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Intervalul în ms al procesului de recuperare din fundal: frecvența cu care proxy-urile anterior nefuncționale sunt reverificate, astfel încât un proxy recuperat să revină în rotație fără repornire. Valorile sub `60000` revin la valoarea implicită. | | `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Ținta verificării de accesibilitate utilizată de planificator și de endpoint-ul `/api/settings/proxies/auto-test`. Configurați-o cu un URL intern/găzduit local pentru a evita valoarea implicită publică. | | `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Numărul de verificări pornite simultan pentru fiecare lot, comun planificatorului și endpoint-ului `/api/settings/proxies/auto-test`. Rotunjit în jos la minimum 1 și limitat la maximum 50. | | `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Întârzierea în ms dintre pornirile a două verificări dintr-un lot. Fără aceasta, întregul lot pornește în același moment, iar o adresă IP de ieșire comună poate declanșa limitarea ratei la nivelul țintei. Setați la `0` pentru a dezactiva eșalonarea; valoarea este limitată la 5000. | | `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Setați la „false” pentru a opri verificarea gazdei reale a furnizorului atribuit unui proxy (`GET /models`, fără cheie API) și pentru a utiliza întotdeauna `PROXY_HEALTH_TEST_URL` în schimb. | | `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Când valoarea este `false` (implicită), verificările automate de accesibilitate (planificatorul + butonul „Testați tot” al endpoint-ului `/api/settings/proxies/auto-test`) sunt **doar pentru citire** și nu modifică niciodată starea unui proxy — doar operatorul îl setează ca activ/inactiv, astfel încât o verificare instabilă să nu poată bloca un proxy atribuit (#6246). Setați la `true` pentru a restabili comportamentul anterior de testare și setare. | | `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Indicator de funcționalitate cu activare explicită (consultați [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); o suprascriere din baza de date a panoului de control are prioritate). `true` (sau `1`, `yes`) reîncearcă răspunsurile de streaming traduse goale prin calea normală a acreditărilor (până la `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` reîncercări), în loc să expună un răspuns 200 gol sau un răspuns 502 cu conținut gol. | | `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Indicator de funcționalitate cu activare explicită (consultați [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); o suprascriere din baza de date a panoului de control are prioritate). `true` (sau `1`, `yes`) afișează observațiile doar pentru citire privind ieșirile grupului, sub un grup de proxy-uri din panoul de control (adrese IP de ieșire distincte, conexiuni și numărul maxim observat în spatele unei singure adrese IP în ultimele 24 h, conform jurnalului proxy-ului). Nu este utilizat niciodată pentru rutare. | | `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Indicator de funcționalitate cu activare explicită (consultați [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); o suprascriere din baza de date a panoului de control are prioritate). `true` (sau `1`, `yes`) acceptă adrese observate, datate și transmise de operator pentru fiecare membru al grupului și le combină cu citirea din jurnal pentru afișare și ordonarea grupului. | | `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Fereastra de observare, în ore, pentru înregistrările de ieșire transmise de operator (citită la fiecare accesare; nu este necesară repornirea). Limitată la 1..168; o valoare în afara intervalului, nenumerică sau goală revine la 24, cu un singur avertisment la nivelul întregului proces, fără a genera vreodată o excepție. | | `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Setați la `true` pentru a permite planificatorului să elimine automat proxy-urile după eșecuri consecutive repetate. | | `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Numărul de eșecuri consecutive înainte ca planificatorul să elimine automat un proxy (când `PROXY_AUTO_REMOVE=true`). | | `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Setați la `true` pentru a permite planificatorului să dezactiveze temporar (starea `dead`, fără ștergere) un proxy după eșecuri consecutive repetate, în loc să îl elimine. Alternativă nedistructivă la `PROXY_AUTO_REMOVE`: proxy-ul este exclus imediat din rezoluția grupului/rotației (filtrul pentru starea activă utilizat de rezoluția grupului de domeniu îl exclude deja) și este reactivat automat imediat ce începe să treacă din nou verificările. Folosește același prag `PROXY_AUTO_REMOVE_AFTER`. Dacă ambii indicatori sunt `true`, `PROXY_AUTO_REMOVE` are prioritate. | | `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Omitere pasivă cu activare explicită: când este `true`, planificatorul omite verificarea activă pentru un punct final al cărui trafic de producție recent îi confirmă deja funcționarea (cel puțin o reușită și niciun eșec atribuit proxy-ului în fereastră, fiind observat exact un furnizor). Dezactivată implicit: fiecare proxy este verificat. | | `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Fereastra, în ms, a traficului de producție analizat de omiterea pasivă (limitată la `60000..599999`). Este mai scurtă decât intervalul de verificare de 10 minute, astfel încât un eșec recent să prevaleze în loc să fie diluat. | | `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Permite fluxurilor OAuth și de validare a furnizorului să ocolească un proxy fixat și să se conecteze direct atunci când verificările preliminare privind accesibilitatea proxy-ului eșuează. Ordinea efectivă de prioritate este: suprascrierea din baza de date pentru indicatorii de funcționalitate > variabila de mediu > valoarea implicită. | | `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 s) | `src/lib/resilience/settings.ts` | Bugetul implicit de **așteptare în coadă**: cât timp poate aștepta o solicitare un loc disponibil la furnizor și poate rămâne în coadă înainte de a fi respinsă, fără a ajunge vreodată la serviciul din amonte. Cronometrul este oprit odată ce sarcina începe să fie executată — execuția este limitată separat prin `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Variabila de mediu stabilește doar valoarea implicită: o valoare persistentă `resilienceSettings.requestQueue.maxWaitMs`, apoi una specifică fiecărei conexiuni, `rateLimitOverrides.maxWaitMs`, au fiecare prioritate față de aceasta. | | `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 min) | `open-sse/services/rateLimitManager.ts` | Limita maximă a duratei în care o solicitare acceptată poate rămâne în execuție înainte ca rezervarea sa pentru limitarea ratei să expire — separată de bugetul de așteptare în coadă, astfel încât pornirea lentă a preluării pe gateway-uri neincrementale să nu ducă la expirarea timpului (#12027). | | `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (dezactivat) | `open-sse/services/rateLimitManager.ts` | Limita de admitere în coadă: respinge cu un răspuns 429 `queue_full` atunci când există deja în coadă acest număr de solicitări. `0` = nelimitat (implicit). | | `RATE_LIMIT_AUTO_ENABLE` | _(nestabilit)_ | `open-sse/services/rateLimitManager.ts` | Forțează activarea/dezactivarea mecanismului de siguranță pentru activarea automată a limitării ratei, indiferent de setarea persistentă din Dashboard. Acceptă `true`/`1`/`on` pentru a forța activarea și `false`/`0`/`off` pentru a forța dezactivarea. | | `PROVIDER_COOLDOWN_ENABLED` | _(nestabilit → dezactivat)_ | `open-sse/services/providerCooldownTracker.ts` | Activează opțional urmărirea globală, între solicitări, a perioadei de recuperare pentru furnizori/conexiuni. DEZACTIVATĂ implicit (se suprapune cu perioada de recuperare a conexiunii / întrerupătorul de circuit al furnizorului). Acceptă `true`/`1`/`on` pentru activare. | | `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | Perioada minimă de recuperare (ms) înainte de reîncercarea unui furnizor/unei conexiuni care a eșuat. Crește exponențial odată cu eșecurile consecutive. Se utilizează numai când `PROVIDER_COOLDOWN_ENABLED` este activată. | | `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 min) | `open-sse/services/providerCooldownTracker.ts` | Limita maximă a perioadei de recuperare (ms) înainte de reîncercarea obligatorie a unui furnizor/unei conexiuni care a eșuat. Se utilizează numai când `PROVIDER_COOLDOWN_ENABLED` este activată. | | `STREAM_RECOVERY_ENABLED` | _(nestabilit → dezactivat)_ | `src/lib/resilience/settings.ts` (inițializare) → `open-sse/services/streamRecovery.ts` (logică) | **Ce face:** recuperarea transparentă a fluxurilor din amonte trunchiate (portare din free-claude-code). Reține fereastra SSE inițială timp de până la `STREAM_RECOVERY.HOLDBACK_MS` (750 ms), astfel încât o întrerupere _anterioară confirmării_ — una care are loc înainte ca vreun octet să ajungă la client — să fie redeschisă și reîncercată în mod invizibil. **Când trebuie activată:** pentru servicii instabile/din amonte care trunchiază frecvent fluxul la 0 octeți la pornire; lăsați-o DEZACTIVATĂ dacă nu vă puteți permite până la 750 ms în plus pentru timpul până la primul token în fiecare flux. Acceptă `true`/`1`/`on`. Inițializează setarea persistentă de reziliență; odată configurată, setarea din Dashboard are prioritate. | | `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(nesetat → dezactivat)_ | `src/lib/resilience/settings.ts` (valoare inițială) → `open-sse/services/streamRecovery.ts` (logică) | **Ce face:** continuare în mijlocul fluxului (Faza 4.4) — după o trunchiere _post-commit_ (octeții au ajuns deja la client), efectuează din nou solicitarea folosind textul parțial drept precompletare a asistentului și concatenează sufixul lipsă. Numai pentru fluxuri în text simplu compatibile cu OpenAI; nu se declanșează niciodată când este în curs un apel de instrument. **Când se activează:** pentru generări lungi care sunt întrerupte în mijlocul răspunsului și dacă acceptați ca partea finală recuperată să sosească într-un singur bloc, nu token cu token. Independentă de `STREAM_RECOVERY_ENABLED` (profil de risc diferit). Acceptă `true`/`1`/`on`. | | `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(nesetat → dezactivat)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | Monitor opțional pentru debitul ieșirii utile din fluxul activ. Detectează fluxurile care continuă să trimită fragmente, dar rămân sub rata configurată pentru ieșirea asistentului; semnalele de menținere a conexiunii, evenimentele de utilizare, deltele goale și fazele de utilizare a instrumentelor/raționament nu sunt interpretate eronat drept progres. Separat de expirările pentru inactivitate și termenul-limită absolut. | | `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Perioadă de grație înainte de evaluarea debitului, limitată la 0–600000 ms. | | `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Fereastră glisantă pentru ieșirea utilă, limitată la 1000–600000 ms; este necesară o fereastră completă înainte de întrerupere. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Rata minimă în octeți UTF-8 pentru ieșirea asistentului (aproximare conservatoare pentru tokenuri), limitată la 1–1000000. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Eșantionul minim nenul de ieșire utilă considerat măsurabil, limitat la 1–1000000 de octeți. | | `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Interval de decalare (ms) între verificările stării tokenurilor furnizorilor la pornire. | | `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Variația aleatorie minimă (ms) adăugată peste `HEALTHCHECK_STAGGER_MS` între verificările stării tokenurilor furnizorilor, pentru a preveni solicitările în rafală (Problema #1220). | | `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Variația aleatorie maximă (ms) adăugată peste `HEALTHCHECK_STAGGER_MS` între verificările stării tokenurilor furnizorilor, pentru a preveni solicitările în rafală (Problema #1220). | | `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Dimensiunea lotului de verificări concurente pentru parcurgerea de verificare a stării tokenurilor la pornire; valorile mai mari verifică mai multe conexiuni în paralel, iar valorile mai mici reduc încărcarea în rafală (Problema #7875, regresie a #7719). | | `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Numărul de reîncercări automate pentru răspunsurile de temporizare specifice modelului înainte de returnarea erorii către client. | | `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Interval maxim de backoff (secunde) între reîncercările după perioada de așteptare. Limitat la această valoare indiferent de valoarea `Retry-After` din amonte. | | `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL-ul proxy-ului Headroom pentru economisirea tokenurilor. Ciclul de viață al panoului de control (`api/headroom/*`) pornește implicit un CLI local `headroom-ai` pe interfața loopback; suprascrieți valoarea doar pentru a indica un proxy sidecar Docker extern. | ### Constante pentru ajustarea recuperării fluxului Comportamentul de temporizare a recuperării este ajustat prin constante definite direct în cod în `open-sse/config/constants.ts` (`STREAM_RECOVERY`), prezentate aici ca referință — modificarea lor necesită editarea codului, nu o variabilă de mediu: - `STREAM_RECOVERY.HOLDBACK_MS = 750` — durata pentru care fereastra SSE inițială este reținută, astfel încât o trunchiere timpurie să poată fi reîncercată înainte ca vreun octet să fie transmis definitiv clientului. - `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — limita strictă a ferestrei reținute; se efectuează transmiterea (golirea bufferului + retransmitere directă) imediat ce se acumulează acest număr de octeți, indiferent de temporizator. - `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — numărul maxim de redeschideri transparente ale fluxului din amonte cât timp datele reținute nu au fost încă transmise definitiv. > **Limită de rată cu fereastră glisantă per furnizor (fără variabilă de mediu):** mecanismul > de rezervă pentru limita de rată cu fereastră glisantă per furnizor, portat din FCC, există în cod > (`open-sse/services/providerDefaultRateLimit.ts`, conectat prin > `open-sse/services/rateLimitManager.ts`), dar este livrat cu o **mapare implicită goală** > și în prezent **nu are nicio variabilă de mediu pentru operatori** — este activat doar printr-un hook de testare / > o modificare a codului. În mod intenționat, nu este inclus în tabelul de mai sus. Limitatorul de retransmitere per `(token, IP)` > care _dispune_ de un parametru configurabil este `RELAY_IP_PER_MINUTE` (§3 Rețea și porturi). --- ## 22. Depanare > [!CAUTION] > Aceste variabile produc o **ieșire detaliată** și pot expune date sensibile. **Nu le activați niciodată în producție.** | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CURSOR_DEBUG` | _(nesetată)_ | `open-sse/executors/cursor.ts` | Setați la `1` pentru a activa jurnalele detaliate ale executorului Cursor (fragmente SSE decodificate etc.). | | `CURSOR_STREAM_DEBUG` | _(nesetată)_ | `open-sse/executors/cursor.ts` | Alias compatibil cu versiunile anterioare pentru `CURSOR_DEBUG`. | | `CURSOR_DUMP_FILE` | _(nesetată)_ | `open-sse/executors/cursor.ts` | Cale opțională către fișierul care primește fragmentele Cursor brute decodificate atunci când `CURSOR_DEBUG=1`. | | `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Timpul de expirare pentru inactivitatea fluxului (ms) pentru executorul Cursor. | | `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Interval de grație (ms) după un terminator soft composer kv_after_text, când mai există octeți în memoria tampon — oferă unui apel ulterior al instrumentului exec_mcp timp să își finalizeze cadrul. | | `CURSOR_TOOL_DIRECTIVE` | activată (`!== "0"`) | `open-sse/executors/cursor.ts` | Directivă de confirmare a instrumentului care determină composer-2.5 să emită în mod fiabil apeluri de instrumente. Setați la `0` pentru dezactivare. | | `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(nesetată)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | Text al promptului de sistem definit de operator, adăugat la mesajul de sistem DUPĂ traducere (injectare post-traducere), ajungând la căile codex/Responses și `/v1/messages`. Este utilizat și ca prefix al directivei eliminat din blocurile de preambul de sistem reproduse. Lăsați nesetată pentru dezactivare. | | `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (dezactivată) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | Setați la `1` pentru a elimina blocurile reproduse ale preambulului promptului de sistem de la începutul unui flux openai→claude. Dezactivată în mod implicit — euristicile sunt concepute pentru proză în limba engleză și modifică sarcina utilă a răspunsului, astfel încât un răspuns care începe în mod legitim cu o asemenea secțiune ar pierde-o. | | `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Timp de expirare per imagine (ms) pentru preluarea datelor vizuale `image_url` de la distanță. | | `CURSOR_STATE_DB_PATH` | _(detectată)_ | `open-sse/utils/cursorVersionDetector.ts` | Suprascrie căutarea bazei de date de stare a IDE-ului Cursor, utilizată pentru detectarea versiunii IDE-ului. | | `CURSOR_AGENT_CLI_VERSION` | _(detectare / fixare)_ | `open-sse/utils/cursorAgentCliVersion.ts` | ID-ul compilării Agent CLI (`YYYY.MM.DD-`) pentru `x-cursor-client-version: cli-…` la rularea agentului. | | `CURSOR_AGENT_BIN` | _(nesetată)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Calea către binarul Cursor Agent utilizat pentru generarea imaginilor. Dacă nu este setată, handlerul utilizează `providerSpecificData.agentBin`, apoi PATH. | | `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Timpul total per imagine (ms) pentru sarcinile de imagine Cursor Agent. | | `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Limită de concurență pentru locul partajat, aplicată sarcinilor de imagine Cursor. | | `CURSOR_IMG_MODEL` | cerere / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Suprascrie opțiunea `--model` a Cursor CLI pentru sarcinile de imagine. | | `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Intervalul de interogare a rezultatului generării de imagini UC (uncensored.com) (ms). | | `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Timpul total de interogare a rezultatului generării de imagini UC (ms). | | `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Intervalul de interogare a rezultatului generării video UC (uncensored.com) (ms). | | `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Timpul total de interogare a rezultatului generării video UC (ms). | | `CURSOR_DATA_DIR` | _(detectată)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Suprascrie directorul de date Cursor Agent CLI (`…/versions/`); aceeași variabilă utilizată de agentul oficial. | | `CURSOR_TOKEN` | _(nesetată)_ | `scripts/ad-hoc/cursor-tap.cjs` | Token bearer Cursor direct, utilizat de instrumentele pentru dezvoltatori. | | `OMNIROUTE_LOG_REQUEST_SHAPE` | dezactivată (activare explicită prin `"1"`) | `src/app/api/v1/chat/completions/route.ts` | Înregistrează marcatori pentru tipul și lungimea conținutului în cazul sarcinilor utile mari de chat, când este setată la `"1"`. Dezactivată în mod implicit pentru a reduce zgomotul din jurnale. | | `DEBUG_RESPONSES_SSE_TO_JSON` | _(nesetată)_ | `open-sse/handlers/responseTranslator.ts` | Setați la `true` pentru a înregistra detaliile traducerii Responses API SSE→JSON. | | `DEBUG_CLAUDE_NONSTREAM` | _(nesetată)_ | `open-sse/handlers/responseTranslator.ts` | Setați la `true` pentru a expune fragmentele textContent goale în calea de traducere a răspunsului Claude (numai pentru depanare). | | `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(nesetată)_ | Infrastructură de testare E2E | Setați la `true` pentru a activa modul de testare E2E (autentificare relaxată, cârlige de testare). | --- ## 23. Integrarea GitHub Permiteți utilizatorilor să raporteze probleme direct din Panoul de control. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | --------------------- | ----------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | `GITHUB_ISSUES_REPO` | _(nesetat)_ | `src/app/api/v1/issues/report/route.ts` | Depozit în formatul `owner/repo`. | | `GITHUB_ISSUES_TOKEN` | _(nesetat)_ | `src/app/api/v1/issues/report/route.ts` | Token de acces personal GitHub cu permisiunea `issues:write`. | | `GITHUB_TOKEN` | _(nesetat)_ | clasificarea problemelor / utilitare pentru agentul cloud | Token generic de acces GitHub, utilizat ca alternativă pentru `GITHUB_ISSUES_TOKEN` și de utilitarele agentului cloud din `src/lib/cloudAgent/*`. | --- ## Scenarii de implementare Pentru recomandări SRE privind backendul releu (comportamentul ts/bifrost/auto, amplasarea 9router față de CLIProxyAPI și strategia de rezervă pentru debit ridicat), consultați [Strategia backendului releu](/docs/reference/RELAY_BACKEND_STRATEGY.md). ### Dezvoltare locală minimală ```bash JWT_SECRET=$(openssl rand -base64 48) API_KEY_SECRET=$(openssl rand -hex 32) INITIAL_PASSWORD=dev123 PORT=20128 NODE_ENV=development ``` ### Producție cu Docker ```bash JWT_SECRET= API_KEY_SECRET= INITIAL_PASSWORD= STORAGE_ENCRYPTION_KEY= DATA_DIR=/data PORT=20128 API_PORT=20129 NODE_ENV=production AUTH_COOKIE_SECURE=true REQUIRE_API_KEY=true NEXT_PUBLIC_BASE_URL=https://omniroute.example.com BASE_URL=http://localhost:20128 OMNIROUTE_MEMORY_MB=8192 CORS_ORIGIN=https://your-frontend.example.com ``` ### Mediu izolat / 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 cu proxy invers (nginx + Cloudflare) ```bash JWT_SECRET= API_KEY_SECRET= STORAGE_ENCRYPTION_KEY= PORT=20128 AUTH_COOKIE_SECURE=true REQUIRE_API_KEY=true NEXT_PUBLIC_BASE_URL=https://omniroute.example.com BASE_URL=http://127.0.0.1:20128 CORS_ORIGIN=https://omniroute.example.com ENABLE_TLS_FINGERPRINT=true CLI_COMPAT_ALL=1 ``` --- ## 24. Sandbox pentru abilități (v3.8.0+) Limite și opțiuni de siguranță aplicate atunci când cadrul Skills (`src/lib/skills/`) execută automatizări definite de utilizator într-un mediu izolat. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | --------------------------------- | ----------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 s) | `src/lib/skills/builtins.ts` | Limită de timp real pentru fiecare execuție a codului unei abilități în sandbox. Este o limită strictă; orice proces care durează mai mult este oprit. | | `SKILLS_EXECUTION_TIMEOUT_MS` | _(revine la `SKILLS_SANDBOX_TIMEOUT_MS`)_ | `src/lib/skills/` | Limită de timp pentru orchestrarea la nivel înalt a abilităților. Setați o valoare mai mare decât `SKILLS_SANDBOX_TIMEOUT_MS` pentru a permite fluxuri de lucru cu mai mulți pași. | | `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | Numărul maxim de octeți pe care o abilitate îi poate citi dintr-un singur fișier din sandbox. | | `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | Numărul maxim de octeți capturați dintr-un singur răspuns HTTP în cadrul unei abilități. | | `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | Limită strictă pentru numărul de caractere stdout/stderr returnate de o invocare a sandboxului. | | `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | Setați la `1`/`true` pentru a permite conexiuni de rețea către exterior din interiorul sandboxului. În mod implicit, acesta este **izolat** din motive de siguranță. | | `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(gol)_ | `src/lib/skills/builtins.ts` | Listă de permisiuni, separată prin virgule, cu imaginile de containere acceptate pentru execuția în sandbox. O valoare goală înseamnă că este permisă numai imaginea implicită încorporată. | | `SKILLS_SANDBOX_DOCKER_IMAGE` | _(valoare implicită încorporată)_ | `src/lib/skills/` | Imaginea de container utilizată la inițierea unui sandbox bazat pe Docker. Suprascrieți valoarea pentru a fixa o imagine de bază personalizată și securizată. | | `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | Mediul de execuție al containerelor pentru izolarea abilităților: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. `auto` selectează cel mai bun mediu de execuție instalat pentru sistemul de operare gazdă (Apple Container/OrbStack pe macOS, WSL Container pe Windows, Podman pe Linux), folosind Docker ca alternativă. | > [!CAUTION] > Activarea `SKILLS_SANDBOX_NETWORK_ENABLED=true` deschide o cale de ieșire din rețea pentru codul arbitrar al abilităților. Utilizați-o împreună cu `OUTBOUND_SSRF_GUARD_ENABLED=true` și cu o politică strictă `CORS_ORIGIN`/proxy în implementările partajate. --- ## 25. Cote ale furnizorilor, tuneluri, copii de rezervă și diverse aspecte de execuție Endpointuri pentru cotele furnizorilor, tuneluri de rețea (Tailscale, Ngrok, proxy de depanare MITM), pool-ul de ieșire 1Proxy, copii de rezervă ale bazelor de date și mici suprascrieri specifice fiecărei funcționalități, la care face referire stratul executorului sau scripturile. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | Șir de conexiune Redis pentru backendul limitatorului de rată. | | `ALIBABA_CODING_PLAN_HOST` | _(gazdă de producție)_ | `open-sse/services/bailianQuotaFetcher.ts` | Suprascrie gazda utilizată pentru preluarea cotelor planului de programare Alibaba Bailian. | | `ALIBABA_CODING_PLAN_QUOTA_URL` | derivată din gazdă | `open-sse/services/bailianQuotaFetcher.ts` | Suprascrierea adresei URL complete pentru cotele Alibaba Bailian. | | `QWEN_CLOUD_COOKIE` | _(nesetată)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Cookie de sesiune al consolei pentru gateway-ul cotelor planului personal Token Plan din Qwen Cloud / Model Studio (cheia API de inferență nu îl poate accesa). Copiați întregul antet de solicitare `Cookie` — acesta conține `login_qwencloud_ticket` — din orice apel `api.json` către `cs-data.qwencloud.com` din home.qwencloud.com › Billing › Subscription (F12 › Network). Este sensibil și limitat la sesiune; se recomandă câmpul `qwenCloudCookie` din Dashboard pentru fiecare conexiune. | | `QWEN_CLOUD_SEC_TOKEN` | _(nesetată)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Suprascriere manuală a `sec_token` pentru gateway-ul consolei Token Plan. Este sensibil; când nu este setat, modulul de preluare îl determină din codul HTML al Dashboardului folosind cookie-ul. | | `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Suprascrierea gazdei gateway-ului pentru modulul de preluare a cotelor planului personal Token Plan (de exemplu, `bailian-singapore-cs.alibabacloud.com` pentru consola Model Studio). | | `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Adresa URL a Dashboardului utilizată pentru a determina `sec_token` din codul HTML al sesiunii autentificate. | | `XIAOMI_MIMO_CONSOLE_COOKIE` | _(nesetată)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Cookie de sesiune al consolei pentru API-ul cotelor Xiaomi MiMo Token Plan (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — cheia API de inferență nu îl poate accesa). Copiați întregul antet de solicitare `Cookie` — acesta conține `api-platform_serviceToken` și `userId` — din orice solicitare către `platform.xiaomimimo.com` de pe pagina Token Plan (F12 › Network). Este sensibil și limitat la sesiune; se recomandă câmpul `xiaomiMimoConsoleCookie` din Dashboard pentru fiecare conexiune. | | `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Buget lunar (Credite) pentru soluția de rezervă Xiaomi MiMo monitorizată de OmniRoute, utilizată atunci când nu este configurat niciun cookie pentru consolă. Valoarea implicită este cea de 4,1 mld. a nivelului Lite; setați-o la numărul de Credite al planului (Standard 11 mld. / Pro 38 mld. / Max 82 mld.). O suprascriere `providerSpecificData.monthlyTokenLimit` la nivel de conexiune are prioritate față de această variabilă de mediu. | | `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Suprascrierea căii interfeței consolei pentru preluarea cotei gratuite pentru conținut vizual/media din Alibaba Model Studio. | | `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Suprascrierea căii interfeței consolei pentru preluarea cotei multimodale gratuite din Alibaba Model Studio. | | `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Suprascrierea căii interfeței consolei pentru preluarea cotei audio gratuite din Alibaba Model Studio. | | `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(nesetat)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Cale opțională către o suprascriere JSON locală pentru lista încorporată de modele text permise în nivelul gratuit Alibaba. Revine la `$DATA_DIR/alibaba-free-tier-allowlist.json`, apoi la `config/alibaba-free-tier-allowlist.json`. | | `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Tokenuri rezervate pentru rezultatul completării la calcularea bugetelor promptului. | | `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Numărul celor mai noi imagini încorporate care trebuie păstrate atunci când cele mai vechi sunt eliminate pentru a se încadra în fereastra de context (#8560). | | `MODEL_ALIAS_COMPAT_ENABLED` | activat | `open-sse/services/model.ts` | Activează sau dezactivează stratul de compatibilitate pentru aliasurile de modele vechi, utilizat de clienții mai vechi. | | `OMNIROUTE_EMERGENCY_FALLBACK` | activat | `open-sse/services/emergencyFallback.ts` | Setați la `false` (sau `0`) pentru a dezactiva soluția de rezervă de urgență în cazul epuizării bugetului, care redirecționează solicitările eșuate către modelul gratuit `nvidia`/`openai/gpt-oss-120b`. Ordinea efectivă a priorității este: suprascrierea din baza de date Feature Flags > variabila de mediu > valoarea implicită; dacă aceasta nu este disponibilă, serviciul revine la valoarea brută a variabilei de mediu. | | `COMMAND_CODE_CALLBACK_PORT` | _(nesetat)_ | `src/app/api/providers/command-code/auth/shared.ts` | Port local utilizat pentru callback-uri de tip OAuth de la instrumentul auxiliar Command Code CLI. | | `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Valoarea trimisă ca antet `x-command-code-version` către serviciul upstream Command Code. Suprascrieți-o pentru a actualiza versiunea CLI. | | `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | URL-ul de bază pentru serviciul upstream Command Code de utilizare/cotă, folosit de telemetria de preluare a cotei pentru smartphone. Suprascrieți-l pentru un API Command Code găzduit local/alternativ. | | `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Portul local de ascultare pentru proxy-ul MITM de depanare. | | `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Setați la `1` pentru a dezactiva verificarea TLS upstream (doar pentru dezvoltare). | | `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Timpul de expirare pentru socketurile inactive (ms) în cazul conexiunilor transmise prin proxy; socketurile care depășesc această perioadă de inactivitate sunt închise pentru a evita scurgerile de tuneluri rămase semi-deschise. | | `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Portul pe care ascultă puntea MITM Antigravity. | | `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Endpointul routerului către care puntea redirecționează traficul Antigravity. | | `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Suprascrie directorul din care puntea citește materialele TLS. Modelul de certificat este ales la fel ca în cazul serverului AgentBridge: `server.crt`/`server.key` pentru o instalare legacy cu certificat leaf, iar în caz contrar `ca.crt`/`ca.key` (CA rădăcină, câte un certificat leaf pentru fiecare gazdă interceptată; impus prin `MITM_ROOT_CA_ENABLED=true`). Puntea se închide la pornire dacă fișierele necesare modelului activ lipsesc. | | `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Nivelul de detaliere al jurnalelor privind deciziile de rutare: `0` le dezactivează, iar valorile mai mari înregistrează mai multe decizii de ocolire/rutare. | | `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Setați la `true` pentru a opta pentru modelul cu CA rădăcină și certificat leaf per gazdă (#6684). Instalările noi îl primesc automat; instalările cu un certificat leaf legacy de încredere preexistent păstrează certificatul legacy cu SAN fix, dacă nu se optează explicit pentru noul model. | | `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Setat DE managerul MITM pentru procesul proxy lansat (`root-ca` \| `legacy`) — reflectă decizia de migrare a certificatului; nu este destinat configurării manuale. | | `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Setați la `1` (valoare truthy) pentru a elimina prefixul `sudo` din comenzile MITM de acordare a încrederii certificatelor — pentru implementări fără root / cu spațiu de nume pentru utilizatori, în care operatorul acordă manual încredere CA-ului (de exemplu, prin mecanismul extra-CA-certs al Node). | | `SKIP_ANTIGRAVITY_DNS` | _(nesetat)_ | `src/mitm/dns/provision.ts` | Setați la `true` pentru a omite complet configurarea intrărilor DNS din `/etc/hosts` pentru numele de gazdă ale proxy-ului Antigravity — pentru containere fără acces sudo/root. | | `OMNIROUTE_SKIP_DNS_WRITE` | _(nesetat)_ | `src/mitm/dns/dnsConfig.ts` | Setați la `1` pentru a omite scrierea în fișierul hosts la adăugarea/eliminarea intrărilor DNS — pentru medii de testare izolate sau doar în citire. | | `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Mecanism de protecție exclusiv pentru teste/CI: setați la `1` pentru ca instalarea/dezinstalarea încrederii certificatelor să nu efectueze nicio operațiune, astfel încât suita să nu modifice niciodată depozitul de încredere al sistemului de operare. Este setat automat de configurarea testelor și de fluxurile de lucru CI. | | `CHANGELOG_BASE_REF` | _(automat)_ | `scripts/check/check-changelog-integrity.mjs` | Referință de bază explicită pentru mecanismul de protecție împotriva eliminării intrărilor din CHANGELOG (implicit, ramura de bază a PR-ului în CI sau cea mai recentă `release/v*`). | | `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Setați la `true` pentru a activa planificatorul de sincronizare automată în fundal a pool-ului de proxy-uri gratuite. Necesită activare explicită și este dezactivat implicit. | | `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | Intervalul de sincronizare automată în milisecunde (implicit 30 min). | | `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | Activează sursa de proxy-uri gratuite 1proxy. Setați la `false` pentru dezactivare. | | `FREE_PROXY_1PROXY_API_URL` | _(consultați oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Suprascrierea URL-ului API 1proxy. | | `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Numărul maxim de proxy-uri preluate de la 1proxy la fiecare sincronizare. | | `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | Pragul minim al scorului de calitate pentru importurile 1proxy. | | `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Activează sursa de proxy-uri gratuite Proxifly. Setați la `false` pentru dezactivare. | | `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Numărul de proxy-uri preluate la fiecare sincronizare Proxifly. | | `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | Filtrul pentru nivelul de anonimitate Proxifly (`elite`, `anonymous`, `transparent`). | | `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | Activează sursa de proxy-uri gratuite IPLocate. Necesită activare explicită. | | `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Suprascrierea URL-ului de bază al listei de proxy-uri IPLocate. | | `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Activează sursa fondului de proxy-uri Webshare. Setați la `false` pentru dezactivare; necesită, de asemenea, ca `FREE_PROXY_WEBSHARE_API_KEY` să fie setată. | | `FREE_PROXY_WEBSHARE_API_KEY` | _(niciuna)_ | `src/lib/freeProxyProviders/webshare.ts` | Tokenul API al contului Webshare (`Authorization: Token `). Obligatoriu — furnizorul rămâne dezactivat fără acesta. | | `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Suprascrierea URL-ului API pentru lista de proxy-uri Webshare. | | `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Numărul maxim de proxy-uri importate la fiecare sincronizare Webshare. | | `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Afișează/ascunde butonul Deploy Vercel Relay din fila Proxy Pool. | | `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Suprascrierea URL-ului de bază al API-ului Vercel (pentru testare). | | `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Numele implicit al proiectului, completat în prealabil în fereastra modală de implementare Vercel Relay. | | `TAILSCALE_BIN` | _(detectare automată)_ | `src/lib/tailscaleTunnel.ts` | Calea explicită către executabilul binar `tailscale`. | | `TAILSCALED_BIN` | _(detectare automată)_ | `src/lib/tailscaleTunnel.ts` | Calea explicită către executabilul binar al daemonului `tailscaled`. | | `TAILSCALE_AUTHKEY` | _(nesetat)_ | `src/lib/tailscaleTunnel.ts` | Cheie de autentificare Tailscale prepartajată pentru `tailscale up` neinteractiv/fără interfață grafică (transmisă prin `--auth-key=`). Când nu este setată, autentificarea revine la URL-ul interactiv de autentificare din browser. | | `NGROK_AUTHTOKEN` | _(nesetat)_ | `src/lib/ngrokTunnel.ts` | Autentifică tunelurile ngrok de ieșire. | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Numărul maxim de fișiere de backup SQLite păstrate în urma curățării backupurilor manuale/programate. Instantaneele migrării sunt adresate după conținut și reutilizate pentru o stare identică a bazei de date; acestea nu sunt eliminate în intervalul de migrare concurentă. Suprascrie valoarea salvată în Setări → Păstrarea backupurilor bazei de date. | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Vechimea maximă (în zile) păstrată în urma curățării backupurilor manuale/programate. `0` dezactivează eliminarea în funcție de vechime. Instantaneele migrării nu sunt eliminate în intervalul de migrare concurentă. Suprascrie valoarea salvată în Setări → Păstrarea backupurilor bazei de date. | | `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Intervalul de activare (ms) al sarcinii de pe server care execută `backup-schedule.json`. Trebuie să rămână mult sub granularitatea de 1 minut a cronului; valorile sub `5000` sau care nu pot fi analizate revin la `30000`. | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Indiciu privind mediul de execuție al containerelor pentru verificarea permisiunilor la punctul de intrare. Setați la `podman` pentru orice topologie Podman. Deoarece containerul nu poate determina dacă motorul este local sau accesat prin Podman Machine, avertismentul rămâne neutru față de topologie și indică `contrib/podman/README.md`. | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Backend-ul depozitului pentru consumul cotelor partajate: `sqlite` (implicit) sau `redis`. | | `QUOTA_STORE_REDIS_URL` | _(nesetat)_ | `src/lib/quota/storeFactory.ts` | Șirul de conexiune Redis utilizat când `QUOTA_STORE_DRIVER=redis` (de ex. `redis://localhost:6379`). | | `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | Raportul de saturare al grupului (0..1); la atingerea sau depășirea acestuia, grupul intră în modul strict (fără împrumuturi). | | `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Multiplicator de scor (0..1) aplicat unei ținte atunci când politica flexibilă privind cotele îi reduce prioritatea. | | `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Multiplicator de scor (0..1) aplicat unui furnizor epuizat (`credits_exhausted`/`rate_limited`) la calcularea scorului pentru combinația automată, când pragul preliminar de cotă este DEZACTIVAT (#4540). | | `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Perioada de păstrare (în zile) pentru loturile `quota_consumption` înainte de colectarea deșeurilor (`gcQuotaConsumption`). | | `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Funcție opțională (DEZACTIVATĂ implicit): activează pragul strict de cotă pentru rutarea automată, care elimină candidații cu o cotă redusă înainte de calcularea scorului. | | `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Funcție opțională (DEZACTIVATĂ implicit): când un filtru `auto/:` nu corespunde niciunui candidat conectat, restaurează comportamentul anterior de revenire la grupul complet (nefiltrat), în locul returnării unui grup gol. Setarea implicită DEZACTIVATĂ face ca `:free` să însemne „doar nivelul gratuit”. | | `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Limita dimensiunii panoului (restrânsă la intervalul 1–10) pentru varianta de difuzare `auto/*:chaos` — o solicitare este distribuită către cel mult acest număr de modele provenite de la furnizori diferiți. | | `OMNIROUTE_CHAOS_MIN_PANEL` | _(valoarea implicită a motorului)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Configurarea dimensiunii minime a panoului transmisă gestionarului de difuzare haotică; dacă nu este setată, se păstrează valoarea implicită a motorului. | | `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(valoarea implicită a motorului)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Timpul-limită strict (ms) pentru distribuirea completă către panoul haotic; dacă nu este setat, se păstrează valoarea implicită a motorului. | | `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Calea către fișierul `auth.json` al Grok CLI, utilizat pentru preluarea cotei săptămânale grok-web; poate fi suprascrisă pentru teste sau pentru o instalare CLI nestandard. | | `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(nesetat)_ | `src/mitm/manager.ts` | Certificat CA suplimentar (PEM) considerat de încredere pentru conexiunile TLS AgentBridge din amonte. | | `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Numărul maxim de cereri capturate păstrate în memoria tampon circulară a Traffic Inspector. | | `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Dimensiunea maximă a corpului cererii/răspunsului capturat (KB) înainte de trunchiere. | | `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Portul local pentru proxy-ul HTTP Traffic Inspector. | | `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Pornește automat proxy-ul HTTP al inspectorului la inițializare. | | `INSPECTOR_LLM_HOSTS_EXTRA` | _(nesetat)_ | `src/lib/inspector/captureState.ts` | Nume de gazdă suplimentare (separate prin virgulă) tratate drept puncte finale LLM pentru captură. | | `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | Maschează secretele (anteturile de autentificare / cheile API) din traficul capturat. | | `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | Numărul de minute înainte ca mecanismul de protecție al proxy-ului de sistem să restabilească automat setările proxy ale sistemului de operare. | | `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(automat)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Token care autentifică ingestia internă a capturilor în inspector. | | `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Numărul maxim de coloane afișate alăturat în modul de comparare din Playground. | | `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(nesetat)_ | `src/app/(dashboard)/dashboard/playground/` | Modelul implicit pentru acțiunea „îmbunătățește promptul” din Playground (dacă nu este setat, se folosește modelul activ). | | `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Comutator principal de oprire pentru proxy-ul sidecar Bifrost. Când este setat la `0`, ruta returnează 503 cu antetul `X-Bifrost-Killswitch`, iar operatorul este redirecționat către calea TS. Se utilizează pentru dezactivarea serviciului sidecar fără o nouă implementare (incident la routerul de nivel 1, rotația cheilor). | | `BIFROST_BASE_URL` | _(nesetat)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Când este setată, ruta proxy-ului sidecar Bifrost redirecționează traficul `/v1/chat/completions` către acest gateway Go în locul handlerului de releu TS. Nesetat → 503 cu revenire la alternativa implicită. Bara oblică finală este eliminată. | | `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Portul la care ascultă serviciul încorporat Bifrost supravegheat (`127.0.0.1:`) atunci când OmniRoute gestionează ciclul de viață al serviciului sidecar Bifrost. Valoarea implicită este `8080`. | | `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Portul la care ascultă serviciul de compresie LLMLingua supravegheat (`127.0.0.1:`). Valoarea implicită este `20135`. | | `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | URL-ul de bază pentru daemonul local al microserviciului HTTP de compresie LLMLingua. Valoarea implicită este `http://127.0.0.1:20135`. | | `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | ID-ul modelului Hugging Face încărcat de serviciul sidecar LLMLingua supravegheat (transmis către mediul procesului copil). | | `BIFROST_API_KEY` | _(nesetat)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Cheia API pentru gateway-ul Bifrost (trimisă ca `Authorization: Bearer ...`). Dacă nu este setată, ruta se așteaptă ca solicitarea să conțină o cheie API OmniRoute validă; această cheie este destinată exclusiv autentificării la nivelul gateway-ului. | | `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Când este `true`, ruta sidecar Bifrost transmite răspunsurile prin SSE înapoi prin gateway, în locul executorului de streaming TS. Setați la `0` pentru a forța răspunsuri JSON fără streaming prin gateway. | | `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Timpul de expirare per solicitare la trimiterea prin proxy către gateway-ul Bifrost (ms). La expirarea timpului, ruta revine la calea de releu TS prin antetul `X-Bifrost-Fallback`. | | `OMNIROUTE_BIFROST_KEY` | _(nesetat)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Alias pentru `BIFROST_API_KEY` (utilizat de scripturile care citesc mediul prin `OMNIROUTE_*`). `BIFROST_API_KEY` are prioritate când ambele sunt setate. | | `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Backend de releu pentru `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = releu TypeScript (implicit când Bifrost nu este configurat); `auto` selectează Bifrost când `BIFROST_BASE_URL` este setat și `BIFROST_ENABLED` ≠ `0`, cu revenire automată la TS dacă sidecar-ul nu este accesibil; `bifrost` forțează Bifrost (strict, fără revenire). Autentificarea/limitarea ratei/protecția împotriva injectării/lista de permisiuni rulează întotdeauna mai întâi în ruta Next. Răspunsurile conțin `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. | | `RELAY_ROUTING_BACKEND` | _(nesetat)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Alias acceptat pentru `OMNIROUTE_RELAY_BACKEND` (aceleași valori `ts \| bifrost \| auto`). `OMNIROUTE_RELAY_BACKEND` are prioritate când ambele sunt setate. | | `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | Perioadă de așteptare (ms) după ce un salt către sidecar-ul Bifrost eșuează în modul `auto`, înainte ca releul să încerce din nou sidecar-ul; pe durata perioadei de așteptare, direcționează direct către calea TS, apoi încearcă din nou. `0` dezactivează această funcție. Se aplică numai când `OMNIROUTE_RELAY_BACKEND=auto`. | | `OMNIROUTE_TLS_CERT` | _(nesetat)_ | `bin/cli/commands/serve.mjs` | Calea către un certificat TLS PEM pentru a servi `omniroute serve` prin HTTPS (echivalent cu `--tls-cert`). Trebuie asociat cu `OMNIROUTE_TLS_KEY`; serverul autonom încheie apoi conexiunea TLS pe același listener (`wss://` funcționează fără modificări). Nesetat → HTTP simplu. Dacă este furnizat numai certificatul sau cheia ori o cale nu poate fi citită, se înregistrează un avertisment și se menține HTTP. | | `OMNIROUTE_TLS_KEY` | _(nesetat)_ | `bin/cli/commands/serve.mjs` | Calea către cheia privată TLS PEM pentru HTTPS cu `omniroute serve` (echivalent cu `--tls-key`). Trebuie asociată cu `OMNIROUTE_TLS_CERT`. Consultați `OMNIROUTE_TLS_CERT`. | | `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Comutator principal pentru rutele `/api/local/*`. Când este nesetat sau `0`, toate rutele `/api/local/*` returnează 503 în producție. Trebuie să fie `1` în implementările non-loopback pentru a activa lansatorul Redis și alte servicii locale similare cu pornire printr-un singur clic. Protecție redundantă împreună cu clasificarea de protecție a rutelor `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` în `src/server/authz/routeGuard.ts`). | | `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(nesetat)_ | `src/lib/security/localEndpoints.ts` | Token Bearer pentru apelanții `/api/local/*` care nu se află pe loopback (de exemplu, aplicația desktop). Când este setat, solicitările de la adrese IP non-loopback trebuie să conțină `Authorization: Bearer `. Este obligatoriu când `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` în implementările non-loopback. | | `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Numele containerului pentru lansatorul Redis cu un singur clic (`omniroute redis up`). Utilizat atât de CLI, cât și de interfața grafică `RedisLauncherPanel`. | | `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Portul gazdei pentru lansatorul Redis cu un singur clic. Schimbați-l dacă portul 6379 este deja utilizat pe gazdă. Portul intern al containerului rămâne 6379. | | `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Interfața gazdei pe care publică lansatorul Redis cu un singur clic. Lansatorul pornește Redis FĂRĂ parolă, astfel încât asocierea la `0.0.0.0` oferă fiecărei gazde din rețeaua LAN acces neautentificat la Redis — extindeți accesul numai dacă setați și o parolă pentru instanță. | | `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfața gazdei pe care docker-compose publică serviciul auxiliar Redis (#9286). Instanța Redis din configurația compose rulează fără `requirepass`; containerele aplicației o accesează prin rețeaua compose (`redis:6379`) — portul publicat există doar pentru instrumentele de pe gazdă. `0.0.0.0` expune o instanță Redis neautentificată întregii rețele LAN. | | `REDIS_PORT` | `6379` | `docker-compose.yml` | Portul gazdei pentru serviciul auxiliar Redis din configurația compose. | | `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Interfața gazdei pe care docker-compose publică porturile proprii ale aplicației pentru panoul de control/API/WS live (#12568). Având `REQUIRE_API_KEY=false` ca valoare implicită în `.env.example`, `0.0.0.0` expune proxy-ul LLM anonim `/v1` întregii rețele LAN/WAN — extindeți accesul numai după ce setați `REQUIRE_API_KEY=true` sau după ce un proxy invers din față își impune propria autentificare. | | `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfața gazdei pe care docker-compose publică serviciul auxiliar de memorie Qdrant (#12578). Se aplică același raționament privind expunerea în rețeaua LAN ca pentru `REDIS_BIND_HOST`. | | `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Interfața gazdei pe care docker-compose publică serviciul auxiliar de rutare Bifrost (#12578). Se aplică același raționament privind expunerea în rețeaua LAN ca pentru `REDIS_BIND_HOST`. | | `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Prefixul de spațiu de nume aplicat fiecărei chei Redis OmniRoute (limitator de rată, cache de autentificare, stoc de cote, întrerupător de circuit pentru încălzire). Previne coliziunile dintre chei atunci când instanța Redis este partajată cu alte aplicații (#11042). | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(nesetat — mecanism dezactivat)_ | `src/lib/api/internalServiceAuth.ts` | Secret partajat pentru apelurile REST interne care păstrează identitatea (#9260): componentele OmniRoute care apelează alte rute OmniRoute locale îl trimit ca `x-omniroute-internal-service-token`, astfel încât identitatea apelantului inițial să fie păstrată. Comparat folosind `timingSafeEqual`. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(nesetat)_ | `src/lib/api/internalServiceAuth.ts` | Varianta bazată pe fișier secret a tokenului serviciului intern: calea către un fișier al cărui conținut, după eliminarea spațiilor de la început și sfârșit, reprezintă tokenul. Este consultată numai când variabila inline nu este setată. | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Îmbogățește lista de furnizori din tabloul de bord cu statisticile clasamentului săptămânal OpenRouter (#9324). Activată implicit; setați la `false` pentru a omite complet preluarea în fundal (neblocantă, niciodată fatală). | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | Durata de viață (TTL) a memoriei cache pentru instantaneul statisticilor furnizorilor OpenRouter, în milisecunde. | | `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Imaginea Redis utilizată de programul de lansare Redis cu un singur clic. Înlocuiți-o cu `redis:8-alpine` sau cu o oglindă de registru privată, după necesități. | | `QDRANT_HOST` | `qdrant` | _(profil de cluster opțional)_ | Numele de gazdă al serviciului auxiliar Qdrant când `--profile memory` este activ. Valoarea implicită indică numele serviciului qdrant din rețea; modificați-o pentru o implementare externă. Este utilizată numai când `qdrantEnabled` este `true` în cod (`src/lib/memory/vectorStore.ts:108`). | | `QDRANT_PORT` | `6333` | _(profil de cluster opțional)_ | Portul REST al serviciului auxiliar Qdrant. | | `QDRANT_GRPC_PORT` | `6334` | _(profil de cluster opțional)_ | Portul gRPC al serviciului auxiliar Qdrant. Utilizat de bibliotecile client care preferă gRPC în locul REST pentru operațiunile de streaming. | | `QDRANT_API_KEY` | _(nesetat)_ | _(profil de cluster opțional)_ | Cheie API opțională pentru Qdrant Cloud sau pentru o instanță locală autentificată. Valoare goală → nu se trimite niciun antet `api-key`. | | `QDRANT_COLLECTION` | `omniroute-memory` | _(profil de cluster opțional)_ | Numele colecției pentru încorporările memoriei conversațiilor OmniRoute. Este creată la prima rulare cu numărul de dimensiuni specificat de `QDRANT_VECTOR_SIZE`. | | `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(profil de cluster opțional)_ | Numele implicit al modelului de încorporare înregistrat în metadatele colecției Qdrant. Încorporările efective sunt generate de furnizorul indicat de câmpul `embeddingModel` din setările OmniRoute. | | `QDRANT_VECTOR_SIZE` | `1536` | _(profil de cluster opțional)_ | Dimensiunea vectorului de embedding. Trebuie să corespundă modelului cu care generați embeddingurile (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). | | `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(profil de cluster opțional)_ | Precizia la construirea indexului HNSW. O valoare mai mare = construire mai lentă, căutare mai rapidă. | | `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Comutator principal pentru rotația conturilor configurabilă de operator. Când este `false`, niciuna dintre clasele `OMNIROUTE_ROTATE_*` de mai jos nu declanșează trecerea la alt cont (starea dezactivată la nivel principal blochează și clasele 429/500/502 activate implicit). Permite unei interfețe front-end de supraveghere (de ex., aplicația desktop VibeProxy) să își reproducă propriile reguli de rotație în motorul backend de trecere la alt cont. | | `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Perioada de așteptare (în secunde) aplicată unui cont cu limită de rată atinsă atunci când serviciul upstream nu furnizează explicit nicio indicație privind resetarea. `0` = se utilizează perioada de așteptare implicită a motorului în locul unei suprascrieri fixe. | | `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Echivalentul preferinței din front-end „nu eticheta drept limitat de rată fără un timp de resetare”. | | `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | Activează trecerea la alt cont pentru erorile `429`. Când este `false` (iar `OMNIROUTE_ROTATION_ENABLED=true`), o eroare `429` nu mai declanșează rotația contului și este returnată clientului. | | `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Numărul de erori `429` din intervalul `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` necesar înainte de rotația contului. Valoarea `1` (implicită) declanșează rotația imediat, păstrând comportamentul istoric. | | `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Fereastra glisantă (în secunde) în care erorile `429` sunt numărate în raport cu `OMNIROUTE_ROTATE_429_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | Activează trecerea la alt cont pentru fiecare stare în cazul erorilor de server `5xx` (cu excepția `502`, care are propria clasă). Când este `false`, aceste erori nu mai declanșează rotația contului. | | `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Numărul de erori `5xx` din intervalul `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` necesar înainte de rotația contului. Valoarea `1` (implicită) declanșează rotația imediat. | | `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Fereastra glisantă (în secunde) în care erorile `5xx` sunt contorizate pentru atingerea pragului `OMNIROUTE_ROTATE_500_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | Activează mecanismul de rezervă pentru erorile cu starea `502` (gateway nevalid). Când este `false`, erorile `502` nu mai declanșează rotația contului. | | `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Numărul de erori `502` din intervalul `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` necesar înainte de rotirea contului. Valoarea `1` (implicită) declanșează rotația imediat. | | `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Fereastra glisantă (în secunde) în care erorile `502` sunt contorizate pentru atingerea pragului `OMNIROUTE_ROTATE_502_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | Opțiune de activare (implicit DEZACTIVATĂ): când este `true`, și un simplu răspuns `400` (cerere nevalidă) declanșează rotația contului. Această opțiune este doar aditivă — nu blochează niciodată comportamentul existent al motorului, prin care un răspuns `400` ce conține text referitor la limitarea ratei/cotă continuă să activeze mecanismul de rezervă indiferent de acest indicator. | | `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Numărul de erori `400` din intervalul `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` necesar înainte de rotirea contului (consultat numai când `OMNIROUTE_ROTATE_ON_400=true`). | | `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Fereastra glisantă (în secunde) în care erorile `400` sunt contorizate pentru atingerea pragului `OMNIROUTE_ROTATE_400_THRESHOLD`. | ### Planificatorul de încălzire Claude Încălzire bazată pe cron pentru conexiunile OAuth Anthropic care au această opțiune activată, astfel încât fereastra de limitare a ratei de 5 ore să fie deschisă printr-o cerere programată simplă, în loc de prima cerere reală (#8848). Planificatorul este dezactivat, cu excepția cazului în care `OMNIROUTE_WARMUP_ENABLED` are o valoare evaluată drept adevărată **și** conexiunea este marcată în `settings.claudeWarmup.connections`; o listă goală de conexiuni înseamnă că nu se efectuează nicio încălzire, chiar dacă variabila de mediu este activată. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------ | --------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_WARMUP_ENABLED` | _(nesetată → dezactivat)_ | `src/lib/warmupScheduler.ts` | Comutatorul principal pentru planificatorul de încălzire. Acceptă `1`/`true`/`yes`/`on` (fără a ține cont de majuscule și minuscule, după eliminarea spațiilor). Orice altă valoare sau absența valorii menține planificatorul dezactivat. | | `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Expresie cron cu cinci câmpuri pentru activarea periodică a încălzirii, evaluată în `America/Los_Angeles` (fusul orar de resetare al Anthropic), indiferent de ceasul gazdei. | | `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | Numărul de conexiuni încălzite în paralel la fiecare activare. Limitat la intervalul `1`-`10`; pentru o valoare nenumerică se revine la `3`. | | `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | Modelul utilizat pentru cererea de încălzire. Suprascrieți valoarea numai dacă modelul implicit nu este disponibil în planul dvs.; alegeți cel mai ieftin model care poate totuși deschide fereastra. | ### Sesiuni VNC pentru autentificarea în browser și aliasul directorului de date Chromium+VNC containerizat, utilizat pentru capturarea interactivă a acreditărilor de autentificare în browser (`/api/vnc-session`), plus un alias `DATA_DIR` vechi. Toate sunt opționale — valorile implicite VNC vizează imaginea inclusă `omniroute-vnc-chromium:local` și sunt suprascrise numai pentru o imagine de container personalizată, porturi personalizate sau ajustarea ciclului de viață. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Eticheta imaginii Docker pentru containerul de autentificare Chromium+VNC. Construiți `docker/vnc-browser/chromium` sau indicați aici o imagine personalizată. | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Binarul mediului de execuție pentru containere utilizat la lansarea containerului VNC (de exemplu, setați-l la `podman`). | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | Portul VNC/noVNC expus în interiorul containerului. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Portul Chrome DevTools Protocol din interiorul containerului. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Calea directorului profilului Chromium din interiorul containerului. | | `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | Directorul gazdei care conține profilurile persistente pentru autentificarea în browser. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 min) | `src/lib/vncSession/manifest.ts` | Perioada de inactivitate (ms) după care o sesiune VNC inactivă este eliminată. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 min) | `src/lib/vncSession/manifest.ts` | Limita strictă (ms) a duratei unei singure sesiuni VNC. | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Numărul maxim de sesiuni VNC simultane. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Perioada de așteptare (ms) până când browserul containerizat devine pregătit pentru CDP. | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Perioada de așteptare (ms) pentru colectarea sesiunii/cookie-urilor capturate după finalizarea autentificării. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | Opțiuni suplimentare pentru linia de comandă transmise instanței Chromium containerizate. | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Rețeaua Docker dedicată la care se conectează containerul de autentificare VNC (#12571), în locul punții implicite, astfel încât containerele înrudite să nu poată accesa portul punții CDP. | | `VIBEPROXY_DATA_DIR` | _(nesetată)_ | `open-sse/services/notionThreadSessions.ts` | **Alias vechi** pentru `DATA_DIR`, verificat numai după ce atât `DATA_DIR`, cât și `OMNIROUTE_DATA_DIR` sunt nesetate. Localizează memoria cache a sesiunilor firelor web Notion (`/notion-web-thread-sessions.json`). | --- ## 26. Infrastructura de testare și E2E Utilizată de `scripts/dev/run-next-playwright.mjs`, `scripts/dev/smoke-electron-packaged.mjs`, `scripts/dev/run-ecosystem-tests.mjs` și `scripts/build/uninstall.mjs`. Lăsați toate valorile de mai jos nesetate în implementările de producție. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | -------------------------------------- | ------------------------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | Modul de inițializare E2E (`auth`, `fresh`, `reuse`) pentru executorul Playwright. | | `OMNIROUTE_E2E_PASSWORD` | revine la `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Parola de administrator injectată în mediul Playwright. | | `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Dezactivează interogarea periodică locală de verificare a stării în timpul rulărilor Playwright. | | `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Dezactivează bucla de verificare a stării tokenurilor OAuth în timpul testelor. | | `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(nesetată)_ | `src/lib/tokenHealthCheck.ts` | Furnizori separați prin virgulă, excluși din procesul proactiv de reîmprospătare a tokenurilor (de ex. `codex,openai`). Alternativă țintită la dezactivarea completă a verificării stării — furnizorii cu TTL scurt continuă să fie reîmprospătați, în timp ce furnizorii în cascadă rămân exclusiv reactivi. | | `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Suprimă mesajele inutile de verificare a stării din ieșirea standard Playwright. | | `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Omite compilarea de producție Next.js înainte de pornirea Playwright (optimizare CI). | | `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Omite hook-ul de dezinstalare OmniRoute (utilizat de CI pentru a păstra intact directorul `node_modules`). | | `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | Timpul de așteptare (ms) până când serverul devine operațional, înainte de rularea testelor de ecosistem/protocol. | | `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | Adresa URL la care infrastructura de testare rapidă Electron se așteaptă ca aplicația împachetată să fie disponibilă. | | `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Timpul total de expirare (ms) înainte ca infrastructura de testare rapidă să renunțe. | | `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | Intervalul de stabilizare (ms) după încărcarea paginii. | | `ELECTRON_SMOKE_APP_EXECUTABLE` | _(automat)_ | `scripts/dev/smoke-electron-packaged.mjs` | Calea explicită către executabilul Electron împachetat. | | `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | Directorul de date pentru rularea testului rapid Electron. | | `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Setați la `1` pentru a păstra directorul de date pentru testul smoke după rulare. | | `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Setați la `1` pentru a transmite în flux jurnalele Electron către stdout în timpul rulării. | | `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: relansează folosind același director de date și verifică dacă a doua lansare selectează driverul SQLite nativ. | | `CLI_DEVIN_BIN` | _(căutare în PATH)_ | `open-sse/executors/devin-cli.ts` | Suprascrie calea către binarul CLI Devin. | ### Fluxul de traducere a documentației Utilizat de `scripts/i18n/run-translation.mjs` (comanda `npm run i18n:run`). Toate cele cinci variabile sunt nesetate în mod implicit — setați-le în `.env` numai pe mașinile care ar trebui să poată rula instrumentul de traducere a documentației. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------------------- | ----------------- | ---------------------------------- | ------------------------------------------------------------------------------------- | | `OMNIROUTE_TRANSLATION_API_URL` | _(nesetată)_ | `scripts/i18n/run-translation.mjs` | URL-ul de bază compatibil cu OpenAI pentru backendul de traducere. | | `OMNIROUTE_TRANSLATION_API_KEY` | _(nesetată)_ | `scripts/i18n/run-translation.mjs` | Token Bearer pentru backendul de traducere (nu este înregistrat niciodată în jurnal). | | `OMNIROUTE_TRANSLATION_MODEL` | _(nesetată)_ | `scripts/i18n/run-translation.mjs` | ID-ul modelului, de exemplu `gpt-4o-mini` sau `cx/gpt-5.4-mini`. | | `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Timpul de expirare pentru fiecare solicitare, în milisecunde. | | `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Solicitări de traducere paralele la procesarea mai multor fișiere / localizări. | --- ## 27. Flux Radar (auto-găzduire) Supliment opțional controlat de indicatorul de funcționalitate RADAR_ENABLED (dezactivat în mod implicit — un indicator de funcționalitate comutat prin Setări/DB, nu o variabilă de mediu; consultați [docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)). Primele patru variabile de mai jos sunt suprascrieri opționale pentru un flux auto-găzduit sau derivat și pentru fluxurile cheilor de susținător. A cincea, `RADAR_ADMIN_URL`, este un link separat, fără valoare implicită, către panoul privat de operațiuni al proprietarului. Consultați [docs/frameworks/RADAR.md](../frameworks/RADAR.md) pentru documentația completă a modulului și [secvența completă de activare și configurare ghidată](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup). Cititorul generic de anunțuri Acasă/Jurnal de modificări nu este configurat printr-o variabilă de mediu și nu depinde de indicatorul de funcționalitate RADAR_ENABLED. Acesta citește prin GET doar URL-ul public `news.json` al depozitului, declarat în `src/shared/utils/releaseNotes.ts`; ID-urile elementelor respinse rămân în spațiul de stocare local al browserului. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | URL de bază comun pentru fluxurile semnate separat de catalog, recomandări, oferte pentru susținători și Intel. Suprascrieți-l pentru a indica un serviciu auto-găzduit sau derivat. | | `RADAR_FEED_PUBKEY` | _(cheie implicită fixată)_ | `src/lib/radar/pinnedKeys.ts` | Cheie publică Ed25519 (SPKI DER codificată în base64 sau PEM), utilizată pentru verificarea semnăturilor fluxului provenite de la un flux personalizat. | | `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | URL deschis de butonul „Sunt contribuitor” din tabloul de bord (flux GitHub OAuth pentru revendicarea cheii de susținător). | | `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | URL deschis de butonul „Susține proiectul” din tabloul de bord (pagina de plată/planuri). | | `RADAR_ADMIN_URL` | _(nesetat)_ | `src/lib/radar/links.ts` | Link privat către panoul de operațiuni, destinat exclusiv proprietarului. HTTPS este obligatoriu, cu excepția unei redirecționări SSH loopback prin HTTP; valorile nesetate sau nevalide nu creează niciun element de navigare. | --- ## Audit: variabile eliminate / neutilizate Următoarele variabile apăreau în versiunile anterioare ale `.env.example`, dar **nu au referințe în timpul rulării** în baza de cod actuală. Acestea au fost eliminate: | Variabilă | Motiv | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `STORAGE_DRIVER=sqlite` | Nu este citită de niciun fișier sursă. SQLite este singurul driver acceptat — nu este necesară nicio selecție. | | `INSTANCE_NAME=omniroute` | Este prezentă în documentația veche/șabloanele env, dar nu este utilizată la rulare. Poate reveni într-o funcționalitate viitoare pentru instanțe multiple. | | `SQLITE_MAX_SIZE_MB=2048` | Nu este referențiată în codul sursă. Dimensiunea bazei de date nu este limitată artificial. | | `SQLITE_CLEAN_LEGACY_FILES=true` | Nu este referențiată în codul sursă. Curățarea fișierelor vechi a fost probabil eliminată. | | `CLI_ROO_BIN` | Nu este înregistrată în `src/shared/services/cliRuntime.ts`. | | `CLI_KIMI_CODING_BIN` | Nu este înregistrată în `src/shared/services/cliRuntime.ts` (Kimi Coding utilizează OAuth, nu un executabil CLI). | | `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | Nu sunt referențiate nicăieri în codul sursă. | | `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` | Eliminate în v3.8.0. La rulare, aceste variabile env nu mai sunt citite — acreditările provin din Dashboard / `data/provider-credentials.json` / BD criptată. | | `CURSOR_PROTOBUF_DEBUG` | Eliminată în v3.8.0. Executorul Cursor utilizează `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (consultați §22). | | `CLI_COMPAT_KIRO` | Eliminată în v3.8.0. Kiro se află în `CLI_COMPAT_OMITTED_PROVIDER_IDS` — comutatorul său nu are niciun efect. | | `QIANFAN_API_KEY` | Eliminată în v3.8.0 împreună cu alte substituenți neutilizați pentru cheile API ale furnizorilor. | ### Corectări ale valorilor implicite | Variabilă | Valoare veche din `.env.example` | Valoare implicită reală în cod | Remediere | | ------------------------- | -------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------- | | `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Valoarea înșelătoare a fost eliminată; `7` este documentată drept valoare implicită | | `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Valoarea înșelătoare a fost eliminată; `7` este documentată drept valoare implicită | ### Regenerarea configurației OpenCode (instrument ad-hoc) Utilizat de `scripts/ad-hoc/regen-opencode-config.ts` pentru a regenera un fișier `opencode.json` cu valori exacte pentru `limit.context` și `limit.output`, preluate din instanța OmniRoute aflată în execuție. Niciuna dintre acestea nu este necesară pentru funcționarea normală — scriptul este doar un instrument pentru dezvoltatori. | Variabilă | Implicit | Fișier sursă | Descriere | | ------------------ | ------------------------ | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | URL-ul de bază al instanței OmniRoute care va fi interogată pentru `/v1/models`. | | `OMNIROUTE_KEY` | _(nesetată)_ | `scripts/ad-hoc/regen-opencode-config.ts` | Cheie API pentru autentificarea la punctul final OmniRoute `/v1/models`. Dacă nu este setată, se utilizează `OPENCODE_API_KEY`. | | `OPENCODE_API_KEY` | _(nesetată)_ | `scripts/ad-hoc/regen-opencode-config.ts` | Cheie API în stil OpenCode (`sk-...`) scrisă în fișierul `opencode.json` regenerat. Dacă nu este setată, se utilizează `OMNIROUTE_KEY`. | ### Instrument ad-hoc pentru evaluarea offline a compresiei Utilizat de `scripts/compression-eval/index.ts`, interfața CLI pentru evaluarea offline a compresiei. Nu este necesar pentru funcționarea normală — este destinat exclusiv dezvoltatorilor. | Variabilă | Implicit | Fișier sursă | Descriere | | ---------------------------- | ---------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (gol) | `scripts/compression-eval/index.ts` | Date de autentificare JSON furnizate de operator pentru furnizorul testat de interfața CLI de evaluare offline a compresiei (analizate cu `JSON.parse`). Lăsați nesetată pentru o rulare de test. | ### Sesiuni de browser VNC Utilizate de `src/lib/vncSession/manifest.ts` pentru configurarea sesiunilor Chromium fără interfață grafică, bazate pe Docker, pentru furnizorii de automatizare a browserului. Toate sunt opționale — valorile implicite sunt prezentate mai jos. | Variabilă | Implicit | Fișier sursă | Descriere | | ------------------------------------- | ------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------- | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Calea către binarul Docker utilizat pentru pornirea containerelor VNC. | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Imaginea Docker pentru containerul VNC Chromium. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(opțiuni încorporate)_ | `src/lib/vncSession/manifest.ts` | Argumente CLI Chromium suplimentare transmise browserului din interiorul containerului. | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | Portul VNC din interiorul containerului. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Portul Chrome DevTools Protocol din interiorul containerului. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Directorul de profil din interiorul containerului. | | `OMNIROUTE_VNC_PROFILE_DIR` | _(nesetată)_ | `src/lib/vncSession/manifest.ts` | Directorul de pe gazdă pentru profilurile persistente ale browserului. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | Durata de inactivitate (ms) după care o sesiune VNC este colectată. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | Durata maximă a sesiunii (ms). | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Numărul maxim de sesiuni VNC simultane. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Limita de timp pentru pregătirea browserului (ms). | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Limita de timp pentru colectare/curățare (ms). | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Rețeaua Docker dedicată la care se conectează containerul (#12571), separată de puntea implicită. | | `VIBEPROXY_DATA_DIR` | _(nesetată)_ | `open-sse/services/notionThreadSessions.ts` | Directorul pentru persistența sesiunilor de fire de discuție Notion. | ### Autentificarea serviciilor interne | Variabilă | Implicit | Descriere | | --------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | Token în linie pentru autentificarea între servicii în planul de administrare. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | Calea către un fișier care conține tokenul serviciului intern (preferată în containere; suprascrie variabila în linie). | ### Statistici despre furnizorii OpenRouter | Variabilă | Implicit | Descriere | | ----------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | Setați la `false` pentru a omite preluarea statisticilor OpenRouter pentru fiecare furnizor, utilizate la îmbogățirea catalogului. | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | Durata de viață a datelor din cache (ms) pentru statisticile preluate despre furnizorii OpenRouter. | ### Asocierea Redis încorporată | Variabilă | Valoare implicită | Descriere | | --------------------------- | ----------------- | ------------------------------------------------------------------------------------------ | | `REDIS_BIND_HOST` | `127.0.0.1` | Adresa de asociere pentru serviciul Redis încorporat. | | `REDIS_PORT` | `6379` | Portul pentru serviciul Redis încorporat. | | `OMNIROUTE_REDIS_BIND_HOST` | – | Suprascriere specifică OmniRoute pentru adresa de asociere a serviciului Redis încorporat. | --- ## 24. Adăugiri în versiunea v3.8.50 Aceste setări au fost introduse după instantaneul anterior al contractului de mediu. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Timpul maxim de așteptare pentru un slot de admitere a conversațiilor cu consum ridicat de resurse înainte de returnarea unui răspuns `503` care permite reîncercarea; o așteptare scurtă și limitată serializează vârfurile de solicitări ale agenților în loc să returneze instantaneu un răspuns `503`. Valoarea `0` restabilește respingerea imediată. | | `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Bugetul în octeți pentru coada de așteptare a admiterii: limitează numărul total de octeți ai corpurilor stocate în buffer și menținute la nivelul întregului proces, astfel încât așteptarea să nu amplifice utilizarea heap-ului (#4380). Solicitările care depășesc bugetul primesc imediat un răspuns `503` care permite reîncercarea. | | `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | Opțiune învechită fără efect începând cu #10110: benzile de admitere per sesiune au fost eliminate în favoarea unui singur buget la nivelul întregului proces. Acceptată pentru compatibilitatea configurării; ignorată. | | `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Opțiune învechită fără efect începând cu #10110: benzile de admitere per sesiune au fost eliminate în favoarea unui singur buget la nivelul întregului proces. Acceptată pentru compatibilitatea configurării; ignorată. | | `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (dezactivat) | `open-sse/services/admission/runtime.ts` | Benzi virtuale adaptive de admitere în timpul rulării (#9654): comutator principal pentru poarta adaptivă per entitate găzduită (sistemul 2). Este diferită de variabilele învechite pentru benzile per conexiune de mai sus (TTL_MS / MAX_SESSIONS, fără efect începând cu #10110). Indicator de funcționalitate cu același nume în panoul de control; variabila de mediu are prioritate față de suprascrierea din panoul de control; necesită repornire. | | `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | Limitează durata în care un apel de rulare imediată așteaptă finalizarea unei sarcini în curs înainte de a porni rularea aflată în coadă. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | activat | `open-sse/services/adobeFireflySession.ts` | Menține actualizate starea IMS și starea de risc a browserului prin sesiuni Chrome CDP limitate la nivel de cont; setați `0` pentru dezactivare. | | `ADOBE_FIREFLY_SESSION_DISK` | activat | `open-sse/services/adobeFireflySession.ts` | Păstrează sesiunile Adobe reparate în `DATA_DIR`; setați `0` pentru stocarea exclusiv în memorie. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Intervalul minim dintre trimiterile solicitărilor de generare către Adobe Firefly. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Perioadă suplimentară de inactivitate după fiecare a treia trimitere reușită către Adobe. | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Mod complet fără interfață, destinat exclusiv depanării; Adobe colligo respinge de regulă sesiunea de risc rezultată. | | `CHROME_PATH` | detectare automată | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Executabil Chrome absolut opțional, utilizat de executanții controlați prin browser atunci când detectarea automată a platformei este insuficientă. | | `TELEGRAM_BOT_TOKEN` | _(nesetat)_ | `src/lib/telegram/config.ts` | Token BotFather care activează webhook-ul de intrare și semnează `initData` pentru Mini App. | | `TELEGRAM_WEBHOOK_SECRET` | _(nesetat)_ | `src/lib/telegram/config.ts` | Secret partajat înregistrat prin `setWebhook` și verificat în raport cu antetul `X-Telegram-Bot-Api-Secret-Token` la fiecare livrare webhook. Este obligatoriu pentru ruta webhook; dacă nu este setat, livrările webhook sunt refuzate cu 503. | | `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Modelul utilizat pentru răspunsurile conversațiilor Telegram. | | `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Suprascrierea adresei URL de bază pentru Bot API, destinată proxy-urilor sau serverelor Bot API găzduite local. | | `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Timpul de expirare în milisecunde pentru apelurile Bot API de ieșire. | | `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (activat) | `scripts/build/optionalPackStaging.mjs` | Setați `0` pentru a omite generarea arhivelor `.tar.gz` în timpul pregătirii pachetelor opționale ML/browser pentru arborele Electron autonom (directoarele pachetelor și `optional-packs.index.json` sunt generate în continuare). Utilizată de fluxul de lucru pentru lansarea versiunii desktop pentru a reduce dimensiunea artefactelor încărcate. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Activează înregistrarea rutelor de imagini pentru abonamentul xAI; este dezactivată implicit, astfel încât ruta pentru imagini bazată pe cheia API să rămână neschimbată. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Perioada de așteptare per cheie, în milisecunde, atunci când un răspuns `429` nu conține un indiciu `Retry-After` utilizabil. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | activat | `open-sse/services/estimatorCalibration.ts` | Setați la `off`, `0` sau `false` pentru a dezactiva înregistrarea și aplicarea în memorie a calibrării estimatorului. | | `NEXT_MANUAL_SIG_HANDLE` | _(intern)_ | `scripts/dev/standalone-server-ws.mjs` | Suprascriere internă a gestionarului de semnale al serverului autonom; în mod normal este setată și eliminată de lansator, nu configurată de operatori. | ### ChatGPT Web (Codex) Valori implicite globale pentru browserul fără interfață și tunelul de instrumente de ieșire. Valorile conexiunii setate în panoul de control au prioritate. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CHATGPT_WEB_CODEX_CHROME_PATH` | _(detectare automată)_ | `open-sse/executors/chatgpt-web-codex.ts` | Cale explicită către Chrome/Chromium pentru rularea prin npm, systemd și PM2. | | `CHROME_PATH` | _(detectare automată)_ | `open-sse/executors/chatgpt-web-codex.ts` | Valoare de rezervă comună pentru o cale explicită către Chrome/Chromium. | | `CHATGPT_WEB_CODEX_CDP_URL` | _(nesetată)_ | `open-sse/executors/chatgpt-web-codex.ts` | Endpoint CDP intern; Docker utilizează sidecar-ul de pe portul `9223`. | | `CDP_PROXY_TOKEN` | _(nesetată)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Dacă este setată, fiecare solicitare către sidecar-ul proxy CDP trebuie să includă această valoare în antetul `X-Omni-Cdp-Token` (#13679). Fără o valoare, proxy-ul redirecționează fără autentificare — în acest caz, protecția este asigurată doar de izolarea rețelei Compose `chatgpt-web-codex-net`. Generați cu `openssl rand -hex 32`. | | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(nesetată)_ | `open-sse/executors/chatgpt-web-codex.ts` | ID global al tunelului OpenAI pentru rundele locale ale instrumentului Codex. | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(nesetată)_ | `open-sse/executors/chatgpt-web-codex.ts` | Cheie runtime globală a tunelului; nu o afișați niciodată în jurnale. | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | Numele exact al conectorului personalizat ChatGPT nou creat pentru puntea MCP. | | `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | Director dedicat pentru starea browserului, brokerului și tunelului. | | `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | La valoarea `1`, sunt capturate imagini de diagnosticare ale browserului la fiecare punct de control. | | `CODEX_CHATGPT_WEB_LAUNCHER` | _(nesetată)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Cale absolută opțională către un binar launcher persistent. | | `CODEX_CHATGPT_WEB_BUN` | _(detectare automată)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Cale absolută opțională către binarul runtime Bun. | | `CODEX_WEB_GPT_BUN` | _(nesetată)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Valoare de rezervă moștenită pentru `CODEX_CHATGPT_WEB_BUN`; configurările noi utilizează numele canonic. | --- ## Punte OmniConductor Consumator SSE de lungă durată care oglindește sarcinile hubului OmniConductor în A2A TaskManager local (`src/lib/conductor/`). Funcționalitate opțională — puntea pornește numai când este setată variabila `CONDUCTOR_HUB_URL`. Exclusiv pe server: tokenul hubului nu trebuie să ajungă niciodată în browser. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ------------------------------ | ----------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | `CONDUCTOR_HUB_URL` | _(gol)_ | `src/lib/conductor/boot.ts` | URL-ul de bază al hubului OmniConductor (de ex. `http://127.0.0.1:7910`). Nesetat = punte dezactivată. | | `CONDUCTOR_HUB_TOKEN` | _(gol)_ | `src/lib/conductor/boot.ts` | Credențialele hubului pentru fluxul SSE — emiteți în hub un peer de tip `spokesperson` (`POST /v1/peers`, administrare). | | `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(gol)_ | `src/lib/conductor/hubProxy.ts` | Credențiale pentru delegarea sarcinilor primite din A2A către hub (`POST /v1/tasks`); dacă nu sunt setate, se utilizează `CONDUCTOR_HUB_TOKEN`. | | `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | URL-ul de bază al serviciului spokesperson (Faro) din spatele proxy-ului de chat al tabloului de bord (`/api/conductor/ask`). | ### Planificare care ține cont de cotă Utilizată de `open-sse/services/combo.ts` și `src/lib/quota/quotaScheduler.ts` pentru verificarea bugetului de tokenuri înaintea solicitării. Funcționalitate opțională — comportamentul implicit de rutare rămâne neschimbat când variabila nu este setată. | Variabilă | Valoare implicită | Fișier sursă | Descriere | | ---------------------------------- | ----------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Când este `1`, omite conexiunile al căror buget de tokenuri per interval (`rateLimitOverrides.tpm`, tabelul `provider_quota_state`) nu poate acoperi costul estimat al solicitării înainte de trimitere. Permite operațiunea în cazul în care nu este configurat niciun buget. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(activată)_ | `open-sse/services/estimatorCalibration.ts` | Calibrarea prin feedback a estimatorului de tokenuri pentru protecția contextului (#14931): EMA per (furnizor, model, instrumente prezente) pentru raportul dintre `usage.prompt_tokens` și estimare, limitat la intervalul 0,15–2,0, exclusiv în memorie. `off`, `0` sau `false` dezactivează înregistrarea și aplicarea. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Înregistrează rutele de imagini `xai-oauth` (`xao`) și `grok-cli`. Indicator de funcționalitate pentru tabloul de bord cu același nume; o suprascriere din baza de date are prioritate față de această valoare. |