# Environment Variables Reference (Filipino) 🌐 **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) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [sr](../../../sr/docs/reference/ENVIRONMENT.md) · 🇸🇪 [sv](../../../sv/docs/reference/ENVIRONMENT.md) · 🇰🇪 [sw](../../../sw/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ta](../../../ta/docs/reference/ENVIRONMENT.md) · 🇮🇳 [te](../../../te/docs/reference/ENVIRONMENT.md) · 🇹🇭 [th](../../../th/docs/reference/ENVIRONMENT.md) · 🇹🇷 [tr](../../../tr/docs/reference/ENVIRONMENT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/ENVIRONMENT.md) · 🇵🇰 [ur](../../../ur/docs/reference/ENVIRONMENT.md) · 🇺🇿 [uz](../../../uz/docs/reference/ENVIRONMENT.md) · 🇻🇳 [vi](../../../vi/docs/reference/ENVIRONMENT.md) · 🇳🇬 [yo](../../../yo/docs/reference/ENVIRONMENT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/ENVIRONMENT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/ENVIRONMENT.md) --- > Kumpletong sanggunian para sa bawat environment variable na kinikilala ng OmniRoute. > Para sa template ng mabilisang pagsisimula, tingnan ang [`.env.example`](../../.env.example). > [!IMPORTANT] > Ang bawat variable na nakadokumento rito ay dapat ding lumitaw sa `.env.example`, at > ang bawat variable sa `.env.example` ay dapat lumitaw rito. Ipinapatupad ito ng `npm run check:env-doc-sync` > sa commit at sa CI. Upang sadyang hindi isama ang isang variable, idagdag ito sa > allowlist sa loob ng `scripts/check/check-env-doc-sync.mjs`. --- ## Talaan ng mga Nilalaman - [1. Mga Kinakailangang Lihim](#1-required-secrets) - [2. Storage at Database](#2-storage--database) - [3. Network at mga Port](#3-network--ports) - [4. Seguridad at Authentication](#4-security--authentication) - [5. Sanitization ng Input at Proteksyon ng PII](#5-input-sanitization--pii-protection) - [6. Mga Patakaran sa Tool at Routing](#6-tool--routing-policies) - [7. Mga URL at Cloud Sync](#7-urls--cloud-sync) - [8. Outbound Proxy](#8-outbound-proxy) - [9. Integrasyon ng CLI Tool](#9-cli-tool-integration) - [10. Mga Integrasyon ng Internal Agent at MCP](#10-internal-agent--mcp-integrations) - [11. Mga Kredensyal ng OAuth Provider](#11-oauth-provider-credentials) - [12. Mga Override sa User-Agent ng Provider](#12-provider-user-agent-overrides) - [13. Compatibility ng CLI Fingerprint](#13-cli-fingerprint-compatibility) - [14. Mga Provider ng API Key](#14-api-key-providers) - [15. Mga Setting ng Timeout](#15-timeout-settings) - [16. Pag-log](#16-logging) - [17. Pag-optimize ng Memory](#17-memory-optimization) - [18. Pag-sync ng Presyo](#18-pricing-sync) - [19. Pag-sync ng Modelo (Dev)](#19-model-sync-dev) - [20. Mga Setting na Partikular sa Provider](#20-provider-specific-settings) - [21. Kalagayan ng Proxy](#21-proxy-health) - [22. Pag-debug](#22-debugging) - [23. Integrasyon ng GitHub](#23-github-integration) - [24. Skills Sandbox (v3.8.0+)](#24-skills-sandbox-v380) - [27. Radar Feed (Self-Hosting)](#27-radar-feed-self-hosting) - [Mga Sitwasyon ng Deployment](#deployment-scenarios) - [Audit: Mga Inalis / Hindi na Ginagamit na Variable](#audit-removed--dead-variables) --- ## 1. Mga Kinakailangang Secret Ang mga hindi nakatakda na secret na minarkahang **Oo** ay awtomatikong nabubuo sa unang pagpapatakbo (`JWT_SECRET`, `API_KEY_SECRET`) at iniipon sa `server.env` sa data directory — itakda ang mga ito nang tahasan kapag ephemeral ang directory na iyon. Ang eksepsyon ay ang `OMNIROUTE_WS_BRIDGE_SECRET`: hindi ito iniipon sa `server.env` — gumagawa ang mga server entrypoint ng ephemeral na value kada boot na magagamit lamang ng in-process bridge, kaya kailangang itakda ito nang tahasan ng mga external bridge client. | Variable | Kinakailangan | Default | Source File | Paglalarawan | | ---------------------------- | ------------------- | ---------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `JWT_SECRET` | **Oo** | _(wala)_ | `src/lib/auth` | Lumalagda/nagbe-verify sa lahat ng dashboard session cookie (JWT). Bumuo gamit ang `openssl rand -base64 48`. | | `API_KEY_SECRET` | **Oo** | _(wala)_ | `src/lib/db/apiKeys.ts` | AES encryption key para sa mga value ng API key na nakaimbak sa SQLite. Bumuo gamit ang `openssl rand -hex 32`. | | `INITIAL_PASSWORD` | Hindi | _(hindi nakatakda)_ | `src/lib/auth/managementPassword.ts` | Itinatakda ang password ng dashboard sa pag-startup habang wala pang naka-save; hindi na ito pinapansin kapag may naka-save nang password. Kinokopya ng mga npm at source install ang `.env.example` patungo sa `.env`, kaya nagsisimula ang mga ito gamit ang pampublikong kilalang placeholder nito na `CHANGEME`: palitan ito bago ang unang boot, o itakda ang `INITIAL_PASSWORD=` (walang laman) sa `.env` na iyon upang likhain ang password sa onboarding wizard sa unang pagbisita, gaya ng ginagawa ng hindi nakatakda na value (ang default ng Docker image). Baguhin ang naka-save na password sa Dashboard → Settings → Security, o patakbuhin ang `omniroute reset-password` (`node bin/reset-password.mjs` sa source checkout) gamit ang `DATA_DIR` na nakatakda sa data directory ng server. | | `OMNIROUTE_WS_BRIDGE_SECRET` | **Oo** (production) | _(hindi nakatakda)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Shared secret para sa internal na Codex Responses WebSocket bridge. Ina-authenticate nito ang mga bridge request sa pagitan ng Electron/browser WS relay at OmniRoute. ⚠️ **KINAKAILANGAN sa production — kapag hindi nakatakda, tinatanggihan ang lahat ng WS bridge request.** Bumuo gamit ang `openssl rand -base64 32`. | | `OMNIROUTE_SW_BUILD_ID` | Hindi | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Tahasang service-worker cache-busting id para sa PWA shell (#11779); una sa resolution chain. | | `SOURCE_VERSION` | Hindi | _(hindi nakatakda)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Pangalawa sa chain — itinatakda ng mga PaaS builder (hal. Heroku-style) bilang na-deploy na commit. | | `NEXT_PUBLIC_SW_BUILD_ID` | Hindi | _(hinango)_ | `src/shared/components/PwaRegister.tsx` | Public value sa build time na ginagamit ng client upang i-register ang `/sw.js?v=…`; hinango mula sa dalawang nasa itaas, pagkatapos ay sa git SHA. | | `OMNIROUTE_PEER_STAMP_TOKEN` | Hindi (awtomatiko) | _(awtomatiko sa bawat boot)_ | `src/server/authz/policies/management.ts` | Secret sa bawat process na nagpapatunay na nagmula ang pinagkakatiwalaang peer-IP stamp sa sariling HTTP server ng OmniRoute (`scripts/dev/peer-stamp.mjs`). Pinagkakatiwalaan lamang ng authz middleware ang locality ng request (loopback/LAN gating ng mga LOCAL_ONLY route) kapag taglay ng stamp ang token na ito. Awtomatikong binubuo sa bawat boot — iwang hindi nakatakda; i-pin lamang ito para sa mga multi-process setup na kailangang magbahagi ng stamp. | | `OMNIROUTE_TRUSTED_PROXIES` | Hindi | _(hindi nakatakda)_ | `scripts/dev/peer-stamp.mjs` | Mga IP o CIDR range ng reverse proxy na pinaghihiwalay ng kuwit at maaaring pagkatiwalaan ng IP allow/deny list para sa `X-Forwarded-For` / `X-Real-IP`, bukod pa sa loopback, mga private-network address, at Cloudflare edge, na palaging pinagkakatiwalaan. Kailangan lamang para sa proxy na nasa iba pang public address; kung hindi, ang sariling address ng proxy ang sinusuri ng filter. | ### Mga Command sa Pagbuo ```bash # Buuin nang sabay-sabay ang lahat ng apat na secret: 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] > Huwag kailanman i-commit sa version control ang mga `.env` file na may tunay na mga secret. Hindi na isinasama ng `.gitignore` ang `.env`, ngunit tiyakin ito bago mag-push. --- ## 2. Storage at Database Gumagamit ang OmniRoute ng **SQLite** (sa pamamagitan ng `better-sqlite3`) para sa lahat ng persistent na storage. Kinokontrol ng mga variable na ito ang lokasyon, encryption, at lifecycle ng data. | Variable | Default | Source File | Paglalarawan | | ------------------------------------------ | --------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Root directory para sa SQLite DB, mga backup, at mga data file. I-override para sa mga Docker volume o custom na path. | | `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(hindi nakatakda)_ | `src/lib/dataPaths.ts` | Escape hatch para sa test/eval DATA_DIR guard (#10428). Ang mga test at Node eval/print probe (`-e`/`--eval`/`-p`/`--print`, kabilang ang mga anyong `--eval=`/`--print=`) na walang `DATA_DIR` ay nire-redirect sa isang pansamantalang directory na maaaring itapon upang hindi nila mabuksan ang tunay na database ng operator; itakda sa `1` upang muling gumamit ng tunay na directory. | | `OMNIROUTE_BUILD_SHA` | _(hindi nakatakda)_ | `src/lib/monitoring/buildSha.ts` | Git SHA ng tumatakbong artifact. Itinatatak ng `npm run build:release`; maaaring i-inject sa mga container na ipinapadala nang walang sentinel na `dist/BUILD_SHA`. Inilalantad bilang `system.buildSha` sa `/api/monitoring/health`. | | `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Ref na ginagamit ng provenance gate ng pack-artifact upang suriin ang build SHA (#10427). | | `OMNIROUTE_ALLOW_CANARY_BUILD` | _(hindi nakatakda)_ | `scripts/build/buildProvenance.ts` | Itakda sa `1` upang payagang i-pack ang isang build na ang SHA ay wala sa release line, at itala ito bilang sinadyang canary sa halip na ibagsak ang gate (#10427). | | `OMNIROUTE_SMOKE_API_KEY` | _(hindi nakatakda)_ | `scripts/ops/deploy-canary.mjs` | API key para sa smoke probe ng canary deployment, na ipinapadala bilang `Authorization: Bearer` sa `/v1/chat/completions`. Ginagamit lamang ng deployment script (#10429), at hindi kailanman ng server. Hindi ito nauugnay sa mga variable na `OMNIROUTE_SMOKE_*` ng opt-in na CLI smoke harness (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` sa `tests/integration/upstream-cli-smoke.int.test.ts`) — tingnan ang [Mga Integrasyon ng CLI → Tunay na smoke sweep](../guides/CLI-INTEGRATIONS.md). | | `OMNIROUTE_BUILDING` | _(hindi nakatakda)_ | `src/lib/buildPhase.ts` | Signal ng build phase (#10060): itinatakda sa `1` ng `scripts/build/build-next-isolated.mjs` at namamana ng bawat inilulunsad na build worker upang magbalik ang DB layer ng no-op stub sa halip na i-load ang native na better-sqlite3 addon (na nagpapa-abort sa worker kapag nag-exit). Hindi kailanman itinatakda para sa tumatakbong server. | | `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Itakda sa `1` upang laktawan ang opsyonal na prebuild check ng native dependency para sa mga hindi karaniwang vendored tree. Hindi nito ginagawang buildable ang isang nawawalang dependency; gamitin lamang kapag ibinibigay ang mga native dependency sa labas ng karaniwang proseso. | | `OMNIROUTE_DATA_DIR` | _(hindi nakatakda)_ | `open-sse/executors/promptql/threadSticky.ts` | **Fallback alias** para sa `DATA_DIR`, na sinusuri lamang kapag hindi nakatakda ang `DATA_DIR`. Ginagamit upang hanapin ang on-disk na thread-sticky session cache ng PromptQL executor (`/promptql-thread-sessions.json`); kung walang nakatakda sa dalawang variable, mananatili lamang sa memory ang cache (hindi napapanatili sa mga pag-restart). | | `OMNIROUTE_PLUGINS_DIR` | _(hindi nakatakda)_ | `src/lib/plugins/scanner.ts` | Directory na binabasa ng **runtime plugin scanner** — at root kung saan nag-i-install ang plugin manager — na nag-o-override sa default na hinango mula sa home (#11827). Ituro ito sa bind-mounted na plugin tree sa Docker/K8s sa halip na ilipat ang HOME para lamang baguhin ang lokasyon ng scan path (pinamamahalaan din ng HOME ang lahat ng iba pang gawi na nauugnay sa home). Hindi nakatakda = `~/.omniroute/plugins`, o `/tmp/.omniroute/plugins` kapag walang home na ine-export ang proseso — ang tahimik na hindi pagtuklas na inaalis ng variable na ito. Isang beses na nilo-log sa startup ang na-resolve na directory bilang `scanner.dir_resolved`, kasama ang input na ginamit. Para lamang sa server side: pinananatili ng mga CLI command plugin ang sarili nilang `OMNIROUTE_PLUGIN_PATH` (seksyon 9). | | `STORAGE_ENCRYPTION_KEY` | _(walang laman = hindi pinagana)_ | `src/lib/db/encryption.ts` | AES key para sa buong pag-encrypt ng SQLite database habang nakaimbak. Bumuo gamit ang `openssl rand -hex 32`. | | `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | Label ng bersyon para sa encryption key. Dagdagan kapag nagsasagawa ng key rotation upang masuportahan ang pag-decrypt ng mga lumang backup. | | `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | Kapag `true`, nilalaktawan ang mga regular/bago-magsulat na backup ng SQLite file (pag-save/pag-clear ng presyo ng models.dev, pagsusulat ng mga setting). Patuloy pa ring gumagana ang mga manu-manong backup at backup bago ang pag-restore. **Hindi** nito dini-disable ang sapilitang persistent safety snapshot ng migration runner o ang mass-migration guard para sa umiiral na persistent DB. Nililimitahan ang mga hindi manu-manong backup sa hindi hihigit sa isang beses bawat 60 minuto. Maaaring hiwalay na i-disable sa **Settings → Storage** ng dashboard ang regular na auto-backup. | | `OMNIROUTE_CRYPT_KEY` | _(hindi nakatakda)_ | `src/lib/db/encryption.ts` | **Legacy alias** para sa `STORAGE_ENCRYPTION_KEY`. Tinatanggap bilang fallback kapag wala ang pangunahing variable. | | `OMNIROUTE_API_KEY_BASE64` | _(hindi nakatakda)_ | `src/lib/db/encryption.ts` | **Legacy alias** (anyo na naka-encode sa Base64) na tinatanggap bilang fallback. Awtomatikong dini-decode bago gamitin. | | `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(hindi nakatakda)_ | `src/lib/db/core.ts` | I-override ang pagitan ng pana-panahong SQLite healthcheck (ms). Kapag hindi nakatakda, kinukuha ang mga default mula sa `NODE_ENV`. | | `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(inalis)_ | `src/lib/db/walMaintenance.ts` | **Inalis.** Maaaring gawing invalid ng pana-panahong live na `wal_checkpoint(TRUNCATE)` ang shared wal-index mapping at mag-crash ang proseso gamit ang SIGBUS (#13973), kaya wala na ang scheduler. Walang epekto ang variable: nagla-log ang positibong value ng isang minsanang babala tungkol sa deprecation, samantalang nananatiling tahimik ang `0` o kapag hindi ito nakatakda. Pinananatili ang WAL sa pamamagitan ng mga PASSIVE checkpoint (sa ibaba) at tina-truncate ng shutdown checkpoint. | | `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5m) | `src/lib/db/walMaintenance.ts` | I-override ang pagitan (ms) ng madalas na `wal_checkpoint(PASSIVE)`. Pinananatiling maliit ang mga nakabinbing WAL frame upang manatiling mabilis ang mga checkpoint at manatiling limitado ang laki ng WAL file sa pagitan ng mga truncation sa shutdown. Dini-disable ito ng `0`. | | `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Kapag natukoy ng isang PASSIVE tick na lampas sa laki na ito ang WAL file, patakbuhin ang `wal_checkpoint(RESTART)` upang magsimulang muli ang WAL nang hindi muling isinusulat ang naka-map na wal-index. Inalis na ang mga live truncate-mode checkpoint (tingnan ang row na `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). | | `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Itakda sa `1`/`true`/`yes`/`on` upang ihinto ang proseso pagkatapos manatili ang kritikal na resource pressure sa loob ng `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, na nagbibigay-daan sa isang supervisor (systemd `Restart=always`, patakaran sa pag-restart ng Docker) na magpanumbalik ng malinis na proseso sa halip na maghatid ng mga 503 nang walang hanggan. | | `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2m) | `open-sse/utils/resourcePressure.ts` | Gaano katagal dapat manatili ang kritikal na pressure bago ma-trigger ang exit para sa self-restart. | | `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Itakda sa `1`/`true`/`yes`/`on` upang balewalain ang pang-buong-host na `/proc/pressure/memory` (`psi_some` / `psi_full`) kapag nagti-trigger ng mga 503 ang isang maingay na katabing proseso kahit maayos ang prosesong ito (#13124). Nananatiling naka-on ang mga guard ng cgroup at V8 heap. Hindi na rin ibinibilang ang PSI bilang patunay ng kernel throttle para sa `cgroup_high`: magiging kritikal lamang ang kabuuang cgroup na mas mataas sa `memory.high` kapag tumaas ang `high`/`max` sa `memory.events`. Kung walang `memory.events`, pananatilihin ang raw ratio. | | `OMNIROUTE_SQLJS_WASM_PATH` | _(awtomatikong tinutukoy)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Tiyak na path (absolute o relative sa cwd) patungo sa `sql-wasm.wasm` kapag ginagamit ang `sql.js` WASM fallback adapter. Awtomatikong tinutukoy sa pamamagitan ng mga package dependency at posibleng layout kapag hindi nakatakda. | | `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Bilang ng araw na pinananatili bago burahin ng awtomatikong cleanup sweep ang mga checkpoint, tinutukoy na input/output/error file, at row ng terminal (completed/failed/cancelled/expired) na Batch API job. Magkakabisa lamang kapag naka-on ang `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`; tumutugma ito sa sariling retention window ng OpenAI para sa output ng Batch API. Hindi nito naaapektuhan ang route na `DELETE /api/v1/batches/delete-completed` na pinapatakbo ng operator, na sadyang nananatiling walang kondisyon (walang filter ayon sa edad). | | `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Kapag `true`, pahintulutan ang awtomatikong cleanup sweep na burahin ang mga natapos nang Batch API job (at ang kanilang mga checkpoint) na lumampas sa `OMNIROUTE_BATCH_RETENTION_DAYS`, at i-clear ang BLOB content ng mga na-upload na file na lumampas sa kani-kanilang `expires_at`. Naka-off bilang default: pinapanatili ng bawat kasalukuyang installation ang data na ito gaya ng dati hanggang sa i-enable ito ng isang operator. Isa rin itong feature flag na nae-edit sa dashboard — tingnan ang `docs/reference/FEATURE_FLAGS.md` → Runtime. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Itakda sa `1` upang ganap na laktawan ang DB healthcheck sa startup. Kapaki-pakinabang para sa mga panandaliang task at integration test. | | `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Itakda sa `1` upang puwersahang i-enable ang DB healthcheck loop, kahit karaniwan itong lalaktawan (hal., mga panandaliang task). | | `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Itakda sa `1` upang laktawan ang pag-warm up ng native runtime habang isinasagawa ang `npm install`. Kapaki-pakinabang sa mga CI/headless installation kung saan naka-build na ang sqlite. | | `OMNIROUTE_MIGRATIONS_DIR` | _(awtomatikong tinutukoy)_ | `src/lib/db/migrationRunner.ts` | I-override ang directory na sini-scan ng migration runner. Kapaki-pakinabang kapag namamahagi ng mga naka-bundle na migration sa mga custom build. | | `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(hindi nakatakda)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Mga karagdagang migration directory bilang mga entry na `namespace=dir` na pinaghihiwalay ng path delimiter ng platform (hal. `ee=/opt/app/enterprise/db/migrations`). Ang mga file na makikita roon ay itinatala bilang `-`, kaya hindi kailanman magkakaroon ng salungatan sa mga upstream numeric slot ang isang distribution na may sarili nitong mga migration. Magdudulot ng error sa startup ang isang maling format na entry, invalid na namespace, o nawawalang directory sa halip na tahimik na laktawan ang schema. | | `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Safety threshold para sa maramihang pending migration (#3416). Ihihinto ang startup kung mas marami rito ang mga pending migration sa isang kasalukuyang DB (bilang proteksiyon laban sa naburang tracking table). Taasan ito upang mag-restore ng mas lumang backup; itakda sa `0` upang i-disable ang pagsusuri. | | `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Working directory para sa `check:install-upgrade` release gate. Nangangailangan ito ng humigit-kumulang 12 GB (dalawang ~3 GB na installation tree at ang tarball), kaya hindi ito dapat patakbuhin sa maliit na tmpfs — sa self-hosted runner, ang `/tmp` ay isang 12 GB RAM-backed tmpfs at naubos ito ng gate, na naging sanhi ng pagkaputol ng package. | | `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(default sa code)_ | `src/lib/spend/batchWriter.ts` | Flush interval (ms) para sa batched spend/cost writer. Binabawasan ng mas mababang value ang pagsasama-sama ng mga write; binabawasan naman ng mas mataas na value ang DB contention. | | `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(default sa code)_ | `src/lib/spend/batchWriter.ts` | Maximum na bilang ng naka-buffer na spend entry bago ang sapilitang flush. Taasan para sa mga deployment na may mataas na QPS; babaan kapag mas mahalaga ang limitadong paggamit ng memory. | | `OMNIROUTE_PROXY_FETCH_DEBUG` | _(hindi nakatakda)_ | `open-sse/utils/proxyFetch.ts` | Itakda sa `"true"` upang maglabas ng mga `[ProxyFetch]` debug log sa Vercel relay path. Naka-off bilang default upang maiwasang mailantad ang mga routing hint. | | `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(hindi nakatakda)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Absolute path ng lokal na proxy core binary (isang file na pinangalanang `sing-box`) na sumusuri sa nabuong core configuration bago nito palitan ang ginagamit na file. Kapag hindi nakatakda, isinusulat lamang ang `.generated` sa tabi ng ginagamit na file. Para lamang sa host environment: hindi kailanman iniimbak sa database o tinatanggap sa pamamagitan ng management API, dahil isinasagawa ang binary. | | `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(hindi nakatakda)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Kung paano nagre-reload ang lokal na proxy core pagkatapos ng beripikadong pagpapalit ng config: isang JSON argument array na pinapatakbo nang walang shell, o eksaktong `external` kapag isang panlabas na observer ang naglalapat ng file. Hindi kailanman iniimbak sa database o inilalantad sa pamamagitan ng API. | | `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Itakda sa `"true"` o `"1"` upang isama ang mga client/egress IP at ang account prefix sa detalyadong `[ProxyEgress]` process-log line. Pinananatiling NAKA-OFF bilang default upang hindi mailantad ng process log ang mga IP o ang account prefix. | | `OMNIROUTE_DEBUG` | _(hindi nakatakda)_ | `bin/cli/commands/quota.mjs` | Itakda sa `1` upang i-print sa stderr ang mga diagnostic ng oras sa bawat request (`[omniroute] GET completed in Nms`) mula sa mga CLI quota command. | | `OMNIROUTE_HEALTHCHECK_PATH` | _(awtomatiko)_ | `scripts/dev/healthcheck.mjs` | Tahasang path na sinusuri ng container health check. Kapag hindi nakatakda, kinukuha ito ng probe mula sa `OMNIROUTE_BASE_PATH`; kapag itinakda ito, muling gagamitin ang malalimang monitoring endpoint. | | `OMNIROUTE_DEBUG_COMPLETION` | _(hindi nakatakda)_ | `bin/cli/commands/completion.mjs` | Itakda sa anumang value na hindi blangko upang maglabas ng mga diagnostic na `[omniroute completion]` mula sa mga path ng CLI shell-completion cache (pagbasa/pag-refresh/pagsulat). Naka-off bilang default — tahimik na nabibigo ang mga cache na iyon upang hindi masira ng nawawala o sirang cache ang tab-completion. | | `BATCH_RETRY_DURATION_MS` | `86400000` (24 oras) | `open-sse/services/batchProcessor.ts` | Pinakamahabang panahon ng muling pagsubok para sa mga indibidwal na batch item (ms). Minamarkahang bigo ang mga item na lumalampas sa tagal na ito. | | `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Batayang pagkaantala (ms) para sa exponential backoff sa mga muling pagsubok ng batch item. | | `BATCH_BACKOFF_MAX_MS` | `3600000` (1 oras) | `open-sse/services/batchProcessor.ts` | Limitasyon (ms) para sa exponential backoff sa pagitan ng mga muling pagsubok ng batch item. | | `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Pinakamataas na bilang ng mga batch na pinoproseso nang sabay-sabay. Taasan upang mapahusay ang throughput; panatilihing mababa upang maiwasan ang sunod-sunod na pag-abot sa rate limit. | > [!IMPORTANT] > Bago baguhin ang isang umiiral na persistent database, naglalathala ang migration runner ng isang kumpletong > content-addressed snapshot sa ilalim ng `DATA_DIR/db_backups/`. Nangangailangan ang paglalathala ng filesystem > na sumusuporta sa mga hard link na nasa iisang filesystem at hindi nag-o-overwrite, pati na rin sa matibay na pag-sync ng file. Nangangailangan din ang mga POSIX host > ng pag-sync ng directory; sa Windows, maaaring tanggihan ng Node ang mga directory handle, kaya fina-flush ng OmniRoute ang > inilathalang file at itinuturing ang pag-sync ng directory entry bilang best effort. > Kung hindi maibibigay ng naka-mount na `DATA_DIR` ang mga garantiyang iyon, ligtas na mabibigo ang startup bago maglapat > ng migration. Ilipat ang `DATA_DIR` sa isang volume na may mga primitive na iyon; huwag gamitin ang > `DISABLE_SQLITE_AUTO_BACKUP` upang lampasan ang kaligtasan ng migration. ### Mga Sitwasyon | Sitwasyon | Configuration | | ------------------------ | ------------------------------------------------------------------------------------------------------------- | | **Lokal na development** | Iwanan ang lahat ng default. Nasa `~/.omniroute/omniroute.db` ang DB. | | **Docker** | `DATA_DIR=/data` + mag-mount ng volume sa `/data`. | | **Naka-encrypt at rest** | Itakda ang `STORAGE_ENCRYPTION_KEY` + magpanatili ng mga backup ng key! Kapag nawala ito = mawawala ang data. | | **CI/Pagsubok** | `DATA_DIR=/tmp/omniroute-test` — pansamantala, hindi kailangan ang encryption. | --- ## 3. Network at Mga Port | Variable | Default | Source File | Paglalarawan | | ------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | Pangunahing port para sa Dashboard UI at mga API endpoint (single-port mode). | | `OMNIROUTE_BASE_PATH` | _(walang laman = root)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | URL subpath para sa paghahatid ng OmniRoute sa likod ng reverse proxy (itinatakda ang Next.js `basePath`; isinasaalang-alang ng mga auth redirect ang basePath). Hal. `/omniroute`. Sa Docker, naka-bake ang value habang isinasagawa ang `docker build` (`ARG OMNIROUTE_BASE_PATH`); maaaring maglapat ang mga pre-built root image ng ibang runtime value nang isang beses sa pagsisimula ng container bago mag-boot ang Next.js. Itakda ang `NEXT_PUBLIC_BASE_URL` sa pampublikong origin kasama ang parehong subpath. | | `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(walang laman = root)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Browser-visible na katumbas ng `OMNIROUTE_BASE_PATH`, na ini-inline sa build time upang ipakita ng dashboard endpoint display ang `https://host/omniroute/v1` sa halip na `https://host/v1`. Babalik sa `OMNIROUTE_BASE_PATH` kapag hindi nakatakda. Mag-rebuild pagkatapos baguhin (build-time ang Next `basePath`). | | `DASHBOARD_ALLOW_EMBED` | _(hindi nakatakda = hindi kailanman maaaring i-frame)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Opsyonal na pag-enable sa pag-embed ng mga HTML page sa iframe. Kapag hindi nakatakda, ipinapadala ang bawat route na may `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Itakda sa `vscode` upang ihatid ang mga page (dashboard, login, docs, landing) na may `frame-ancestors 'self' vscode-webview:` at walang `X-Frame-Options`, nang sa gayon ay ma-render ang mga ito ng VS Code Simple Browser (`dashboardOpen: "editor"` mode ng OmniCopilot). Pinapanatili ng API surface (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, mga root-level alias) ang mahihigpit na header sa alinmang paraan. `vscode` lamang ang kinikilala — hindi ito ine-enable ng `1`/`true`. Build-time: mag-rebuild pagkatapos baguhin (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` para sa mga image; walang epekto ang pagtatakda nito sa isang prebuilt install). | | `API_PORT` | _(hindi nakatakda)_ | `src/lib/runtime/ports.ts` | Kapag nakatakda, inihahatid ang `/v1/*` proxy API sa hiwalay na port na ito. | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Bind address para sa API port. | | `DASHBOARD_PORT` | _(hindi nakatakda)_ | `src/lib/runtime/ports.ts` | Kapag nakatakda, inihahatid ang Dashboard UI sa hiwalay na port na ito. | | `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(naka-disable)_ | `src/sse/utils/backpressure.ts` | Nililimitahan ang magkakasabay na kasalukuyang pinoprosesong chat connection; ang mga request na lampas sa limitasyon ay makakatanggap ng `503` na may `Retry-After`. Ine-enable ng positibong integer ang guard; dini-disable ito kapag hindi nakatakda o `0`. | | `OMNIROUTE_INSTANCE_ID` | _(hindi nakatakda)_ | `src/shared/resilience/peerRouting.ts` | Stable at natatanging ID para sa gateway na ito kapag nagcha-chain ng mga instance ng OmniRoute. Ine-enable ang mga pagsusuri sa papasok na peer loop. Mga pinapayagang character: mga titik, digit, `.`, `_`, `:`, at `-`; maximum na 64 na character. | | `OMNIROUTE_PEER_URLS` | _(hindi nakatakda)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | Mga OmniRoute base URL na pinaghihiwalay ng kuwit na maaaring makatanggap ng `X-OmniRoute-Peer-Trace`. Tanging ang mga upstream URL na tahasang nasa allowlist ang makatatanggap ng peer metadata; hindi maaapektuhan ang lahat ng iba pang provider. | | `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | Pinakamataas na bilang ng mga dating nabisitang instance ng OmniRoute na tatanggapin sa isang chained request (`1`-`32`). Ang mga naulit na instance o naubos na badyet ay magbabalik ng HTTP `508 Loop Detected`. | | `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Port na naka-publish sa panig ng host para sa Dashboard sa Docker production mode. | | `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Port na naka-publish sa panig ng host para sa API sa Docker production mode. | | `OMNIROUTE_PORT` | _(hindi nakatakda)_ | `src/lib/runtime/ports.ts` | Mas inuuna kaysa sa `PORT` kapag tumatakbo sa loob ng Electron o iba pang wrapper. | | `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Port para sa real-time na WebSocket live monitoring server. | | `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Bind address para sa live WebSocket server. Itakda sa `0.0.0.0` upang gawing naa-access sa LAN (i-configure rin ang `LIVE_WS_ALLOWED_ORIGINS`). | | `LIVE_WS_ALLOWED_ORIGINS` | _(hindi nakatakda)_ | `src/server/ws/liveServer.ts` | Mga karagdagang origin na pinaghihiwalay ng kuwit na pinapayagang magbukas ng live WebSocket. Pinapayagan na bilang default ang mga loopback dashboard origin. | | `LIVE_WS_ALLOWED_HOSTS` | _(hindi nakatakda)_ | `src/server/ws/liveServerAllowList.ts` | Mga karagdagang hostname na pinaghihiwalay ng kuwit na pinapayagan para sa mga origin ng live WebSocket. Hindi tulad ng `LIVE_WS_ALLOWED_ORIGINS` (mga buong origin URL), ang bahagi lamang ng host ang itinutugma — kapaki-pakinabang para sa mga setup ng LAN/Tailscale. | | `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(hindi nakatakda)_ | `src/hooks/useLiveDashboard.ts` | Pampublikong URL para sa WebSocket ng live dashboard (panig ng browser). Itakda ito kapag gumagamit ng reverse proxy o Cloudflare Tunnel sa harap ng WS server (hal. `wss://ws.my-ai.com/live-ws`); doon kokonekta ang browser sa halip na sa `ws://hostname:20132`. Ginagamit din ang bahagi ng pathname bilang WebSocket upgrade path (default: `/live-ws`). | | `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` at `scripts/start-ws-server.mjs` | Itakda sa `0` o `false` upang i-disable ang real-time na WebSocket server (naka-enable bilang default at naka-bind sa loopback). Toggle ng CI/harness na nagdi-disable sa standalone na live WebSocket helper script. | | `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Limitasyon sa rate ng relay kada (token, IP), mga request/minuto. Nasa memory at kada instance. Idi-disable ng `0` o negatibong halaga ang IP-dimension gate (mananatiling nalalapat ang limitasyon ng DB kada token). | | `NODE_ENV` | `production` | Next.js core | Kinokontrol ang detalye ng pag-log, pag-cache, paglalantad ng detalye ng error, at mga pag-optimize ng Next.js. | | `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — default ng code) | `package.json` / Next.js 16 | Ang Turbopack ang default na bundler para sa `npm run dev` at `npm run build` (2-3× na mas mabilis na mga build, batay sa benchmark). Itakda sa `0` upang bumalik sa webpack sa Windows, kapag nakakaranas ng mga hindi pagkakatugma sa native binding / compatibility ng bundler, **o sa mga makinang limitado ang RAM** — ang mga production build ng Turbopack sa linya ng bersyong ito ng Next.js (16.2.x) ay kilala upstream na umaabot sa higit na mas mataas na pinakamataas na paggamit ng memory kaysa sa webpack sa malalaking module graph (hindi pa stable ang pag-aayos sa memory eviction ng Turbopack sa Next 16.3); higit na mas mababa ang pinakamataas na paggamit ng memory ng webpack fallback. Tingnan ang #6409. **Ang mga build ng Docker image ay naka-default sa `0` (webpack)**: idinedeklara ng `Dockerfile` ang `ARG OMNIROUTE_USE_TURBOPACK=0` upang ang karaniwang `docker build .` (Railway at iba pang one-click host, mga pansamantalang self-hoster) ay hindi ma-terminate dahil sa OOM sa isang builder na may limitadong memory; ipasa ang `--build-arg OMNIROUTE_USE_TURBOPACK=1` upang buuin ang image gamit ang Turbopack. Tingnan ang `docs/guides/DOCKER_GUIDE.md` → Mga resource sa oras ng pag-build. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(hindi nakatakda)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Itakda sa `1` upang laktawan ang pagsusuri sa integridad at kalagayan ng SQLite sa pagsisimula. Kapaki-pakinabang para sa mas mabilis na pag-boot sa malalaking database. | | `NOTIFY_SOCKET` | _(hindi nakatakda)_ | systemd (sd_notify protocol) | Itinatakda ng systemd kapag tumatakbo ang proseso sa ilalim ng isang service unit na may integrasyon ng sd_notify; binabasa ito ng OmniRoute (tingnan ang `OMNIROUTE_DISABLE_SD_NOTIFY`) upang magpadala ng mga notification na READY/WATCHDOG. Hindi ito kailanman itinatakda ng user. | | `OMNIROUTE_DISABLE_SD_NOTIFY` | _(hindi nakatakda)_ | `scripts/dev/systemd-notify.mjs` | Itakda sa `1` upang i-disable ang systemd sd_notify (Type=notify / WatchdogSec=) kahit tumatakbo sa ilalim ng isang systemd unit. Anuman ang mangyari, walang ginagawa ang notifier sa labas ng systemd. | | `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Agwat (ms) para sa background scheduler ng pagsusuri sa kalagayan ng credential. Minimum: 10000 (10s). | | `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (ms) para sa naka-cache na status ng kalagayan ng credential. | | `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Itakda sa `1` o `true` upang i-disable ang pana-panahong pagsusuri sa background ng mga koneksyon sa provider. Ang mga search provider (SEARCH_VALIDATOR_CONFIGS sa `src/lib/providers/validation/searchProviders.ts`, hal. `tavily-search`) ay palaging hindi isinasama sa sweep — ang kanilang "validation" ay isang aktuwal na upstream query na may bayad, kaya hindi kailanman sinusuri ang kalagayan ng mga ito ayon sa timer (#9970). | | `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Itakda sa `1` upang pahintulutan ang isang authenticated na caller na humiling sa `/api/monitoring/health?deep=1`, na nagsa-sample sa completions surface nang isang beses bawat TTL. Hindi kailanman pinapagana ng mga anonymous na caller ang probe. | | `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Bind address para sa Next.js dev/start server. Ino-override ang default na `0.0.0.0` kapag nakatakda. | | `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Bind address na ginagamit ng Playwright runner kapag inilulunsad ang Next.js. Naka-default sa `127.0.0.1` para sa mga hermetic test. **Huwag gamitin para sa `omniroute serve`** — gamitin sa halip ang `OMNIROUTE_SERVER_HOST` (awtomatikong itinatakda ng mga POSIX shell ang `HOSTNAME` sa pangalan ng makina; hindi ito maaaring i-override ng `.env`). | | `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Address na bina-bind para sa `omniroute serve`. Iniiwasan ang salungatan sa variable na `HOSTNAME` ng POSIX shell (na palaging itinatakda ng bash/zsh sa pangalan ng makina). Bumabalik sa `0.0.0.0` kapag hindi nakatakda. (#6194) | ### Mga Mode ng Port ``` ┌─────────────────────────── Isang Port (default) ────────────────────────────┐ │ PORT=20128 │ │ → Dashboard: http://localhost:20128 │ │ → API: http://localhost:20128/v1/chat/completions │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── Magkahiwalay na mga Port ────────────────────────┐ │ DASHBOARD_PORT=20128 │ │ API_PORT=20129 │ │ API_HOST=0.0.0.0 │ │ → Dashboard: http://localhost:20128 │ │ → API: http://0.0.0.0:20129/v1/chat/completions │ │ Gamit: Ilantad ang API sa LAN habang nililimitahan ang Dashboard sa │ │ localhost. │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── Produksiyong Docker ─────────────────────────────┐ │ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │ │ → Minamapa ang mga port ng container sa mga port ng host sa │ │ docker-compose.prod.yml. │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 4. Seguridad at Pagpapatotoo | Variable | Default | Source File | Paglalarawan | | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Salt na pinagsasama sa mga hardware identifier para sa pagbuo ng fingerprint ng makina. Baguhin sa bawat deployment para sa paghihiwalay. | | `OMNIROUTE_CLI_SALT` | _(hindi nakatakda = random na salt sa bawat pag-install na pinananatili sa `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | HMAC salt para sa pag-derive ng lokal na CLI auth token. Ang pagtatakda sa value na ito ay nagro-rotate sa lahat ng CLI token sa makina at palaging inuuna kaysa sa pinanatiling salt. Tingnan ang `docs/security/CLI_TOKEN.md`. | | `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Itinatakda ang flag na `Secure` sa mga session cookie. **Dapat ay `true`** kapag tumatakbo sa likod ng HTTPS. | | `REQUIRE_API_KEY` | `false` | API middleware | Kapag `true`, dapat magsama ang lahat ng `/v1/*` proxy request ng wastong API key. **Hindi kinokontrol ng flag na ito ang `GET /v1/models`**, na sa halip ay sumusunod sa postura ng pag-login sa dashboard (`requireAuthForModels`) — kaya ang `401` mula sa `/v1/models` ay HINDI nangangahulugang protektado ang inference. Tingnan ang `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). | | `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Nagbibigay-daan upang ipakita ang buong value ng API key sa UI ng Dashboard. Maaaring i-configure mula sa Dashboard Feature Flags; panganib sa seguridad sa mga shared instance. | | `NO_LOG_API_KEY_IDS` | _(walang laman)_ | `src/lib/compliance/index.ts` | Mga API key ID na pinaghihiwalay ng kuwit at hindi isinasama sa pag-log ng request (pagsunod sa GDPR). | | `DEFAULT_RATE_LIMIT_PER_DAY` | _(hindi nakatakda = walang limitasyon)_ | `src/shared/utils/apiKeyPolicy.ts` | Fallback na pang-araw-araw na badyet ng request na inilalapat sa mga API key na may null na column na `rate_limits`. Hindi nakatakda o walang laman: walang ipinapalagay na limitasyon (#2289, #11017). Pareho rin ang `0` (walang limitasyon). Ang positibong integer na N ay nagbibigay-daan sa N/araw, 5N/linggo, 20N/buwan. Ang mga maling-format na value na hindi walang laman ay bumabalik sa legacy na mga window na 1000/araw, 5000/linggo, 20000/buwan. | | `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | Pinakamataas na pinapayagang laki ng body ng request. Tinatanggihan ang mga payload na lumalampas sa limitasyong ito. | | `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | Ang mga aktuwal na body ng request na nasa threshold na ito o mas mataas pa ay kumukuha ng atomic at process-local na heavyweight admission lease bago ang pag-parse ng JSON (BYTE path, kabilang ang `POST /v1/responses`). Parehong healthy-headroom escape ng [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) gaya ng structure-heavy; nililimitahan pa rin ng `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110) upang hindi bumalik ang [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849). | | `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Mahigpit na limitasyon ng chat route na ipinapatupad batay sa mga byte na nabasa habang isinasagawa ang may hangganang pag-ingest, kabilang ang mga request na walang `Content-Length`, may invalid na `Content-Length`, o may mapanlinlang na `Content-Length`; makakatanggap ng `413` ang lalampas. | | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(hindi nakatakda — walang limitasyon sa bilang ng request)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** nalalapat lamang ngayon ang legacy na limitasyong ito sa BILANG ng request kapag tahasang itinakda. Kapag hindi nakatakda (ang default), ang admission ng mabigat na chat ay sa halip nililimitahan ng `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — isang awtomatikong hinangong BYTE budget na ibinatay sa aktuwal na limitasyon ng memory ng proseso sa **isang proseso** (isang V8 heap). Dalawang nagsasapawang `/v1/responses` na may ~750k token ang nakakapag-abort ng ~12 Gi heap (#7849) — isang babala tungkol sa **memory budget**, hindi isang mahigpit na maximum na 2 ng produkto. MAAARING tumanggap ang isang malusog na proseso (heap na mas mababa sa shed ratio) ng mas maraming magkakasabay na mahahabang `/v1/responses` sa pamamagitan ng `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Ang sampu-sampung mahahabang SSE client (40–50) ay usapin ng heap + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, hindi “maximum na 2”. Ang basta-bastang pagtataas nito upang “gamitin ang host” ay muling nagdudulot ng #7849. Paramihin ang mga **heap** gamit ang **N magkakahiwalay na `DATA_DIR`** (#11024); huwag kailanman gumamit ng `replicas>1` sa iisang SQLite file. | | `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(awtomatikong hinango)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** override para sa awtomatikong hinangong ingest byte budget (25% ng mas mahigpit na V8/cgroup memory ceiling na hinati sa 8x transient amplification). Ang mga hinango at tahasang itinakdang value ay nililimitahan sa 8 MiB–2 GiB. Agad na mabibigo ang body na mas malaki sa epektibong budget nang may `413 body_exceeds_budget`; ang kompetisyon sa pagitan ng mga body na kayang asikasuhin nang paisa-isa ay nananatiling maaaring subukang muli na `503`. Ang 40–50 magkakasabay na mahahabang SSE client ay usapin ng budget na ito + heap, hindi isang mahigpit na “maximum na 2”. Basahin ang `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` sa `/api/monitoring/health` bago mag-tune. | | `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Heap-pressure shed ratio (`heapUsed / heap_size_limit`) para sa BYTE at STRUCTURE na admission ng mabibigat na request (#10183, #10268, #10437). Ang isang magkakasabay na mabigat na request na lampas sa `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` ay ise-shed lamang gamit ang maaaring subukang muli na `503` kapag ang heap ay NASA ratio ring ito o mas mataas pa; sa isang malusog na heap, tinatanggap ito sa halip sa pamamagitan ng healthy-headroom. | | `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (default na `1`) | `src/shared/middleware/chatBodyAdmission.ts` | May hangganang karagdagang kapasidad para sa mabilis na path ng malusog na heap (#10437) sa **parehong** STRUCTURE at BYTE (`admitChatRequest`, kabilang ang mga body na ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Kung wala ang hangganang ito, nilalampasan ng bawat abala-ngunit-malusog-ang-heap na request ang admission nang walang limitasyon. Kapag ganito karaming magkakasabay na lease ang aktibo sa pamamagitan ng path ng malusog na heap, ang mga susunod na abalang request ay dadaan sa PAREHONG path ng may-hangganang paghihintay/pag-shed na ginagamit kapag may tunay na heap pressure. Ganap na hindi pinapagana ng `0` ang bypass. | | `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Bilang ng message na nag-uuri sa isang chat request bilang mabigat kahit mas mababa sa byte threshold ang body nito. | | `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Bilang ng tool na nag-uuri sa isang chat request bilang mabigat kahit mas mababa sa byte threshold ang body nito. | | `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Konserbatibong pagtatantiya ng token batay sa laki ng string na nag-uuri sa isang request bilang mabigat; isa itong proxy ng gastos sa admission, hindi tokenization para sa pagsingil ng provider. | | `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (hindi pinagana) | `src/shared/middleware/chatBodyAdmission.ts` | Opsyonal at kusang pinapaganang limitasyon sa history ng chat. Hindi pinagana bilang default: patakaran sa deployment ang bilang ng message, hindi isang pangkalahatang katangian ng request, at ang paglilimita rito ay tumatanggi sa mga pag-uusap gamit ang terminal na `413` bago pa magawa ng compression pipeline na maasikaso ang mga ito. Nililimitahan ang paglaki ng heap ng `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` at ng heap-pressure shed. Magtakda ng positibong value sa mga deployment na limitado ang memory at nangangailangan ng mahigpit na ceiling; makakatanggap ang lalampas ng structured compact-required na `413`. | | `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Mahigpit na limitasyon para sa isang non-streaming upstream response na ganap na bina-buffer sa memory. Kapag lumampas dito, kinakansela ang upstream reader at mabilis na nabibigo ang request sa halip na patuloy na palakihin ang isang walang-hangganang string hanggang sa maubos ang heap. | | `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Pinakamataas na bilang ng mga wire byte na ipinapasa mula sa mga header ng upstream na tugon. Kapag lumampas sa badyet, inaalis ang mga header na may mas mababang priyoridad (hal., pasadyang `x-codex-*`, `x-oai-request-id`) upang manatili sa loob ng karaniwang limitasyon ng header ng reverse proxy. Magtakda ng mas mataas na halaga upang magpasa ng higit pang upstream metadata kapalit ng mas malaking laki ng header ng tugon. | | `CORS_ORIGIN` | _(hindi nakatakda)_ | `src/server/cors/origins.ts` | Lumang allowlist ng CORS para sa iisang origin. Gamitin ang `CORS_ALLOWED_ORIGINS` para sa mga bagong deployment. Ang CORS ay para lamang sa mga cross-origin na browser API client; sa halip, gumagamit ang mga authenticated na pagsusulat sa dashboard ng mga same-origin na kahilingan kasama ang CSRF protection na nakatali sa session. | | `CORS_ALLOWED_ORIGINS` | _(hindi nakatakda)_ | `src/server/cors/origins.ts` | Allowlist ng CORS na pinaghihiwalay ng kuwit. Walang wildcard na ipinapadala maliban kung tahasang iko-configure ang `CORS_ALLOW_ALL=true`. | | `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | Pang-development lamang na pansamantalang paraan upang i-echo ang anumang browser `Origin`. Huwag itong paganahin sa mga shared o production deployment. | | `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Lumang alias. Binabasa ang toggle nito sa dashboard (isang DB override) bago ang environment value na ito; pinapatay ng `false`, `0`, `no`, o `off` sa alinman ang mga pagsusuri sa host, tulad ng ginagawa ng `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, kahit naka-save bilang off ang toggle ng flag na iyon sa dashboard; hinahayaan ng ibang mga halaga na ang dalawang flag sa ibaba ang kumontrol sa guard. | | `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Pinapatay ang mga pagsusuri sa host ng outbound URL guard, kasama ang pag-block sa cloud metadata (lahat ng 169.254.0.0/16, metadata.google.internal), sa mga path ng provider na sumusunod sa guard mode: pagpapatunay ng URL, pagtuklas ng modelo, mga base URL ng provider node (kabilang ang mga remote rerank node), at pagsubok sa proxy fallback, bukod sa iba pang mga outbound path na nauugnay sa provider gaya ng pag-fetch ng remote na larawan/media. Pinapayagan din nito ang mga pribadong webhook target, maliban sa mga cloud-metadata/link-local endpoint, na nananatiling naka-block kahit naka-on ang flag na ito. Pinananatili ng mga kahilingan sa chat na ipinapadala sa pamamagitan ng `BaseExecutor.execute()` ang kanilang pagsusuri sa cloud metadata. Gumagana ang mga lokal na provider sa mga default: pinapayagan na ng `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (default na `true`) ang mga lokal at LAN URL sa mga path ng pagpapatunay, pagtuklas, at provider node; ang pagsubok sa proxy fallback at mga pribadong webhook target ay sumasangguni lamang sa flag na ito at bina-block ang mga lokal/LAN host habang naka-off ito. Ino-override ang `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. Mas inuuna ang halagang naka-save mula sa toggle sa dashboard kaysa sa variable na ito. | | `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Payagan ang mga URL ng provider sa mga lokal/pribadong address (127.0.0.1, localhost, LAN, mga pribadong range) para sa pagpapatunay ng provider, pagtuklas ng modelo, chat, at iba pang mga outbound path na nauugnay sa provider na pinamamahalaan ng guard mode. **Default na `true`** (local-first): bina-block ng guard ang mga cloud-metadata endpoint — lahat ng 169.254.0.0/16 kasama ang mga kilalang hostname ng metadata (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Itakda sa `false` para sa public-only mode, na bina-block din ang mga pribado at loopback na host. Sinusuri ng guard ang hostname o literal na IP ayon sa pagkakasulat, bago ang anumang DNS lookup; sa public-only mode, nilulutas din ng safe-fetch wrapper ang hostname at tinatanggihan ang anumang pribadong sagot. Pinapatay ng `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` ang mga pagsusuring ito sa mga path na nakalista sa row nito. Nilalaktawan ng mga built-in na lokal na provider, gaya ng LM Studio, Ollama, vLLM, Llamafile, at Triton, ang lahat ng pagsusuri sa host para sa pagpapatunay ng key at chat. Mas inuuna ang halagang naka-save mula sa toggle sa dashboard kaysa sa variable na ito. (#5066) | | `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Payagan ang mga route na `/v1/audio/*` (mga transcription, speech, translation) na gumamit ng OpenAI-compatible na provider node na naka-host sa labas ng localhost. Naka-off bilang default — binabago ng pag-route ng audio sa isang remote host ang egress identity at dapat itong tahasang pagpasyahan ng operator. Palaging pinapayagan at hindi naaapektuhan ang mga loopback/pribadong node (localhost, 127.0.0.1, 172.16-31.x). (#3963) | | `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Payagan ang `POST /v1/rerank` (at ang loopback rerank step ng memory engine) na gumamit ng OpenAI-compatible na provider node na naka-host sa labas ng localhost — isang LAN box o Tailscale peer na nagpapatakbo ng TEI, Infinity, vLLM, at iba pa. Naka-off bilang default — binabago ng pag-route sa isang remote host ang egress identity at dapat itong tahasang pagpasyahan ng operator. Palaging pinapayagan at hindi naaapektuhan ang mga loopback node (localhost, 127.0.0.1, 172.16-31.x). Dapat ding pumasa ang base URL ng isang remote node sa patakaran sa outbound URL ng provider (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). | | `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(walang laman)_ | `src/shared/network/localNodeHosts.ts` | Mga hostname (pinaghihiwalay ng kuwit o whitespace) na itinuturing na lokal ng provider-node routing — karaniwang pangalan ng serbisyo ng Docker/Compose ng isang reranker, TEI, o audio sidecar sa sariling Docker network ng OmniRoute (`http://reranker:8080/v1`), upang hindi mangailangan ang node ng hard-coded na container IP. Ang mga nakalistang host ay maaaring gamitin para sa `/v1/rerank`, `/v1/audio/*`, at lokal na pagsusuri sa kalagayan nang hindi ino-on ang `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` para sa bawat remote node, at direktang tinatawagan ang mga ito — hindi kailanman sa pamamagitan ng `HTTP(S)_PROXY` o naka-pin na proxy ng isang koneksyon. Ipinapadala pa rin ng mga ito ang API key ng koneksyon. Tanging mga single-label na pangalan at mga pangalang `.internal`/`.local` ang tinatanggap; binabalewala nang may babala ang mga pampublikong FQDN, literal na IP, at pangalan ng cloud metadata. (#14635) | | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Kapag naka-enable ang OIDC, i-disable ang pag-login gamit ang password upang sa pamamagitan lamang ng OIDC Single Sign-On makapag-authenticate ang mga user. Tinatanggap din ang bare alias na `OIDC_DISABLE_PASSWORD_LOGIN`; mas may priyoridad ang Dashboard Feature Flag na may parehong key. (#10889) | | `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Bare alias ng `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). | ### Checklist sa Pagpapatibay ng Seguridad ```bash # Minimum na seguridad para sa production: AUTH_COOKIE_SECURE=true # Nangangailangan ng HTTPS REQUIRE_API_KEY=true # I-authenticate ang lahat ng proxy call ALLOW_API_KEY_REVEAL=false # Huwag kailanman ilantad ang mga key sa UI CORS_ALLOWED_ORIGINS=https://your.domain.com MAX_BODY_SIZE_BYTES=5242880 # Limitasyong 5 MB ``` --- ## 5. Paglilinis ng Input at Proteksyon sa PII Nagbibigay ang OmniRoute ng dalawang antas ng depensa: pag-scan para sa injection sa panig ng request at pag-aalis ng PII sa panig ng response. > **⚠️ Mga Limitasyon:** Ang mga guardrail na ito ay mga _best-effort heuristic_ na pagtukoy, hindi isang kumpletong firewall laban sa prompt injection o PII DLP system. Maaari silang magdulot ng mga false positive (ma-flag ang mga ligtas na persona/RPG prompt) at mga false negative (leetspeak, spacing, mga pattern na hindi Ingles). Hindi sapat ang mga ito nang mag-isa para sa pagsunod sa mga regulasyon. Iangkop ang mga mode at subukan ang mga ito sa iyong traffic bago umasa sa mga ito. ### Panig ng Request: Prompt Injection Guard | Variable | Default | Source File | Paglalarawan | | --------------------------------- | ------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | I-enable ang pag-scan ng mga papasok na mensahe para sa mga pattern ng prompt injection. | | `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Patakaran sa injection: `warn` = mag-log lamang, `block` = tanggihan ang request gamit ang 400. Ang legacy na `redact` ay **hindi** nag-aalis ng injection text; gamitin ang `PII_REDACTION_ENABLED` para sa muling pagsulat ng PII sa request. | | `INJECTION_GUARD_MODE` | _(hindi nakatakda)_ | `src/middleware/promptInjectionGuard.ts` | Legacy alias para sa `INPUT_SANITIZER_MODE` — parehong gawi. | | `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | Pinakamababang antas ng kalubhaan na tinatanggihan ng `MODE=block`: `high` (default), `medium`, o `low`. Ang mga medium na pattern ay para lamang sa obserbasyon maliban kung ibababa ang threshold. | | `INJECTION_GUARD_BLOCK_THRESHOLD` | _(hindi nakatakda)_ | `src/shared/utils/injectionSeverity.ts` | Legacy alias para sa `INPUT_SANITIZER_BLOCK_THRESHOLD` — parehong gawi. | | `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | Kapag `true`, i-redact ang PII sa mga papasok na request (hiwalay sa injection mode). | | `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | I-redact ang mga kilalang pattern ng API key / secret token mula sa mga payload ng request/response. Opt-in; tinutularan ang `PII_REDACTION_ENABLED`. | ### Panig ng Response: PII Sanitizer | Variable | Default | Source File | Paglalarawan | | -------------------------------- | -------- | ------------------------- | ---------------------------------------------------------------------------------------- | | `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | I-scan ang mga response ng LLM para sa tumagas na PII bago ibalik sa client. | | `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = i-mask ang PII, `warn` = mag-log lamang, `block` = alisin ang buong response. | ### VS Code Tokenized-Route Context Sanitizer | Variable | Default | Source File | Paglalarawan | | ----------------------------------- | ------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | Inaalis ang implicit na konteksto ng aktibong editor (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) mula sa mga request sa `/v1/vscode/[token]/*` at nire-redact ang nilalaman ng mga tahasang naka-attach na sensitibong file. Secure-by-default; itakda sa `0` upang i-disable. | ### Mga Sitwasyon | Sitwasyon | Configuration | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Pagsunod ng enterprise** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (pag-block ng injection + pag-redact ng PII sa request/response; magkahiwalay ang mga mode) | | **Pagsubaybay lamang** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — nagla-log ngunit hindi kailanman nagba-block | | **Personal na paggamit** | Panatilihing naka-disable ang lahat — walang overhead | --- ## 6. Mga Patakaran sa Tool at Routing | Variable | Default | Source File | Paglalarawan | | ----------------------------------------------------------- | ------------------------------------ | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | Kinokontrol ang access ng LLM sa pagtawag ng tool/function. `allowlist` = mga nakalistang tool lamang, `denylist` = lahat maliban sa mga nakalista, `disabled` = walang mga paghihigpit. | | `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | Path patungo sa JSON file ng mga panuntunan sa pagmamanipula ng payload (mga upstream na pag-aayos ayon sa model/protocol). | | `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Agwat ng pag-reload (ms) para sa hot-reloading ng file ng mga panuntunan sa payload. Minimum na `1000`. | | `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Opsyonal na pag-enable: i-route ang mga bare na `claude-*` model ID mula sa mga Claude Code client sa pamamagitan ng Claude Code OAuth account sa halip na mangailangan ng provider prefix. May prayoridad pa rin ang mga tahasang provider prefix. Maaari ring i-configure sa pamamagitan ng dashboard toggle sa page ng Claude provider. | | `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Legacy na gawi ng `resolveBareModelToConnectionDefault` (#4825): palitan ang anumang bare na pangalan ng model ng `defaultModel` ng napiling koneksyon. Naka-off bilang default; `auto` o isang walang-lamang model lamang ang pinapalitan; nagla-log ng isang babala sa bawat pares kapag naka-on. | | `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Limitasyon ng concurrency kada model para sa mga round-robin combo (#9100). Ang semaphore ng round-robin combo ay may hard cap na 3 magkakasabay na request kada model nang walang override, kaya nasi-serialize sa likod ng limitasyong iyon ang traffic na may mas mataas na concurrency. Bine-validate sa `>= 1`, at nililimitahan sa `<= 32`. | | `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Mapanganib na opsyonal na setting na lumalaktaw sa lokal na pagsusuri ng OmniRoute sa context window / maximum na bilang ng input token para sa mga direktang single-model request. Ipinapatupad pa rin ng mga upstream provider ang kanilang aktuwal na limitasyon; nananatiling aktibo ang prompt compression at sariling limitasyon ng model sa output token. Ang epektibong pagkakasunod-sunod ng prayoridad ay Feature Flags DB override > environment variable > default; hindi kinakailangan ang pag-restart. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(hindi nakatakda)_ | `open-sse/services/selfHostedEntry.ts` | Inline na YAML `providers:` document (RIC-738, D4). Kapag nakatakda (mayroon man o walang `strategy:` block), inililihis ang `/v1/chat/completions` patungo sa self-hosted at pinag-isang OpenAI-compatible entry sa halip na sa cloud pipeline. Kapag hindi nakatakda (ang default): direktang nagpapatuloy ang route sa kasalukuyang cloud pipeline. Tingnan ang `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(hindi nakatakda)_ | `open-sse/services/selfHostedEntry.ts` | Path patungo sa isang YAML file na naglalaman ng parehong `providers:` document gaya ng `OMNIROUTE_SELF_HOSTED_PROVIDERS`, para sa mga deployment na mas pinipili ang file kaysa sa inline na env var. Ina-activate ng alinman sa dalawa ang self-hosted entry. | | `OMNIROUTE_SELF_HOSTED_API_KEY` | _(hindi nakatakda — bukas na route)_ | `open-sse/services/selfHostedEntry.ts` | Opsyonal na shared API key para sa pinag-isang self-hosted entry (D5 scaffold, nakalaan para sa per-key quota system). Kapag nakatakda, dapat isama ng mga request ang `Authorization: Bearer `. Kapag hindi nakatakda: bukas ang route, na tumutugma sa kasalukuyang pattern ng self-hosted local provider (loopback/trusted-network deployment). | | `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(hindi nakatakda)_ | `open-sse/services/routingStrategies.ts` | Inline na YAML `strategy:` document para sa deterministic routing engine (M2/RIC-740, D3) — blacklist/whitelist, cooldown breaker, prayoridad ayon sa gastos, pagsasaalang-alang sa latency, at fallback chain. Ino-override nito ang isang inline na `strategy:` block na naka-nest sa loob ng `OMNIROUTE_SELF_HOSTED_PROVIDERS`, kada key. Tingnan ang `docs/routing/DETERMINISTIC_ROUTING.md`. | | `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(hindi nakatakda)_ | `open-sse/services/routingStrategies.ts` | Path sa isang YAML file na naglalaman ng kaparehong dokumentong `strategy:` gaya ng `OMNIROUTE_SELF_HOSTED_STRATEGY`, para sa mga deployment na mas pinipili ang file kaysa sa inline na env var. | | `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(hindi nakatakda)_ | `open-sse/services/conversationTracker.ts` | Itakda sa `1` upang ihinto ang pagkolekta ng history ng pag-uusap. Nagbabalik ang `resolveConversationId()` ng hindi sinusubaybayang resulta bago nito basahin ang SQLite o i-parse ang history ng mensahe, at saklaw din ang mga session ID na ibinigay ng client. Hindi nagbabago ang pangangasiwa sa routing session at hindi binubura ang mga kasalukuyang record. Para sa mga deployment na hindi gumagamit ng conversation view ng dashboard at gustong pigilan ang patuloy na paglaki ng turn table. | | `OMNIROUTE_NADIR_API_KEY` | _(hindi nakatakda)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | API key para sa opsyonal na `nadir` auto-combo router strategy, na ginagamit kapag hindi nakatakda ang sariling `config.nadir.apiKey` ng combo. Opsyonal: ang mga tawag na walang key ay mapupunta sa anonymous tier ng Nadir, na nililimitahan ang rate ayon sa IP at samakatuwid ay hindi magagamit sa likod ng isang shared gateway. Sensitibo; mas mainam ang per-combo field kapag gumagamit ng magkakaibang account ang mga combo. | | `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Base origin ng Nadir decision API, na ginagamit kapag hindi nakatakda ang sariling `config.nadir.baseUrl` ng combo. Kailangan lamang para sa self-hosted na Nadir, na nagpapanatili sa mga unahang bahagi ng prompt sa loob ng sarili mong network. Tinatanggap at inaalis ang `/v1` sa hulihan. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Lingguhang window para sa mga limitasyon sa paggamit sa USD ng bawat API key (pagpapatupad sa request, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: nagtatapos ang linggo sa pinakamaagang lingguhang pag-reset sa mga upstream connection na maaabot ng key, o gumugulong na 7 araw kapag walang nalalamang pag-reset. `calendar`: ang lokal na linggo mula Lunes 00:00 hanggang sa susunod na Lunes 00:00, na pareho para sa bawat key. Inirerekomenda ang `calendar` kapag iisang pool ng mga upstream account ang pinagsasaluhan ng maraming key na may kanya-kanyang badyet. Babalik sa `provider` ang mga di-wastong value. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(timezone ng proseso)_ | `src/lib/usage/apiKeyUsageLimits.ts` | IANA timezone (halimbawa, `Asia/Shanghai`) na tumutukoy sa Lunes 00:00 para sa `calendar` na lingguhang window. Hindi nakatakda o di-wasto: ang timezone ng proseso ng OmniRoute (ang `TZ` ng host o container, na madalas ay hindi nakatakda, ibig sabihin, Coordinated Universal Time, sa mga container image). Binabalewala sa `provider` mode. | | `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Default na maximum na bilang ng mga tool na pinapayagan sa isang request (default ng OpenAI). Mga positibong integer lamang; pinananatili ng hindi nakatakda o di-wastong mga value ang `128`. Ilalapat pa rin ng provider na may alam/proactive na limitasyon (`grok-cli` 200, `nvidia` 1536) ang sarili nitong cap — inililipat lamang nito ang default na pinakamataas na limitasyon. | | `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(naka-on)_ | `open-sse/executors/syntxChat.ts` | Tool calling na ginagaya sa prompt ng SYNTX.ai: kapag hindi nakatakda o `1`/`true`/`on`/`yes`, ini-inject ang lokal na catalog ng mga tool sa prompt; nilalaktawan ng anumang ibang value (hal. `0`) ang injection na iyon. | --- ## 7. Mga URL at Cloud Sync | Variable | Default | Source File | Paglalarawan | | ---------------------------------------- | --------------------------------------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL sa panig ng server na ginagamit ng mga internal na sync job upang tawagan ang `/api/sync/cloud`. Panatilihin ito bilang loopback/container URL kahit na pampublikong naka-proxy ang app. | | `CLOUD_URL` | _(walang laman)_ | `src/lib/cloudSync.ts` | URL ng cloud relay endpoint (premium na feature). | | `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | Timeout ng HTTP para sa mga kahilingan sa cloud sync. | | `OMNIROUTE_BUILD_PROFILE` | `full` | Configuration ng Webpack build | Profile sa oras ng build (itakda sa `minimal` upang pisikal na hindi isama ang mga privileged module sa bundle). | | `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone na output_ | `scripts/build/colocate-standalone.mjs` | Override sa oras ng build para sa standalone output directory na ginagamit ng hakbang sa colocation pagkatapos ng build. Hindi ito runtime setting. | | `OMNIROUTE_CLOUD_SYNC_SECRET` | _(walang laman)_ | `src/lib/cloudSync.ts` | Shared secret na ginagamit upang beripikahin ang HMAC-SHA256 signature ng mga tugon ng Cloud Sync. | | `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Itakda sa `true` upang payagan ang Cloud Sync endpoint na i-overwrite ang mga lokal na credential. Ang default ay `false`. | | `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Itakda sa `true` upang tanggihan ang tugon ng Cloud Sync na walang signature kapag walang naka-configure na lokal na secret (#13679). Ang signature na naroroon ay palaging bineberipika—at palaging tinatanggihan kapag hindi nakatakda ang `OMNIROUTE_CLOUD_SYNC_SECRET`—anuman ang flag na ito. Magiging enforced ang default sa v3.9. | | `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Itakda sa `true` upang bumalik sa one-step na gawi ng v3.8.5 na "i-import ang lahat" nang walang kumpirmasyon ng user. | | `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, Dashboard, sync | URL na nakikita ng publiko para sa OAuth redirect_uri, mga link ng Dashboard, at mga nabuong pampublikong URL. Itakda ito sa matatag na pampublikong URL kapag kailangang gumamit ang mga OAuth callback o nabuong browser link ng canonical na reverse-proxy host. | | `NEXT_PUBLIC_CLOUD_URL` | _(walang laman)_ | Panig ng client | Mirror sa panig ng client ng `CLOUD_URL`. | | `NEXT_PUBLIC_APP_URL` | _(hindi nakatakda)_ | `src/shared/services/cloudSyncScheduler.ts` | Legacy na fallback para sa `NEXT_PUBLIC_BASE_URL`. | | `NEXT_PUBLIC_PORT` | _(hindi nakatakda — magfa-fallback sa `PORT`)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Client-side na fallback port para sa mga display URL kapag walang alam na origin (SSR/mga test); binabasa bago ang `PORT`. | | `OMNIROUTE_PUBLIC_BASE_URL` | _(hindi nakatakda)_ | Resolver ng pampublikong origin, mga URL ng image | Pinakamataas na priyoridad na browser-facing na OmniRoute origin na ginagamit para sa pagbuo ng pampublikong URL at pagpapatunay ng browser origin na hindi dashboard. Itakda ito kapag naaabot ng OpenWebUI o ibang relay ang OmniRoute sa pamamagitan ng internal na URL ngunit kailangang kunin ng browser ng user ang nabuong media mula sa LAN, tunnel, o pampublikong origin. **Huwag** isama ang `/v1`. | | `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(hindi nakatakda)_ | `open-sse/config/providerPluginManifestUrl.ts` | Absolute na URL ng provider plugin manifest na ipinapaalam sa mga sidecar client. Kapag hindi nakatakda, kinukuha ng OmniRoute ang `/api/v1/provider-plugin-manifest` mula sa request origin o HOST/PORT. | | `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Protocol na ginagamit kapag kinukuha ang URL ng provider plugin manifest mula sa HOST/PORT nang walang request origin. Itakda sa `https` sa likod ng pampublikong proxy na nagtatapos ng TLS kapag walang tahasang nakatakdang `OMNIROUTE_PROVIDER_MANIFEST_URL`. | | `OMNIROUTE_TRUST_PROXY` | _(hindi nakatakda)_ | `src/server/origin/publicOrigin.ts` | Opsyonal na trust mode para sa mga forwarded na header ng pampublikong origin. Hindi nakatakda = huwag pagkatiwalaan ang `Forwarded` / `X-Forwarded-*` para sa mga pagpapasyang panseguridad. Pinagkakatiwalaan ng `true` / `loopback` ang forwarded host/proto mula lamang sa token-stamped na loopback proxy. Pinagkakatiwalaan din ng `private` / `lan` ang mga private-LAN proxy peer, at pinahihintulutan ang `API_PORT` bridge na panatilihin ang `X-Forwarded-For` ng naturang peer. Mas mainam ang tahasang `NEXT_PUBLIC_BASE_URL` sa production. | | `KIE_CALLBACK_URL` | _(hindi nakatakda)_ | `open-sse/utils/kieTask.ts` | Pampublikong callback URL para sa mga asynchronous na kie.ai job. Override na may pinakamataas na priyoridad bago ang `OMNIROUTE_KIE_CALLBACK_URL` at `OMNIROUTE_PUBLIC_URL`. | | `OMNIROUTE_KIE_CALLBACK_URL` | _(hindi nakatakda)_ | `open-sse/utils/kieTask.ts` | Alternatibong pagbaybay ng `KIE_CALLBACK_URL`. Magfa-fallback dito kapag hindi nakatakda ang pangunahing variable. | | `OMNIROUTE_PUBLIC_URL` | _(hindi nakatakda)_ | `open-sse/utils/kieTask.ts` | Pampublikong origin na ginagamit upang buuin ang mga async callback URL. Fallback na may pinakamababang priyoridad para sa mga kie.ai callback; ginagamit din bilang generic na pampublikong URL para sa iba pang mga relay. | | `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Endpoint sa paghahanap ng quota ng CrofAI na ginagamit ng page na Usage. I-override para sa mga relay / test fixture. | | `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Endpoint ng 5-oras / lingguhan / buwanang quota ng ClinePass na ginagamit ng page na Usage. I-override para sa mga relay / test fixture. | | `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Opisyal na endpoint ng paggamit ng OpenCode Go na may API-key authentication na ginagamit ng page na Usage. I-override para sa mga relay / test fixture. | | `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Bumuo ng mga identity header ng OpenCode CLI (User-Agent, x-opencode-client/project, mga UUID ng request/session) sa mga upstream request ng opencode-go/zen na hindi ipinadala ng client, upang tanggapin ang mga ito ng Cloudflare sa VPS egress (#6210/#5997). Naka-on bilang default mula noong #10571; mag-opt out gamit ang `false`/`0`/`no`/`off`. | | `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | Default na User-Agent na ginagamit kapag naka-on ang `OPENCODE_SYNTHESIZE_CLI_HEADERS` at walang nakatakdang override na `_USER_AGENT` para sa bawat provider. Inilalapat lamang sa mga opencode executor. Sa isang request na walang key at hinaharang ng upstream, ang naka-configure na value na walang `opencode/= 1.17>` ay pinapalitan ng default na ito sa halip na tanggihan. | | `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (naka-on) | `open-sse/utils/opencodeHeaders.ts` | Ipasa ang mga header ng attribution ng client app (`x-session-id`, `x-title`, `http-referer`) sa mga upstream provider, upang mapanatili ng isang request na nagsisimula sa loob ng nakalistang harness ang pagkakakilanlan nito habang dumadaan sa router (nakabatay rito ang mga gate ng publisher ng OpenRouter). Pinananatili ng `0`/`false`/`no`/`off` ang pagkakakilanlan ng registry/operator at inaalis ang mga value na ibinigay ng client. Palaging nangingibabaw ang mga custom header na na-configure ng operator sa mga value ng client. | | `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | Value para sa binuong `x-opencode-client` header kapag naka-on ang `OPENCODE_SYNTHESIZE_CLI_HEADERS`. | | `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | Value para sa binuong `x-opencode-project` header kapag naka-on ang `OPENCODE_SYNTHESIZE_CLI_HEADERS`. | | `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(hindi nakatakda)_ | `open-sse/config/providerErrorRules.ts` | Aktuwal na hanay ng mga provider na ang mga upstream failure ay pinapangkat ayon sa egress IP (kapag nagkaroon ng isang 429, ipaparada ang lahat ng kapatid na koneksiyong gumagamit ng IP na iyon). Kapag hindi nakatakda, ginagamit ang free-tier default na `opencode,opencode-go,opencode-cli`; ganap na dini-disable ng `none`/`off`/`false`/`0` ang cascade; pinapalitan ng listahang pinaghihiwalay ng kuwit ang hanay. Ang mga paid plan ay pinapangkat ayon sa account sa upstream at ligtas na maaaring i-disable ito (#9611). | | `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(hindi nakatakda)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Itakda sa `off` upang ihinto ang pagsasaayos sa body ng mga request sa OpenCode na walang key (streaming flag at listahan ng tool). Inilalapat pa rin ang mga header. Binabasa ito sa bawat request, kaya agad na magkakabisa ang pagbabago. | | `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(hindi nakatakda)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Mga pangalan ng tool na pinaghihiwalay ng kuwit na idedeklara sa isang request sa OpenCode na walang key at walang dalang tool, kapag wala pang naoobserbahan para sa model na iyon. Kapag walang laman, gumagamit ito ng iisang placeholder na sinasabihan ang model na huwag tawagin. Hanggang 32 entry, `[A-Za-z_][A-Za-z0-9_-]{0,63}`; binabalewala ang mga invalid na entry. | | `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | URL ng mga setting ng Ollama Cloud na ginagamit para sa pag-scrape ng quota. I-override para sa mga relay / test fixture. | | `OLLAMA_USAGE_COOKIE` | _(hindi nakatakda)_ | `open-sse/services/usage.ts` | Ollama Cloud `__Secure-session` cookie na ginagamit para sa pag-scrape ng quota mula sa pahina ng mga setting. Sensitibo; mas mainam ang field sa Dashboard para sa bawat koneksiyon kapag maraming account ang naka-configure. | | `OLLAMA_CLOUD_USAGE_COOKIE` | _(hindi nakatakda)_ | `open-sse/services/usage.ts` | Alternatibong env var para sa Ollama Cloud `__Secure-session` cookie. Sensitibo; mas mainam ang field sa Dashboard para sa bawat koneksiyon kapag maraming account ang naka-configure. | | `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(hindi nakatakda)_ | `open-sse/services/usage.ts` | Alternatibong env var para sa Ollama Cloud `__Secure-session` cookie na ginagamit bago ang mas maiikling alias. Sensitibo; mas mainam ang field sa Dashboard para sa bawat koneksiyon kapag maraming account ang naka-configure. | | `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | Endpoint ng mga limitasyon sa paggamit ng CodeWhisperer (AWS Kiro). I-override para sa mga relay / test fixture. | > [!IMPORTANT] > Kapag nagde-deploy sa likod ng reverse proxy (nginx, Caddy), itakda ang `NEXT_PUBLIC_BASE_URL` sa iyong matatag na pampublikong URL (hal., `https://omniroute.example.com`) kapag kailangang gamitin ng mga OAuth callback o nabuong pampublikong link ang hostname na iyon. Kung wala ito, maaaring mabigo ang mga OAuth callback dahil hindi tutugma ang redirect_uri, at maaaring tumuro ang mga nabuong pampublikong link sa internal na origin ng container. > > Panatilihin ang `BASE_URL` bilang internal na loopback/container URL para sa mga server-to-server na gawain. Huwag gumamit ng browser `Origin` o pampublikong hostname para sa mga internal na self-fetch na may kasamang kredensyal. > > Hindi nangangailangan ng static na pampublikong base URL ang mga authenticated na pagsusulat sa dashboard: nagpapadala ang dashboard ng mga unsafe request sa same-origin gamit ang CSRF token na nakatali sa session. Isinasentralisa pa rin ng OmniRoute ang pagpapatunay ng public origin para sa mga browser integration na hindi mula sa dashboard: unang pinagkakatiwalaan ang mga tahasang public URL env var; binabalewala ang mga raw na `Forwarded` / `X-Forwarded-*` header maliban kung naka-enable ang `OMNIROUTE_TRUST_PROXY` at may token na nagmamarka sa immediate proxy peer bilang pinagkakatiwalaan. Huwag gamitin ang mga setting ng CORS upang ayusin ang mga same-origin na request ng dashboard; para lamang sa mga cross-origin na browser client ang CORS. --- ## 8. Outbound Proxy Iruta ang mga tawag sa upstream na provider ng LLM sa pamamagitan ng HTTP o SOCKS5 proxy para sa kontrol ng egress, geo-routing, o pagtatago ng IP. Ang default ng `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` ay `true`. Itakda ito sa `false`, `0`, `no`, o `off` upang sapilitang gamitin ang HTTP/1.1 sa mga Undici dispatcher sa `open-sse/utils/proxyDispatcher.ts` at `open-sse/utils/proxyFetch.ts`: direktang egress, mga HTTP(S)/SOCKS proxy, mga relay, at ang kanilang mga muling pagsubok gamit ang bagong socket. Pinapanatili nito ang beripikasyon ng TLS certificate, proxy authentication, mga limitasyon sa koneksyon, at mga setting ng keep-alive. I-restart ang OmniRoute pagkatapos itong baguhin dahil naka-cache ang mga dispatcher at ginagawa ang mga relay agent sa pagsisimula. Hindi kinokontrol ng switch ang wreq TLS fingerprinting o mga transport na partikular sa provider. | Variable | Default | Source File | Paglalarawan | | ---------------------------------------- | ------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | I-enable ang SOCKS5 proxy agent para sa mga upstream na tawag. Mag-opt out gamit ang `false`. | | `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Client-side | Kamalayan sa panig ng client tungkol sa availability ng SOCKS5. | | `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Feature flag na naka-on bilang default (tingnan ang [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); mananaig ang override mula sa dashboard DB). Hihinto ang mga proxy pool at rotation kada account sa muling pagpili sa isang miyembrong kabibigo lamang (tumangging TCP probe, o 429 sa pamamagitan nito) sa loob ng panahong dumodoble sa bawat pag-ulit, hanggang sa isang limitasyon. Ibinabalik ng `false` ang karaniwang pagpili. | | `SELECTOR_CONTROL_ALLOWLIST` | _(hindi nakatakda)_ | `src/lib/proxySubscription/selectorGuard.ts` | Allow-list para sa mga target ng selector-control ng local core bukod sa loopback (mga host o IP na pinaghihiwalay ng kuwit/espasyo; binubuksan ng `*` ang LAN/private ngunit hindi kailanman ang metadata/link-local). Pinapayagan bilang default ang loopback sa http/https. Mananaig ang value mula sa dashboard DB sa variable na ito kapag nakatakda at hindi walang laman. | | `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Batayang panahon (ms) ng pansamantalang pagbubukod dahil sa 429, na dumodoble sa bawat pag-ulit. Binabasa nang isang beses sa startup. Nililimitahan sa `1000..3600000`; kapag wala sa saklaw o hindi mabasa, babalik ito sa default na may babala. | | `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Limitasyon (ms) ng pansamantalang pagbubukod dahil sa 429. Binabasa nang isang beses sa startup. Nililimitahan sa `1000..3600000`; kapag wala sa saklaw o hindi mabasa, babalik ito sa default na may babala. Kapag mas mababa sa base ang limitasyon, babalik ito sa default. Ang pagpapababa sa limitasyon ay nagpapaikli rin sa paglimot sa sunod-sunod na insidente: nililinis ang mga entry pagkalipas ng `2 x max` mula sa expiration. | | `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Opsyonal na feature flag (tingnan ang [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); mananaig ang override mula sa dashboard DB). Para sa mga provider na ang quota ay pinapangkat ayon sa egress address, iraranggo ang isang miyembro ng pool na may kaparehong naobserbahang egress address ng isang kamakailang tinanggihang miyembro sa ilalim lamang ng mga maayos na miyembro. Pagkakasunod-sunod lamang ito at hindi kailanman ibinubukod. Kailangan nito ang `PROXY_SKIP_RECENTLY_FAILED`, na lumilikha ng refusal signal na binabasa nito. | | `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Rebound window (ms) na naglilimita sa mga paulit-ulit na `proxy.set_aside` webhook alert kada miyembro ng pool upang isang event lamang ang maipadala kapag sunod-sunod ang mga pagtanggi. Binabasa sa bawat emit. Nililimitahan sa `1000..3600000`; kapag wala sa saklaw o hindi mabasa, tahimik itong babalik sa default. | | `HTTP_PROXY` | _(hindi nakatakda)_ | Node.js standard | HTTP proxy para sa mga upstream na tawag. | | `HTTPS_PROXY` | _(hindi nakatakda)_ | Node.js standard | HTTPS proxy para sa mga upstream na tawag. | | `ALL_PROXY` | _(hindi nakatakda)_ | Node.js standard | Pangkalahatang proxy (sumusuporta sa `socks5://`). | | `OMNIROUTE_PROXY_ECHO_URL` | _(hindi nakatakda)_ | `src/lib/proxyEchoTarget.ts` | Itinatakda sa iisang URL ang target na echo-IP na ginagamit ng mga probe sa paglabas ng proxy. Kapag hindi nakatakda, sinusubukan ng probe ang `api64.ipify.org` at pagkatapos ay ang `api4.ipify.org` upang hindi maiulat na patay ang mga IPv4-only tunnel (#9694). | | `NO_PROXY` | _(hindi nakatakda)_ | Pamantayan ng Node.js | Mga hostname/IP na pinaghihiwalay ng kuwit upang lampasan ang proxy. | | `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Pinakamaraming sabay-sabay na socket sa bawat naka-cache na HTTP/SOCKS proxy dispatcher. Ang mga pangmatagalang SSE stream gaya ng Codex `/v1/responses` ay nangangailangan ng higit sa isang koneksyon kapag maraming kahilingan ang gumagamit ng parehong proxy sa antas ng account. Nililimitahan sa `256` ang mga halagang mas mataas dito. | | `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Timeout ng SOCKS5 handshake (connect) sa ms. Taasan ito kapag ang iisang residential gateway host ay nakakaranas ng mataas na concurrency (hal. 100 sabay-sabay na kahilingan) — maaaring lumampas sa 10s ang aktuwal na handshake kapag saturated ang pool kahit naaabot ang proxy, na kung hindi ay lalabas bilang maling `[Proxy Fast-Fail] Proxy unreachable`. Nililimitahan sa `120000`. | | `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Kapag `false` (default), ang kahilingang hindi ma-resolve ang nakatalagang proxy ay **tinatanggihan (fail-closed)** sa halip na gumamit ng direktang koneksyon bilang fallback — pinipigilan nito ang pagtagas ng tunay na IP. Itakda sa `true` upang ibalik ang legacy na DIRECT fallback. | | `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Ginagaya ang TLS fingerprint gamit ang wreq-js (ginagaya ang Chrome 124). Sinasalungat nito ang pag-block ng JA3/JA4. | | `TLS_FINGERPRINT_PROVIDERS` | _(hindi nakatakda)_ | `open-sse/utils/proxyFetch.ts` | Allowlist ng mga provider na pinaghihiwalay ng kuwit para sa bagong proxied TLS routing (`open-sse/utils/proxyFetch.ts`). Pinananatili ng direktang TLS ang legacy na gawi nito kapag hindi nakatakda; ang mga provider na ito lamang ang dumaraan sa Chrome-124 fingerprint bridge. Hindi kasama ang Groq (`api.groq.com`) kahit hindi nakatakda ang allowlist, dahil nagti-trigger ang Chrome JA3 ng Cloudflare 1010 samantalang naaabot ng native undici ang API. | | `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Pinahihintulutan ang Claude Turnstile Playwright browser context na balewalain ang mga error sa HTTPS certificate. | ### Mga Sitwasyon | Sitwasyon | Configuration | | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **SOCKS5 sa pamamagitan ng SSH tunnel** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` | | **Corporate HTTP proxy** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` | | **Anti-fingerprint** | `ENABLE_TLS_FINGERPRINT=true` — nangangailangan ng `wreq-js` (kasama) | | **Kontrolado ang egress / walang direktang access** | Panatilihing `PROXY_FAIL_OPEN=false` (default). Lubusang nabibigo ang mga kahilingan kapag hindi available ang proxy sa halip na tumagas sa pamamagitan ng direktang koneksyon. | | **Legacy / dev — payagan ang direktang fallback** | `PROXY_FAIL_OPEN=true`. Ibinabalik ang gawi bago ang hardening: ginagamit ang direktang koneksyon kapag nabigo ang pag-resolve sa proxy. | > **Tandaan (paglampas sa validation ng NVIDIA — #3226):** Ang endpoint ng NVIDIA para sa validation ng API key > ay natitigil kapag idinadaan sa global proxy/TLS-patched fetch (undici dispatcher → 504). > Sadyang nilalampasan ng `src/lib/providers/validation.ts::directHttpsRequest()` ang > proxy patch para sa nag-iisang validation call na iyon gamit ang `safeOutboundFetch({ bypassProxyPatch: true })`. > Isa itong dokumentado at limitadong exception — **hindi** nito naaapektuhan ang paglabas ng chat/usage. > Ang saklaw ng bypass ay nililimitahan ng `tests/unit/proxy-bypass-scope-guard-3226.test.ts`. --- ## 9. Integrasyon ng CLI Tool Kinokontrol kung paano natutuklasan at inilulunsad ng OmniRoute ang mga CLI sidecar (Claude Code, Codex, atbp.). | Variable | Default | Source File | Paglalarawan | | --------------------------------- | -------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = maghanap sa PATH ng system; `manual` = gumamit lamang ng mga tahasang path. | | `CLI_EXTRA_PATHS` | _(hindi nakatakda)_ | `src/shared/services/cliRuntime.ts` | Mga karagdagang entry sa PATH para sa pagtukoy ng CLI binary (pinaghihiwalay ng tutuldok). | | `CLI_CONFIG_HOME` | _(hindi nakatakda)_ | `src/shared/services/cliRuntime.ts` | I-override ang home directory para sa pagbasa ng mga CLI config (`~/.claude`, `~/.codex`). Dapat itong absolute at nasa loob ng process home — **o**, sa isang container, isang bind-mounted path (ganito gumagana ang `/host-home`). Anumang iba pa ay babalik sa home dir. | | `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Payagan ang OmniRoute na magsulat ng mga CLI config file (pag-refresh ng token, data ng session). Itakda sa `false` upang mabigo ang bawat pagsulat sa CLI config na may tahasang error na "hindi pinagana ang pagsusulat." | | `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Claude CLI binary. | | `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Codex CLI binary. | | `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Droid CLI binary. | | `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa OpenClaw CLI binary. | | `CLI_CURSOR_BIN` | `agent`, pagkatapos ay `cursor` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Cursor agent binary. Kung wala ito, susubukan muna ng pagtukoy ang `agent` at gagamitin ang `cursor` bilang fallback. | | `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Cline CLI binary. | | `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa 5dive CLI binary. | | `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | System state dir ng 5dive (mga auth profile na pagmamay-ari ng root); tumutugma sa sariling default na STATE_DIR ng 5dive. | | `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Continue CLI binary. | | `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Qoder CLI binary. | | `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Qwen Code CLI binary. | | `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Aider CLI binary. | | `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Goose CLI binary. | | `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Google Gemini CLI binary — para lamang sa server-side na pagtukoy at mga health check; nire-resolve ng `omniroute run gemini` ang `gemini` binary mula sa PATH ng system. | | `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa Kilo Code CLI binary. | | `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | Custom na path patungo sa OpenCode CLI binary. | | `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Hermes binary. Pinagsasaluhan ng parehong entry sa catalog (`hermes` at `hermes-agent`). | | `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa ForgeCode CLI binary. | | `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa jcode CLI binary. | | `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa DeepSeek TUI binary. | | `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa CodeWhale CLI binary. | | `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Smelt CLI binary. | | `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Pi (pi-coding-agent) binary. | | `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Crush CLI binary. | | `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Oh My Pi (`omp`) agent binary. | | `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Letta CLI binary. | | `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Prime Agent (Prime Intellect) binary. | | `CLI_WINDSURF_BIN` | _(wala)_ | `src/shared/services/cliRuntime.ts` | Pasadyang path patungo sa Windsurf binary. **Walang default na command** ang Windsurf — mananatiling naka-disable ang pagtukoy sa binary hanggang sa maitakda ito. | | `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Pasadyang path patungo sa Devin CLI binary (v3.8.0). Ginagamit ng Windsurf/Devin executor. | | `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | `ide_version` ng Devin Desktop. Dapat gamitin ng mga override ang format na `x.y.z`; babalik sa napatunayang default ang mga di-wastong value. | | `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | Naka-bundle na `extension_version` ng Codeium/language-server, na naiiba sa `ide_version` ng Desktop. Dapat gamitin ng mga override ang `x.y.z`; gagamitin ng mga di-wastong value ang naka-bundle na default. | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Override ng Devin CLI para lamang sa agentic bridge. Tinatanggap lamang ng executor ang lokal na ACP stdio upstream. | | `DEVIN_AGENTIC_HOME` | _(kinakailangan)_ | `open-sse/executors/devin-cli-agentic.ts` | Ganap at nakahiwalay na home para sa agentic Devin subprocess; ang mga tinatanggap na bridge path ay `/home/bridge` at mga `.sandbox` path na lokal sa task (sa Windows, `C:\...\.sandbox\...`). | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | Pinakamahabang tagal ng isang Devin ACP turn bago ihinto ng bridge ang child at magbalik ng tahasang timeout. | | `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | Pangunahing alias ng Claude Code model para sa nakahiwalay na bridge. Pinapalitan ng live harness ang halimbawa ng isang model na ibinalik ng kasalukuyang Devin account. | | `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias ng nakahiwalay na bridge na ginagamit kapag hinihiling ng Claude Code ang default nitong Sonnet. | | `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias ng nakahiwalay na bridge na ginagamit kapag hinihiling ng Claude Code ang default nitong Opus. | | `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias ng nakahiwalay na bridge na ginagamit kapag hinihiling ng Claude Code ang default nitong Haiku. | | `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Alias ng nakahiwalay na bridge na ginagamit para sa mga subagent ng Claude Code. | | `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Opsyonal na override para sa Codeium seat-management API na ginagamit ng quota ng Devin CLI (`GetUserStatus`). | | `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Override gamit ang absolute path para sa Augment (Auggie) CLI binary na ginagamit ng lokal na `auggie` provider. Kapag wala ito, gagamitin ang `CLI_AUGGIE_BIN`, at pagkatapos ay maghahanap sa PATH. | | `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Alias override para sa path ng Augment (Auggie) CLI binary (sinusuri pagkatapos ng `AUGGIE_BIN`). | | `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Binary na ginagamit para sa stdio client ng lokal na `zcode` provider. Kapag wala ito, gagamitin ang `zcode` sa PATH. | | `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | JSON array (≤16 na string) ng mga karagdagang argument na ipinapasa sa `zcode` binary kapag inilunsad sa pamamagitan ng `cliTools`. | | `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Working directory para sa subprocess ng ZCode app-server. | | `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Override para sa provider id na ipinapadala sa app-server. | | `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Root ng runtime ng ZCode app-server (kung saan matatagpuan ang kasamang `node` at `zcode-server.cjs`). | | `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Node executable na ginagamit upang patakbuhin ang ZCode app-server. | | `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Entry script ng app-server na ginagamit upang patakbuhin ang ZCode server. | | `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Timeout sa pagsisimula (ms) bago ituring na nabigo ang paglulunsad ng ZCode app-server. | | `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | RPC timeout kada request (ms) para sa isang tawag sa ZCode app-server. | | `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Pinakamahabang tagal (ms) ng isang ZCode turn bago ito i-timeout ng supervisor. | | `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Agwat ng polling (ms) para sa pagkumpleto ng ZCode turn. | | `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Home directory ng Hermes Agent kung saan binabasa/isinusulat ng OmniRoute ang config ng Hermes CLI. Tumutugma sa env var na itinatakda ng Hermes PowerShell installer sa Windows (`%LOCALAPPDATA%\hermes`). | ### Awtomatikong Pag-sync ng CLI Profile Ang mga feature flag na ito ay opt-in at naka-off bilang default. Maaari ding i-toggle ang mga ito mula sa dashboard ng CLI Code. | Variable | Default | Source File | Paglalarawan | | ------------------------------------- | ------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Pagkatapos ng pag-sync ng mga provider model, awtomatikong muling isinusulat ang mga profile file na `~/.codex/*.config.toml` mula sa live catalog. Kinakailangan ang `CLI_ALLOW_CONFIG_WRITES`; hindi nito kailanman binabago ang aktibo/default na Codex config, auth, mga setting ng Codex-lb, o piniling provider. | | `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Pagkatapos ng pag-sync ng mga provider model, awtomatikong muling isinusulat ang mga Claude Code profile file na `~/.claude/profiles//settings.json` mula sa live catalog. Kinakailangan ang `CLI_ALLOW_CONFIG_WRITES`; hindi nito kailanman binabago ang aktibo/default na Claude config, auth, o piniling provider. | ### Halimbawa ng Docker ```bash # I-mount ang mga host binary sa container at sabihin sa OmniRoute kung nasaan ang mga ito: CLI_EXTRA_PATHS=/host-cli/bin CLI_CONFIG_HOME=/host-home CLI_ALLOW_CONFIG_WRITES=true CLI_CLAUDE_BIN=/host-cli/bin/claude ``` Magkakabisa lamang ang `CLI_CONFIG_HOME` kapag ang path ay aktuwal na naka-bind mount mula sa host — ipares ito sa mga mount gaya ng `~/.codex:/host-home/.codex:rw` (tingnan ang profile na `host` sa `docker-compose.yml`). Binabalewala ang path na wala sa loob ng home ng user ng container at hindi rin isang bind mount, dahil mawawala ang anumang isusulat doon kapag muling ginawa ang container. Tumatakbo ang image bilang `USER node`, kaya ang hindi naka-mount na `/root` ay **hindi** isang wastong override. | Variable | Default | Source File | Paglalarawan | | ---------------------------------------- | -------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CONTAINER` | _(awtomatiko)_ | `src/shared/utils/containerEnv.ts` | Sapilitang i-on (`1`/`true`) o i-off (`0`/`false`) ang pagtukoy sa container. Kailangan lamang sa mga runtime na hindi natutukoy ng awtomatikong pagtukoy. | | `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Payagan pa rin ang pagsusulat ng config ng CLI tool sa isang hindi naka-mount na path ng container. Ang katumbas nito sa CLI ay `--allow-container-write`. | ### Mga helper ng CLI Binary (`omniroute`) Inaayos ng mga variable na ito ang sariling gawi ng `omniroute` CLI binary (hindi ang pagtukoy sa sidecar sa itaas). | Variable | Default | Source File | Paglalarawan | | ------------------------------------- | --------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_LANG` | _(system)_ | `bin/cli/i18n.mjs` | Sapilitang itakda ang wika ng output ng CLI. BCP-47 locale (hal. `en`, `pt-BR`). Ino-override ang mga env var ng locale ng system (LC_ALL, LC_MESSAGES). | | `OMNIROUTE_SHOW_LOG` | _(hindi nakatakda)_ | `bin/cli/runtime/processSupervisor.mjs` | Itakda sa `1` upang ipasa ang stdout/stderr ng server sa terminal sa supervised mode. Katumbas ng flag na `--log` sa `omniroute serve`. | | `OMNIROUTE_CLI_TOKEN` | _(hindi nakatakda)_ | `bin/cli/api.mjs` | Token para sa machine authentication na inilalagay bilang header na `x-omniroute-cli-token`. Awtomatikong binubuo sa task 8.12. | | `GEMINI_CLI_HOME` | _(hindi nakatakda)_ | `bin/cli/commands/setup-gemini.mjs` | Persistent na home root ng Gemini; gumagamit ang one-shot run ng pansamantalang nakahiwalay na home. | | `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Palugit sa milliseconds bago puwersahang patayin ang isang CLI child na pinadalhan ng signal. | | `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(hindi nakatakda)_ | `bin/omniroute.mjs` | Itakda sa 1 kasama ng tahasang DATA_DIR upang laktawan ang environment file ng data directory ng default na user. | | `OMNIROUTE_SYNC_TOKEN` | _(hindi nakatakda)_ | `bin/cli/commands/sync.mjs` | Sync token para sa `omniroute sync bundle` (sync token lamang ang tinatanggap ng `GET /api/sync/bundle`, hindi API key). Katumbas ng `--token`. | | `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | HTTP timeout sa bawat pagtatangka (ms) para sa mga request mula CLI → server. | | `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Pinakamahabang oras (ms) na hinihintay ng CLI ang health endpoint ng server bago mag-print ng babala tungkol sa timeout. Kapaki-pakinabang para sa mababagal na cold start (hal. Windows). Maaari ring itakda sa pamamagitan ng `--ready-timeout`. | | `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | Itakda sa `1` upang mag-print ng mga diagnostic ng retry/backoff sa stderr habang isinasagawa ang mga command ng CLI. | | `OMNIROUTE_PLUGIN_PATH` | _(hindi nakatakda)_ | `bin/cli/plugins.mjs` | Custom na directory para sa pagtuklas ng mga CLI plugin (mga package na `omniroute-cmd-*`). Kapag hindi nakatakda, ang default ay `~/.omniroute/plugins/`. Para sa CLI lamang — hindi ito kailanman umaabot sa server-side plugin scanner, na itinuturo ng `OMNIROUTE_PLUGINS_DIR` (seksyon 2). | | `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(hindi nakatakda)_ | `bin/omniroute.mjs` | Pigilan ang notification ng update ng CLI sa pag-exit ng process kapag itinakda sa anumang value na hindi empty. Hiwalay na nananatiling naka-disable ang abiso sa CI, quiet mode, at mga mode ng output na hindi text. | | `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(hinango)_ | `bin/cli/commands/doctor.mjs` | Liveness URL na sinusuri ng `omniroute doctor`. Mas inuuna ang isang programmatic na opsyong `livenessUrl`; kung wala, gagamitin ang value na ito nang eksakto. Kapag hindi nakatakda, hinahango ng CLI ang endpoint na `/api/health/degradation` ng lokal na dashboard. | | `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Path ng catalog ng provider na ginagamit ng mga CLI provider command. Mas inuuna ang isang programmatic na opsyong `catalogPath`. Ginagamit nang eksakto ang mga absolute path; ang mga relative path ay nire-resolve mula sa project root. Kapag hindi nakatakda, ginagamit ng CLI ang directory ng mga provider constant, kasama ang legacy na file na `providers.ts` bilang fallback. | | `OMNIROUTE_PROVIDER_TEST_MODEL` | _(default ng provider)_ | `bin/cli/provider-test.mjs` | Pangkalahatang fallback model para sa mga pagsubok ng koneksyon sa provider ng CLI. Ang pagkakasunod-sunod ng priyoridad ay ang naka-configure na connection model, override ng model na partikular sa provider, ang value na ito, at pagkatapos ay ang built-in na test model ng provider. | --- ## 10. Mga Integrasyon ng Internal Agent at MCP | Variable | Default | Source File | Paglalarawan | | ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_BASE_URL` | awtomatikong pagtukoy | `open-sse/mcp-server/server.ts` | Tahasang URL na gagamitin ng mga MCP/A2A tool upang maabot ang OmniRoute. Ino-override nito ang awtomatikong pagtukoy sa localhost. | | `OMNIROUTE_API_KEY` | _(hindi nakatakda)_ | Mga module ng MCP/A2A | API key para sa mga tawag ng internal MCP tool at A2A skill. | | `OMNIROUTE_API_KEY_ID` | _(hindi nakatakda)_ | `open-sse/mcp-server/audit.ts` | Key ID para sa atribusyon ng audit log ng MCP. | | `ROUTER_API_KEY` | _(hindi nakatakda)_ | Legacy | Legacy na alias para sa `OMNIROUTE_API_KEY`. | | `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | Bilang ng araw na pinananatili sa lokal na database ang kasaysayan ng gawain ng A2A bago magtanggal ng row ang arawang purge. Kapag hindi nakatakda, hindi numeriko, o `<= 0`, babalik ito sa `30`. | | `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | Kill switch para sa observability feature na memory hits ng A2A. Itakda sa `0` upang ganap na laktawan ang memory recall lookup para sa isang gawain; pananatilihin itong naka-enable ng anumang ibang value (kabilang ang hindi nakatakda). | | `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Ine-enable ang naka-record na triage endpoint ng offline/lokal na Issue Agent. Panatilihing naka-disable maliban kung tahasang nagpapatakbo ng mga lokal na naka-record na triage workflow. | | `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(hindi nakatakda)_ | `src/lib/issueAgent/execution.ts` | Timeout (ms) para sa isang naka-record na triage run ng Issue Agent. Nililimitahan sa isang internal na maximum; bumabalik sa built-in na default kapag hindi nakatakda o hindi valid. | | `OMNIROUTE_CONTEXT` | _(aktibong context)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Context/profile ng remote mode ng CLI para sa mga command na `omniroute`; ino-override ang aktibong context sa lokal na context store. Katumbas ng `--context `. | | `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | I-disable ang opsyonal na `keytar` OS-keychain backend para sa mga credential ng CLI context. Kapag naka-enable, mananatili ang mga credential sa `config.json` mode `0600` at maglalabas ang CLI ng isang beses na fallback warning; inilaan para sa sinasadyang headless/container operation. | | `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Ipatupad ang scope-based access control sa mga tawag ng MCP tool. | | `OMNIROUTE_MCP_SCOPES` | _(lahat)_ | `open-sse/mcp-server/server.ts` | Mga scope na pinaghihiwalay ng kuwit: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | I-compress ang mga paglalarawan ng MCP tool bago i-serialize ang manifest. Mga value para i-enable: `1`, `true`, `on`. | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | Compression algorithm/profile. Mga value para i-disable: `0`, `false`, `off`. | | `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | Abort budget (ms) para sa mga internal management read ng MCP server (health, resilience, combos, quota, usage). | | `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Badyet sa pag-abort (ms) para sa mga MCP hop na naghihintay sa isang provider (`route_request`, `web_search`, `web_fetch`). | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | Pinakamataas na bilang ng mga instance ng index ng lokal na corpus na naka-cache sa memory (LRU, isa sa bawat na-index na root directory). Nililimitahan sa minimum na `1`. | | `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | Agwat ng pag-sync ng catalog ng modelo sa oras. | | `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | Agwat ng pag-poll sa rate limit at quota ng provider. | | `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | Agwat (ms) sa pagitan ng magkakasunod na pagkuha ng OAuth quota sa isang maramihang pag-sync; paisa-isang kinukuha ang mga koneksyon ng OAuth upang maiwasan ang biglaang dagsa sa upstream. Hindi ito gagamitin kapag `0` (sabay-sabay). | | `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Pinakamababang agwat (ms) sa pagitan ng magkakasunod na pagkuha ng upstream quota sa preflight/monitor path ng bawat request; binibigyan ng pagitan ang magkakasabay na network call upang hindi magdulot ng biglaang dagsa sa upstream ang maraming account sa iisang IP. Nakakonekta sa mga quota fetcher ng Codex (`/wham/usage`), DeepSeek, Bailian (parehong fetch site), OpenCode, at Crof (#6009, #6911). Hindi pa saklaw ang generic na dispatch path na `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/etc.) — hiwalay itong sinusubaybayan. Hindi naaapektuhan ang mga cache hit. Dini-disable ng `0`; nililimitahan sa `0..5000`. | | `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Pagkaantala (ms) bago i-refresh ang mga limitasyon ng provider pagkatapos ng isang aktuwal na pangyayari sa paggamit, upang bigyan ng oras ang upstream quota API na maitala ang pagkonsumo. | | `OMNIROUTE_LOGIN_BROWSER_PATH` | awtomatikong matutukoy | `open-sse/services/adobeFireflyBrowserLogin.ts` | Ganap na path patungo sa executable ng system Chrome o Edge na ginagamit para sa interaktibong pag-sign in sa Adobe Firefly at pag-renew sa labas ng screen. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | naka-enable | `open-sse/services/adobeFireflySession.ts` | Pinananatiling napapanahon ang IMS at browser-risk state gamit ang mga Chrome CDP session na nakatalaga sa account. Itakda sa `0` upang i-disable ang pag-renew ng browser. | | `ADOBE_FIREFLY_SESSION_DISK` | naka-enable | `open-sse/services/adobeFireflySession.ts` | Pinapanatili sa ilalim ng `DATA_DIR` ang mga naayos na Adobe session sa kabila ng mga pag-restart ng proseso. Itakda sa `0` upang sa memory lamang panatilihin ang mga session. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Pinakamababang agwat sa millisecond sa pagitan ng mga pagsusumite para sa pagbuo ng Adobe Firefly; dini-disable ng `0` ang agwat. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Karagdagang tahimik na panahon sa millisecond pagkatapos ng bawat ikatlong matagumpay na pagsusumite sa Adobe. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | Batayang backoff sa millisecond pagkatapos ng mga pansamantalang tugon na Adobe 408; isinasama sa agwat ng pagsusumite sa loob ng hindi hihigit sa limang pagtatangka. | | `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | I-disable ang lahat ng serbisyo sa background (pag-sync, pagpepresyo, pag-refresh ng modelo). Kapaki-pakinabang para sa CI/pagsubok. | | `OMNIROUTE_HEADLESS` | _(hindi nakatakda)_ | `src/lib/system/headless.ts` | Pag-boot na proxy engine lamang: nilalaktawan ang mga opsyonal na subsystem, `/dashboard` → 404. Katulad ng `omniroute serve --headless`. Tingnan ang [HEADLESS.md](../guides/HEADLESS.md). | | `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(hindi nakatakda)_ | `src/lib/config/runtimeSettings.ts` | Piliting i-on ang mga gawain sa background kapag natukoy ang awtomatikong pagsubok. Itakda sa `1` upang i-override ang heuristic ng pagsubok. | | `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | Dalas ng pagsusuri sa pag-reset ng badyet (ms). Pinakamababa `10000`. | | `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | Dalas ng maagap na pag-recover mula sa cooldown ng koneksyon (ms): muling bine-validate ang mga koneksyong lumipas na ang pansamantalang `rate_limited_until`, sa labas ng hot path ng kahilingan. Pinakamababa `5000`. | | `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | I-disable ang scheduler para sa maagap na pag-recover mula sa cooldown ng koneksyon (patuloy pa ring nalalapat ang lazy recovery sa `getProviderCredentials`). | | `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Dalas ng paglilinis ng reasoning cache (ms). Pinakamababa `60000`. | | `OMNIROUTE_REASONING_MIN_BUDGET` | _hindi nakatakda_ (naka-disable) | `open-sse/services/reasoningTokenBuffer.ts` | Opsyonal na pinakamababang halaga para sa mga output budget ng thinking model: ang `max_tokens` ng tumatawag na nasa `[256, floor)` ay itinataas sa pinakamababang halaga (nililimitahan ng output cap ng modelo). Hindi nakatakda = hindi kailanman pinalalaki ang mga badyet ng client (#9507). | | `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _hindi nakatakda_ (naka-disable) | `open-sse/services/learnedReasoningEffortCaps.ts` | Opsyonal at pinaghihiwalay ng kuwit na mga ID ng provider (o `*`): kapag walang tinukoy na tinatanggap na hanay ang isang 400/422 ng `reasoning_effort`, muling susubok nang isang beses sa isang antas na mas mababa (hindi kailanman bababa sa `low`) at pag-aaralan lamang ang antas na iyon kung nasagot ang probe (#14895). | | `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Cron expression (UTC) para sa trabaho ng pag-export ng call log na kumukuha mula sa bawat naka-enable na destinasyon ng pag-export ng log. | | `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Agwat ng polling (ms) para sa hot-reload ng config. Tinatanggihan ang mas mababa sa `1000`. | | `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(naka-enable)_ | `src/lib/db/apiKeys.ts` | Itakda sa `1` upang lampasan ang auth cache ng API key na gumagamit ng Redis (pinipilit ang mga pagbasa sa DB). | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | Pagkatiwalaan ang mga panuntunan sa filter ng proyektong RTK na pinamamahalaan ng user nang walang mahihigpit na pagsusuri sa lagda. | | `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | Limitasyon sa bilang ng character para sa maagap na pagputol ng resulta ng tool sa Lite kapag hindi nakatakda ang `lite.maxToolLength`. Saklaw na 256–1000000. Mas inuuna ang setting sa dashboard kaysa sa env na ito. | | `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | Pinakamaraming magkakasabay na synchronous RTK/Caveman worker; naghihintay nang FIFO ang mga sobrang trabaho. | | `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Timeout bawat trabaho sa millisecond. Tinatapos ang mga worker na nag-timeout at nagpapatuloy nang hindi binabago ang kahilingan. | | `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | Panahon ng idle sa millisecond bago tapusin ang isang hindi ginagamit na compression worker. | | `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Limitasyon sa MB ng old-generation heap ng V8 para sa bawat compression worker, sa lahat ng mode (pinakamababa `128`). Ang trabahong lumampas dito ay nagpapatuloy nang hindi naka-compress sa halip na palakihin ang heap ng gateway. | | `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Pangunahing switch ng per-engine circuit breaker para sa T02 stacked pipeline. **Opsyonal (naka-off bilang default)** — kapag naka-on, nilalaktawan nang pansamantala ang isang engine na paulit-ulit na nagdudulot ng exception sa iba’t ibang kahilingan (fail-open); naka-off = byte-identical na legacy behavior. | | `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Bilang ng magkakasunod na kabiguan sa iba’t ibang kahilingan bago bumukas ang breaker ng isang engine. | | `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Mga millisecond na nananatiling nilalaktawan ang isang nakabukas na engine bago ang isang half-open na probe. | | `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | T08/H8 CCR retrieval-feedback ramp: bawat naunang pagkuha ng isang nakaimbak na block ay linearly na nagpapataas sa epektibong `minChars` nito (mas kaunti ang compression sa content na madalas kunin; `>=3` pagkuha = hindi kailanman kino-compress). Idi-disable ng `1` ang ramp (binary skip lamang sa threshold). | | `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | Durable block store ng CCR (#9061). Sinusuportahan nito ang in-memory store gamit ang SQLite upang manatili ang isang block kahit matapos ang LRU eviction, ang TTL, isang restart, o kapag napunta ang pagkuha sa ibang instance. Itakda sa `false` upang panatilihin lamang sa memory ang mga block. Mananatiling memory-only ang mga block na lampas sa 512KB at ang mga cloud runtime anuman ang setting. | | `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Pangunahing switch ng T08/H5 usage-observed prefix freeze. **Opt-in (naka-off bilang default)** — kapag naka-on, ang isang system prompt na naobserbahang `>=` sa threshold ay itinuturing na stable at cacheable na prefix at pinananatili laban sa compression kahit para sa mga provider na hindi natutukoy ng static cache heuristic (ang freeze ay _nagpapanatili_ lamang, hindi kailanman nagbabago). | | `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Bilang ng mga obserbasyon sa isang system prompt bago ito ituring na frozen at stable na prefix. | | `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Itinatakda sa `true` ng bootstrap script pagkatapos ng paunang setup. Kinokontrol ang visibility ng setup wizard. | | `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Escape hatch: payagan ang request body na i-override ang project field ng Antigravity. | | `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Patakaran sa Google One AI credits: ang `off` ay hindi kailanman nag-i-inject ng credits, ang `retry` ay isang beses na nag-i-inject pagkatapos ng kwalipikadong quota 429, at ang `always` ay nag-i-inject sa unang request. | | `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Payagan ang Antigravity request translator na laktawan ang mahigpit nitong validation sa CLI request signature kapag tinatanggihan ng upstream ang mga tunay na signature (debug/lumang-CLI mode). Ine-enable ng anumang value na hindi zero ang bypass. | | `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | I-override ang token-file path ng Antigravity CLI (agy) para sa auto-detect na pag-import ng lokal na login. | ### OAuth CLI Bridge (Internal) | Variable | Default | Source File | Paglalarawan | | ------------------- | ------------------- | ------------------------------- | ------------------------------------------------ | | `OMNIROUTE_SERVER` | auto-detect | `src/lib/oauth/config/index.ts` | URL ng server para sa CLI↔OmniRoute auth bridge. | | `OMNIROUTE_TOKEN` | _(hindi nakatakda)_ | `src/lib/oauth/config/index.ts` | Auth token para sa CLI bridge. | | `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | User ID para sa mga session ng CLI bridge. | | `SERVER_URL` | _(hindi nakatakda)_ | `src/lib/oauth/config/index.ts` | Legacy na alias para sa `OMNIROUTE_SERVER`. | | `CLI_TOKEN` | _(hindi nakatakda)_ | `src/lib/oauth/config/index.ts` | Legacy na alias para sa `OMNIROUTE_TOKEN`. | | `CLI_USER_ID` | _(hindi nakatakda)_ | `src/lib/oauth/config/index.ts` | Legacy na alias para sa `OMNIROUTE_USER_ID`. | --- ## 11. Mga Kredensyal ng OAuth Provider Mga built-in na kredensyal para sa **localhost development**. Para sa mga remote deployment, irehistro ang sarili mo sa developer console ng bawat provider. | Variable | Provider | Mga Tala | | :------------------------------------------ | :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | Pampublikong client — walang sikreto na kailangan. | | `CLAUDE_CODE_REDIRECT_URI` | Claude Code | I-override ang redirect URI. Default: `https://platform.claude.com/oauth/code/callback` | | `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Pampublikong client. | | `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Nangangailangan ng katugmang `_SECRET`. | | `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — | | `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | Pampublikong client. | | `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | Opsyonal na override para sa pampublikong Muse CLI device-flow client id. Hayaan itong hindi nakatakda upang gamitin ang nakapaloob na pampublikong client. | | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Nangangailangan ng katugmang `_SECRET`. | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Pampublikong client. | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Opsyonal na override para sa OAuth client id ng GitHub Enterprise Copilot. Babalik sa pampublikong default ng `GITHUB_OAUTH_CLIENT_ID` kapag hindi nakatakda. | | `COPILOT_INTEGRATION_ID` | GitHub Copilot | Opsyonal na override para sa GitHub Copilot client integration ID na ipinapadala sa `Copilot-Integration-Id` at `Editor-Plugin-Version` headers. Nagde-default sa `copilot-developer-cli`. | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | API key fallback na ginagamit ng `open-sse/executors/devin-cli.ts` kapag walang available na kredensyal bawat koneksyon. Opsyonal. | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Custom na path sa Devin CLI binary (`devin`). Nireresolba ng `open-sse/executors/devin-cli.ts`. | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | OAuth client ID para sa GitLab Duo. Magrehistro ng app sa `https://gitlab.com/-/profile/applications` na may redirect URI `/callback` at scopes na `api, read_user, openid, profile, email`. Babalik sa `GITLAB_OAUTH_CLIENT_ID`. | | `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | OAuth client secret para sa GitLab Duo. Opsyonal — hindi nangangailangan ng sikreto ang PKCE flow. Babalik sa `GITLAB_OAUTH_CLIENT_SECRET`. | | `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | I-override ang GitLab base URL (self-hosted GitLab). Nagde-default sa `https://gitlab.com`. Babalik sa `GITLAB_BASE_URL`. | | `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Legacy fallback para sa `GITLAB_DUO_BASE_URL`. Ginagamit kapag hindi nakatakda ang variant na `_DUO_`. | | `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Legacy fallback para sa `GITLAB_DUO_OAUTH_CLIENT_ID` na ginagamit ng `src/lib/oauth/constants/oauth.ts`. | | `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Legacy fallback para sa `GITLAB_DUO_OAUTH_CLIENT_SECRET` na ginagamit ng `src/lib/oauth/constants/oauth.ts`. | | `QODER_OAUTH_CLIENT_SECRET` | Qoder | — | | `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Itakda upang paganahin ang Qoder OAuth. | | `QODER_OAUTH_TOKEN_URL` | Qoder | — | | `QODER_OAUTH_USERINFO_URL` | Qoder | — | | `QODER_OAUTH_CLIENT_ID` | Qoder | — | | `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | Direktang fallback ng API key (nilalampasan ang OAuth). | | `QODER_CLI_WORKSPACE` | Qoder | Workspace ID para sa Qoder CLI. | | `OMNIROUTE_QODER_WORKSPACE` | Qoder | Alias para sa `QODER_CLI_WORKSPACE`. | | `QODER_CLI_CONFIG_DIR` | Qoder | I-override ang Qoder CLI config dir (nakahiwalay na PAT session, iniiwasan ang pag-clobber ng browser login). | | `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Frontend `tk` token na ipapadala bilang `validated` sa `/api/chat`. Kinakailangan kapag ipinapatupad ng Blackbox ang pagtutugma ng token; kung hindi, ang OmniRoute ay babalik sa isang random na UUID. Tingnan ang isyu #2252. | | `VISION_BRIDGE_BASE_URL` | Vision Bridge guardrail | OpenAI-compatible base URL para sa mga tawag sa vision-bridge na hindi Anthropic. Nagde-default sa legacy na OpenAI URL env o api.openai.com. Ituro sa `/v1` self-loop ng OmniRoute o anumang OpenAI-compat endpoint (Gemini OpenAI-compat, OpenRouter). Isyu #2232. Kapag ang URL ay sariling `/v1` ng OmniRoute, ang describe sub-request ay nagpapadala ng `x-omniroute-admission-bypass: internal` at nagpapatunay gamit ang nalutas na self-loop credential (`sk_omniroute` sentinel sa local mode, o `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) upang gumana ang mga deployment na `REQUIRE_API_KEY=true`. | | `VISION_BRIDGE_API_KEY` | Vision Bridge guardrail | API key para sa URL sa itaas. Ina-override ang per-provider na OpenAI / Google env vars para sa mga tawag sa vision-bridge na hindi Anthropic. Pinapanatili ng mga modelong Anthropic ang kanilang nakalaang Anthropic key path. Isyu #2232. | | `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge guardrail | Gaano katagal naka-cache ang isang "walang magagamit na kandidato" na resulta ng pagruruta, sa ms (default `30000`). Ang mga invalid o negatibong halaga ay babalik sa default; `0` ay nagdi-disable ng negative cache. Pinagmulan: `src/lib/guardrails/visionBridgeRouter.ts`. | > [!WARNING] > > 1. Pumunta sa [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) > 2. Gumawa ng OAuth 2.0 Client ID (uri: "Web application") > 3. Idagdag ang URL ng iyong server bilang Authorized redirect URI > 4. Palitan ang mga halaga ng credential sa `.env`. --- ## 12. Mga Override ng User-Agent ng Provider I-override ang header na `User-Agent` na ipinapadala sa bawat upstream provider. Dinamikong nire-resolve ito sa runtime ng base class ng executor: ``` process.env[`${PROVIDER_ID}_USER_AGENT`] ``` > **Pinagmulan:** `open-sse/executors/base.ts` → `buildHeaders()` | Variable | Default na Value | Kailan Ia-update | | -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Kapag naglabas ang Anthropic ng bagong bersyon ng CLI | | `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Itakda sa `1`/`true` upang ipasa nang verbatim sa Anthropic ang mga pangalan ng tool ng third-party harness sa parehong path na patungo sa Anthropic (native OAuth at CLIProxyAPI). Bilang default, deterministikong binibigyan ng executor ng alias ang mga pangalan ng tool na hindi mula sa Claude Code (canonical mapping ng Claude Code kapag mayroon, kung wala ay PascalCase) at ibinabalik ang mga ito sa orihinal sa tugon sa pamamagitan ng `_toolNameMap`, upang hindi tanggihan ang mga harness na may mga snake_case tool bilang mga third-party client na natukoy sa pamamagitan ng fingerprinting. Para lamang sa pag-debug. | | `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | Kapag in-update ng OpenAI ang Codex CLI | | `CODEX_CLIENT_VERSION` | `0.155.0` | I-override ang bersyon ng Codex client nang hiwalay sa buong UA string | | `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | I-override ang ina-advertise na bersyon ng Claude Code nang hiwalay sa `CLAUDE_USER_AGENT`. Nililimitahan ng Anthropic ang ilang modelo batay sa value na ito (#12417). | | `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | I-override ang 3-character suffix na idinaragdag ng OmniRoute sa `cc_version=` sa billing block ng Claude. Taasan kasabay ng `CLAUDE_CODE_CLIENT_VERSION` — ang pag-pin lamang sa bersyon ay nag-a-advertise ng pares na `version.revision` na hindi inilalabas ng anumang tunay na binary. | | `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | I-override ang ina-advertise na bersyon ng Copilot CLI nang hiwalay sa `GITHUB_USER_AGENT` | | `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | Kapag in-update ang GitHub Copilot Chat | | `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | Kapag in-update ang Antigravity IDE | | `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | Kapag in-update ang Kiro IDE | | `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | I-override ang `clientId` (pampublikong id) ng social device-code ng Kiro | | `KIRO_VERIFY_FULL_CRC` | `false` | Opsyonal na pag-enable: buong per-frame message CRC validation sa Kiro event stream (para i-debug ang mga sirang stream) | | `QODER_USER_AGENT` | `Qoder-Cli` | Kapag in-update ang Qoder CLI | | `CURSOR_USER_AGENT` | `Cursor/3.3` | Kapag in-update ang Cursor | > [!TIP] > Maaari kang magdagdag ng mga override ng User-Agent para sa **anumang** provider gamit ang pattern na `{PROVIDER_ID}_USER_AGENT`. Dinamikong binubuo ng executor ang pangalan ng env var. --- ## 13. Pagkakatugma ng CLI Fingerprint Kapag pinagana, muling inaayos ng OmniRoute ang mga HTTP header at field ng JSON body upang tumugma sa eksaktong signature ng mga opisyal na CLI tool. Binabawasan nito ang panganib na ma-flag ang account habang pinananatili ang iyong proxy IP. **Pinagmulan:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts` ### Bawat Provider | Variable | Pag-activate | Epekto | | ------------------------ | ------------ | --------------------------------------------------- | | `CLI_COMPAT_CODEX` | `=1` | Ginagaya ang signature ng request ng Codex CLI | | `CLI_COMPAT_CLAUDE` | `=1` | Ginagaya ang signature ng request ng Claude Code | | `CLI_COMPAT_GITHUB` | `=1` | Ginagaya ang signature ng request ng GitHub Copilot | | `CLI_COMPAT_ANTIGRAVITY` | `=1` | Ginagaya ang signature ng request ng Antigravity | | `CLI_COMPAT_CURSOR` | `=1` | Ginagaya ang signature ng request ng Cursor | | `CLI_COMPAT_KIMI_CODING` | `=1` | Ginagaya ang signature ng request ng Kimi Coding | | `CLI_COMPAT_KILOCODE` | `=1` | Ginagaya ang signature ng request ng Kilo Code | | `CLI_COMPAT_CLINE` | `=1` | Ginagaya ang signature ng request ng Cline | ### Pangkalahatan | Variable | Pag-activate | Epekto | | ---------------- | ------------ | --------------------------------------------------------------------------------------- | | `CLI_COMPAT_ALL` | `=1` | Paganahin nang sabay-sabay ang fingerprint compatibility para sa **lahat** ng provider. | ### Mga override sa pagkakakilanlan ng Kimi Coding CLI | Variable | Default | Source File | Paglalarawan | | ----------------------- | -------------------- | ---------------------------------------- | ------------------------------------------------------------------------- | | `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | I-override ang bersyon ng Kimi CLI na ipinapadala sa mga OAuth/API call. | | `KIMI_CODING_DEVICE_ID` | _(nakuhang default)_ | `src/lib/oauth/providers/kimi-coding.ts` | I-override ang nakuhang Kimi device ID na ginagamit sa mga client header. | > [!NOTE] > Gumagana ang feature na ito kasabay ng mga User-Agent override (§12). Pinangangasiwaan ng fingerprint system ang pagkakasunod-sunod ng mga header at field ng body, habang pinangangasiwaan ng mga User-Agent override ang partikular na UA string. Maaaring paganahin ang dalawa nang magkahiwalay. --- ## 14. Mga Provider ng API Key Mga API key para sa mga provider na gumagamit ng direktang authentication. **Inirerekomendang pag-set up:** Dashboard → Providers → Add API Key. Alternatibo ang pagtatakda sa pamamagitan ng mga environment variable para sa mga Docker o headless deployment. Kinikilalang pattern: `{PROVIDER_ID}_API_KEY` | Variable | Provider | | ------------------ | ------------------------------------------------------- | | `DEEPSEEK_API_KEY` | DeepSeek | | `NVIDIA_API_KEY` | NVIDIA NIM | | `JINA_AI_API_KEY` | Jina AI (Foundation API + Reader fallback) | | `JINA_API_KEY` | Jina AI (alias para sa `JINA_AI_API_KEY`) | | `GEMINI_API_KEY` | Gemini (Google AI Studio) embeddings + fallback ng chat | | `GOOGLE_API_KEY` | Gemini (alias para sa `GEMINI_API_KEY`) | > [!NOTE] > Inalis sa v3.8.0 ang mga static na `${PROVIDER}_API_KEY` entry para sa Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius, at Qianfan dahil hindi na binabasa ng runtime ang mga ito — eksklusibong umaasa ang mga provider na iyon sa Dashboard / `data/provider-credentials.json` / naka-encrypt na DB. Tingnan ang seksyong _Audit: Mga Inalis / Hindi na Ginagamit na Variable_ sa ibaba ng dokumentong ito para sa paraan ng migration. > [!TIP] > Ang mga key na itinakda sa pamamagitan ng Dashboard ay iniimbak nang naka-encrypt sa SQLite at inuuna kaysa sa mga environment variable. > > **Jina:** Ang `jina-ai/…` embeddings, rerank, classify, segment, at `jina-search` ay **hindi** naniningil sa isang cluster env key kapag may umiiral na dashboard connection na `jina-ai` (o nakabahaging `jina-reader`) — fill-first ang `getProviderCredentials`. Ginagamit lamang ang `JINA_AI_API_KEY` / `JINA_API_KEY` kapag walang magagamit na dashboard key. Itinatala ng mga call log ang env fallback bilang `connection_id=env:JINA_AI_API_KEY`. Hindi kailanman nagsisilbi ang Reader card (`jina-reader`, `r.jina.ai`) sa `/v1/embeddings` o `/v1/rerank`. > > **Gemini:** Ginagamit muna ng `gemini/gemini-embedding-2` (alias na `google/gemini-embedding-2`) ang dashboard connection na `gemini`. Ginagamit lamang ang `GEMINI_API_KEY` / `GOOGLE_API_KEY` kapag walang magagamit na dashboard key. Itinatala ng mga call log ang env fallback bilang `connection_id=env:GEMINI_API_KEY`. Gumagamit ang native multimodal traffic ng `x-goog-api-key` laban sa `:embedContent` / `:batchEmbedContents` — ang N OpenAI `input` item ay nagiging N vector. --- ## 15. Mga Setting ng Timeout Ang lahat ng value ay nasa **millisecond**. Sentralisado ang paglutas sa `src/shared/utils/runtimeTimeouts.ts`. ### Hierarkiya ng Timeout ``` REQUEST_TIMEOUT_MS (pangkalahatang override) ├─→ FETCH_TIMEOUT_MS (mga tawag sa upstream provider, default: 600000) │ ├─→ FETCH_HEADERS_TIMEOUT_MS (namamana mula sa FETCH_TIMEOUT_MS) │ ├─→ FETCH_BODY_TIMEOUT_MS (namamana mula sa FETCH_TIMEOUT_MS) │ ├─→ TLS_CLIENT_TIMEOUT_MS (namamana mula sa FETCH_TIMEOUT_MS) │ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (hiwalay, default: 10000) │ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (hiwalay, default: 15000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (hiwalay, default: 0 = naka-off, iminumungkahi: 30000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (hiwalay, default: 2) │ ├── FETCH_CONNECT_TIMEOUT_MS (hiwalay, default: 30000) │ └── FETCH_KEEPALIVE_TIMEOUT_MS (hiwalay, default: 4000) ├─→ STREAM_IDLE_TIMEOUT_MS (namamana mula sa REQUEST_TIMEOUT_MS, default: 600000) ├─→ STREAM_ACTIVE_TIMEOUT_MS (hiwalay, default: 1260000; dini-disable ng 0) ├─→ STREAM_READINESS_TIMEOUT_MS (namamana mula sa REQUEST_TIMEOUT_MS, default: 80000) ├─→ STREAM_READINESS_MAX_TIMEOUT_MS (nililimitahan ang mga adaptibong pagpapahaba ng kahandaan, default: 180000) └─→ API_BRIDGE_PROXY_TIMEOUT_MS (namamana mula sa REQUEST_TIMEOUT_MS, default: 30000) ├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (hinango, default: 300000) ├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (default: 60000) ├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (default: 5000) └── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (default: 0 = naka-disable) ``` | Variable | Default | Paglalarawan | | ----------------------------------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | _(hindi nakatakda)_ | Pandaigdigang shortcut — ino-override ang mga default ng `FETCH_TIMEOUT_MS` at `STREAM_IDLE_TIMEOUT_MS`. | | `FETCH_TIMEOUT_MS` | `600000` | Kabuuang timeout ng HTTP request para sa mga tawag sa upstream provider. | | `STREAM_IDLE_TIMEOUT_MS` | `600000` | Pinakamahabang katahimikan sa pagitan ng mga raw upstream byte bago ihinto. Bihirang huminto nang >90s ang mga extended-thinking model. | | `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Pinakamahabang kabuuang tagal ng aktibong SSE stream; hindi kailanman nagre-reset dahil sa mga upstream byte at hiwalay ito sa `REQUEST_TIMEOUT_MS`. Hinango mula sa pinakamalaking per-model na `timeoutMs` sa registry (1200000, Codex) kasama ang 60000 na palugit, upang ang isang model na pinapayagang ubusin ang buong budget nito ay hindi maputol habang sumasagot. Itakda sa `0` upang i-disable. | | `OMNIROUTE_SSE_COMMENTS` | _(naka-disable)_ | Kung maaaring maglabas ang OmniRoute ng mga linya ng komentong SSE na `:` (hal. ang `: keepalive` heartbeat at mga metadata trailer na `x-omniroute-*`). Naka-disable bilang default (#10524) dahil ini-`JSON.parse` ng mga mahigpit na OpenAI-compatible client ang bawat linya ng SSE at nagka-crash sa mga komentong `:`; hindi naaapektuhan ang mga heartbeat na `data:`. Itakda sa `on`/`true`/`1`/`yes` upang muling mag-opt in. Ginagamit ng `open-sse/utils/sseHeartbeat.ts`. | | `SSE_COALESCE_MS` | `0` (naka-off) | Opt-in: pagsamahin ang magkakasunod na Claude `content_block_delta` event (parehong block index at delta type) na ipinapadala sa mga Claude client, na nagfa-flush nang hindi bababa sa bawat N ms. Walang nawawalang data; hindi kailanman pinagsasama ang `signature_delta` at mga boundary event. Nalalapat sa bawat delta type maliban kung nakatakda ang isang per-type na variable sa ibaba. Ginagamit ng `open-sse/utils/sseDeltaCoalesce.ts`. | | `SSE_COALESCE_THINKING_MS` | `0` (naka-off) | Per-type na override ng `SSE_COALESCE_MS` para sa `thinking_delta`. | | `SSE_COALESCE_TEXT_MS` | `0` (naka-off) | Per-type na override ng `SSE_COALESCE_MS` para sa `text_delta`. | | `SSE_COALESCE_INPUT_JSON_MS` | `0` (naka-off) | Per-type na override ng `SSE_COALESCE_MS` para sa `input_json_delta`. | | `SSE_FRAME_COALESCE_MS` | `0` (naka-off) | Opt-in: pagsama-samahin sa isang write papunta sa client ang mga SSE frame na ipinapasa sa loob ng N ms. Hindi kailanman inaantala ang unang frame at mga terminal frame (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`); kapag naka-on ang batching, sinusukat ng ITL ang mga pagitan ng batch. Ginagamit ng `open-sse/utils/sseOutputSink.ts`. | | `SSE_STALL_WATCHDOG` | `timer` | Implementasyon ng byte-stall watchdog para sa mga naka-stream na response. Muling ina-arm ng `timer` ang isang timer para sa bawat upstream chunk (eksaktong nagti-trigger sa stall budget); nagpapanatili ang `interval` ng isang pagsusuri bawat stream na may period na `clamp(budget/4, 1s, 5s)`, kaya magti-trigger ang stall sa loob ng budget + period. Ginagamit ng `open-sse/utils/streamStallWatchdog.ts`. | | `STREAM_READINESS_TIMEOUT_MS` | `80000` | Oras upang matanggap ang unang hindi ping na SSE event. Minamana ang `REQUEST_TIMEOUT_MS` kapag nakatakda. | | `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Pinakamahabang adaptive na readiness window para sa unang event ng malalaki, maraming tool, o mataas ang reasoning na streaming request. | | `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Kill-switch para sa heuristic na `/goal`. Itakda sa `false`/`0`/`off` upang ganap na i-disable ang detection — hindi kailanman itinataas ng request body/mga header ang mga readiness timeout at stream recovery, na nagpapagaan sa client-controlled timeout amplification. | | `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Pinakamahabang readiness window para sa unang event ng mga natukoy na `/goal` agent run o mga request na ipinilit gamit ang `x-omniroute-agent-goal`. | | `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Awtomatikong paganahin ang maagang stream recovery para sa mga natukoy na `/goal` agent run. Itakda sa `false`/`0`/`off` upang i-disable ang goal-specific na opt-in. Maaari lamang itong MAGDAGDAG ng recovery sa ibabaw ng default ng operator — hindi nito kailanman ino-override ang tahasang pag-opt out sa pamamagitan ng `STREAM_RECOVERY_ENABLED`/mga setting ng DB. | | `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Alisin ang mga hindi pamantayang `codex.*` SSE event (hal. `codex.rate_limits`) na nagdudulot ng pagkasira ng `responses.stream()` ng OpenAI SDK na may 502. Naka-ON bilang default (#11014). Itakda sa `0`/`false`/`no`/`off` upang ipasa ang mga ito. | | `OMNIROUTE_CODEX_APPSERVER_WS` | _(hindi nakatakda)_ | Opt-in na transport ng Codex app-server. WebSocket endpoint (`ws://`/`wss://`) ng isang lokal na `codex app-server` sidecar. Kapag nakatakda kasama ng isang token, idinadaan ang mga Codex request sa JSON-RPC patungo sa sidecar sa halip na sa HTTP Responses API. Maaari ring itakda sa bawat koneksyon sa pamamagitan ng `providerSpecificData.codexAppServerUrl`. Ginagamit ng `open-sse/executors/codex/appServerConfig.ts`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(hindi nakatakda)_ | Inline capability/bearer token na ipinapakita sa app-server. Override sa bawat koneksyon: `providerSpecificData.codexAppServerToken`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(hindi nakatakda)_ | Path sa file na naglalaman ng capability token ng app-server (mula sa `codex app-server --ws-token-file`). Ginagamit kapag hindi nakatakda ang `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN`. Override bawat koneksyon: `providerSpecificData.codexAppServerTokenFile`. | | `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Working directory kung saan tumatakbo ang turn ng app-server. Override bawat koneksyon: `providerSpecificData.codexAppServerCwd`. | | `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(hindi nakatakda)_ | Patakaran sa pag-apruba na ipinapasa sa turn ng app-server (hal. `never`, `on-request`). Override bawat koneksyon: `providerSpecificData.codexAppServerApprovalPolicy`. | | `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(hindi nakatakda)_ | Patakaran sa sandbox na ipinapasa sa turn ng app-server (hal. `read-only`, `workspace-write`, `danger-full-access`). Kapag hindi nakatakda, magiging default ng executor ang `workspace-write` (pinatibay; dating `danger-full-access`). Override bawat koneksyon: `providerSpecificData.codexAppServerSandbox`. | | `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Awtomatikong aprubahan ang sariling mga prompt sa pag-apruba ng app-server (pagpapatupad ng command/file/permission sa host). Naka-off bilang default — awtomatikong tinatanggihan ang mga prompt; hindi naaapektuhan ang mga tool call ng harness (dumadaan ang mga ito sa hiwalay na `item/tool/call` passthrough). Tumatanggap ng `true`/`1`/`yes`. Override bawat koneksyon: `providerSpecificData.codexAppServerAutoApprove`. | | `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Oras para matanggap ang mga header ng tugon. | | `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | Pinakamahabang paghihintay sa mga header ng tugon para sa mga streaming request (ms). Idi-disable ng `0` ang limitasyong ito; may priyoridad ang tahasang `fetchStartTimeoutCapMs` ng provider. | | `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30s) | Pinakamahabang paghihintay sa pagsisimula ng tugon (ms) para sa bawat direktang pagtatangkang walang proxy. Kapag nag-timeout, susubok itong muli nang isang beses sa bagong socket; itakda sa `0` upang i-disable ang limitasyon at panatilihin ang dating gawi. | | `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 min) | Pinakamababang paghihintay sa pagsisimula ng tugon (ms) para sa mga direktang pagtatangkang walang proxy na ang target host ay private/LAN/loopback (halimbawa, `localhost`, `host.docker.internal`, `192.168.x.x`), upang hindi maputol ng 30s na default sa itaas ang cold start ng native na Ollama. Gumaganap bilang minimum: ang aktuwal na paghihintay ay ang mas malaking halaga sa pagitan nito at ng `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; inaalis ng `0` o di-wastong halaga ang lokal na minimum. Hindi naaapektuhan ang mga remote host. | | `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Pinakamataas na limitasyon (ms) para sa pagtatangkang RETRY gamit ang bagong socket pagkatapos ng timeout sa pagsisimula ng tugon ng pooled attempt sa itaas (#13703). Nalalapat lamang kapag nag-attach na ang caller ng sarili nitong deadline signal (ang nalutas na connection/model/provider/`FETCH_TIMEOUT_MS` cascade); ang signal na iyon ang tunay na limitasyon at unang nati-trigger sa nilalayong daloy, kaya isa itong maluwag na backstop sa halip na pirming limitasyon — kung wala ito, muling ginagamit ng retry ang kaparehong maikling `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` window ng pooled attempt at nagbabalik ng 504 para sa maayos ngunit mababagal na TTFB reasoning model. Hindi kailanman pinapayagang bumaba sa pirming minimum sa itaas; kapag walang ibinigay na deadline signal ang caller, pinananatili ng retry ang pirming minimum nang walang pagbabago. | | `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Oras para matanggap ang buong body ng tugon. | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Timeout sa pagtatatag ng koneksyong TCP. | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Timeout kapag idle ang keep-alive socket. | | `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Timeout ng TLS fingerprint proxy (wreq-js). | | `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Nililimitahan ang time-to-first-byte partikular sa body ng TLS-fingerprint transport ng wreq-js; hindi kayang matukoy ng `TLS_CLIENT_TIMEOUT_MS` lamang ang na-stall na body dahil nalulutas ito sa sandaling dumating ang mga header (#12656). Kinakansela ng timeout ang wreq reader at nagfa-fallback sa direct/proxy dispatcher; idi-disable ng `0` ang watchdog. | | `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Para lamang sa OpenCode executor, at kapag naka-on lamang ang feature flag na `OPENCODE_RESPONSES_STALL_ROTATION` (naka-off bilang default): nililimitahan ang paghihintay sa unang byte ng body ng naka-stream na tugon ng Responses pagkatapos ng mga header nito (#13484). Nagsisimula ang isang Responses stream sa `response.created`, kaya ang kawalan ng data lampas sa window na ito ay isang stall: ilalagay sa cooldown ang account at ililipat nang isang beses ang request sa susunod na account; mabilis na mabibigo ang ikalawang stall. Idi-disable ng `0` ang guard kahit naka-on ang flag. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= naka-off) | Para lamang sa OpenCode executor: nililimitahan ang paghihintay sa mga header ng upstream response sa isang naka-stream na Responses call kapag may iba pang account na magagamit pa — titigil sa paghihintay ang isang naka-queue na request at magpapatuloy sa halip na sakupin ang buong headers window. Mga naka-stream na Responses call lamang ang naaapektuhan (nagsisimula ang Responses stream sa `response.created`, kaya ang kawalan ng data rito ay isang queue, hindi generation); hindi naaapektuhan ang mga chat completion at hindi naka-stream na call, at pinaiikli lamang ng window ang aktuwal na fetch-start ceiling, hindi ito kailanman pinahahaba. Iminumungkahing halaga kapag ine-enable: `30000`. Idi-disable ng `0`. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Para lamang sa OpenCode executor: kung ilang beses sa bawat request maaaring lumipat sa susunod na account ang limitasyon sa paghihintay ng headers sa itaas. Palaging napapanatili ng huling natitirang account ang buong palugit para sa headers. | | `OPENCODE_PARK_AND_RESUME` | `false` | Para lamang sa OpenCode executor: i-park ang request na may heartbeat pagkatapos ng paulit-ulit na pansamantalang 429 (o isang bagong marker ng pagkapuwersa sa pool), pagkatapos ay i-replay ang isang limitadong yugto ng hanggang 3 sunod-sunod na account sa halip na sabay-sabay na gamitin ang buong fleet (#13924). Naka-off bilang default: inililipat ng bawat 429 sa susunod na account gaya mismo ng dati. | | `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Para lamang sa OpenCode executor: kapag ang bawat account na handa na matapos ang cooldown sa yugto ng park-and-resume replay ay isinantabi ng memorya ng pagtanggi ng proxy, gamitin pa rin ang mga ito sa halip na walang i-replay (#14851, follow-up sa #14750). Naka-off bilang default: walang laman ang yugto ng replay sa ganitong sitwasyon, gaya noong bago ang #14750. | | `STREAM_READINESS_STALL_RETRY` | `false` | Para lamang sa streaming chat: kapag natigil ang unang upstream body bago makagawa ng magagamit na event, magsagawa ng isang limitadong ikalawang pagtatangka sa parehong routing path, gamit ang parehong readiness budget at walang parusa sa account. Naka-off bilang default: kapag natigil ang unang body, mabibigo ang request nang walang muling pagtatangka. | | `OPENCODE_POOL_RESELECT` | `false` | Para lamang sa OpenCode executor: pagkatapos ng 429 mula sa isang provider na nakapangkat ayon sa egress sa isang account na walang proxy sa ilalim ng ambient pool context, humiling sa connection pool ng ibang miyembro para sa susunod na pagtatangka sa halip na muling subukan ang parehong egress address. Inuuna lamang, hindi kailanman nagbubukod: pinananatili ng ubos nang pool ang kasalukuyang gawi. Naka-off bilang default: inililipat ng bawat 429 sa susunod na account gaya mismo ng dati. | | `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(hindi nakatakda)_ | Para lamang sa OpenCode executor: i-override ang path ng marker ng pagkapuwersa sa pool na binabasa bago mag-park (`{since, reason, ttl_s}`, default na `/tmp/opencode-pool-strain.json`, #13924). Agad na nagpapark ang isang bagong marker nang hindi muling nagbibilang; kapag wala o luma na, babalik sa burst counter. | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Timeout ng proxy hop para sa mga bridge request sa `/v1`. | | `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Ituro ang Firecrawl web-fetch executor sa isang self-hosted na instance (opsyonal ang API key kapag off-cloud). | | `FIRECRAWL_TIMEOUT_MS` | `30000` | Timeout sa bawat request para sa Firecrawl web-fetch executor. | | `TAVILY_BASE_URL` | _(hindi nakatakda)_ | Base URL para sa Tavily `/usage` quota fetcher (Mga Limitasyon ng Provider); binabalewala kapag nakaturo ito sa `api.tavily.com`. Kapag hindi nakatakda, gagamitin ang base URL ng koneksyon. | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Kabuuang timeout ng server request para sa bridge. | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Oras para ipadala ang mga response header sa pamamagitan ng bridge. | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Idle timeout ng keep-alive ng bridge. | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Timeout ng raw socket (0 = naka-disable). | | `SHUTDOWN_TIMEOUT_MS` | `30000` | Palugit sa SIGTERM/SIGINT bago sapilitang lumabas. | | `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | Fallback na ginagamit ng `src/shared/utils/fetchTimeout.ts` kapag hindi nakatakda ang `FETCH_TIMEOUT_MS`. | | `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Timeout (ms) para sa mga preset na `validationRead` at `modelsProbe` sa `src/shared/network/safeOutboundFetch.ts`. Taasan para sa mababagal na endpoint (Cerebras, Cloudflare AI, Groq) upang maiwasan ang pabago-bagong paglipat sa pagitan ng active/error sa dashboard. Babalik sa 8000ms para sa mga invalid (<1000) o hindi numerikong value. | | `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Fetch timeout na partikular sa relay sa `open-sse/utils/proxyFetch.ts` (#9158). Dapat mabigo ang isang nakabiting relay bago ang timeout ng client/agent (~30s) upang makakita ang mga caller ng kabiguang partikular sa relay sa halip na generic na upstream timeout. Nililimitahan sa `29000` upang palagi itong maunang ma-trigger. | | `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Pinagsasaluhang retry backoff para sa mga direct/relay/proxy na landas ng isang beses na muling pagtatangka sa `open-sse/utils/proxyFetch.ts` (#9158). `0` = muling subukan agad. | | `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Timeout ng native wreq-js request (`claudeTlsClient.ts`). | | `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Palugit sa ganap na JS hard deadline na idinaragdag sa native timeout. | | `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Timeout ng native wreq-js request (`perplexityTlsClient.ts`). | | `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Absolutong palugit sa hard deadline ng JS na idinaragdag sa native na timeout. | | `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (naka-off) | Idinaragdag ang "Mayroon kang built-in na paghahanap sa web. Direktang sagutin ang mga tanong gamit ang mga resulta ng paghahanap." sa system message ng tumatawag (`perplexity-web/protocol.ts`). Naka-off bilang default — naghahanap pa rin ang Perplexity, at lumalabas ang pangungusap sa mga tugon bilang meta-commentary para sa mga coding client. Itakda sa `1`/`true`/`yes`/`on` upang ibalik. | | `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Native na timeout ng kahilingan sa wreq-js (`grokTlsClient.ts`). | | `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Absolutong palugit sa hard deadline ng JS na idinaragdag sa native na timeout. | | `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Native na timeout ng kahilingan sa wreq-js (`notionTlsClient.ts`); itinataas ito ng `notion-web` sa bawat kahilingan hanggang `180000` para sa mahahabang pagbuo. | | `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Absolutong palugit sa hard deadline ng JS na idinaragdag sa native na timeout. | | `OMNIROUTE_BROWSER_POOL` | `on` | Nakabahaging Playwright browser pool para sa web-cookie chat na sinusuportahan ng browser (`browserPool.ts`); itakda sa `off` upang i-disable. | | `OBSCURA_BIN` | `auto-detect` | Path patungo sa `obscura` binary na ginagamit bilang pangunahing engine ng browser pool at Cloudflare Playground executor (`open-sse/services/obscura.ts`); awtomatikong tinutukoy mula sa PATH ng system kapag hindi nakatakda. | | `OBSCURA_CDP_ENDPOINT` | _(hindi nakatakda)_ | Ituro sa tumatakbo nang Obscura (`http://host:port`) sa halip na mag-spawn ng isa; hindi pagmamay-ari ng module ang prosesong iyon (`open-sse/services/obscura.ts`). | | `OBSCURA_PORT` | `random free port` | Tiyak na port para sa na-spawn na `obscura serve`; awtomatikong pumipili ng libreng port kapag hindi nakatakda (`open-sse/services/obscura.ts`). | | `WEB_COOKIE_USE_BROWSER` | `0` | Isama ang isang kahilingan sa web-cookie chat sa path na sinusuportahan ng browser (`browserBackedChat.ts`); `1` upang i-enable. | | `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Base URL para sa Kimi Web (internasyonal na kimi.ai Connect-RPC) executor (`kimi-web.ts`); i-override lamang para sa mga mirror/proxy endpoint. | | `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Kumpletong chat endpoint para sa Kimi Web executor (`kimi-web.ts`). | | `OMNIROUTE_LOGIN_BROWSER_PATH` | _(awtomatikong tinutukoy)_ | Path patungo sa system Chrome/Edge executable para sa interactive na pag-sign in sa browser ng Adobe Firefly (`adobeFireflyBrowserLogin.ts`); ino-override ang awtomatikong pagtukoy ayon sa OS. | | `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone na output_ | Override sa oras ng build para sa standalone na direktoryo ng output na ginagamit ng post-build na hakbang sa colocation (`scripts/build/colocate-standalone.mjs`); para sa tooling ng build, hindi sa runtime. | Namamana ng mga pagtatangka sa combo target ang nalutas na timeout ng upstream na kahilingan (`FETCH_TIMEOUT_MS`, o `REQUEST_TIMEOUT_MS` kapag ito ang nagbibigay ng default sa fetch). Itakda lamang ang `targetTimeoutMs` sa isang combo, mga default ng combo, o override ng provider upang mapabilis ang fallback ng combo; ang mga value na mas mataas sa kasalukuyang upstream timeout ay nililimitahan sa upstream timeout. Ang `comboTimeoutMs` ay isang hiwalay na wall-clock budget para sa buong combo sa lahat ng failover target. Iwanan itong hindi nakatakda o `0` upang mapanatiling walang limitasyon ang iteration (nalalapat pa rin ang naka-hardcode na 10 minutong pananggalang sa pagka-hang sa `comboPredicates.ts`). Pinapalitan ng positibong value ang safety net na iyon para sa combo. Panatilihing mas mahaba ang `comboTimeoutMs` kaysa sa `targetTimeoutMs` upang magkaroon pa rin ng oras ang failover pagkatapos ng mabagal na unang target. ### Mga Threshold ng Circuit Breaker Pag-tune ng circuit breaker sa antas ng provider. Sinasalamin ng mga default ang mga naka-scale na value na ginagamit mula pa noong v3.6 para sa 500+ koneksyon. | Variable | Default | Source File | Paglalarawan | | ------------------------------------------------------------- | --------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | Threshold ng magkakasunod na pagkabigo para sa mga OAuth provider bago mag-trigger ang breaker. | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | Palugit sa pag-reset (ms) para sa breaker ng OAuth provider. | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | Threshold ng magkakasunod na pagkabigo para sa mga API-key provider. | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | Palugit sa pag-reset (ms) para sa breaker ng API-key provider. | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Threshold ng magkakasunod na pagkabigo para sa mga lokal na provider (Ollama, LM Studio, ...). | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | Palugit sa pag-reset (ms) para sa breaker ng lokal na provider. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: mga pagkabigo sa loob ng palugit bago pumasok sa cooldown ang buong OAuth provider. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: gumugulong na palugit sa pagbilang ng mga pagkabigo (ms) para sa mga OAuth provider. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: cooldown (ms) kapag naabot ang threshold ng OAuth provider. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | Papasok ang OAuth provider sa DEGRADED sa ganitong dami ng mga pagkabigo. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | Pinakamataas na multiplier ng pagtaas ng resetTimeout para sa OAuth provider. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | Magtataas ng backoff ang OAuth provider pagkatapos ng ganitong dami ng mga open cycle. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: mga pagkabigo sa loob ng palugit bago pumasok sa cooldown ang buong API-key provider. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: gumugulong na palugit sa pagbilang ng mga pagkabigo (ms) para sa mga API-key provider. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: cooldown (ms) kapag naabot ang threshold ng API-key provider. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | Papasok ang API-key provider sa DEGRADED sa ganitong dami ng mga pagkabigo. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | Pinakamataas na multiplier ng pagtaas ng resetTimeout para sa API-key provider. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | Magtataas ng backoff ang API-key provider pagkatapos ng ganitong dami ng mga open cycle. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: mga pagkabigo bago pumasok sa cooldown ang buong lokal na provider. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: gumugulong na palugit sa pagbilang ng mga pagkabigo (ms) para sa mga lokal na provider. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Breaker sa antas ng provider: cooldown (ms) kapag naabot ang threshold ng lokal na provider. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Cooldown kada key (ms) na inilalapat ng multi-key API-key rotation kapag walang `Retry-After` ang upstream 429 (#14573). Babalik sa default ang mga value na hindi positibo o hindi numero. | | `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Lalim ng backoff kung saan itinuturing na matagal nang hindi maayos ang provider ng isang context-cache pin at inaalis ang pin para sa failover. | | `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Palugit laban sa pabago-bagong estado (ms) na nagpapahintulot sa maiikling pansamantalang cooldown bago alisin ang isang context-cache pin. | ### Mga Sitwasyon | Sitwasyon | Configuration | | ----------------------------------------------- | --------------------------------------------------------------- | | **Matagalang pagbuo ng code** | `REQUEST_TIMEOUT_MS=900000` (15 min) | | **Limitahan ang kabuuang tagal ng stream** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 min) | | **Mabilis na pagkabigo para sa production API** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` | | **Mga modelong may pinahabang pag-iisip** | `STREAM_IDLE_TIMEOUT_MS=300000` (5 min sa pagitan ng mga chunk) | --- ## 16. Pag-log Nagsusulat ang sistema ng pag-log sa stdout at sa mga naka-rotate na log file. Binabasa ang lahat ng configuration mula sa `src/lib/logEnv.ts`. | Variable | Default | Paglalarawan | | ----------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `APP_LOG_LEVEL` | `info` | Pinakamababang antas ng log: `debug`, `info`, `warn`, `error`. | | `APP_LOG_FORMAT` | `text` | Format ng output: `text` (nababasa ng tao) o `json` (nakabalangkas). | | `APP_LOG_TO_FILE` | `true` | Isulat ang mga log sa file kasabay ng stdout. | | `APP_LOG_FILE_PATH` | `logs/application/app.log` | Path ng log file (kaugnay ng project root o `DATA_DIR`). | | `APP_LOG_MAX_FILE_SIZE` | `50M` | Pinakamalaking laki ng file bago ang pag-rotate. Tinatanggap ang: `50M`, `1G`, `512K`, o mga byte lamang. | | `APP_LOG_RETENTION_DAYS` | `7` | Bilang ng araw na pananatilihin ang mga naka-rotate na application log file. | | `APP_LOG_MAX_FILES` | `20` | Pinakamaraming backup ng mga naka-rotate na log file. | | `CALL_LOG_RETENTION_DAYS` | `7` | Bilang ng araw na pananatilihin sa database ang mga entry ng request/call log. | | `CALL_LOG_MAX_ENTRIES` | `10000` | Pinakamaraming entry ng call log sa in-memory buffer. | | `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | Pinakamaraming row sa SQLite table na `call_logs` bago mag-prune. | | `ENABLE_REQUEST_LOGS` | _(hindi nakatakda)_ | Sapilitang i-on o i-off ang detalyadong pag-log ng request, na ino-override ang setting ng dashboard. | | `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 oras) | Pinakamatagal na edad ng mga naulilang aktibong request log entry bago ang in-memory cleanup. | | `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | I-store ang mga stream chunk sa mga pipeline artifact kapag `call_log_pipeline_enabled=true`. Opsyonal (`true`) — naka-off bilang default upang makatipid ng espasyo sa disk. | | `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | Pinakamalaking laki sa KB ng pipeline call log artifact kapag `call_log_pipeline_enabled=true`. | | `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | Pinakamaraming row sa SQLite table na `proxy_logs` bago mag-prune. | | `PROXY_LOG_INCLUDE_IPS` | `false` | Isama ang mga client/egress IP at account prefix sa mga console log na `[ProxyEgress]`. Pinananatili ng mga proxy-log record sa dashboard/database ang kumpletong detalye. | | `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | Itakda sa `"true"` o `"1"` upang itala ang `first_chunk_ms` (mula sa pagsisimula ng pagpapadala hanggang sa unang kapaki-pakinabang na body byte) sa mga proxy-log row. Binabalot nito ang bawat upstream body sa isang lazy passthrough stream at ina-update ang row kapag dumating ang byte; naka-off bilang default upang dumaan ang mga response nang hindi binabago. | | `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 minuto) | Dalas ng muling pagsuri ng `src/lib/logRotation.ts` sa laki ng aktibong log file. | | `CHAT_LOG_TEXT_LIMIT` | `65536` | Pinakamahabang string na pananatilihin sa mga chat log artifact (default na 64 KB). | | `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | Bilang ng mga array item na pananatilihin mula sa hulihan kapag tina-truncate ang mga chat log payload. | | `CHAT_LOG_MAX_DEPTH` | `6` | Pinakamalalim na antas ng nesting bago i-truncate ang mga chat log payload. | | `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | Pinakamaraming object key na pananatilihin sa mga chat log payload (0 = walang limitasyon). | | `CHAT_LOG_MAX_BODY_KB` | `1024` | Laki ng buong request/response body (KB) bago ito palitan ng payak na buod sa halip na buong clone. Taasan ito kung nagpapakita ang mahahabang agentic na pag-uusap ng placeholder sa halip na mga aktuwal na mensahe sa dashboard. | | `CHAT_DEBUG_FILE` | `false` | Kapag true, nilalaktawan ng `serializeArtifactForStorage` ang truncation batay sa laki. Para lamang sa pag-debug. | --- ## 17. Pag-optimize ng Memory | Variable | Default | Paglalarawan | | ----------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_MEMORY_MB` | _auto_ (bare metal); **`1024` sa Docker image** | **Inirerekomendang** limitasyon ng V8 heap (MB) para sa Docker/standalone. Kapag hindi itinakda, dynamic itong kino-calibrate (~35% ng system RAM, nililimitahan sa `[512, 4096]`); ang `512` ay minimum lamang kapag hindi mabasa ang kabuuang memory. Sa `run-standalone.mjs` (Docker CMD), idinaragdag ang isang **tahasang** value bilang `--max-old-space-size` at ito ang **nangingibabaw** sa sumasalungat na NODE_OPTIONS heap flag (huling flag ng V8). Mas pinapaboran pa rin ng `omniroute serve` ang umiiral na NODE_OPTIONS heap (#5238). Huwag itakda ang dalawa sa magkaibang numero — nagla-log ang proseso ng babala na pinapangalanan ang parehong value at ang nangingibabaw. **Palaging itinatakda ng opisyal na Docker image ang `1024`, kaya hindi kailanman tumatakbo roon ang calibration.** Nangangailangan ang coding-agent `/v1/responses` ng `8192`–`12288` at karagdagang espasyo para sa cgroup — tingnan ang [Gabay sa Docker — runtime RAM](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). | | `OMNIROUTE_RSS_PRESSURE_MB` | _auto_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; naka-off kapag hindi nakatakda ang `OMNIROUTE_MEMORY_MB`) | `open-sse/utils/resourcePressure.ts` | Ganap na process-RSS fuse (MB) para sa native/external memory na hindi nakikita ng V8 `heapUsed`; kapag lumampas dito, makakatanggap ang mga bagong request ng 503 `resource_pressure`. Bihirang bumaba ang RSS pagkatapos ng biglaang pagtaas, kaya ipares ito sa `OMNIROUTE_PRESSURE_SELF_RESTART`. | | `PROMPT_CACHE_MAX_SIZE` | `50` | Pinakamataas na bilang ng mga naka-cache na system prompt entry. | | `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Pinakamataas na kabuuang laki ng prompt cache. | | `PROMPT_CACHE_TTL_MS` | `300000` (5 min) | TTL ng prompt cache entry. | | `SEMANTIC_CACHE_MAX_SIZE` | `100` | Pinakamataas na bilang ng mga naka-cache na temperature=0 response. | | `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Pinakamataas na kabuuang laki ng semantic cache. | | `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 min) | TTL ng semantic cache entry. | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | Mga root ng lokal na corpus na sabay-sabay na nagpapanatili ng aktibong in-memory index (`src/lib/localCorpus/configured.ts`). LRU: kapag naabot ang limitasyon, inaalis ang index ng pinakamatagal nang hindi nagagamit na root at muli itong binubuo sa susunod nitong query. Nililimitahan sa minimum na `1`; babalik sa default ang isang value na hindi numero. | | `STREAM_HISTORY_MAX` | `50` | Pinakamataas na bilang ng mga kamakailang stream event sa buffer ng live view ng Dashboard. | | `CONTEXT_LENGTH_DEFAULT` | _(hindi nakatakda)_ | Pangkalahatang override sa haba ng context (mga token) para sa bawat provider na walang `CONTEXT_LENGTH_` variable. Kapag nakatakda, **pinapalitan** nito ang catalog, dashboard override, at registry value para sa mga provider na iyon; kapag hindi nakatakda, ginagamit ng OmniRoute ang built-in nitong chain, na ang huling opsyon ay `128000`. Tingnan ang [Haba ng context kada provider](#per-provider-context-length-context_length_provider). | | `USAGE_TOKEN_BUFFER` | `100` | Karagdagang allowance ng token na inilalaan kapag sinusubaybayan ang mga quota sa paggamit. | ### Haba ng context kada provider (`CONTEXT_LENGTH_`) Binabasa rin ng `open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) ang isang form na **kada provider** na ang pangalan ay binubuo mula sa provider ID sa runtime, kaya hindi ito maaaring ilista nang paisa-isa sa talahanayan sa itaas o sa `.env.example`. **Pangalan.** `CONTEXT_LENGTH_`, kung saan ang `` ay ang provider ID na nasa malalaking titik, at ang bawat character na wala sa `A-Z` / `0-9` ay pinapalitan ng `_`. Ang provider ID ay ang canonical na ID pagkatapos ng alias resolution (ang bahaging `provider` ng isang `provider/model` string kapag na-resolve na ang isang maikling alias). Ginagamit ng mga custom na OpenAI- o Anthropic-compatible node ang kanilang nabuong node ID, kaya bahagi ng pangalan ng variable ang UUID. Ang value ay isang positibong integer na bilang ng mga token; ang anumang iba pa (walang laman, `0`, negatibo, hindi numeric) ay binabalewala at nagpapatuloy ang resolution sa susunod na hakbang. | Provider ID | Pangalan ng variable | | ----------------------------------------------------------- | -------------------------------------------------------------------------- | | 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 | **Pagkakasunud-sunod ng priyoridad.** Para sa isang pares na `provider/model`, mananaig ang unang hakbang na magbibigay ng value: 1. `CONTEXT_LENGTH_` para sa provider na iyon. 2. `CONTEXT_LENGTH_DEFAULT` (pangkalahatang environment override). 3. Ang window ng bawat modelo: isang naka-persist na context override (itinakda sa dashboard, o awtomatikong na-pin ng discovery reconciler, tingnan ang `CONTEXT_WINDOW_RECONCILE_INTERVAL`), o kung wala, ang naka-sync na value mula sa catalog / models.dev. 4. Ang `defaultContextLength` ng registry ng provider. 5. Mga heuristic batay sa pangalan ng modelo (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` / `codex` 400000). 6. Mga built-in na default para sa bawat provider, pagkatapos ay `128000`. Nalalapat ang parehong environment step sa **buong provider**: pare-pareho ang limitasyon ng bawat modelo ng provider na iyon, at mananaig ang mga ito sa mga override sa dashboard para sa bawat modelo. Kapag isang modelo lamang ng isang provider ang nangangailangan ng ibang window, gumamit na lang ng override para sa bawat modelo sa dashboard. **Saklaw.** Ang chain na ito ang ginagamit para sa pagsusuri ng context window sa oras ng request (ang `context_length_exceeded` / pagtangging "Lumalagpas ang input sa context window" sa `open-sse/handlers/chatCore.ts`), mga budget sa pag-compress ng prompt, at mga limitasyon ng combo context. Ang `context_length` na ipinapakita ng `GET /v1/models` ay maaari pa ring magmula sa metadata ng catalog o registry at hindi garantisadong sumasalamin sa environment override. **Halimbawa.** Isang provider na ang modelo ay tumatanggap ng window na 1,050,000 token samantalang 128,000 ang iniulat ng catalog: ```dotenv CONTEXT_LENGTH_AGENTROUTER=1050000 ``` I-restart ang server pagkatapos itong baguhin: binabasa ang value mula sa environment ng proseso ng server. Sa **desktop app**, tumatakbo ang server bilang child process at hindi nito makikita ang system variable na itinakda pagkatapos ilunsad ang app; ilagay ang linya sa `.env` file na nilo-load ng app (ang pagkakasunud-sunod ng paghahanap ay nasa [Electron Guide: Paghahanap ng environment file](../guides/ELECTRON_GUIDE.md#environment-file-lookup)), pagkatapos ay ganap na isara at muling ilunsad ang app. ### Compression | Variable | Default | Paglalarawan | | ------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | hindi nakatakda | Pagkatiwalaan ang `.rtk/filters.json` ng proyekto nang walang `.rtk/trust.json` hash. Gamitin lamang sa kontroladong lokal na development. | ### Memory Engine (plan 21) ### Gastos sa event loop ng memory, skills, at pag-refresh ng token (#10349) Ang OmniRoute ay isang **iisang proseso ng Node**. Ang pag-extract/pag-retrieve ng memory, pag-inject ng skills, at pag-refresh ng provider token ay tumatakbo sa **parehong event loop** na ginagamit ng `GET /healthz` at ng dashboard. Hindi sila worker thread. | Gawain | Code | Default | Kontrol ng operator | | ------------------------------------ | ---------------------------------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | Pag-extract / pag-retrieve ng memory | `src/lib/memory/` | **memoryEnabled** sa dashboard (naka-on bilang default) | I-off ang **Settings → Memory**. Walang hiwalay na env kill switch maliban sa pag-disable ng feature sa settings. | | Pag-inject ng skills | `src/lib/skills/injection.ts` | **skillsEnabled** sa dashboard (naka-on bilang default) | I-off ang **Settings → Memory/Skills** (`skillsEnabled`). Nililimitahan lamang ng mga sandbox knob sa ibaba ang execution kapag naka-on na ang injection. | | Pag-refresh ng token | `src/sse/services/tokenRefresh.ts` | Naka-on para sa mga nakakonektang OAuth/web provider | I-disconnect ang provider o panatilihing valid ang mga token; wala pang `TOKEN_REFRESH=0` env sa kasalukuyan. | Kung mabagal ang `/healthz` sa isang walang gaanong ginagawa na machine, i-disable muna ang memory + skills, pagkatapos ay suriin ang load ng catalog/compression (#10303, #9685). Nagyi-yield ang mga feature na ito sa mga `await` point ngunit nakikipag-agawan pa rin ang mga ito sa nag-iisang thread. Mga knob para sa embedding layer, vector store, at reranking ng persistent memory subsystem (`src/lib/memory/`). | Variable | Default | Paglalarawan | | ------------------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 min) | TTL para sa in-memory embedding cache (bawat source/model/dim signature). | | `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Pinakamataas na bilang ng mga LRU entry na pinananatili sa embedding cache. | | `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | HF repo id para sa opsyonal na lokal na MiniLM pipeline ng `@huggingface/transformers` (~23 MB int8, ~400 MB RAM). | | `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | HF repo id para sa static potion/Model2Vec lookup-table embedder. Dina-download nang paunti-unti sa cache dir kapag kailangan. | | `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Directory na ginagamit upang i-cache ang mga static potion model file. Bilang default, nasa ilalim ito ng `DATA_DIR` kapag hindi itinakda. | | `HF_HUB_ENDPOINT` | `https://huggingface.co` | I-override ang base URL ng Hugging Face Hub na ginagamit ng `staticPotion.ts` (hal. mirror endpoint para sa mga air-gapped na setup). | | `MEMORY_VEC_TOP_K` | `20` | Default na top-K na ginagamit ng `sqlite-vec` brute-force vector search sa loob ng `src/lib/memory/vectorStore.ts`. | | `MEMORY_RRF_K` | `60` | Reciprocal Rank Fusion constant na `k` para sa hybrid na FTS5 + vector retrieval (sqlite-vec recipe). | | `VECTOR_STORE_DISABLE_VEC` | `false` | Test/diagnostic seam sa `getVectorStore()` (`src/lib/memory/vectorStore.ts`): kapag `true`, sapilitang ginagawang `null` ang vector store (ginagaya ang isang cloud/WASM environment na walang `sqlite-vec`), kaya nagiging FTS5 keyword search na lamang ang memory retrieval. Huwag itong itakda sa production. | | `NOTION_API_KEY` | _(hindi itinakda)_ | API key para sa Notion backend (ginagamit ng kilalang backend preset ng `genericBackend.ts`). | | `NOTION_API_URL` | `https://api.notion.com/v1` | Base URL para sa Notion API (maaaring i-override para sa mga self-hosted na alternatibo sa Notion). | | `OBSIDIAN_API_KEY` | _(hindi itinakda)_ | API key para sa Obsidian Vault backend (ginagamit ng kilalang backend preset ng `genericBackend.ts`). | | `OBSIDIAN_API_URL` | `http://localhost:27123` | Base URL para sa Obsidian Vault API (maaaring i-override para sa remote vault). | | `MEMORY_TYPED_DECAY_ENABLED` | `false` | Pangunahing switch ng TV6 typed memory decay. **Opsyonal (naka-off bilang default)** — **tinatanggal** ng sweep ang mga nag-decay na memory. Kapag naka-off ito, telemetry lamang ang `access_count`/`last_accessed_at` at walang anumang tinatanggal. | | `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (mga araw) kung kailan magde-decay ang isang hindi nagamit na `episodic` memory. Ginagawa rin ng `0` na immune ang episodic. Palaging immune ang mga durable na uri (`factual`/`procedural`/`semantic`). Muling ibinabatay ang decay clock sa `last_accessed_at`. | | `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | Ang isang memory na nai-inject nang `>=` sa ganitong karaming beses ay nagiging immune sa decay anuman ang uri nito. Dini-disable ng `0` ang access immunity. | | `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (naka-disable) | Interval (mga segundo) para sa opsyonal na pana-panahong decay sweep sa `src/lib/memory/typedDecay.ts`. `0`/hindi itinakda = walang pana-panahong sweep. Dalawang beses na kailangang i-opt in: kinakailangan din ang `MEMORY_TYPED_DECAY_ENABLED=true`. | | `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(hindi itinakda)_ | Mga provider id na pinaghihiwalay ng kuwit (case-insensitive) na tumatanggap ng `system` message **sa index 0 lamang** (`src/lib/memory/injection.ts`). Para sa mga ito, hindi ligtas sa mga multi-turn conversation ang cache-safe na pag-splice ng memory sa gitna ng array, kaya sa halip ay pinagsasama/idinaragdag sa unahan ang memory bilang nangungunang system message. Bilang default, `xiaomi-mimo`/`mimo` lamang; palawakin ito para sa mga self-hosted na OpenAI-compatible endpoint (hal. Qwen3.5+/3.6) na ang chat template ay nagpapatupad ng parehong constraint na iisang nangungunang system message. | ### Halimbawa ng Docker na may Mababang RAM Para lamang sa dashboard ang `128`. Nagkakaroon ang mga coding agent sa heap na ito ng `FATAL ERROR` habang tumatakbo ang mahahabang `/v1/responses`. Huwag gamitin ang halimbawang ito bilang Claude/Codex/Grok gateway. ```bash OMNIROUTE_MEMORY_MB=128 PROMPT_CACHE_MAX_SIZE=20 PROMPT_CACHE_MAX_BYTES=524288 # 512 KB SEMANTIC_CACHE_MAX_SIZE=25 SEMANTIC_CACHE_MAX_BYTES=1048576 # 1 MB STREAM_HISTORY_MAX=10 ``` --- ## 18. Pag-sync ng Presyo Awtomatikong pag-synchronize ng datos ng pagpepresyo ng modelo mula sa mga panlabas na source. | Variable | Default | Source File | Paglalarawan | | ----------------------- | ------------- | ------------------------ | ----------------------------------------------- | | `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | Opsyonal na pana-panahong pag-sync ng presyo. | | `PRICING_SYNC_INTERVAL` | `86400` (24h) | `src/lib/pricingSync.ts` | Agwat ng pag-sync sa segundo. | | `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | Mga source ng datos na pinaghihiwalay ng kuwit. | --- ## Pag-sync ng Arena ELO | Variable | Default | Source File | Paglalarawan | | ---------------------------- | ------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Pana-panahong pag-sync ng ELO ng leaderboard ng Arena AI, na maaaring i-configure mula sa Dashboard Feature Flags o i-opt out gamit ang `false`. | | `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | Anyo ng prefix na ginagamit para sa mga model id sa `GET /v1/models`. Inilalathala ng `dual` ang prefix ng maikling alias at ang canonical na prefix ng provider para sa bawat modelo (backward compatibility — halos dinodoble ang catalog); naglalabas ang `alias` ng isang id bawat modelo; ang `canonical` ay naglalabas lamang ng buong provider-id prefix (ang mga provider na ang alias ay canonical id na rin ay nagpapanatili ng kanilang nag-iisang entry). Maaaring i-override ng mga client ang bawat request gamit ang `?prefix=alias`. Tingnan ang [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). | | `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | Agwat ng pag-sync sa segundo. | --- ## Provider ng PromptQL Playground (Hindi Opisyal/Eksperimental) Reverse-engineered na GraphQL session bridge para sa prompt.ql.app (`src/shared/constants/providers/web-cookie.ts`). Opsyonal ang lahat — ang mga default ay tumuturo sa mga pampublikong endpoint ng playground; i-override lamang para sa isang self-hosted/alternatibong deployment ng PromptQL. | Variable | Default | Source File | Paglalarawan | | ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | --------------------------------------------------------------------------- | | `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | GraphQL endpoint na ginagamit para sa mga operasyon ng chat/session. | | `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | GraphQL endpoint na ginagamit upang i-query ang balanse/paggamit ng credit. | | `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | Endpoint na ginagamit para sa best-effort na pag-refresh ng token. | | `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | Pinakamahabang oras (ms) ng pag-poll sa `thread_events` bago mag-timeout. | --- ## HyperAgent Web Provider (Hindi Opisyal/Eksperimental) Na-reverse-engineer na session bridge para sa hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). Opsyonal — nakaturo ang default sa pampublikong endpoint ng billing/paggamit; i-override lamang para sa self-hosted/alternatibong deployment ng HyperAgent. | Variable | Default | Source File | Paglalarawan | | ---------------------- | --------------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------- | | `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | Endpoint na ginagamit upang kunin ang mga credit block ng billing/paggamit. | --- ## Mga Quota sa Paggamit ng Kilo Code Pagkuha ng personal na balanseng USD at paggamit ng Kilo Pass para sa provider na Kilo Code. Opsyonal — nakaturo ang default sa pampublikong Kilo API; i-override lamang para sa relay/test fixture. Ginagamit ng authentication ang umiiral na OAuth access token ng koneksyon. | Variable | Default | Source File | Paglalarawan | | -------------- | --------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------ | | `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | Base URL na ginagamit upang kunin ang personal na balanse sa Kilo Code at paggamit ng Kilo Pass. | --- ## Adobe Firefly Web Provider (Hindi Opisyal/Eksperimental) Pag-refresh ng session na pinapatakbo sa pamamagitan ng browser para sa Adobe Firefly web provider (`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`, `open-sse/services/adobeFireflyClient.ts`). Opsyonal — iniangkop ang lahat ng default para sa isang normal na desktop install. > **Inalis sa #9255.** Ang lumang CDP-attached Chrome runtime (adobeFireflyChromeRuntime.ts) ay > pinalitan ng isang Playwright browser-login service, at hindi na umiiral ang mga setting nito. Ang mga > variable na ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART, pati ang > ADOBE_FIREFLY_LOGIN_WAIT_MS at ADOBE_FIREFLY_FORTER_WAIT_MS, ay hindi binabasa saanman sa > codebase — walang epekto ang pagtatakda sa mga ito. | Variable | Default | Source File | Paglalarawan | | ------------------------------------ | ------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Itakda sa `1` para sa tunay na headless Chrome (kilalang hindi gumagana para sa pag-generate; para lamang sa pag-debug). | | `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | Pag-opt in/out sa maagap na browser warm-up. Hindi pinapagana ng `0` ang maagap na warm-up (nalalapat pa rin ang mid-batch 408 recovery). | | `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Itakda sa `0` upang hindi i-persist sa disk ang session ng Adobe Firefly. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(hindi nakatakda)_ | `open-sse/services/adobeFireflySession.ts` | Minimum na agwat (ms) na ipinapatupad sa pagitan ng magkakasunod na pagsusumite, na nag-o-override sa built-in na default. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(hindi nakatakda)_ | `open-sse/services/adobeFireflySession.ts` | Karagdagang agwat (ms) na idinaragdag pagkatapos ng matagumpay na batch, na nag-o-override sa built-in na default. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(hindi nakatakda)_ | `open-sse/services/adobeFireflyClient.ts` | Pangunahing pagkaantala (ms) bago magsumite ng generation request, na nag-o-override sa built-in na default. | --- ## 19. Pag-sync ng Modelo (Dev) | Variable | Default | Source File | Paglalarawan | | ----------------------------------- | ------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MODELS_DEV_SYNC_ENABLED` | _(hindi nakatakda)_ | `src/lib/modelsDevSync.ts` | Tahasang override para sa pag-sync ng presyo ng models.dev. Hindi nakatakda = sundin ang Settings > AI (`modelsDevSyncEnabled`). Ang `0`/`false`/`off`/`no` ay **nangingibabaw sa DB** at nilalaktawan ang parehong pana-panahong pag-sync at mga SQL/JSON scan ng `getModelsDevPricing()` (para sa pagbawi kapag hindi tumutugon ang dashboard sa parehong event loop). Pinipilit ng `1`/`true`/`on`/`yes` na i-on ang pag-sync. Tinatawag pa rin ng pag-save/pag-clear ng presyo ang `backupDbFile("pre-write")`, na walang ginagawa sa ilalim ng 60-minutong throttle o ng `DISABLE_SQLITE_AUTO_BACKUP`. | | `MODELS_DEV_SYNC_INTERVAL` | `86400` (24h) | `src/lib/modelsDevSync.ts` | Agwat ng pag-sync ng katalogo ng modelo sa panahon ng development, sa mga segundo. | | `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24h) | `src/lib/contextWindowResolver.ts` | Agwat (sa mga segundo) para sa kusang nagtutuwid na reconciler ng context window (5004): itinatakda ang mga window na idineklara ng provider mula sa pagtuklas sa `/models` bilang mga override na `auto:discovery` kapag naiiba ang mga ito sa katalogo. Itakda sa `0` upang i-disable. Muling ginagamit ang naka-sync nang data (walang bagong pag-fetch); hindi kailanman ino-overwrite ang mga `manual` na override. | --- ## 20. Mga Setting na Partikular sa Provider | Variable | Default | Source File | Paglalarawan | | ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterCatalog.ts` | TTL ng cache ng katalogo ng modelo ng OpenRouter. | | `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Isama ang mga display-friendly na field na `name` sa mga tugon ng `/v1/models`. I-disable para sa mga client na mga ID lamang ang inaasahan. | | `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8s) | `src/app/api/v1/models/catalogCache.ts` | Limitasyon sa paghihintay sa cold path para sa pinagsamang muling pagbuo ng katalogo ng `GET /v1/models` (#12627). Kapag nag-timeout, ihahatid ang huling maayos na 200 kung mayroon. | | `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 araw) | `src/lib/db/models/activeSyncedCatalog.ts` | Tagal bago mawalan ng awtoridad sa routing ang naka-sync na listahan ng modelo ng isang koneksyon at gumamit na lamang ng registry (#12849). Itinuturing na stale ang mga row na hindi kailanman nalagyan ng timestamp. | | `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60s) | `src/lib/usage/analyticsResponseCache.ts` | Tagal ng muling paggamit sa mabagal na tugon ng `GET /api/usage/analytics` para sa parehong query string (#15629). Idi-disable ng `0` ang cache. | | `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1s) | `src/lib/usage/analyticsResponseCache.ts` | Tanging ang mga tugon ng analytics na umabot nang hindi bababa sa ganitong tagal ang pagbuo ang ika-cache, upang palaging makakita ng bagong data ang maliliit na instance. | | `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Pinakamahabang paghihintay para sa mga trabaho sa pagbuo ng larawan ng NanoBanana. | | `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Dalas ng pag-poll sa trabaho ng NanoBanana. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Batayang delay para sa exponential backoff ng muling pagsusumite para sa upscale ng Adobe Firefly. | | `AWS_REGION` | _(hindi nakatakda)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Rehiyong ginagamit upang buuin ang mga endpoint ng AWS Bedrock (Kiro, audio). | | `AWS_DEFAULT_REGION` | _(hindi nakatakda)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Fallback kapag hindi nakatakda ang `AWS_REGION`. | | `CLOUDFLARE_ACCOUNT_ID` | _(hindi nakatakda)_ | `open-sse/executors/cloudflare-ai.ts` | Account ID para sa Cloudflare Workers AI. | | `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(hindi nakatakda)_ | `open-sse/executors/cloudflare-playground.ts` | Buong path ng binary ng desktop Chrome para sa Cloudflare AI Playground executor, na ginagamit kapag bina-block ng headless fingerprint check ang kasamang Chromium ng Playwright. | | `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) | `open-sse/executors/codebuddy/shared.ts` | Opsyonal na limitasyon sa haba para sa mga system prompt ng caller na ipinapadala sa CodeBuddy (CN at International). Bilang default, tanging ang prompt na may identity marker ng coding agent ang pinapalitan ng neutral na prompt (tinatanggihan iyon ng content filter ng Tencent); pinananatili ang mahahabang prompt. Papalitan din ng integer na > 0 ang anumang system prompt na mas mahaba sa ganoong bilang ng mga character; idi-disable ng hindi nakatakda, `0`, o hindi integer na value ang limitasyon. Itinatala sa log ng bawat pagpapalit kung aling panuntunan ang na-trigger (identity marker o haba). | | `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | I-override ang base ng Cloudflare REST API na ginagamit ng proxy-pool Workers relay deployer (#4640 / 9router#1360). | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Default na pangalan ng worker project na iminumungkahi sa modal na "Deploy Relay" ng proxy-pool. | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Itakda sa `false` upang itago ang opsyon sa relay ng Cloudflare Workers mula sa tab na Proxy Pool. | | `CLOUDFLARED_BIN` | awtomatikong tukuyin | `src/lib/cloudflaredTunnel.ts` | Pasadyang path patungo sa binary na `cloudflared`. | | `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Protocol ng transport ng tunnel: `http2` (default), `quic`, o `auto`. | | `CLOUDFLARED_CONFIG` | _(hindi nakatakda)_ | `src/lib/cloudflaredTunnel.ts` | Path patungo sa lokal na pinamamahalaang `config.yml` ng cloudflared (na may `tunnel:`, `credentials-file:`, `ingress:`). Kapag nakatakda, pinapatakbo ng OmniRoute ang `tunnel --config run` (pinangalanang tunnel) sa halip na isang pansamantalang quick tunnel. | | `CLOUDFLARED_HOSTNAME` | _(mula sa ingress ng config)_ | `src/lib/cloudflaredTunnel.ts` | Override para sa pampublikong hostname ng pinangalanang tunnel (hal. `ai.example.com`), na iniuulat bilang `publicUrl`/`apiUrl`. Kapag hindi nakatakda, binabasa ito mula sa unang hostname ng `ingress` sa config. | | `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | I-override ang base ng Deno Deploy REST API na ginagamit ng deployer ng relay ng proxy pool (#4643 / 9router#1437). | | `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Default na pangalan ng Deno Deploy app na iminumungkahi sa modal na "Deploy Relay" ng proxy pool. | | `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Itakda sa `false` upang itago ang opsyon ng Deno Deploy relay mula sa tab na Proxy Pool. | | `SEARCH_CACHE_TTL_MS` | `300000` (5 min) | `open-sse/services/searchCache.ts` | TTL para sa pag-cache ng tugon ng search API (Perplexity, Brave, atbp.). | | `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Ipakita ang eksperimental na UI ng provider na tugma sa CC para sa mga relay na para lamang sa Claude Code. | | `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | I-override ang host kung saan nakikinig ang naka-embed na instance ng 9router. | | `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | I-override ang port kung saan nakikinig ang naka-embed na instance ng 9router. | | `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | Bind host para sa WebSocket proxy ng naka-embed na serbisyo (loopback lamang bilang default). | | `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Port para sa WebSocket proxy server ng naka-embed na serbisyo. | | `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | Host ng CLIProxyAPI bridge (legacy na integrasyon). | | `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | Port ng CLIProxyAPI bridge. | | `CLIPROXYAPI_API_KEY` | _(walang laman)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | Fallback na data-plane key kapag wala ang setting na `cliproxyapi_api_key`. | | `CLIPROXYAPI_MANAGEMENT_KEY` | _(walang laman)_ | `src/lib/services/cliproxyAccountHealth.ts` | Management key para sa mga pagbasa ng kalagayan ng account mula sa isang externally managed na instance ng CLIProxyAPI. | | `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | Direktoryo ng config ng CLIProxyAPI. | | `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interface kung saan inilalathala ng docker-compose ang `cliproxyapi` sidecar (#12578). Naglalaman ang data volume nito ng mga kredensyal ng OAuth/API ng provider, at walang env-based na override para sa data-plane na `api-keys` ang naka-pin na image (may naka-mount lamang na `config.yaml`), kaya inilalantad ng `0.0.0.0` sa buong LAN ang isang serbisyong naglalaman ng mga kredensyal. | | `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | I-override ang port kung saan nakikinig ang naka-embed na Mux (coder/mux) agent-orchestration daemon (palaging 127.0.0.1). | | `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | I-override ang port kung saan nakikinig ang naka-embed na open-wa (WhatsApp Web automation) daemon (palaging 127.0.0.1). | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Bind/connect host ng naka-embed na serbisyo ng Dario (loopback lang bilang default). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port ng naka-embed na serbisyo ng Dario. | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Bind/connect host ng naka-embed na serbisyo ng Dario (loopback lang bilang default). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Port ng naka-embed na serbisyo ng Dario. | | `LOCAL_HOSTNAMES` | _(walang laman)_ | `open-sse/config/providerRegistry.ts` | Mga karagdagang hostname na pinaghihiwalay ng kuwit at itinuturing na "lokal" (mga pangalan ng serbisyo ng Docker, atbp.). | Ang `ENABLE_CC_COMPATIBLE_PROVIDER` ay para lamang sa mga third-party relay na eksklusibong tumatanggap ng mga Claude Code client. Muling isinusulat ng OmniRoute ang mga request upang tanggapin ang mga ito ng naturang mga relay. Kung gusto mo lang gamitin ang Claude Code CLI, o hindi ka sigurado kung ano ang mga relay na ito, panatilihin itong naka-disable at sa halip ay magdagdag ng karaniwang provider na compatible sa Anthropic. --- ## 21. Kalagayan ng Proxy | Variable | Default | Source File | Paglalarawan | | ------------------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Timeout ng fast-fail na pagsusuri sa kalagayan. | | `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Saklaw ng oras (sa mga oras) para sa pagkalkula ng average na latency ng mga kandidatong proxy sa diskarteng latency-optimized na pool. | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL ng cache ng resulta ng pagsusuri sa kalagayan. | | `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL ng cache para sa mga nabigong pagsisiyasat sa kalagayan ng proxy. Panatilihin itong mas maikli kaysa sa `PROXY_HEALTH_CACHE_TTL_MS` upang mabilis na muling subukan ang mga pansamantalang timeout ng proxy sa ilalim ng mataas na concurrency nang hindi dini-disable ang fast-fail para sa mga proxy na talagang hindi gumagana. | | `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Itakda sa `false` upang i-disable ang background proxy health scheduler na pana-panahong sumusuri sa mga nakarehistrong proxy. | | `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Agwat ng sweep ng background health scheduler sa ms (minimum na `60000`). | | `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Agwat ng probe sa ms para sa mga edge-relay proxy (`deno`/`vercel`/`cloudflare`), na ang mga probe ay gumigising sa isang sinisingilang serverless isolate (minimum na `60000`). | | `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Agwat ng background recovery pass sa ms: kung gaano kadalas muling sinusuri ang mga proxy na dating hindi maayos upang maibalik sa rotation ang isang nakarekober na proxy nang hindi nagre-restart. Ang mga value na mas mababa sa `60000` ay babalik sa default. | | `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Target ng reachability probe na ginagamit ng scheduler at ng endpoint na `/api/settings/proxies/auto-test`. Ituro ito sa isang internal/self-hosted na URL upang maiwasan ang pampublikong default. | | `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Bilang ng mga probe na sinisimulan nang sabay-sabay sa bawat batch, na pinagsasaluhan ng scheduler at ng endpoint na `/api/settings/proxies/auto-test`. Naka-floor sa 1 at limitado sa 50. | | `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Pagkaantala sa ms sa pagitan ng pag-alis ng dalawang probe sa loob ng isang batch. Kung wala ito, sabay-sabay na aalis ang buong batch at maaaring ma-trigger ng isang pinagsasaluhang egress IP ang limitasyon sa rate ng target. Itakda sa `0` upang i-disable ang pagitan; limitado sa 5000. | | `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Itakda sa "false" upang ihinto ang pag-probe sa aktuwal na host ng provider na nakatalaga sa isang proxy (`GET /models`, walang API key) at palaging gamitin sa halip ang `PROXY_HEALTH_TEST_URL`. | | `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Kapag `false` (default), ang mga automated reachability probe (ang scheduler + ang button na "Subukan Lahat" ng `/api/settings/proxies/auto-test`) ay **read-only** at hindi kailanman nagsusulat sa status ng isang proxy — ang operator lamang ang nagtatakda kung active/inactive, kaya hindi maiiwang nakahiwalay ng isang pabagu-bagong probe ang nakatalagang proxy (#6246). Itakda sa `true` upang ibalik ang dating test-and-set na gawi. | | `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in na feature flag (tingnan ang [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nangingibabaw ang override ng dashboard DB). Kapag `true` (o `1`, `yes`), muling sinusubukan ang mga walang-lamang na isinaling streaming turn sa pamamagitan ng normal na credential path (hanggang `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` na muling pagsubok) sa halip na magpakita ng walang-lamang 200 o 502 na walang content. | | `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in na feature flag (tingnan ang [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); nangingibabaw ang override ng dashboard DB). Kapag `true` (o `1`, `yes`), ipinapakita ang read-only na obserbasyon ng pool egress sa ilalim ng isang proxy pool sa dashboard (mga natatanging egress IP, mga koneksyon, at ang pinakamadalas makita sa likod ng isang IP sa nakalipas na 24 h, mula sa proxy log). Hindi kailanman ginagamit para sa routing. | | `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Opt-in na feature flag (tingnan ang [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); mananaig ang override ng dashboard DB). Kapag `true` (o `1`, `yes`), tinatanggap ang mga may petsang naobserbahang address na ipinadala ng operator para sa bawat miyembro ng pool at isinasama ang mga ito sa journal read para sa pagpapakita at pagkakasunod-sunod ng pool. | | `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Window ng obserbasyon sa oras para sa mga egress row na ipinadala ng operator (binabasa sa bawat read; hindi kailangang mag-restart). Nililimitahan sa 1..168; kapag wala sa saklaw, hindi numeric, o walang laman, babalik sa 24 na may iisang babala sa buong proseso at hindi kailanman magti-throw. | | `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Itakda sa `true` upang awtomatikong alisin ng scheduler ang mga proxy pagkatapos ng paulit-ulit at magkakasunod na pagkabigo. | | `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Bilang ng magkakasunod na pagkabigo bago awtomatikong alisin ng scheduler ang isang proxy (kapag `PROXY_AUTO_REMOVE=true`). | | `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Itakda sa `true` upang i-soft-disable ng scheduler (status na `dead`, hindi kailanman dine-delete) ang isang proxy pagkatapos ng paulit-ulit at magkakasunod na pagkabigo, sa halip na alisin ito. Hindi mapanirang alternatibo sa `PROXY_AUTO_REMOVE`: agad na inaalis ang proxy sa pool/rotation resolution (hindi na ito isinasama ng alive-status filter na ginagamit ng scope-pool resolution) at awtomatikong muling ina-activate kapag muli nitong naipapasa ang mga probe. Pareho nitong ginagamit ang threshold na `PROXY_AUTO_REMOVE_AFTER`. Kung parehong `true` ang dalawang flag, mananaig ang `PROXY_AUTO_REMOVE`. | | `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Opt-in na passive skip: kapag `true`, nilalaktawan ng scheduler ang live probe para sa isang endpoint kung napatunayan na ito ng kamakailang production traffic nito (kahit isang tagumpay at walang naiugnay na pagkabigo ng proxy sa loob ng window, at eksaktong isang provider ang naobserbahan). Naka-off bilang default: sinusuri ang bawat proxy gamit ang probe. | | `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Window sa ms ng production traffic na sinusuri ng passive skip (nililimitahan sa `60000..599999`). Mas maikli ito kaysa sa 10-minutong sweep interval upang manaig ang isang kamakailang pagkabigo sa halip na matabunan. | | `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Pahintulutan ang OAuth at mga daloy ng pag-validate ng provider na lampasan ang naka-pin na proxy at direktang kumonekta kapag nabigo ang mga paunang pagsusuri sa pagiging maaabot ng proxy. Ang epektibong pagkakasunod ng priyoridad ay override ng Feature Flags DB > env var > default. | | `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30s) | `src/lib/resilience/settings.ts` | Default na badyet sa **paghihintay sa queue**: kung gaano katagal maaaring maghintay ang isang request para sa slot ng provider at manatili sa queue bago ito tanggihan nang hindi kailanman nakararating sa upstream. Iki-clear ang timer kapag nagsimula nang tumakbo ang job — hiwalay na nililimitahan ang execution ng `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Default lamang ang itinatakda ng env: mananaig dito ang naka-persist na `resilienceSettings.requestQueue.maxWaitMs`, at pagkatapos ay ang `rateLimitOverrides.maxWaitMs` ng bawat koneksyon. | | `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 min) | `open-sse/services/rateLimitManager.ts` | Pinakamataas na tagal na maaaring manatili sa execution ang isang tinanggap na request bago mag-expire ang rate-limit reservation nito — nakahiwalay sa badyet sa paghihintay sa queue upang hindi mag-time out ang mabagal na pagsisimula ng fetch sa mga non-incremental gateway (#12027). | | `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (naka-disable) | `open-sse/services/rateLimitManager.ts` | Limitasyon sa pagtanggap sa queue: tanggihan gamit ang 429 `queue_full` kapag ganito karaming request ang nasa queue na. `0` = walang limitasyon (default). | | `RATE_LIMIT_AUTO_ENABLE` | _(hindi nakatakda)_ | `open-sse/services/rateLimitManager.ts` | Sapilitang i-on/i-off ang awtomatikong pag-enable ng safety net para sa rate limit anuman ang naka-persist na setting sa Dashboard. Tumatanggap ng `true`/`1`/`on` upang sapilitang i-on, at `false`/`0`/`off` upang sapilitang i-off. | | `PROVIDER_COOLDOWN_ENABLED` | _(hindi nakatakda → naka-off)_ | `open-sse/services/providerCooldownTracker.ts` | Opsyonal na pandaigdigang pagsubaybay sa cooldown ng provider/koneksyon sa iba't ibang request. Naka-OFF bilang default (nag-o-overlap sa Connection Cooldown / Provider Circuit Breaker). Tumatanggap ng `true`/`1`/`on` upang i-enable. | | `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | Pinakamababang cooldown (ms) bago muling subukan ang nabigong provider/koneksyon. Eksponensiyal na pinalalaki kasabay ng magkakasunod na pagkabigo. Ginagamit lamang kapag naka-enable ang `PROVIDER_COOLDOWN_ENABLED`. | | `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 min) | `open-sse/services/providerCooldownTracker.ts` | Pinakamataas na limitasyon ng cooldown (ms) bago muling subukan ang nabigong provider/koneksyon anuman ang mangyari. Ginagamit lamang kapag naka-enable ang `PROVIDER_COOLDOWN_ENABLED`. | | `STREAM_RECOVERY_ENABLED` | _(hindi nakatakda → naka-off)_ | `src/lib/resilience/settings.ts` (seed) → `open-sse/services/streamRecovery.ts` (lohika) | **Ano:** transparent na pag-recover ng mga naputol na upstream stream (port ng free-claude-code). Pinipigilan ang pambungad na SSE window nang hanggang `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) upang ang _pre-commit_ cutoff — na nangyayari bago makarating sa client ang anumang byte — ay muling buksan at subukang muli nang hindi nahahalata. **Kailan dapat i-enable:** para sa mga hindi maaasahang upstream na madalas maputol nang may 0 byte sa simula ng stream; panatilihing naka-OFF kung hindi katanggap-tanggap ang hanggang 750 ms na dagdag sa oras bago lumabas ang unang token sa bawat stream. Tumatanggap ng `true`/`1`/`on`. Ginagamit bilang paunang halaga ng naka-persist na setting ng Resilience; mananaig ang setting sa Dashboard kapag naitakda na. | | `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(hindi nakatakda → naka-off)_ | `src/lib/resilience/settings.ts` (seed) → `open-sse/services/streamRecovery.ts` (lohika) | **Ano:** pagpapatuloy sa kalagitnaan ng stream (Yugto 4.4) — pagkatapos ng _post-commit_ na pagkaputol (nakarating na sa client ang mga byte), muling humiling gamit ang bahagyang teksto bilang assistant prefill at pagdugtungin ang nawawalang hulapi. Para lamang sa mga plain-text na stream na compatible sa OpenAI; hindi kailanman gagana habang may isinasagawang tool call. **Kailan ie-enable:** para sa mahahabang pagbuo na napuputol sa kalagitnaan ng sagot at kung katanggap-tanggap na dumating nang isang bagsakan ang na-recover na hulihan sa halip na token-by-token. Hiwalay sa `STREAM_RECOVERY_ENABLED` (magkaiba ang profile ng panganib). Tumatanggap ng `true`/`1`/`on`. | | `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(hindi nakatakda → naka-off)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | Opsyonal na watchdog para sa kapaki-pakinabang na output ng aktibong stream. Tinutukoy nito ang mga stream na patuloy na nagpapadala ng mga chunk ngunit nananatiling mas mababa sa naka-configure na rate ng output ng assistant; hindi napagkakamalang progreso ang mga heartbeat, event ng paggamit, walang-lamang delta, at mga yugto ng tool/pangangatwiran. Hiwalay ito sa mga timeout para sa kawalan ng aktibidad at mahigpit na deadline. | | `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Palugit bago suriin ang throughput, nililimitahan sa 0–600000 ms. | | `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Gumugulong na palugit ng kapaki-pakinabang na output, nililimitahan sa 1000–600000 ms; kailangan ang isang kumpletong palugit bago i-abort. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Pinakamababang rate ng byte ng UTF-8 na output ng assistant (konserbatibong proxy para sa token), nililimitahan sa 1–1000000. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Pinakamababang hindi serong sample ng kapaki-pakinabang na output na itinuturing na nasusukat, nililimitahan sa 1–1000000 byte. | | `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Agwat ng pagpapasunud-sunod (ms) sa pagitan ng mga healthcheck ng token ng provider sa pagsisimula. | | `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Pinakamababang randomisadong jitter (ms) na idinaragdag sa `HEALTHCHECK_STAGGER_MS` sa pagitan ng mga healthcheck ng token ng provider upang maiwasan ang biglaang sabay-sabay na pagdagsa (Isyu #1220). | | `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Pinakamataas na randomisadong jitter (ms) na idinaragdag sa `HEALTHCHECK_STAGGER_MS` sa pagitan ng mga healthcheck ng token ng provider upang maiwasan ang biglaang sabay-sabay na pagdagsa (Isyu #1220). | | `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Laki ng batch ng magkakasabay na pagsusuri para sa paunang sweep ng healthcheck ng token; sinusuri ng mas malalaking value ang mas maraming koneksyon nang sabay-sabay, samantalang binabawasan ng mas maliliit na value ang biglaang load (Isyu #7875, regression ng #7719). | | `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Bilang ng mga awtomatikong muling pagtatangka sa mga tugon ng cooldown na saklaw ng modelo bago ibalik ang error sa client. | | `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Pinakamahabang pagitan ng backoff (segundo) sa pagitan ng mga muling pagsubok pagkatapos ng cooldown. Nililimitahan ng halagang ito anuman ang upstream na `Retry-After`. | | `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL ng proxy na nagtitipid ng token ng Headroom. Ang lifecycle ng dashboard (`api/headroom/*`) ay nagpapatakbo ng lokal na `headroom-ai` CLI sa loopback bilang default; i-override lamang upang tumukoy sa isang external na Docker sidecar proxy. | ### Mga constant sa pag-tune ng pagbawi ng stream Ang gawi ng holdback sa pagbawi ay tina-tune gamit ang mga hardcoded na constant sa `open-sse/config/constants.ts` (`STREAM_RECOVERY`), na ipinapakita rito bilang sanggunian — nangangailangan ng pag-edit sa code ang pagbabago sa mga ito, hindi ng env var: - `STREAM_RECOVERY.HOLDBACK_MS = 750` — kung gaano katagal pinipigilan ang pambungad na SSE window upang maulit ang pagsubok sa maagang pagkaputol bago ma-commit ang anumang byte sa client. - `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — mahigpit na limitasyon sa pinipigilang window; mag-commit (flush + passthrough) sa sandaling maipon ang ganitong karaming byte, anuman ang timer. - `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — maximum na bilang ng transparent na muling pagbubukas ng upstream stream habang hindi pa naka-commit ang holdback. > **Sliding-window rate limit kada provider (walang env var):** ang FCC-ported > na sliding-window rate-limit _fallback_ kada provider ay umiiral sa code > (`open-sse/services/providerDefaultRateLimit.ts`, na nakakabit sa pamamagitan ng > `open-sse/services/rateLimitManager.ts`) ngunit ipinapadala nang may **walang-lamang default map** > at **walang operator env var** sa kasalukuyan — pinapagana lamang ito sa pamamagitan ng test hook / > pag-edit sa code. Sinasadya itong hindi isama sa talahanayan sa itaas. Ang relay limiter kada-`(token, IP)` > na _mayroon_ talagang setting ay `RELAY_IP_PER_MINUTE` (§3 Network at Mga Port). --- ## 22. Pag-debug > [!CAUTION] > Lumilikha ang mga variable na ito ng **detalyadong output** at maaaring maglantad ng sensitibong data. **Huwag kailanman i-enable sa production.** | Variable | Default | Source File | Paglalarawan | | ------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CURSOR_DEBUG` | _(hindi nakatakda)_ | `open-sse/executors/cursor.ts` | Itakda sa `1` upang i-enable ang mga detalyadong log ng Cursor executor (mga na-decode na SSE chunk, atbp.). | | `CURSOR_STREAM_DEBUG` | _(hindi nakatakda)_ | `open-sse/executors/cursor.ts` | Alias ng `CURSOR_DEBUG` na backward-compatible. | | `CURSOR_DUMP_FILE` | _(hindi nakatakda)_ | `open-sse/executors/cursor.ts` | Opsyonal na file path na tatanggap ng mga raw na na-decode na Cursor chunk kapag `CURSOR_DEBUG=1`. | | `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Timeout ng kawalan ng aktibidad ng stream (ms) para sa Cursor executor. | | `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Palugit (ms) pagkatapos ng isang composer kv_after_text soft terminator kapag may mga byte pang naka-buffer — binibigyan nito ng oras ang kasunod na exec_mcp tool call upang makumpleto ang frame nito. | | `CURSOR_TOOL_DIRECTIVE` | naka-enable (`!== "0"`) | `open-sse/executors/cursor.ts` | Tool-commit directive na nagsisigurong maaasahang maglalabas ang composer-2.5 ng mga tool call. Itakda sa `0` upang i-disable. | | `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(hindi nakatakda)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | Teksto ng system prompt na itinakda ng operator at idinaragdag sa system message PAGKATAPOS ng pagsasalin (post-translation injection), na umaabot sa mga path ng codex/Responses at `/v1/messages`. Ginagamit din bilang directive prefix na inaalis mula sa mga na-echo na system preamble block. Huwag itakda upang i-disable. | | `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (naka-off) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | Itakda sa `1` upang alisin ang mga na-echo na system-prompt preamble block mula sa simula ng isang openai→claude stream. Naka-off bilang default — nakabatay sa anyo ng Ingles na prosa ang heuristics at binabago nito ang response payload, kaya mawawala ang naturang seksyon kung lehitimong nagsisimula rito ang isang tugon. | | `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Timeout ng pag-fetch sa bawat larawan (ms) para sa remote na `image_url` vision input. | | `CURSOR_STATE_DB_PATH` | _(sinusuri)_ | `open-sse/utils/cursorVersionDetector.ts` | I-override ang paghahanap sa Cursor IDE state DB na ginagamit para sa pagtukoy ng bersyon ng IDE. | | `CURSOR_AGENT_CLI_VERSION` | _(tukuyin / i-pin)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Build id ng Agent CLI (`YYYY.MM.DD-`) para sa `x-cursor-client-version: cli-…` sa Agent Run. | | `CURSOR_AGENT_BIN` | _(hindi nakatakda)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Path patungo sa Cursor Agent binary na ginagamit para sa pagbuo ng larawan. Kapag hindi nakatakda, ginagamit ng handler ang `providerSpecificData.agentBin` at pagkatapos ay ang PATH. | | `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Kabuuang oras sa wall clock para sa bawat larawan (ms) para sa mga image job ng Cursor Agent. | | `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Hangganan sa concurrency ng shared seat para sa mga image job ng Cursor. | | `CURSOR_IMG_MODEL` | request / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | I-override ang `--model` ng Cursor CLI para sa mga image job. | | `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Dalas ng pag-poll sa resulta ng pagbuo ng larawan ng UC (uncensored.com) (ms). | | `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | Kabuuang oras sa wall clock ng pag-poll sa resulta ng pagbuo ng larawan ng UC (ms). | | `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Dalas ng pag-poll sa resulta ng pagbuo ng video ng UC (uncensored.com) (ms). | | `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | Kabuuang oras sa wall clock ng pag-poll sa resulta ng pagbuo ng video ng UC (ms). | | `CURSOR_DATA_DIR` | _(sinusuri)_ | `open-sse/utils/cursorAgentCliVersion.ts` | I-override ang data dir ng Cursor Agent CLI (`…/versions/`); ito rin ang variable na ginagamit ng opisyal na agent. | | `CURSOR_TOKEN` | _(hindi nakatakda)_ | `scripts/ad-hoc/cursor-tap.cjs` | Direktang Cursor bearer token na ginagamit ng mga tool ng developer. | | `OMNIROUTE_LOG_REQUEST_SHAPE` | naka-disable (opt-in sa pamamagitan ng `"1"`) | `src/app/api/v1/chat/completions/route.ts` | I-log ang mga marker ng uri/haba ng content para sa malalaking chat payload kapag nakatakda ang `"1"`. Naka-off bilang default upang bawasan ang ingay sa log. | | `DEBUG_RESPONSES_SSE_TO_JSON` | _(hindi nakatakda)_ | `open-sse/handlers/responseTranslator.ts` | Itakda sa `true` upang i-log ang mga detalye ng pagsasalin ng Responses API SSE→JSON. | | `DEBUG_CLAUDE_NONSTREAM` | _(hindi nakatakda)_ | `open-sse/handlers/responseTranslator.ts` | Itakda sa `true` upang ilantad ang mga walang-lamang textContent chunk sa path ng pagsasalin ng tugon ng Claude (para lamang sa pag-debug). | | `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(hindi nakatakda)_ | E2E test harness | Itakda sa `true` upang i-enable ang E2E test mode (mas maluwag na auth, mga test hook). | --- ## 23. Integrasyon sa GitHub Payagan ang mga user na direktang mag-ulat ng mga isyu mula sa Dashboard. | Variable | Default | Source File | Paglalarawan | | --------------------- | ------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `GITHUB_ISSUES_REPO` | _(hindi nakatakda)_ | `src/app/api/v1/issues/report/route.ts` | Repository na nasa format na `owner/repo`. | | `GITHUB_ISSUES_TOKEN` | _(hindi nakatakda)_ | `src/app/api/v1/issues/report/route.ts` | GitHub Personal Access Token na may saklaw na `issues:write`. | | `GITHUB_TOKEN` | _(hindi nakatakda)_ | pag-uuri ng isyu / mga helper ng cloud agent | Pangkalahatang GitHub access token na ginagamit bilang fallback para sa `GITHUB_ISSUES_TOKEN` at ginagamit ng mga helper ng cloud agent sa `src/lib/cloudAgent/*`. | --- ## Mga Sitwasyon sa Deployment Para sa gabay ng SRE sa relay backend (gawi ng ts/bifrost/auto, paglalagay ng 9router kumpara sa CLIProxyAPI, at fallback strategy para sa mataas na throughput), tingnan ang [Diskarte sa Relay Backend](/docs/reference/RELAY_BACKEND_STRATEGY.md). ### Minimal na Lokal na Development ```bash JWT_SECRET=$(openssl rand -base64 48) API_KEY_SECRET=$(openssl rand -hex 32) INITIAL_PASSWORD=dev123 PORT=20128 NODE_ENV=development ``` ### Produksyon gamit ang 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 ``` ### Air-Gapped / 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 na may Reverse Proxy (nginx + Cloudflare) ```bash JWT_SECRET= API_KEY_SECRET= STORAGE_ENCRYPTION_KEY= PORT=20128 AUTH_COOKIE_SECURE=true REQUIRE_API_KEY=true NEXT_PUBLIC_BASE_URL=https://omniroute.example.com BASE_URL=http://127.0.0.1:20128 CORS_ORIGIN=https://omniroute.example.com ENABLE_TLS_FINGERPRINT=true CLI_COMPAT_ALL=1 ``` --- ## 24. Skills Sandbox (v3.8.0+) Mga limitasyon at kontrol sa kaligtasan na inilalapat kapag nagpapatakbo ang Skills framework (`src/lib/skills/`) ng mga automation na tinukoy ng user sa isang sandboxed na kapaligiran. | Variable | Default | Source File | Paglalarawan | | --------------------------------- | -------------------------------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 s) | `src/lib/skills/builtins.ts` | Wall-clock timeout sa bawat pagpapatakbo para sa sandboxed skill code. Mahigpit na limitasyon; anumang lalampas dito ay ihihinto. | | `SKILLS_EXECUTION_TIMEOUT_MS` | _(bumabalik sa `SKILLS_SANDBOX_TIMEOUT_MS`)_ | `src/lib/skills/` | Timeout para sa high-level na orkestrasyon ng skill. Magtakda ng mas mataas na halaga kaysa sa `SKILLS_SANDBOX_TIMEOUT_MS` upang payagan ang mga multi-step workflow. | | `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | Maximum na bilang ng byte na maaaring basahin ng isang skill mula sa anumang indibidwal na sandboxed file. | | `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | Maximum na bilang ng byte na maaaring makuha mula sa anumang indibidwal na HTTP response sa loob ng isang skill. | | `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | Mahigpit na limitasyon sa bilang ng mga character ng stdout/stderr na ibinabalik mula sa isang sandbox invocation. | | `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | Itakda sa `1`/`true` upang payagan ang outbound network mula sa loob ng sandbox. Bilang default, **nakahiwalay** ito para sa kaligtasan. | | `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(walang laman)_ | `src/lib/skills/builtins.ts` | Allowlist na pinaghihiwalay ng kuwit ng mga container image na pinapayagan para sa sandbox execution. Kapag walang laman, built-in na default lamang ang pinapayagan. | | `SKILLS_SANDBOX_DOCKER_IMAGE` | _(built-in na default)_ | `src/lib/skills/` | Container image na ginagamit kapag gumagawa ng Docker-backed sandbox. I-override upang i-pin ang isang custom at pinatibay na base image. | | `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | Container runtime para sa pag-sandbox ng skill: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. Pinipili ng `auto` ang pinakamahusay na naka-install na runtime ayon sa host OS (Apple Container/OrbStack sa macOS, WSL Container sa Windows, Podman sa Linux), at bumabalik sa Docker kung kinakailangan. | > [!CAUTION] > Ang pagpapagana sa `SKILLS_SANDBOX_NETWORK_ENABLED=true` ay nagbubukas ng egress path mula sa arbitraryong skill code. Ipares ito sa `OUTBOUND_SSRF_GUARD_ENABLED=true` at isang mahigpit na patakaran sa `CORS_ORIGIN`/proxy sa mga shared deployment. --- ## 25. Mga Quota ng Provider, Tunnel, Backup at Iba Pang Runtime Mga endpoint ng quota ng provider, mga network tunnel (Tailscale, Ngrok, MITM debug proxy), ang 1Proxy egress pool, mga backup ng database, at maliliit na override para sa bawat feature na ginagamit ng executor layer o mga script. | Variable | Default | Source File | Description | | ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | String ng koneksyon sa Redis para sa backend ng rate limiter. | | `ALIBABA_CODING_PLAN_HOST` | _(production host)_ | `open-sse/services/bailianQuotaFetcher.ts` | I-override ang host na ginagamit upang kunin ang mga quota ng coding plan ng Alibaba Bailian. | | `ALIBABA_CODING_PLAN_QUOTA_URL` | hinango mula sa host | `open-sse/services/bailianQuotaFetcher.ts` | Override ng buong URL ng quota para sa Alibaba Bailian. | | `QWEN_CLOUD_COOKIE` | _(hindi nakatakda)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Cookie ng console session para sa personal na gateway ng quota ng Token Plan ng Qwen Cloud / Model Studio (hindi ito mababasa ng inference API key). Kopyahin ang buong `Cookie` request header — naglalaman ito ng `login_qwencloud_ticket` — mula sa anumang tawag sa `api.json` patungo sa `cs-data.qwencloud.com` sa home.qwencloud.com › Billing › Subscription (F12 › Network). Sensitibo at nakatali sa session; mas mainam gamitin ang per-connection na `qwenCloudCookie` field ng Dashboard. | | `QWEN_CLOUD_SEC_TOKEN` | _(hindi nakatakda)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Manu-manong override ng `sec_token` para sa console gateway ng Token Plan. Sensitibo; kapag hindi nakatakda, kinukuha ito ng fetcher mula sa HTML ng dashboard gamit ang cookie. | | `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Override ng gateway host para sa personal na fetcher ng quota ng Token Plan (hal. `bailian-singapore-cs.alibabacloud.com` para sa console ng Model Studio). | | `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | URL ng dashboard na ginagamit upang kunin ang `sec_token` mula sa HTML ng naka-log in na user. | | `XIAOMI_MIMO_CONSOLE_COOKIE` | _(hindi nakatakda)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Cookie ng console session para sa API ng quota ng Xiaomi MiMo Token Plan (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — hindi ito mababasa ng inference API key). Kopyahin ang buong `Cookie` request header — naglalaman ito ng `api-platform_serviceToken` at `userId` — mula sa anumang request sa `platform.xiaomimimo.com` sa pahina ng Token Plan (F12 › Network). Sensitibo at nakatali sa session; mas mainam gamitin ang per-connection na `xiaomiMimoConsoleCookie` field ng Dashboard. | | `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Buwanang badyet (Credits) para sa fallback ng Xiaomi MiMo na sinusubaybayan ng OmniRoute at ginagamit kapag walang naka-configure na console cookie. Ang default ay 4.1B ng Lite tier; itakda ito sa Credits ng plan (Standard 11B / Pro 38B / Max 82B). Mas mananaig ang override na `providerSpecificData.monthlyTokenLimit` sa bawat koneksyon kaysa sa env var na ito. | | `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Override sa console front-end path para sa pagkuha ng free-tier vision/media quota ng Alibaba Model Studio. | | `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Override sa console front-end path para sa pagkuha ng free-tier multimodal quota ng Alibaba Model Studio. | | `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Override sa console front-end path para sa pagkuha ng free-tier audio quota ng Alibaba Model Studio. | | `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(hindi nakatakda)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Opsyonal na path patungo sa lokal na JSON override para sa built-in na allowlist ng mga free-tier text model ng Alibaba. Kung wala ito, gagamitin ang `$DATA_DIR/alibaba-free-tier-allowlist.json`, pagkatapos ay ang `config/alibaba-free-tier-allowlist.json`. | | `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Mga token na nakalaan para sa completion output kapag kinakalkula ang mga prompt budget. | | `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Bilang ng mga pinakabagong inline image na pananatilihin kapag inaalis ang mga mas luma upang magkasya sa context window (#8560). | | `MODEL_ALIAS_COMPAT_ENABLED` | naka-enable | `open-sse/services/model.ts` | I-toggle ang legacy model-alias compatibility layer na ginagamit ng mas lumang mga client. | | `OMNIROUTE_EMERGENCY_FALLBACK` | naka-enable | `open-sse/services/emergencyFallback.ts` | Itakda sa `false` (o `0`) upang i-disable ang emergency fallback kapag naubos ang badyet, na nagre-reroute ng mga nabigong request sa libreng `nvidia`/`openai/gpt-oss-120b` model. Ang umiiral na pagkakasunod-sunod ng prayoridad ay Feature Flags DB override > env var > default; kung hindi available, gagamitin ng serbisyo ang raw env value. | | `COMMAND_CODE_CALLBACK_PORT` | _(hindi nakatakda)_ | `src/app/api/providers/command-code/auth/shared.ts` | Lokal na port na ginagamit para sa mga OAuth-style callback mula sa Command Code CLI helper. | | `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Halagang ipinapadala bilang `x-command-code-version` header sa upstream ng Command Code. I-override upang itaas ang bersyon ng CLI. | | `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Base URL para sa upstream ng paggamit/quota ng Command Code na ginagamit ng telemetry ng smartphone quota-fetcher. I-override para sa isang self-hosted/alternatibong Command Code API. | | `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Lokal na bind port para sa MITM debug proxy. | | `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Itakda sa `1` upang i-disable ang upstream TLS verification (para lamang sa development). | | `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Timeout ng idle socket (ms) para sa mga naka-proxy na koneksyon; isinasara ang mga idle socket na lumampas dito upang maiwasan ang pagtagas ng mga half-open tunnel. | | `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Port na pinakikinggan ng Antigravity MITM bridge. | | `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Router endpoint kung saan ipinapasa ng bridge ang Antigravity traffic. | | `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Ino-override ang directory kung saan binabasa ng bridge ang TLS material nito. Pinipili ang cert model tulad ng ginagawa ng AgentBridge server: `server.crt`/`server.key` para sa legacy leaf install, kung hindi ay `ca.crt`/`ca.key` (root CA, isang leaf para sa bawat na-intercept na host; sapilitang ginagamit kapag `MITM_ROOT_CA_ENABLED=true`). Lalabas ang bridge sa startup kung nawawala ang mga file para sa aktibong model. | | `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Antas ng detalye ng log para sa routing decision: pinatatahimik ng `0` ang mga log, habang mas maraming bypass/route decision ang nila-log ng mas matataas na halaga. | | `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Itakda sa `true` upang piliing gamitin ang root-CA + per-host-leaf cert model (#6684). Awtomatiko itong nakukuha ng mga bagong install; pinananatili ng mga install na may dati nang pinagkakatiwalaang legacy leaf ang legacy fixed-SAN cert maliban kung kusang piniling gamitin ito. | | `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Itinatakda NG MITM manager para sa inilulunsad na proxy process (`root-ca` \| `legacy`) — sinasalamin nito ang desisyon sa cert migration; hindi ito nilalayong itakda nang manu-mano. | | `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Itakda sa `1` (truthy) upang alisin ang nangungunang `sudo` mula sa mga command ng pagtitiwala sa MITM certificate — para sa mga deployment na walang root / gumagamit ng user namespace kung saan manu-manong pinagkakatiwalaan ng operator ang CA (hal., sa pamamagitan ng mekanismo ng extra-CA-certs ng Node). | | `SKIP_ANTIGRAVITY_DNS` | _(hindi nakatakda)_ | `src/mitm/dns/provision.ts` | Itakda sa `true` upang ganap na laktawan ang paglalaan ng mga DNS entry sa `/etc/hosts` para sa mga hostname ng Antigravity proxy — para sa mga container na walang magagamit na sudo/root. | | `OMNIROUTE_SKIP_DNS_WRITE` | _(hindi nakatakda)_ | `src/mitm/dns/dnsConfig.ts` | Itakda sa `1` upang laktawan ang pagsusulat sa hosts file kapag nagdaragdag/nag-aalis ng mga DNS entry — para sa mga naka-sandbox o read-only na test environment. | | `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Pananggalang para lamang sa test/CI: itakda sa `1` upang gawing no-op ang pag-install/pag-uninstall ng pagtitiwala sa certificate nang sa gayon ay hindi kailanman mabago ng suite ang trust store ng OS. Awtomatikong itinatakda ng test setup at mga CI workflow. | | `CHANGELOG_BASE_REF` | _(awtomatiko)_ | `scripts/check/check-changelog-integrity.mjs` | Tiyak na base ref para sa anti CHANGELOG-eat gate (ang default ay ang base branch ng PR sa CI, o ang pinakamataas na `release/v*`). | | `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Itakda sa `true` upang paganahin ang awtomatikong background scheduler para sa pag-sync ng free-proxy pool. Kailangang tahasang paganahin; naka-off bilang default. | | `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | Agwat ng awtomatikong pag-sync sa millisecond (default na 30 min). | | `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | Paganahin ang 1proxy free proxy source. Itakda sa `false` upang i-disable. | | `FREE_PROXY_1PROXY_API_URL` | _(tingnan ang oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Pag-override sa API URL ng 1proxy. | | `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Pinakamataas na bilang ng mga proxy na kinukuha mula sa 1proxy sa bawat pag-sync. | | `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | Minimum na threshold ng marka ng kalidad para sa mga pag-import mula sa 1proxy. | | `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | I-enable ang libreng pinagmumulan ng proxy na Proxifly. Itakda sa `false` upang i-disable. | | `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Bilang ng mga proxy na kukunin sa bawat pag-sync ng Proxifly. | | `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | Filter ng antas ng anonymity para sa Proxifly (`elite`, `anonymous`, `transparent`). | | `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | I-enable ang libreng pinagmumulan ng proxy na IPLocate. Opt-in lamang. | | `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Pag-override sa base URL ng listahan ng proxy ng IPLocate. | | `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | I-enable ang pinagmumulan ng proxy pool na Webshare. Itakda sa `false` upang i-disable; kailangan ding maitakda ang `FREE_PROXY_WEBSHARE_API_KEY`. | | `FREE_PROXY_WEBSHARE_API_KEY` | _(wala)_ | `src/lib/freeProxyProviders/webshare.ts` | API token ng Webshare account (`Authorization: Token `). Kinakailangan — mananatiling naka-disable ang provider kung wala ito. | | `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Pag-override sa URL ng API ng listahan ng proxy ng Webshare. | | `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Maximum na bilang ng mga proxy na ini-import sa bawat pag-sync ng Webshare. | | `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Ipakita/itago ang button na Deploy Vercel Relay sa tab na Proxy Pool. | | `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Pag-override sa base URL ng Vercel API (para sa pagsubok). | | `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Default na pangalan ng proyekto na paunang inilalagay sa modal ng pag-deploy ng Vercel Relay. | | `TAILSCALE_BIN` | _(awtomatikong matutukoy)_ | `src/lib/tailscaleTunnel.ts` | Tiyak na path patungo sa binary na `tailscale`. | | `TAILSCALED_BIN` | _(awtomatikong matutukoy)_ | `src/lib/tailscaleTunnel.ts` | Tiyak na path patungo sa daemon binary na `tailscaled`. | | `TAILSCALE_AUTHKEY` | _(hindi nakatakda)_ | `src/lib/tailscaleTunnel.ts` | Paunang ibinahaging Tailscale auth key para sa hindi interaktibo / headless na `tailscale up` (ipinapasa sa pamamagitan ng `--auth-key=`). Kapag hindi nakatakda, babalik ang pag-login sa interaktibong URL ng browser auth. | | `NGROK_AUTHTOKEN` | _(hindi nakatakda)_ | `src/lib/ngrokTunnel.ts` | Nagpapatotoo sa mga palabas na ngrok tunnel. | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Pinakamataas na bilang ng mga SQLite backup file na pananatilihin ng manu-mano/naka-iskedyul na paglilinis ng backup. Ang mga snapshot ng migration ay naka-address ayon sa nilalaman at muling ginagamit para sa magkaparehong estado ng DB; hindi pinu-prune ang mga ito sa loob ng kasabay na palugit ng migration. Ino-override nito ang value na naka-save mula sa Settings → Database backup retention. | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Pinakamataas na edad (mga araw) na pananatilihin ng manu-mano/naka-iskedyul na paglilinis ng backup. Idi-disable ng `0` ang pag-prune batay sa edad. Hindi pinu-prune ang mga snapshot ng migration sa loob ng kasabay na palugit ng migration. Ino-override nito ang value na naka-save mula sa Settings → Database backup retention. | | `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Agwat ng tick (ms) ng server-side job na nagpapatakbo sa `backup-schedule.json`. Dapat itong manatiling mas mababa sa 1 minutong granularity ng cron; ang mga value na mas mababa sa `5000` o hindi ma-parse ay babalik sa `30000`. | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Pahiwatig sa container runtime para sa pagsusuri ng pahintulot ng entrypoint. Itakda sa `podman` para sa anumang topology ng Podman. Dahil hindi matutukoy ng container kung lokal ang engine o ina-access sa pamamagitan ng Podman Machine, nananatiling neutral sa topology ang babala at itinuturo nito ang `contrib/podman/README.md`. | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Backend ng store para sa pagkonsumo ng quota-share: `sqlite` (default) o `redis`. | | `QUOTA_STORE_REDIS_URL` | _(hindi nakatakda)_ | `src/lib/quota/storeFactory.ts` | String ng koneksyon sa Redis na ginagamit kapag `QUOTA_STORE_DRIVER=redis` (hal. `redis://localhost:6379`). | | `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | Ratio ng saturation ng pool (0..1); kapag umabot dito o lumampas, papasok ang pool sa strict mode (walang panghihiram). | | `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Multiplier ng score (0..1) na inilalapat sa isang target kapag ibinababa ng soft quota policy ang priyoridad nito. | | `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Multiplier ng score (0..1) na inilalapat sa isang naubusang provider (`credits_exhausted`/`rate_limited`) sa auto-combo scoring kapag OFF ang preflight quota cutoff (#4540). | | `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Panahon ng pagpapanatili (mga araw) para sa mga bucket ng `quota_consumption` bago ang GC (`gcQuotaConsumption`). | | `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Opsyonal (default na OFF): pinapagana ang hard quota cutoff ng awtomatikong pagruruta na nag-aalis ng mga kandidatong may mababang quota bago ang scoring. | | `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Opsyonal (default na OFF): kapag walang tumugmang nakakonektang kandidato sa isang filter na `auto/:`, ibinabalik ang dating gawi na gumamit bilang fallback ng buong (hindi na-filter na) pool sa halip na magbalik ng walang-lamang pool. Kapag default na OFF, ang ibig sabihin ng `:free` ay "free tier lamang". | | `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Limitasyon sa laki ng panel (nililimitahan sa 1–10) para sa broadcast variant na `auto/*:chaos` — ang isang request ay ipinapadala sa hindi hihigit sa ganitong karaming modelong mula sa iba't ibang provider. | | `OMNIROUTE_CHAOS_MIN_PANEL` | _(default ng engine)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Pag-tune ng minimum na laki ng panel na ipinapasa sa chaos broadcast handler; kapag hindi itinakda, pananatilihin ang default ng engine. | | `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(default ng engine)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Mahigpit na timeout (ms) para sa buong fan-out ng chaos panel; kapag hindi itinakda, pananatilihin ang default ng engine. | | `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Path ng `auth.json` ng Grok CLI na ginagamit upang kunin ang lingguhang quota ng grok-web; i-override para sa mga test o hindi karaniwang pag-install ng CLI. | | `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(hindi nakatakda)_ | `src/mitm/manager.ts` | Karagdagang CA certificate (PEM) na pinagkakatiwalaan para sa mga upstream TLS connection ng AgentBridge. | | `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Maximum na bilang ng mga nakuhang request na pinananatili sa ring buffer ng Traffic Inspector. | | `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Maximum na laki (KB) ng nakuhang request/response body bago ito putulin. | | `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Lokal na port para sa HTTP proxy ng Traffic Inspector. | | `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Awtomatikong simulan ang HTTP proxy ng inspector sa pag-boot. | | `INSPECTOR_LLM_HOSTS_EXTRA` | _(hindi nakatakda)_ | `src/lib/inspector/captureState.ts` | Mga karagdagang hostname (pinaghihiwalay ng kuwit) na itinuturing na mga LLM endpoint para sa pagkuha. | | `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | Itago ang mga lihim (mga auth header / API key) sa nakuhang trapiko. | | `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | Mga minuto bago awtomatikong ibalik ng system-proxy guard ang mga setting ng OS proxy. | | `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(awtomatiko)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Token na nagpapatunay sa internal capture ingest papasok sa inspector. | | `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Pinakamataas na bilang ng magkakatabing column sa compare mode ng Playground. | | `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(hindi nakatakda)_ | `src/app/(dashboard)/dashboard/playground/` | Default na model para sa aksyong 'improve prompt' ng Playground (gagamitin ang aktibong model kapag hindi nakatakda). | | `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Pangunahing kill switch para sa bifrost sidecar proxy. Kapag itinakda sa `0`, nagbabalik ang route ng 503 na may `X-Bifrost-Killswitch` header at inililipat ang operator sa TS path. Gamitin upang i-disable ang sidecar nang hindi muling nagde-deploy (tier-1 router incident, key rotation). | | `BIFROST_BASE_URL` | _(hindi nakatakda)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Kapag nakatakda, ipinapasa ng Bifrost sidecar proxy route ang traffic ng `/v1/chat/completions` sa Go gateway na ito sa halip na sa TS relay handler. Hindi nakatakda → 503-na-may-fallback. Inaalis ang trailing slash. | | `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Port na ginagamit ng pinangangasiwaang naka-embed na serbisyo ng Bifrost (`127.0.0.1:`) kapag pinamamahalaan ng OmniRoute ang lifecycle ng Bifrost sidecar. Ang default ay `8080`. | | `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Port na ginagamit ng pinangangasiwaang serbisyo ng LLMLingua compression (`127.0.0.1:`). Ang default ay `20135`. | | `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | Base URL para sa lokal na LLMLingua HTTP compression microservice daemon. Ang default ay `http://127.0.0.1:20135`. | | `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | Hugging Face model id na nilo-load ng pinangangasiwaang LLMLingua sidecar (ipinapasa sa env ng child process). | | `BIFROST_API_KEY` | _(hindi nakatakda)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | API key para sa Bifrost gateway (ipinapadala bilang `Authorization: Bearer ...`). Kung hindi nakatakda, inaasahan ng route na may dalang wastong OmniRoute API key ang request; para lamang sa gateway-side auth ang key na ito. | | `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Kapag true, sini-stream ng ruta ng Bifrost sidecar ang mga tugon pabalik sa pamamagitan ng SSE sa gateway sa halip na sa TS streaming executor. Itakda sa `0` upang pilitin ang mga hindi naka-stream na tugong JSON sa pamamagitan ng gateway. | | `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Timeout sa bawat kahilingan kapag nagpo-proxy sa Bifrost gateway (ms). Kapag nag-timeout, ibinabalik ng ruta ang TS relay path sa pamamagitan ng header na `X-Bifrost-Fallback`. | | `OMNIROUTE_BIFROST_KEY` | _(hindi nakatakda)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Alias para sa `BIFROST_API_KEY` (ginagamit ng mga script na nagbabasa ng env sa pamamagitan ng `OMNIROUTE_*`). Mas inuuna ang `BIFROST_API_KEY` kapag parehong nakatakda ang mga ito. | | `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Relay backend para sa `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript relay (default kapag hindi naka-configure ang Bifrost); pinipili ng `auto` ang Bifrost kapag nakatakda ang `BIFROST_BASE_URL` at `BIFROST_ENABLED` ≠ `0`, na may awtomatikong TS fallback kung hindi maabot ang sidecar; ipinipilit ng `bifrost` ang Bifrost (mahigpit, walang fallback). Palaging unang pinapatakbo sa Next route ang auth/rate-limit/injection-guard/allowlist. Taglay ng mga tugon ang `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. | | `RELAY_ROUTING_BACKEND` | _(hindi nakatakda)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Tinatanggap na alias para sa `OMNIROUTE_RELAY_BACKEND` (parehong mga value na `ts \| bifrost \| auto`). Mas inuuna ang `OMNIROUTE_RELAY_BACKEND` kapag parehong nakatakda ang mga ito. | | `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | Cooldown (ms) matapos mabigo ang isang pagdaan sa Bifrost sidecar sa mode na `auto` bago muling subukan ng relay ang sidecar; diretso itong nagra-route sa TS path habang tumatagal ang cooldown, pagkatapos ay sumusubok muli. Idi-disable ito ng `0`. Nalalapat lamang kapag `OMNIROUTE_RELAY_BACKEND=auto`. | | `OMNIROUTE_TLS_CERT` | _(hindi nakatakda)_ | `bin/cli/commands/serve.mjs` | Path patungo sa isang PEM TLS certificate upang ihatid ang `omniroute serve` sa pamamagitan ng HTTPS (katumbas ng `--tls-cert`). Dapat itong ipares sa `OMNIROUTE_TLS_KEY`; pagkatapos, tina-terminate ng standalone server ang TLS sa parehong listener (gumagana ang `wss://` nang walang pagbabago). Hindi nakatakda → plain HTTP. Kapag isa lamang sa cert/key ang ibinigay, o hindi mabasa ang path, nagla-log ito ng babala at nananatiling HTTP. | | `OMNIROUTE_TLS_KEY` | _(hindi nakatakda)_ | `bin/cli/commands/serve.mjs` | Path patungo sa PEM TLS private key para sa HTTPS ng `omniroute serve` (katumbas ng `--tls-key`). Dapat itong ipares sa `OMNIROUTE_TLS_CERT`. Tingnan ang `OMNIROUTE_TLS_CERT`. | | `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Pangunahing switch para sa mga rutang `/api/local/*`. Kapag hindi nakatakda o `0`, nagbabalik ng 503 sa production ang lahat ng rutang `/api/local/*`. Dapat itong `1` sa mga non-loopback deployment upang i-enable ang Redis launcher at mga katulad na 1-click starter ng lokal na serbisyo. Karagdagang pananggalang kasama ng klasipikasyon ng route guard na `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` sa `src/server/authz/routeGuard.ts`). | | `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(hindi nakatakda)_ | `src/lib/security/localEndpoints.ts` | Bearer token para sa mga tumatawag sa `/api/local/*` na wala sa loopback (hal., ang desktop app). Kapag nakatakda, dapat taglay ng mga kahilingan mula sa mga non-loopback IP ang `Authorization: Bearer `. Kinakailangan kapag `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` sa mga non-loopback deployment. | | `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Pangalan ng container para sa 1-click Redis launcher (`omniroute redis up`). Ginagamit ng CLI at ng `RedisLauncherPanel` GUI. | | `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Host port para sa 1-click Redis launcher. Taasan ito kung ginagamit na ng host ang 6379. Mananatiling 6379 ang internal port ng container. | | `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Host interface kung saan inilalathala ang 1-click Redis launcher. Sinisimulan ng launcher ang Redis NANG WALANG password, kaya ang pag-bind sa `0.0.0.0` ay nagbibigay sa bawat host sa iyong LAN ng hindi authenticated na Redis — palawakin lamang ito kung ikaw mismo ay magtatakda rin ng password sa instance. | | `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interface kung saan inilalathala ng docker-compose ang Redis sidecar (#9286). Tumatakbo ang compose Redis nang walang `requirepass`; naaabot ito ng mga app container sa pamamagitan ng compose network (`redis:6379`) — umiiral lamang ang inilathalang port para sa tooling sa host side. Inilalantad ng `0.0.0.0` ang hindi authenticated na Redis sa buong LAN. | | `REDIS_PORT` | `6379` | `docker-compose.yml` | Host port para sa compose Redis sidecar. | | `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Host interface kung saan inilalathala ng docker-compose ang sariling dashboard/API/live-WS ports ng app (#12568). Dahil ang `REQUIRE_API_KEY=false` ang default na kasama sa `.env.example`, inilalantad ng `0.0.0.0` ang anonymous na `/v1` LLM proxy sa buong LAN/WAN — palawakin lamang kapag `REQUIRE_API_KEY=true` o may reverse proxy sa harap na nagpapatupad ng sarili nitong authentication. | | `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interface kung saan inilalathala ng docker-compose ang Qdrant memory sidecar (#12578). Parehong pangangatwiran tungkol sa pagkakalantad sa LAN gaya ng sa `REDIS_BIND_HOST`. | | `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Host interface kung saan inilalathala ng docker-compose ang Bifrost router sidecar (#12578). Parehong pangangatwiran tungkol sa pagkakalantad sa LAN gaya ng sa `REDIS_BIND_HOST`. | | `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Namespace prefix na inilalapat sa bawat OmniRoute Redis key (rate limiter, auth cache, quota store, warmup circuit breaker). Pinipigilan nito ang pagbangga ng mga key kapag nakabahagi ang Redis instance sa iba pang mga app (#11042). | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(hindi nakatakda — naka-disable ang mekanismo)_ | `src/lib/api/internalServiceAuth.ts` | Shared secret para sa mga internal REST hop na nagpapanatili ng identity (#9260): ipinapadala ito ng mga component ng OmniRoute na tumatawag sa iba pang lokal na route ng OmniRoute bilang `x-omniroute-internal-service-token` upang mapanatili ang identity ng orihinal na tumawag. Inihahambing gamit ang `timingSafeEqual`. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(hindi nakatakda)_ | `src/lib/api/internalServiceAuth.ts` | Bersiyong secret-file ng token ng panloob na serbisyo: path patungo sa isang file na ang na-trim na nilalaman ay ang token. Isinasaalang-alang lamang kapag hindi nakatakda ang inline na variable. | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Dagdagan ang listahan ng mga provider sa dashboard gamit ang lingguhang estadistika ng ranggo mula sa OpenRouter (#9324). Naka-on bilang default; itakda sa `false` upang ganap na laktawan ang pag-fetch sa background (hindi nagba-block at hindi kailanman nakamamatay). | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | TTL ng cache para sa snapshot ng estadistika ng provider ng OpenRouter, sa mga millisecond. | | `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Redis image na ginagamit ng 1-click Redis launcher. I-override sa `redis:8-alpine` o sa isang mirror ng pribadong registry kung kinakailangan. | | `QDRANT_HOST` | `qdrant` | _(opsyonal na profile ng cluster)_ | Hostname ng Qdrant sidecar kapag aktibo ang `--profile memory`. Ang default ay tumuturo sa pangalan ng qdrant service sa loob ng network; i-override para sa isang external deployment. Ginagamit lamang kapag ang `qdrantEnabled` ay `true` sa code (`src/lib/memory/vectorStore.ts:108`). | | `QDRANT_PORT` | `6333` | _(opsyonal na profile ng cluster)_ | REST port ng Qdrant sidecar. | | `QDRANT_GRPC_PORT` | `6334` | _(opsyonal na profile ng cluster)_ | gRPC port ng Qdrant sidecar. Ginagamit ng mga client library na mas pinipili ang gRPC kaysa REST para sa mga streaming operation. | | `QDRANT_API_KEY` | _(hindi nakatakda)_ | _(opsyonal na profile ng cluster)_ | Opsyonal na API key para sa Qdrant Cloud o sa isang authenticated na on-prem instance. Walang laman → walang ipinapadalang `api-key` header. | | `QDRANT_COLLECTION` | `omniroute-memory` | _(opsyonal na profile ng cluster)_ | Pangalan ng collection para sa mga embedding ng memorya ng pag-uusap ng OmniRoute. Ginagawa sa unang pagpapatakbo gamit ang mga dimensyon ng `QDRANT_VECTOR_SIZE`. | | `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(opsyonal na profile ng cluster)_ | Default na pangalan ng embedding model na itinatala sa metadata ng Qdrant collection. Ang aktuwal na mga embedding ay binubuo ng anumang provider na tinutukoy ng field na `embeddingModel` sa mga setting ng OmniRoute. | | `QDRANT_VECTOR_SIZE` | `1536` | _(opsyonal na profile ng cluster)_ | Dimensyon ng embedding vector. Dapat tumugma ito sa modelong ginagamit mo sa pag-embed (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). | | `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(opsyonal na profile ng cluster)_ | Katumpakan sa oras ng pagbuo ng HNSW index. Mas mataas = mas mabagal na pagbuo, mas mabilis na paghahanap. | | `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Pangunahing switch para sa pag-ikot ng account na maaaring i-configure ng operator. Kapag `false`, wala sa mga class na `OMNIROUTE_ROTATE_*` sa ibaba ang magti-trigger ng fallback ng account (bina-block din ng master-off na estado ang mga class na 429/500/502 na naka-enable bilang default). Nagbibigay-daan ito sa isang nangangasiwang front-end (hal. ang VibeProxy desktop app) na itugma ang sarili nitong mga panuntunan sa pag-ikot sa account-fallback engine ng backend. | | `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Cooldown (mga segundo) na inilalapat sa isang account na nalimitahan ang rate kapag walang ibinigay na tahasang pahiwatig sa pag-reset ang upstream. `0` = gamitin ang default na cooldown ng engine sa halip na isang nakapirming override. | | `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Katumbas ng kagustuhan sa front-end na "huwag i-tag bilang nalimitahan ang rate nang walang oras ng pag-reset." | | `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | Pag-enable ng fallback ayon sa status para sa mga error na `429`. Kapag `false` (at `OMNIROUTE_ROTATION_ENABLED=true`), hindi na magti-trigger ng pag-ikot ng account ang isang `429` at sa halip ay ibabalik ito sa client. | | `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Bilang ng mga error na `429` sa loob ng `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` na kinakailangan bago paikutin ang account. Ang `1` (default) ay agad na nagpapaikot, na pinananatili ang dating gawi. | | `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Gumagalaw na window (mga segundo) kung kailan binibilang ang mga error na `429` para sa `OMNIROUTE_ROTATE_429_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | Pag-enable ng fallback ayon sa status para sa mga error ng server na `5xx` (maliban sa `502`, na may sarili nitong class). Kapag `false`, hindi na magti-trigger ng pag-ikot ng account ang mga error na ito. | | `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Bilang ng mga error na `5xx` sa loob ng `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` na kinakailangan bago paikutin ang account. Ang `1` (default) ay agad na nagpapaikot. | | `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Sliding window (segundo) kung kailan binibilang ang mga error na `5xx` patungo sa `OMNIROUTE_ROTATE_500_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | Pag-enable ng fallback ayon sa status para sa mga error na `502` (bad gateway). Kapag `false`, hindi na nagti-trigger ng pag-rotate ng account ang mga `502`. | | `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Bilang ng mga error na `502` sa loob ng `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` na kinakailangan bago i-rotate ang account. Agad na nagro-rotate ang `1` (default). | | `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Sliding window (segundo) kung kailan binibilang ang mga error na `502` patungo sa `OMNIROUTE_ROTATE_502_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | Opt-in (default na NAKA-OFF): kapag `true`, nagti-trigger din ng pag-rotate ng account ang karaniwang `400` (bad request). Pandagdag lamang ito — hindi nito kailanman hinaharangan ang kasalukuyang gawi ng engine kung saan magfa-fallback pa rin ang isang `400` na naglalaman ng tekstong rate-limit/quota, anuman ang flag na ito. | | `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Bilang ng mga error na `400` sa loob ng `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` na kinakailangan bago i-rotate ang account (isinasaalang-alang lamang kapag `OMNIROUTE_ROTATE_ON_400=true`). | | `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Sliding window (segundo) kung kailan binibilang ang mga error na `400` patungo sa `OMNIROUTE_ROTATE_400_THRESHOLD`. | ### Claude Warmup Scheduler Warmup na pinapatakbo ng cron para sa mga naka-opt in na koneksyon ng Anthropic OAuth, upang mabuksan ang 5-oras na window ng rate limit sa pamamagitan ng isang simpleng naka-iskedyul na request sa halip na ng unang tunay na request (#8848). Naka-off ang scheduler maliban kung truthy ang `OMNIROUTE_WARMUP_ENABLED` **at** naka-flag ang koneksyon sa `settings.claudeWarmup.connections`; nangangahulugan ang walang lamang listahan ng koneksyon na walang iwi-warm up kahit naka-on ang env var. | Variable | Default | Source File | Paglalarawan | | ------------------------------ | ------------------------------ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_WARMUP_ENABLED` | _(hindi nakatakda → naka-off)_ | `src/lib/warmupScheduler.ts` | Pangunahing switch para sa warmup scheduler. Tumatanggap ng `1`/`true`/`yes`/`on` (hindi sensitibo sa laki o liit ng titik, inaalis ang sobrang espasyo). Anumang ibang value, o kapag hindi nakatakda, ay nagpapanatiling naka-off ang scheduler. | | `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Limang-field na cron expression para sa warmup tick, na sinusuri sa `America/Los_Angeles` (reset timezone ng Anthropic) anuman ang oras ng host. | | `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | Bilang ng mga koneksiyong sabay-sabay na ini-warm up sa bawat tick. Nililimitahan sa `1`-`10`; babalik sa `3` ang value na hindi numeric. | | `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | Model na ginagamit para sa warmup request. I-override lamang kung hindi available ang default sa iyong plan; piliin ang pinakamurang model na nagbubukas pa rin ng window. | ### Mga VNC Session para sa Pag-login sa Browser at Data-Dir Alias Containerized na Chromium+VNC na ginagamit para sa interactive na pagkuha ng credential sa pag-login sa browser (`/api/vnc-session`), kasama ang isang legacy na `DATA_DIR` alias. Opsyonal ang lahat — tina-target ng mga VNC default ang kasamang `omniroute-vnc-chromium:local` image at ino-override lamang ang mga ito para sa custom na container image, mga port, o pagsasaayos ng lifecycle. | Variable | Default | Source File | Paglalarawan | | ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Docker image tag para sa Chromium+VNC login container. I-build ang `docker/vnc-browser/chromium` o ituro ito sa isang custom na image. | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Container runtime binary na ginagamit upang ilunsad ang VNC container (hal., itakda sa `podman`). | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC/noVNC port na inilalantad sa loob ng container. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Chrome DevTools Protocol port sa loob ng container. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Path ng Chromium profile directory sa loob ng container. | | `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | Host directory na naglalaman ng mga naka-persist na profile sa pag-login sa browser. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 min) | `src/lib/vncSession/manifest.ts` | Idle timeout (ms) bago alisin ang isang hindi aktibong VNC session. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 min) | `src/lib/vncSession/manifest.ts` | Mahigpit na limitasyon (ms) sa tagal ng isang VNC session. | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Pinakamataas na bilang ng magkakasabay na VNC session. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Timeout (ms) habang hinihintay na maging CDP-ready ang containerized browser. | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Timeout (ms) para sa pagkuha ng nakuhang session/cookies pagkatapos makumpleto ang pag-login. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | Mga karagdagang command-line flag na ipinapasa sa containerized na Chromium. | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Nakalaang Docker network na sinasalihan ng VNC login container (#12571) sa halip na ang default bridge, upang hindi maabot ng mga sibling container ang CDP bridge port nito. | | `VIBEPROXY_DATA_DIR` | _(hindi nakatakda)_ | `open-sse/services/notionThreadSessions.ts` | **Legacy alias** para sa `DATA_DIR`, na sinusuri lamang kapag parehong hindi nakatakda ang `DATA_DIR` at `OMNIROUTE_DATA_DIR`. Tinutukoy nito ang lokasyon ng cache ng Notion web-thread session (`/notion-web-thread-sessions.json`). | --- ## 26. Test at E2E Harness Ginagamit ng `scripts/dev/run-next-playwright.mjs`, `scripts/dev/smoke-electron-packaged.mjs`, `scripts/dev/run-ecosystem-tests.mjs`, at `scripts/build/uninstall.mjs`. Iwang hindi nakatakda ang lahat ng value sa ibaba sa mga production deployment. | Variable | Default | Source File | Paglalarawan | | -------------------------------------- | ------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | E2E bootstrap mode (`auth`, `fresh`, `reuse`) para sa Playwright runner. | | `OMNIROUTE_E2E_PASSWORD` | bumabalik sa `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Admin password na inilalagay sa Playwright environment. | | `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | I-disable ang lokal na healthcheck poll habang tumatakbo ang Playwright. | | `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | I-disable ang OAuth token healthcheck loop habang isinasagawa ang mga test. | | `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(hindi nakatakda)_ | `src/lib/tokenHealthCheck.ts` | Mga provider na pinaghihiwalay ng kuwit at hindi isinasama sa proactive token-refresh sweep (hal. `codex,openai`). Nakatutok na alternatibo sa ganap na pag-disable ng healthcheck — patuloy na nagre-refresh ang mga short-TTL provider habang nananatiling reactive-only ang mga cascade provider. | | `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Patahimikin ang ingay ng healthcheck sa stdout ng Playwright. | | `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Laktawan ang Next.js production build bago magsimula ang Playwright (pag-optimize para sa CI). | | `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Laktawan ang OmniRoute uninstall hook (ginagamit ng CI upang mapanatiling buo ang `node_modules`). | | `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | Tagal ng paghihintay (ms) na maging healthy ang server bago patakbuhin ang mga ecosystem/protocol test. | | `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | URL na inaasahan ng Electron smoke harness na ihahatid ng packaged app. | | `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Kabuuang timeout (ms) bago sumuko ang smoke harness. | | `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | Settle window (ms) pagkatapos mag-load ang page. | | `ELECTRON_SMOKE_APP_EXECUTABLE` | _(awtomatiko)_ | `scripts/dev/smoke-electron-packaged.mjs` | Tahasang path patungo sa packaged Electron executable. | | `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | Data directory para sa Electron smoke run. | | `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Itakda sa `1` upang mapanatili ang direktoryo ng smoke data pagkatapos ng pagpapatakbo. | | `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Itakda sa `1` upang i-stream ang mga log ng Electron sa stdout habang isinasagawa. | | `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: muling ilunsad gamit ang parehong direktoryo ng data at tiyaking pinipili ng ikalawang paglulunsad ang native na SQLite driver. | | `CLI_DEVIN_BIN` | _(paghahanap sa PATH)_ | `open-sse/executors/devin-cli.ts` | I-override ang path ng binary ng Devin CLI. | ### Pipeline ng pagsasalin ng dokumentasyon Ginagamit ng `scripts/i18n/run-translation.mjs` (ang command na `npm run i18n:run`). Hindi nakatakda bilang default ang lahat ng limang variable — itakda lamang ang mga ito sa `.env` sa mga machine na dapat makapagpatakbo ng tagasalin ng dokumentasyon. | Variable | Default | Source File | Paglalarawan | | ----------------------------------- | ------------------- | ---------------------------------- | ---------------------------------------------------------------------------------- | | `OMNIROUTE_TRANSLATION_API_URL` | _(hindi nakatakda)_ | `scripts/i18n/run-translation.mjs` | Base URL na compatible sa OpenAI para sa backend ng pagsasalin. | | `OMNIROUTE_TRANSLATION_API_KEY` | _(hindi nakatakda)_ | `scripts/i18n/run-translation.mjs` | Bearer token para sa backend ng pagsasalin (hindi kailanman itinatala sa log). | | `OMNIROUTE_TRANSLATION_MODEL` | _(hindi nakatakda)_ | `scripts/i18n/run-translation.mjs` | Model id, hal. `gpt-4o-mini` o `cx/gpt-5.4-mini`. | | `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Timeout sa bawat request, sa millisecond. | | `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Mga parallel na request sa pagsasalin kapag pinapatakbo sa maraming file / locale. | --- ## 27. Radar Feed (Sariling Pagho-host) Opsyonal na add-on na kinokontrol ng RADAR_ENABLED feature flag (naka-off bilang default — isang feature flag na binabago sa pamamagitan ng Settings/DB, hindi isang env var; tingnan ang [docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)). Ang unang apat na variable sa ibaba ay mga opsyonal na override para sa isang sariling hino-host o forked na feed at mga daloy ng supporter key. Ang ikalima, `RADAR_ADMIN_URL`, ay isang hiwalay na link na walang default papunta sa pribadong operations panel ng may-ari. Tingnan ang [docs/frameworks/RADAR.md](../frameworks/RADAR.md) para sa kumpletong dokumentasyon ng module at sa [end-to-end na pagkakasunod-sunod ng pag-activate at ginabayang pag-setup](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup). Ang generic na reader ng anunsyo sa Home/Changelog ay hindi kino-configure ng isang environment variable at hindi nakadepende sa RADAR_ENABLED feature flag. Binabasa nito ang pampublikong repository na `news.json` URL na idineklara sa `src/shared/utils/releaseNotes.ts` gamit lamang ang GET; nananatili sa lokal na storage ng browser ang mga dismissal ID. | Variable | Default | Source File | Paglalarawan | | ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | Base URL na pinagsasaluhan ng magkakahiwalay na nilagdaang catalog, referrals, supporter-offers, at Intel feed. I-override upang ituro sa isang sariling hino-host o forked na serbisyo. | | `RADAR_FEED_PUBKEY` | _(naka-pin na default na key)_ | `src/lib/radar/pinnedKeys.ts` | Ed25519 public key (base64-DER SPKI o PEM) na ginagamit upang beripikahin ang mga lagda ng feed mula sa isang custom na feed. | | `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | URL na binubuksan ng button na "Contributor ako" sa dashboard (daloy ng pag-claim ng supporter key gamit ang GitHub OAuth). | | `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | URL na binubuksan ng button na "Suportahan ang proyekto" sa dashboard (pahina ng pagbabayad/mga plano). | | `RADAR_ADMIN_URL` | _(hindi nakatakda)_ | `src/lib/radar/links.ts` | Pribadong link ng operations panel para lamang sa may-ari. Kinakailangan ang HTTPS maliban sa isang HTTP loopback SSH forward; hindi gumagawa ng navigation item ang mga hindi nakatakda o invalid na value. | --- ## Audit: Mga Inalis / Hindi Na Ginagamit na Variable Lumitaw ang mga sumusunod na variable sa mga nakaraang bersyon ng `.env.example` ngunit **walang runtime reference** sa kasalukuyang codebase. Inalis na ang mga ito: | Variable | Dahilan | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `STORAGE_DRIVER=sqlite` | Hindi kailanman binabasa ng anumang source file. SQLite lang ang sinusuportahang driver — hindi kailangan ang pagpili. | | `INSTANCE_NAME=omniroute` | Makikita sa mga lumang dokumento/env template ngunit hindi ginagamit sa runtime. Maaaring ibalik sa isang feature para sa maraming instance sa hinaharap. | | `SQLITE_MAX_SIZE_MB=2048` | Hindi nire-reference sa source code. Hindi artipisyal na nililimitahan ang laki ng database. | | `SQLITE_CLEAN_LEGACY_FILES=true` | Hindi nire-reference sa source code. Malamang na inalis na ang paglilinis ng mga legacy file. | | `CLI_ROO_BIN` | Hindi nakarehistro sa `src/shared/services/cliRuntime.ts`. | | `CLI_KIMI_CODING_BIN` | Hindi nakarehistro sa `src/shared/services/cliRuntime.ts` (gumagamit ang Kimi Coding ng OAuth, hindi ng CLI binary). | | `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | Hindi nire-reference saanman sa source code. | | `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` | Inalis sa v3.8.0. Hindi na binabasa ng runtime ang mga env var na ito — nagmumula ang mga credential sa Dashboard / `data/provider-credentials.json` / naka-encrypt na DB. | | `CURSOR_PROTOBUF_DEBUG` | Inalis sa v3.8.0. Ginagamit ng Cursor executor ang `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (tingnan ang §22). | | `CLI_COMPAT_KIRO` | Inalis sa v3.8.0. Kasama ang Kiro sa `CLI_COMPAT_OMITTED_PROVIDER_IDS` — walang epekto ang toggle nito. | | `QIANFAN_API_KEY` | Inalis kasama ng iba pang hindi ginagamit na stub ng provider API key sa v3.8.0. | ### Mga Pagwawasto sa Default na Value | Variable | Lumang Value sa `.env.example` | Aktuwal na Default sa Code | Pagwawasto | | ------------------------- | ------------------------------ | -------------------------- | ------------------------------------------------------------------- | | `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Inalis ang mapanlinlang na value; idinokumentong `7` ang default | | `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Inalis ang mapanlinlang na value; idinokumentong `7` ang default | ### Muling pagbuo ng config ng OpenCode (ad-hoc na tooling) Ginagamit ng `scripts/ad-hoc/regen-opencode-config.ts` upang muling bumuo ng `opencode.json` na may mga tumpak na value ng `limit.context` at `limit.output` na kinukuha mula sa tumatakbong instance ng OmniRoute. Wala sa mga ito ang kinakailangan para sa normal na operasyon — para lamang sa mga developer ang script na ito. | Variable | Default | Source File | Paglalarawan | | ------------------ | ------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | Base URL ng instance ng OmniRoute na kukunan ng `/v1/models`. | | `OMNIROUTE_KEY` | _(hindi nakatakda)_ | `scripts/ad-hoc/regen-opencode-config.ts` | API key para mag-authenticate sa endpoint na `/v1/models` ng OmniRoute. Gagamitin ang `OPENCODE_API_KEY` bilang fallback kapag hindi ito nakatakda. | | `OPENCODE_API_KEY` | _(hindi nakatakda)_ | `scripts/ad-hoc/regen-opencode-config.ts` | OpenCode-style API key (`sk-...`) na isinusulat sa muling nabuong `opencode.json`. Gagamitin ang `OMNIROUTE_KEY` bilang fallback kapag hindi ito nakatakda. | ### Offline-eval harness ng compression (ad-hoc na tooling) Ginagamit ng `scripts/compression-eval/index.ts`, ang offline compression evaluation CLI. Hindi kinakailangan para sa normal na operasyon — tooling lamang para sa developer. | Variable | Default | Source File | Paglalarawan | | ---------------------------- | ------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (walang laman) | `scripts/compression-eval/index.ts` | Mga JSON credential na ibinigay ng operator para sa provider na sinusubukan ng offline compression-eval CLI (pina-parse gamit ang `JSON.parse`). Huwag itakda para sa dry run. | ### Mga VNC Browser Session Ginagamit ng `src/lib/vncSession/manifest.ts` upang i-configure ang mga Docker-based na headless Chromium session para sa mga browser-automation provider. Opsyonal ang lahat — ipinapakita sa ibaba ang mga default. | Variable | Default | Source File | Paglalarawan | | ------------------------------------- | ------------------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------- | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Path patungo sa Docker binary na ginagamit upang gumawa ng mga VNC container. | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Docker image para sa VNC Chromium container. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(mga built-in na flag)_ | `src/lib/vncSession/manifest.ts` | Mga karagdagang Chromium CLI argument na ipinapasa sa browser sa loob ng container. | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | VNC port sa loob ng container. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Chrome DevTools Protocol port sa loob ng container. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Directory ng profile sa loob ng container. | | `OMNIROUTE_VNC_PROFILE_DIR` | _(hindi nakatakda)_ | `src/lib/vncSession/manifest.ts` | Directory sa panig ng host para sa mga persistent na browser profile. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | Idle timeout (ms) bago i-harvest ang isang VNC session. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | Pinakamahabang tagal ng session (ms). | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Pinakamaraming magkakasabay na VNC session. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Timeout sa paghihintay na maging handa ang browser (ms). | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Timeout sa pag-harvest/paglilinis (ms). | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Nakalaang Docker network na sinasalihan ng container (#12571), hiwalay sa default bridge. | | `VIBEPROXY_DATA_DIR` | _(hindi nakatakda)_ | `open-sse/services/notionThreadSessions.ts` | Directory para sa persistence ng Notion thread session. | ### Authentication ng internal service | Variable | Default | Paglalarawan | | --------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | Inline token para sa service-to-service authentication ng management plane. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | Path patungo sa file na naglalaman ng internal service token (inirerekomenda sa mga container; ino-override nito ang inline variable). | ### Mga stats ng OpenRouter provider | Variable | Default | Paglalarawan | | ----------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | Itakda sa `false` upang laktawan ang pagkuha ng mga stats ng OpenRouter para sa bawat provider para sa pagpapayaman ng catalog. | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | Cache TTL (ms) para sa mga nakuhang stats ng OpenRouter provider. | ### Naka-embed na Redis binding | Variable | Default | Paglalarawan | | --------------------------- | ----------- | ---------------------------------------------------------------------------- | | `REDIS_BIND_HOST` | `127.0.0.1` | Bind address para sa naka-embed na serbisyo ng Redis. | | `REDIS_PORT` | `6379` | Port para sa naka-embed na serbisyo ng Redis. | | `OMNIROUTE_REDIS_BIND_HOST` | – | Override na saklaw ng OmniRoute para sa bind address ng naka-embed na Redis. | --- ## 24. Mga idinagdag sa release v3.8.50 Ipinakilala ang mga setting na ito pagkatapos ng nakaraang snapshot ng environment contract. | Variable | Default | Source File | Paglalarawan | | ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Pinakamahabang paghihintay para sa isang heavyweight na chat admission slot bago magbalik ng retryable na `503`; sina-serialize ng maikli at may limitasyong paghihintay ang sunod-sunod na pagdagsa ng mga agent sa halip na agarang `503`. Ibinabalik ng `0` ang agarang pagtanggi. | | `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Badyet ng queued bytes para sa admission wait: nililimitahan ang kabuuang buffered body bytes na nakahimpil sa buong process upang hindi mapalaki ng paghihintay ang heap (#4380). Ang mga paghihintay na lampas sa badyet ay agad na makakatanggap ng retryable na `503`. | | `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | Deprecated na no-op mula noong #10110: inalis ang mga per-session admission lane pabor sa iisang badyet para sa buong process. Tinatanggap para sa compatibility ng configuration; binabalewala. | | `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Deprecated na no-op mula noong #10110: inalis ang mga per-session admission lane pabor sa iisang badyet para sa buong process. Tinatanggap para sa compatibility ng configuration; binabalewala. | | `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (naka-off) | `open-sse/services/admission/runtime.ts` | Mga adaptive runtime virtual admission lane (#9654): pangunahing switch para sa per-tenant adaptive gate (system 2). Naiiba sa mga deprecated na per-connection lane variable sa itaas (TTL_MS / MAX_SESSIONS, mga no-op mula noong #10110). Dashboard feature flag na may parehong pangalan; nangingibabaw ang env var sa dashboard override; nangangailangan ng restart. | | `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | Nililimitahan kung gaano katagal maghihintay ang isang run-now call para sa kasalukuyang tumatakbong job bago simulan ang naka-queue na run. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | naka-enable | `open-sse/services/adobeFireflySession.ts` | Pinananatiling napapanahon ang IMS at browser-risk state sa pamamagitan ng mga account-scoped na Chrome CDP session; itakda sa `0` upang i-disable. | | `ADOBE_FIREFLY_SESSION_DISK` | naka-enable | `open-sse/services/adobeFireflySession.ts` | Pine-persist ang mga inayos na Adobe session sa ilalim ng `DATA_DIR`; itakda sa `0` para sa memory-only na state. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Pinakamababang pagitan ng mga pagsusumite ng Adobe Firefly generate. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Karagdagang tahimik na panahon pagkatapos ng bawat ikatlong matagumpay na pagsusumite sa Adobe. | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | True-headless mode para lamang sa pag-debug; karaniwang tinatanggihan ng Adobe colligo ang nabubuong risk session. | | `CHROME_PATH` | awtomatikong nade-detect | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Opsyonal na absolute path ng Chrome executable na ginagamit ng mga browser-driven executor kapag hindi sapat ang awtomatikong pag-detect ng platform. | | `TELEGRAM_BOT_TOKEN` | _(hindi nakatakda)_ | `src/lib/telegram/config.ts` | BotFather token na nag-e-enable sa inbound webhook at lumalagda sa Mini App `initData`. | | `TELEGRAM_WEBHOOK_SECRET` | _(hindi nakatakda)_ | `src/lib/telegram/config.ts` | Shared secret na nakarehistro sa pamamagitan ng `setWebhook` at bine-verify laban sa `X-Telegram-Bot-Api-Secret-Token` header sa bawat webhook delivery. Kinakailangan para sa webhook path; kapag hindi nakatakda, tatanggihan ang mga webhook delivery gamit ang 503. | | `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Model na ginagamit para sa mga tugon sa Telegram chat. | | `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Override sa base URL ng Bot API para sa mga proxy o self-hosted na Bot API server. | | `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Timeout sa millisecond para sa mga outbound na Bot API call. | | `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (naka-enable) | `scripts/build/optionalPackStaging.mjs` | Itakda sa `0` upang laktawan ang pagbuo ng mga `.tar.gz` tarball habang inihahanda ang mga opsyonal na ML/browser pack para sa Electron standalone tree (patuloy pa ring bubuuin ang mga pack directory at `optional-packs.index.json`). Ginagamit ng desktop release workflow upang bawasan ang laki ng ina-upload na artifact. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Nag-e-enable sa pagpaparehistro ng mga xAI subscription image route; naka-disable bilang default upang manatiling hindi nagbabago ang API-key image path. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Per-key cooldown sa millisecond kapag walang magagamit na `Retry-After` hint ang isang `429` response. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | naka-enable | `open-sse/services/estimatorCalibration.ts` | Itakda sa `off`, `0`, o `false` upang i-disable ang in-memory na pagtatala at paglalapat ng estimator calibration. | | `NEXT_MANUAL_SIG_HANDLE` | _(internal)_ | `scripts/dev/standalone-server-ws.mjs` | Internal na override sa signal handler ng standalone server; karaniwang itinatakda at inaalis ng launcher sa halip na i-configure ng mga operator. | ### ChatGPT Web (Codex) Mga pangkalahatang default para sa headless browser at outbound tool tunnel. Nangunguna ang mga value ng Connection na itinakda sa Dashboard. | Variable | Default | Source File | Paglalarawan | | --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CHATGPT_WEB_CODEX_CHROME_PATH` | _(awtomatikong matutukoy)_ | `open-sse/executors/chatgpt-web-codex.ts` | Tiyak na path ng Chrome/Chromium para sa pagpapatakbo gamit ang npm, systemd, at PM2. | | `CHROME_PATH` | _(awtomatikong matutukoy)_ | `open-sse/executors/chatgpt-web-codex.ts` | Nakabahaging fallback para sa isang tahasang path ng Chrome/Chromium. | | `CHATGPT_WEB_CODEX_CDP_URL` | _(hindi nakatakda)_ | `open-sse/executors/chatgpt-web-codex.ts` | Panloob na endpoint ng CDP; ginagamit ng Docker ang sidecar sa port `9223`. | | `CDP_PROXY_TOKEN` | _(hindi nakatakda)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Kapag nakatakda, dapat isama ng bawat request sa CDP proxy sidecar ang halagang ito sa header na `X-Omni-Cdp-Token` (#13679). Kapag walang halaga, nagpapasa ang proxy nang walang authentication—sa gayon, ang network isolation lamang ng Compose network na `chatgpt-web-codex-net` ang nagbibigay ng proteksyon. Bumuo gamit ang `openssl rand -hex 32`. | | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(hindi nakatakda)_ | `open-sse/executors/chatgpt-web-codex.ts` | Pandaigdigang OpenAI tunnel ID para sa mga lokal na ikot ng Codex tool. | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(hindi nakatakda)_ | `open-sse/executors/chatgpt-web-codex.ts` | Pandaigdigang tunnel runtime key; huwag kailanman ilabas sa mga log. | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | Eksaktong pangalan ng bagong likhang ChatGPT custom connector para sa MCP bridge. | | `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | Nakalaang direktoryo para sa estado ng browser, broker, at tunnel. | | `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | Kapag `1`, kumukuha ng mga diagnostic image ng browser sa bawat checkpoint. | | `CODEX_CHATGPT_WEB_LAUNCHER` | _(hindi nakatakda)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Opsyonal na absolute path patungo sa isang permanenteng launcher binary. | | `CODEX_CHATGPT_WEB_BUN` | _(awtomatikong matutukoy)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Opsyonal na absolute path patungo sa Bun runtime binary. | | `CODEX_WEB_GPT_BUN` | _(hindi nakatakda)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Legacy fallback para sa `CODEX_CHATGPT_WEB_BUN`; ginagamit ng mga bagong setup ang kanonikal na pangalan. | --- ## OmniConductor Bridge Pangmatagalang SSE consumer na nagsasalamin ng mga gawain ng OmniConductor hub sa lokal na A2A TaskManager (`src/lib/conductor/`). Opsyonal — magsisimula lamang ang bridge kapag nakatakda ang `CONDUCTOR_HUB_URL`. Para lamang sa panig ng server: hindi kailanman dapat makarating sa browser ang token ng hub. | Variable | Default | Source File | Paglalarawan | | ------------------------------ | ----------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CONDUCTOR_HUB_URL` | _(walang laman)_ | `src/lib/conductor/boot.ts` | Base URL ng OmniConductor hub (hal. `http://127.0.0.1:7910`). Hindi nakatakda = hindi pinagana ang bridge. | | `CONDUCTOR_HUB_TOKEN` | _(walang laman)_ | `src/lib/conductor/boot.ts` | Kredensyal ng hub para sa SSE feed — maglabas ng peer na may uri na `spokesperson` sa hub (`POST /v1/peers`, admin). | | `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(walang laman)_ | `src/lib/conductor/hubProxy.ts` | Kredensyal para sa papasok na delegasyon ng gawaing A2A→hub (`POST /v1/tasks`); gagamitin ang `CONDUCTOR_HUB_TOKEN` bilang fallback kapag hindi ito nakatakda. | | `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Base URL ng serbisyo ng spokesperson (Faro) sa likod ng dashboard chat proxy (`/api/conductor/ask`). | ### Pag-iiskedyul na isinasaalang-alang ang quota Ginagamit ng `open-sse/services/combo.ts` at `src/lib/quota/quotaScheduler.ts` para sa mga pagsusuri ng token budget bago ang request. Opsyonal — hindi nagbabago ang default na gawi ng pagruruta kapag hindi ito nakatakda. | Variable | Default | Source File | Paglalarawan | | ---------------------------------- | ----------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Kapag `1`, laktawan ang mga koneksiyong hindi kayang tustusan ng token budget ng bawat window (`rateLimitOverrides.tpm`, talahanayang `provider_quota_state`) ang tinatayang gastos ng request bago ito ipadala. Magpatuloy kapag walang naka-configure na budget. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(naka-on)_ | `open-sse/services/estimatorCalibration.ts` | Feedback calibration ng context-guard token estimator (#14931): EMA ng `usage.prompt_tokens` / pagtataya para sa bawat (provider, model, pagkakaroon ng tools), nililimitahan sa 0.15–2.0, at nasa memory lamang. Hindi pinapagana ng `off`, `0`, o `false` ang pagtatala at paggamit. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Inirerehistro ang mga image route na `xai-oauth` (`xao`) at `grok-cli`. Dashboard feature flag na may kaparehong pangalan; mananaig ang DB override sa halagang ito. |