# Environment Variables Reference (አማርኛ) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/ENVIRONMENT.md) · 🇸🇦 [ar](../../../ar/docs/reference/ENVIRONMENT.md) · 🇦🇿 [az](../../../az/docs/reference/ENVIRONMENT.md) · 🇧🇬 [bg](../../../bg/docs/reference/ENVIRONMENT.md) · 🇧🇩 [bn](../../../bn/docs/reference/ENVIRONMENT.md) · 🇧🇦 [bs](../../../bs/docs/reference/ENVIRONMENT.md) · 🇨🇿 [cs](../../../cs/docs/reference/ENVIRONMENT.md) · 🇩🇰 [da](../../../da/docs/reference/ENVIRONMENT.md) · 🇩🇪 [de](../../../de/docs/reference/ENVIRONMENT.md) · 🇬🇷 [el](../../../el/docs/reference/ENVIRONMENT.md) · 🇪🇸 [es](../../../es/docs/reference/ENVIRONMENT.md) · 🇪🇪 [et](../../../et/docs/reference/ENVIRONMENT.md) · 🇮🇷 [fa](../../../fa/docs/reference/ENVIRONMENT.md) · 🇫🇮 [fi](../../../fi/docs/reference/ENVIRONMENT.md) · 🇫🇷 [fr](../../../fr/docs/reference/ENVIRONMENT.md) · 🇮🇪 [ga](../../../ga/docs/reference/ENVIRONMENT.md) · 🇮🇳 [gu](../../../gu/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ha](../../../ha/docs/reference/ENVIRONMENT.md) · 🇮🇱 [he](../../../he/docs/reference/ENVIRONMENT.md) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [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) --- > በOmniRoute የሚታወቁ የእያንዳንዱ የአካባቢ ተለዋዋጭ የተሟላ ማጣቀሻ። > ለፈጣን መጀመሪያ አብነት፣ [`.env.example`](../../.env.example)ን ይመልከቱ። > [!IMPORTANT] > እዚህ የተመዘገበው እያንዳንዱ ተለዋዋጭ በ`.env.example` ውስጥም መታየት አለበት፣ እንዲሁም > በ`.env.example` ውስጥ ያለው እያንዳንዱ ተለዋዋጭ እዚህ መታየት አለበት። `npm run check:env-doc-sync` > ይህንን በcommit ጊዜ እና በCI ውስጥ ያስገድዳል። አንድን ተለዋዋጭ ሆን ብለው ለመተው፣ > በ`scripts/check/check-env-doc-sync.mjs` ውስጥ ወዳለው የተፈቀዱ ዝርዝር ያክሉት። --- ## የይዘት ማውጫ - [1. አስፈላጊ ሚስጥሮች](#1-required-secrets) - [2. ማከማቻ እና የውሂብ ጎታ](#2-storage--database) - [3. አውታረ መረብ እና ወደቦች](#3-network--ports) - [4. ደህንነት እና ማረጋገጫ](#4-security--authentication) - [5. የግብዓት ማጽዳት እና የPII ጥበቃ](#5-input-sanitization--pii-protection) - [6. የመሣሪያ እና የማዘዋወር ፖሊሲዎች](#6-tool--routing-policies) - [7. URLs እና የደመና ማመሳሰል](#7-urls--cloud-sync) - [8. ወደ ውጭ የሚላክ ፕሮክሲ](#8-outbound-proxy) - [9. የCLI መሣሪያ ውህደት](#9-cli-tool-integration) - [10. የውስጥ Agent እና MCP ውህደቶች](#10-internal-agent--mcp-integrations) - [11. የOAuth አቅራቢ ምስክርነቶች](#11-oauth-provider-credentials) - [12. የአቅራቢ User-Agent መሻሮች](#12-provider-user-agent-overrides) - [13. የCLI አሻራ ተኳኋኝነት](#13-cli-fingerprint-compatibility) - [14. የAPI ቁልፍ አቅራቢዎች](#14-api-key-providers) - [15. የጊዜ ገደብ ቅንብሮች](#15-timeout-settings) - [16. ምዝግብ ማስታወሻ](#16-logging) - [17. የማህደረ ትውስታ ማመቻቸት](#17-memory-optimization) - [18. የዋጋ ማመሳሰል](#18-pricing-sync) - [19. የሞዴል ማመሳሰል (Dev)](#19-model-sync-dev) - [20. ለአቅራቢ የተለዩ ቅንብሮች](#20-provider-specific-settings) - [21. የፕሮክሲ ጤና](#21-proxy-health) - [22. ስህተት ማረም](#22-debugging) - [23. የGitHub ውህደት](#23-github-integration) - [24. የSkills Sandbox (v3.8.0+)](#24-skills-sandbox-v380) - [27. የRadar ምግብ (በራስ ማስተናገድ)](#27-radar-feed-self-hosting) - [የማሰማራት ሁኔታዎች](#deployment-scenarios) - [ኦዲት፦ የተወገዱ / ጥቅም ላይ የማይውሉ ተለዋዋጮች](#audit-removed--dead-variables) --- ## 1. አስፈላጊ ሚስጥሮች እነዚህ ከመጀመሪያው ማስኬድ በፊት **መቀናበር አለባቸው**። ያለእነሱ፣ መተግበሪያው ለመጀመር እምቢ ይላል ወይም ደህንነታቸው ባልተጠበቀ ነባሪ ቅንብሮች ይሰራል። | ተለዋዋጭ | አስፈላጊ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------- | ------------------ | ----------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `JWT_SECRET` | **አዎ** | _(የለም)_ | `src/lib/auth` | ሁሉንም የዳሽቦርድ ክፍለ-ጊዜ ኩኪዎችን (JWT) ይፈርማል/ያረጋግጣል። በ`openssl rand -base64 48` ያመንጩት። | | `API_KEY_SECRET` | **አዎ** | _(የለም)_ | `src/lib/db/apiKeys.ts` | በSQLite ውስጥ ተከማችተው ሲቆዩ የAPI ቁልፍ እሴቶችን ለማመስጠር የሚያገለግል AES የምስጠራ ቁልፍ። በ`openssl rand -hex 32` ያመንጩት። | | `INITIAL_PASSWORD` | **አዎ** | `CHANGEME` | የማስነሻ ስክሪፕት | የመጀመሪያውን የአስተዳዳሪ ዳሽቦርድ የይለፍ ቃል ያዘጋጃል (ከ`.env.example` ነባሪ ጋር ይዛመዳል — ለመቀየር እንዲያስገድድ ሆን ተብሎ ደህንነቱ ያልተጠበቀ ሆኖ ተቀምጧል)። **ከመጀመሪያ አጠቃቀም በፊት ይቀይሩት።** ከገቡ በኋላ በዳሽቦርድ → ቅንብሮች → ደህንነት በኩል ይቀይሩት። | | `OMNIROUTE_WS_BRIDGE_SECRET` | **አዎ** (በምርት አካባቢ) | _(አልተዋቀረም)_ | `src/app/api/internal/codex-responses-ws/route.ts` | ለውስጣዊው Codex Responses WebSocket ድልድይ የጋራ ሚስጥር። በElectron/አሳሽ WS ማስተላለፊያ እና OmniRoute መካከል የሚደረጉ የድልድይ ጥያቄዎችን ያረጋግጣል። ⚠️ **በምርት አካባቢ ያስፈልጋል — ካልተዋቀረ ሁሉም የWS ድልድይ ጥያቄዎች ውድቅ ይደረጋሉ።** በ`openssl rand -base64 32` ያመንጩት። | | `OMNIROUTE_SW_BUILD_ID` | አይ | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | ለPWA ሼል (#11779) ግልጽ የservice-worker መሸጎጫ ማደሻ መለያ፤ በውሳኔ ሰንሰለቱ ውስጥ የመጀመሪያው። | | `SOURCE_VERSION` | አይ | _(አልተዋቀረም)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | በሰንሰለቱ ውስጥ ሁለተኛው — በPaaS ገንቢዎች (ለምሳሌ Heroku-style) እንደተሰማራው commit ይዋቀራል። | | `NEXT_PUBLIC_SW_BUILD_ID` | አይ | _(የተወሰደ)_ | `src/shared/components/PwaRegister.tsx` | ደንበኛው `/sw.js?v=…`ን ለመመዝገብ የሚጠቀምበት በግንባታ ጊዜ የሚገኝ ይፋዊ እሴት፤ ከላይ ካሉት ሁለቱ፣ ከዚያም ከgit SHA የሚወሰድ። | | `OMNIROUTE_PEER_STAMP_TOKEN` | አይ (ራስ-ሰር) | _(በእያንዳንዱ ማስነሳት ራስ-ሰር)_ | `src/server/authz/policies/management.ts` | የታመነው የአቻ-IP ማህተም ከOmniRoute ራሱ HTTP አገልጋይ (`scripts/dev/peer-stamp.mjs`) መምጣቱን የሚያረጋግጥ የእያንዳንዱ ሂደት ሚስጥር። የፈቃድ መቆጣጠሪያው ሚድልዌር ማህተሙ ይህን ቶከን ሲይዝ ብቻ የጥያቄውን አካባቢያዊነት (የLOCAL_ONLY መንገዶች loopback/LAN ገደብ) ያምናል። በእያንዳንዱ ማስነሳት ራስ-ሰር ይመነጫል — ሳይዋቀር ይተዉት፤ ይህን ማህተም መጋራት ለሚገባቸው የባለብዙ-ሂደት ውቅሮች ብቻ ቋሚ ያድርጉት። | ### የማመንጫ ትዕዛዞች ```bash # አራቱንም ሚስጥሮች በአንድ ጊዜ ያመንጩ፦ echo "JWT_SECRET=$(openssl rand -base64 48)" echo "API_KEY_SECRET=$(openssl rand -hex 32)" echo "INITIAL_PASSWORD=$(openssl rand -base64 16)" echo "OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -base64 32)" ``` > [!CAUTION] > እውነተኛ ሚስጥሮችን የያዙ `.env` ፋይሎችን ፈጽሞ ወደ ስሪት መቆጣጠሪያ አያስገቡ። `.gitignore` አስቀድሞ `.env`ን ያገላል፣ ነገር ግን push ከማድረግዎ በፊት ያረጋግጡ። --- ## 2. ማከማቻ እና የውሂብ ጎታ OmniRoute ለሁሉም ቋሚ ውሂብ ማከማቻ **SQLite**ን (በ`better-sqlite3` በኩል) ይጠቀማል። እነዚህ ተለዋዋጮች የውሂብ መገኛን፣ ምስጠራን እና የሕይወት ዑደትን ይቆጣጠራሉ። | ተለዋዋጭ | ነባሪ | ምንጭ ፋይል | መግለጫ | | ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | ለSQLite የውሂብ ጎታ፣ ምትኬዎች እና የውሂብ ፋይሎች ዋና ማውጫ። ለDocker ቮልዩሞች ወይም ብጁ ዱካዎች ይተኩት። | | `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(አልተዋቀረም)_ | `src/lib/dataPaths.ts` | ለሙከራ/ግምገማ DATA_DIR ጥበቃ የማለፊያ መንገድ (#10428)። `DATA_DIR` የሌላቸው ሙከራዎች እና የNode ግምገማ/ማተሚያ መመርመሪያዎች (`-e`/`--eval`/`-p`/`--print`፣ የ`--eval=`/`--print=` ቅርጾችን ጨምሮ) የአስተዳዳሪውን እውነተኛ የውሂብ ጎታ መክፈት እንዳይችሉ ወደ አንድ ጊዜ ጥቅም ላይ የሚውል ጊዜያዊ ማውጫ ይዛወራሉ፤ እውነተኛውን ማውጫ እንደገና ለመጠቀም ወደ `1` ያዋቅሩት። | | `OMNIROUTE_BUILD_SHA` | _(አልተዋቀረም)_ | `src/lib/monitoring/buildSha.ts` | በሂደት ላይ ያለው አርቲፋክት Git SHA። በ`npm run build:release` ምልክት ይደረግበታል፤ የ`dist/BUILD_SHA` ጠቋሚ በሌላቸው ኮንቴይነሮች ውስጥ ማስገባት ይቻላል። በ`/api/monitoring/health` ላይ እንደ `system.buildSha` ይታያል። | | `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | የጥቅል-አርቲፋክት ምንጭ ማረጋገጫ በር የግንባታ SHAን የሚያረጋግጥበት ref (#10427)። | | `OMNIROUTE_ALLOW_CANARY_BUILD` | _(አልተዋቀረም)_ | `scripts/build/buildProvenance.ts` | SHAው በልቀት መስመሩ ላይ የሌለ ግንባታን መጠቅለል ለመፍቀድ ወደ `1` ያዋቅሩት፤ በሩን ከማሰናከል ይልቅ ሆን ተብሎ እንደተደረገ canary ይመዘገባል (#10427)። | | `OMNIROUTE_SMOKE_API_KEY` | _(አልተዋቀረም)_ | `scripts/ops/deploy-canary.mjs` | በ`/v1/chat/completions` ላይ እንደ `Authorization: Bearer` የሚላከው፣ ለcanary ማሰማሪያ smoke መመርመሪያ የAPI ቁልፍ። በማሰማሪያ ስክሪፕቱ ብቻ ይጠቀማል (#10429)፣ በአገልጋዩ ፈጽሞ አይጠቀምም። ከመርጦ-መግቢያ CLI smoke መሣሪያ የ`OMNIROUTE_SMOKE_*` ተለዋዋጮች (`RUN_CLI_SMOKE=1`፣ `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` በ`tests/integration/upstream-cli-smoke.int.test.ts`) ጋር ግንኙነት የለውም — [የCLI ውህደቶች → እውነተኛ smoke ቅኝት](../guides/CLI-INTEGRATIONS.md)ን ይመልከቱ። | | `OMNIROUTE_BUILDING` | _(አልተዋቀረም)_ | `src/lib/buildPhase.ts` | የግንባታ-ደረጃ ምልክት (#10060)፦ በ`scripts/build/build-next-isolated.mjs` ወደ `1` ይዋቀራል፣ እንዲሁም በተጀመሩ የግንባታ ሠራተኞች ሁሉ ይወረሳል፤ በዚህም የውሂብ ጎታው ንብርብር ቤተኛውን better-sqlite3 ተጨማሪ ከመጫን ይልቅ ምንም የማያደርግ stub ይመልሳል (ተጨማሪው ሠራተኛው ሲወጣ እንዲቋረጥ ያደርገዋል)። በሂደት ላይ ላለው አገልጋይ ፈጽሞ አይዋቀርም። | | `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | ለተለዩ vendored የፋይል ዛፎች አማራጭ የቤተኛ-ጥገኝነት ቅድመ-ግንባታ ማረጋገጫን ለመዝለል ወደ `1` ያዋቅሩት። ይህ የጎደለ ጥገኝነትን ሊገነባ የሚችል አያደርገውም፤ ቤተኛ ጥገኝነቶች ከመደበኛው ሂደት ውጭ ሲቀርቡ ብቻ ይጠቀሙበት። | | `OMNIROUTE_DATA_DIR` | _(አልተዋቀረም)_ | `open-sse/executors/promptql/threadSticky.ts` | ለ`DATA_DIR` **ተተኪ ቅጽል ስም**፤ የሚመረመረው `DATA_DIR` ሳይዋቀር ሲቀር ብቻ ነው። የPromptQL አስፈጻሚውን በዲስክ ላይ የሚገኝ thread-sticky የክፍለ ጊዜ መሸጎጫ (`/promptql-thread-sessions.json`) ለማግኘት ይጠቅማል፤ ሁለቱም ተለዋዋጮች ካልተዋቀሩ መሸጎጫው በማህደረ ትውስታ ውስጥ ብቻ ይቆያል (ከዳግም ማስጀመር በኋላ አይቆይም)። | | `OMNIROUTE_PLUGINS_DIR` | _(አልተዋቀረም)_ | `src/lib/plugins/scanner.ts` | **የአሂድ ጊዜ ተሰኪ መቃኛው** የሚያነበው — እና የተሰኪ አስተዳዳሪው የሚጭንበት ስር — ማውጫ፣ ከመነሻ ማውጫው የሚመነጨውን ነባሪ በመተካት (#11827)። የመቃኛ ዱካውን ለማዛወር ብቻ HOMEን ከመቀየር ይልቅ በDocker/K8s ውስጥ ወደ bind-mounted የተሰኪ ዛፍ ያመልክቱት (HOME ሌሎች ሁሉንም ከመነሻ ማውጫ ጋር የተያያዙ ባህሪያትንም ይቆጣጠራል)። ካልተዋቀረ = `~/.omniroute/plugins`፣ ወይም ሂደቱ ምንም መነሻ ማውጫ ካልላከ `/tmp/.omniroute/plugins` — ይህ ተለዋዋጭ የሚያስወግደው በዝምታ ያለመገኘት ችግኝ። የተፈታው ማውጫ ሲጀመር አንድ ጊዜ እንደ `scanner.dir_resolved` ከተመረጠው ግቤት ጋር ይመዘገባል። በአገልጋይ በኩል ብቻ፦ የCLI ትዕዛዝ ተሰኪዎች የራሳቸውን `OMNIROUTE_PLUGIN_PATH` ይይዛሉ (ክፍል 9)። | | `STORAGE_ENCRYPTION_KEY` | _(ባዶ = የተሰናከለ)_ | `src/lib/db/encryption.ts` | ሙሉውን የSQLite የውሂብ ጎታ በማከማቻ ላይ ሳለ ለማመስጠር የሚያገለግል AES ቁልፍ። በ`openssl rand -hex 32` ያመንጩ። | | `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | የምስጠራ ቁልፉ የስሪት መለያ። የቆዩ ምትኬዎችን መፍታት እንዲቻል ቁልፍ በሚቀየርበት ጊዜ ይጨምሩት። | | `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | `true` ሲሆን፣ መደበኛ/ከመጻፍ በፊት የሚደረጉ የSQLite ፋይል ምትኬዎችን (የmodels.dev ዋጋ ማስቀመጥ/ማጽዳት፣ የቅንብሮች ጽሁፎች) ይዘላል። በእጅ የሚደረጉ እና ከመመለስ በፊት የሚደረጉ ምትኬዎች አሁንም ይሰራሉ። የስደት አስኪያጁን አስገዳጅ ዘላቂ የደህንነት ቅጽበተ-ፎቶ ወይም ላለ ቋሚ DB የጅምላ-ስደት መከላከያን **አያሰናክልም**። በእጅ ያልተደረጉ ምትኬዎች ቢበዛ በየ60 ደቂቃው አንድ ጊዜ እንዲከናወኑ ይገደባሉ። የዳሽቦርዱ **ቅንብሮች → ማከማቻ** መደበኛ ራስ-ሰር ምትኬን በተናጥል ማሰናከል ይችላል። | | `OMNIROUTE_CRYPT_KEY` | _(ያልተዋቀረ)_ | `src/lib/db/encryption.ts` | የ`STORAGE_ENCRYPTION_KEY` **የቆየ ተለዋጭ ስም**። ዋናው ተለዋዋጭ በማይኖርበት ጊዜ እንደ አማራጭ ይቀበላል። | | `OMNIROUTE_API_KEY_BASE64` | _(ያልተዋቀረ)_ | `src/lib/db/encryption.ts` | እንደ አማራጭ የሚቀበል **የቆየ ተለዋጭ ስም** (በBase64 የተመሰጠረ ቅርጽ)። ከመጠቀም በፊት በራስ-ሰር ይፈታል። | | `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(ያልተዋቀረ)_ | `src/lib/db/core.ts` | ወቅታዊውን የSQLite ጤና ምርመራ ክፍተት (ms) ይተኩ። ካልተዋቀረ፣ ነባሪዎቹ ከ`NODE_ENV` ይወሰናሉ። | | `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(የተወገደ)_ | `src/lib/db/walMaintenance.ts` | **ተወግዷል።** ወቅታዊ ቀጥታ `wal_checkpoint(TRUNCATE)` የጋራውን የwal-index ካርታ ስራ ሊያሳጣ እና ሂደቱን በSIGBUS (#13973) ሊያቋርጥ ስለሚችል፣ መርሐግብር አስኪያጁ ከእንግዲህ የለም። ተለዋዋጩ የማይሰራ ነው፦ አዎንታዊ እሴት የአንድ ጊዜ የመቋረጥ ማስጠንቀቂያ ይመዘግባል፣ `0` ወይም አለመዋቀር ግን ዝም ይላል። WAL በPASSIVE የፍተሻ ነጥቦች (ከታች) ይጠበቃል፣ እና በመዝጊያ የፍተሻ ነጥብ ይቆረጣል። | | `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5m) | `src/lib/db/walMaintenance.ts` | ተደጋጋሚውን የ`wal_checkpoint(PASSIVE)` ክፍተት (ms) ይተኩ። የፍተሻ ነጥቦች ፈጣን እንዲሆኑና የWAL ፋይሉ በመዝጊያ ቆረጣዎች መካከል የተገደበ እንዲሆን በመጠባበቅ ላይ ያሉ የWAL ክፈፎችን ትንሽ አድርጎ ይይዛል። `0` ያሰናክለዋል። | | `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | የPASSIVE ዙር የWAL ፋይሉ ከዚህ መጠን በላይ መሆኑን ሲያገኝ፣ ካርታ የተሰራለትን wal-index እንደገና ሳይጽፍ WAL እንደገና እንዲጀምር `wal_checkpoint(RESTART)`ን ያሂዱ። የቀጥታ truncate-mode የፍተሻ ነጥቦች ተወግደዋል (የ`OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` ረድፍን ይመልከቱ)። | | `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | ወሳኝ የሀብት ጫና ለ`OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` ከቀጠለ በኋላ ሂደቱ እንዲወጣ `1`/`true`/`yes`/`on` ያድርጉት፤ ይህም 503 ምላሾችን ላልተወሰነ ጊዜ ከማቅረብ ይልቅ ተቆጣጣሪ (systemd `Restart=always`፣ የDocker ዳግም ማስጀመር ፖሊሲ) ንጹህ ሂደት እንዲመልስ ያስችለዋል። | | `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2m) | `open-sse/utils/resourcePressure.ts` | ራስን ዳግም ለማስጀመር መውጫው ከመነሳቱ በፊት ወሳኝ ጫናው ምን ያህል ጊዜ መቆየት እንዳለበት። | | `OMNIROUTE_SQLJS_WASM_PATH` | _(በራስ-ሰር የሚገኝ)_ | `src/lib/db/adapters/sqljsAdapter.ts` | የ`sql.js` WASM አማራጭ አስማሚን ሲጠቀሙ ወደ `sql-wasm.wasm` የሚወስድ ግልጽ ዱካ (ፍጹም ወይም ከcwd አንጻር)። ካልተዋቀረ በጥቅል ጥገኝነቶችና በእጩ አቀማመጦች በኩል በራስ-ሰር ይገኛል። | | `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | የመጨረሻ ሁኔታ ላይ ያለ (የተጠናቀቀ/ያልተሳካ/የተሰረዘ/ጊዜው ያለፈ) የBatch API ስራ የፍተሻ ነጥቦች፣ ተጠቃሽ የግቤት/ውጤት/ስህተት ፋይሎች እና ረድፉ በራስ-ሰር የማጽዳት ዙር ከመሰረዛቸው በፊት የሚቆዩባቸው ቀናት። `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` ከበራ በኋላ ብቻ ተግባራዊ ይሆናል፤ ከOpenAI የራሱ የBatch API ውጤት ማቆያ ጊዜ ጋር ይዛመዳል። በንድፍ ሁሌም ያለ ቅድመ ሁኔታ (ያለ የዕድሜ ማጣሪያ) በሚቆየው፣ በኦፕሬተር በሚነሳው `DELETE /api/v1/batches/delete-completed` መስመር ላይ ተጽዕኖ አያሳድርም። | | `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | `true` ሲሆን፣ ራስ-ሰር የማጽዳት ዙሩ ከ`OMNIROUTE_BATCH_RETENTION_DAYS` ያለፉ የመጨረሻ ሁኔታ ላይ ያሉ የBatch API ስራዎችን (እና የፍተሻ ነጥቦቻቸውን) እንዲሰርዝ፣ እንዲሁም የራሳቸው `expires_at` ያለፈባቸውን የተሰቀሉ ፋይሎች BLOB ይዘት እንዲያጸዳ ይፍቀዱ። በነባሪነት ጠፍቷል፦ ኦፕሬተር በፈቃዱ እስኪያበራው ድረስ እያንዳንዱ ነባር ጭነት ይህን ውሂብ ልክ እንደበፊቱ ያቆያል። እንዲሁም በዳሽቦርድ ሊስተካከል የሚችል የባህሪ ሰንደቅ ነው — `docs/reference/FEATURE_FLAGS.md` → Runtime ይመልከቱ። | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | በማስጀመር ጊዜ የDB ጤና ምርመራውን ሙሉ በሙሉ ለመዝለል ወደ `1` ያቀናብሩ። ለአጭር ጊዜ ለሚሰሩ ተግባራት እና የውህደት ሙከራዎች ጠቃሚ ነው። | | `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | በተለምዶ በሚዘለልበት ጊዜም እንኳ (ለምሳሌ፣ ለአጭር ጊዜ በሚሰሩ ተግባራት) የDB ጤና ምርመራ ዑደቱን በግድ ለማብራት ወደ `1` ያቀናብሩ። | | `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | በ`npm install` ጊዜ የቤተኛ runtime ቅድመ-ማሞቂያውን ለመዝለል ወደ `1` ያቀናብሩ። sqlite አስቀድሞ በተገነባባቸው የCI/headless ጭነቶች ውስጥ ጠቃሚ ነው። | | `OMNIROUTE_MIGRATIONS_DIR` | _(በራስ-ሰር የሚገኝ)_ | `src/lib/db/migrationRunner.ts` | የmigration runner የሚቃኘውን ማውጫ ይተኩ። በብጁ builds ውስጥ የታሸጉ migrations ሲላኩ ጠቃሚ ነው። | | `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(አልተቀናበረም)_ | `src/lib/db/migrationRunner/extraDirs.ts` | በመድረኩ የpath delimiter የተለያዩ ተጨማሪ የmigration ማውጫዎችን እንደ `namespace=dir` ግቤቶች ይግለጹ (ለምሳሌ `ee=/opt/app/enterprise/db/migrations`)። እዚያ የተገኙ ፋይሎች እንደ `-` ይመዘገባሉ፤ ስለዚህ የራሱን migrations የሚያቀርብ ስርጭት ከupstream የቁጥር ቦታዎች ጋር ፈጽሞ አይጋጭም። የተሳሳተ ቅርጸት ያለው ግቤት፣ ልክ ያልሆነ namespace ወይም የጎደለ ማውጫ schemaውን በዝምታ ከመዝለል ይልቅ በማስጀመር ጊዜ ስህተት ያስነሳል። | | `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | የብዙ በመጠባበቅ ላይ ያሉ migrations የደህንነት ገደብ (#3416)። በነባር DB ላይ ከዚህ ቁጥር በላይ migrations የሚጠባበቁ ከሆነ ማስጀመሩ ይቋረጣል (ይህም የመከታተያ ሰንጠረዥ ከመጥፋት ይከላከላል)። የቆየ backup ለመመለስ ከፍ ያድርጉት፤ ምርመራውን ለማሰናከል ወደ `0` ያቀናብሩ። | | `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | ለ`check:install-upgrade` የrelease gate የሥራ ማውጫ። በግምት 12 GB (ሁለት ~3 GB የጭነት ዛፎች እና tarball) ያስፈልገዋል፤ ስለዚህ በትንሽ tmpfs ላይ መሮጥ የለበትም — በself-hosted runner ላይ `/tmp` በRAM የሚደገፍ 12 GB tmpfs ሲሆን gateው ሙሉ በሙሉ ተጠቅሞበት packageውን አቋርጦታል። | | `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(በኮድ ውስጥ ያለው ነባሪ)_ | `src/lib/spend/batchWriter.ts` | በbatch ለሚጻፈው የወጪ/cost writer የflush ክፍተት (ms)። ዝቅተኛ እሴቶች የጽሑፍ ማዋሃድን ይቀንሳሉ፤ ከፍተኛ እሴቶች የDB ፉክክርን ይቀንሳሉ። | | `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(በኮድ ውስጥ ያለው ነባሪ)_ | `src/lib/spend/batchWriter.ts` | በግዳጅ flush ከመደረጉ በፊት ሊከማቹ የሚችሉ ከፍተኛው የወጪ ግቤቶች ብዛት። ከፍተኛ-QPS ባላቸው deployments ላይ ከፍ ያድርጉት፤ የተገደበ memory የበለጠ አስፈላጊ ሲሆን ዝቅ ያድርጉት። | | `OMNIROUTE_PROXY_FETCH_DEBUG` | _(አልተቀናበረም)_ | `open-sse/utils/proxyFetch.ts` | በVercel relay path ላይ የ`[ProxyFetch]` debug logs ለማውጣት ወደ `"true"` ያቀናብሩ። የrouting ፍንጮችን እንዳያጋልጥ በነባሪነት ጠፍቷል። | | `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | በዝርዝር የ`[ProxyEgress]` process-log መስመር ውስጥ የclient/egress IPዎችን እና የaccount prefixን ለማካተት ወደ `"true"` ወይም `"1"` ያቀናብሩ። process logው IPዎችን ወይም የaccount prefixን እንዳያጋልጥ በነባሪነት ጠፍቶ ይቆያል። | | `OMNIROUTE_DEBUG` | _(አልተቀናበረም)_ | `bin/cli/commands/quota.mjs` | ከCLI quota commands ለእያንዳንዱ ጥያቄ የጊዜ ምርመራዎችን (`[omniroute] GET completed in Nms`) ወደ stderr ለማተም ወደ `1` ያቀናብሩ። | | `OMNIROUTE_HEALTHCHECK_PATH` | _(በራስ-ሰር)_ | `scripts/dev/healthcheck.mjs` | በcontainer health check የሚመረመረው ግልጽ path። ካልተቀናበረ፣ probeው ከ`OMNIROUTE_BASE_PATH` ያመነጨዋል፤ እሱን ማቀናበር ወደ ጥልቅ monitoring endpoint እንደገና ያስገባል። | | `OMNIROUTE_DEBUG_COMPLETION` | _(አልተቀናበረም)_ | `bin/cli/commands/completion.mjs` | ከCLI shell-completion cache paths (read/refresh/write) የ`[omniroute completion]` ምርመራዎችን ለማውጣት ወደ ማንኛውም ባዶ ያልሆነ እሴት ያቀናብሩ። በነባሪነት ጠፍቷል — እነዚያ caches በዝምታ ስለሚከሽፉ የጎደለ/የተበላሸ cache tab-completionን በፍጹም አያበላሽም። | | `BATCH_RETRY_DURATION_MS` | `86400000` (24h) | `open-sse/services/batchProcessor.ts` | ለእያንዳንዱ batch item ከፍተኛው የዳግም ሙከራ ጊዜ መስኮት (ms)። ይህን ጊዜ የሚያልፉ ንጥሎች እንደ ያልተሳኩ ምልክት ይደረግባቸዋል። | | `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | የባች ንጥሎች ዳግም ሙከራ ሲደረግ ለኤክስፖነንሻል መጠበቂያ መሠረታዊ መዘግየት (ms)። | | `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | በባች ንጥሎች ዳግም ሙከራዎች መካከል ለኤክስፖነንሻል መጠበቂያ ከፍተኛው ገደብ (ms)። | | `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | በአንድ ጊዜ ሊከናወኑ የሚችሉ ከፍተኛው የባቾች ብዛት። የማስኬድ አቅምን ለመጨመር ያሳድጉት፤ የተመን ገደብ መብዛትን ለማስወገድ ዝቅተኛ ያድርጉት። | > [!IMPORTANT] > ነባር ቋሚ የውሂብ ጎታን ከመቀየሩ በፊት፣ የፍልሰት አስኪያጁ የተሟላ፣ > በይዘት አድራሻ የሚሰጠውን ቅጽበተ-ፎቶ በ`DATA_DIR/db_backups/` ስር ያትማል። ህትመቱ በተመሳሳይ የፋይል ስርዓት ውስጥ > ያሉ፣ በላያቸው የማይጻፍ ጠንካራ አገናኞችን እና ዘላቂ የፋይል ማመሳሰልን የሚደግፍ የፋይል ስርዓት > ይፈልጋል። የPOSIX አስተናጋጆች የማውጫ ማመሳሰልንም ይፈልጋሉ፤ በWindows ላይ Node የማውጫ መያዣዎችን ላይቀበል ይችላል፣ ስለዚህ OmniRoute > የታተመውን ፋይል ወደ ዲስክ ይጽፋል እና የማውጫ ግቤት ማመሳሰልን እንደ ተቻለ መጠን የሚከናወን አድርጎ ይቆጥራል። > የተጫነው `DATA_DIR` እነዚያን ዋስትናዎች መስጠት ካልቻለ፣ ፍልሰት ከመተግበሩ > በፊት ማስጀመር በደህንነት ምክንያት ይቋረጣል። `DATA_DIR`ን እነዚያ መሠረታዊ ባህሪያት ወዳሉት የማከማቻ ጥራዝ ያንቀሳቅሱ፤ > የፍልሰት ደህንነትን ለማለፍ `DISABLE_SQLITE_AUTO_BACKUP`ን አይጠቀሙ። ### ሁኔታዎች | ሁኔታ | ውቅር | | ------------------- | ----------------------------------------------------------------------- | | **አካባቢያዊ ልማት** | ሁሉንም ነባሪ ቅንብሮች እንዳሉ ይተዉ። የውሂብ ጎታው በ`~/.omniroute/omniroute.db` ይገኛል። | | **Docker** | `DATA_DIR=/data` + በ`/data` ላይ የማከማቻ ጥራዝ ይጫኑ። | | **በማከማቻ ጊዜ የተመሰጠረ** | `STORAGE_ENCRYPTION_KEY`ን ያዘጋጁ + የቁልፉን ምትኬዎች ያስቀምጡ! እሱን ማጣት = ውሂብን ማጣት። | | **CI/ሙከራ** | `DATA_DIR=/tmp/omniroute-test` — ጊዜያዊ ነው፣ ምስጠራ አያስፈልግም። | --- ## 3. አውታረ መረብ እና ወደቦች | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | ለDashboard UI እና API endpoints ዋና ወደብ (ባለአንድ-ወደብ ሁነታ)። | | `OMNIROUTE_BASE_PATH` | _(ባዶ = root)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | OmniRouteን ከreverse proxy ጀርባ ለማቅረብ የሚያገለግል URL ንዑስ-መንገድ (የNext.js `basePath`ን ያዘጋጃል፤ የማረጋገጫ ማዘዋወሪያዎች basePathን ያገናዝባሉ)። ለምሳሌ፣ `/omniroute`። በDocker ውስጥ እሴቱ በ`docker build` ጊዜ ይካተታል (`ARG OMNIROUTE_BASE_PATH`)፤ አስቀድመው የተገነቡ root images Next.js ከመነሳቱ በፊት ኮንቴይነሩ ሲጀምር አንድ ጊዜ የተለየ runtime እሴት መተግበር ይችላሉ። `NEXT_PUBLIC_BASE_URL`ን ተመሳሳዩን ንዑስ-መንገድ ያካተተ ይፋዊ origin እንዲሆን ያዘጋጁ። | | `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(ባዶ = root)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | በbrowser የሚታይ የ`OMNIROUTE_BASE_PATH` ቅጂ፤ dashboard endpoint ማሳያው `https://host/v1` ሳይሆን `https://host/omniroute/v1`ን እንዲያሳይ በbuild ጊዜ በቀጥታ ይካተታል። ካልተዘጋጀ ወደ `OMNIROUTE_BASE_PATH` ይመለሳል። ከቀየሩት በኋላ እንደገና build ያድርጉ (የNext `basePath` በbuild-time ይወሰናል)። | | `DASHBOARD_ALLOW_EMBED` | _(ያልተዘጋጀ = በframe ፈጽሞ አይታይም)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | የHTML ገጾችን በiframe ውስጥ ማካተትን በፈቃድ ለማንቃት። ካልተዘጋጀ፣ እያንዳንዱ route `frame-ancestors 'none'` + `X-Frame-Options: DENY`ን ይልካል። ገጾቹ (dashboard፣ login፣ docs፣ landing) በ`frame-ancestors 'self' vscode-webview:` እና ያለ `X-Frame-Options` እንዲቀርቡ `vscode` ያዘጋጁ፤ ይህም VS Code Simple Browser ገጾቹን እንዲያሳይ ያስችለዋል (የOmniCopilot `dashboardOpen: "editor"` ሁነታ)። የAPI ወሰን (`/api`፣ `/v1`፣ `/v1beta`፣ `/a2a`፣ `/healthz`፣ የroot-level aliases) በሁለቱም ሁኔታዎች ጥብቅ headersን ይጠብቃል። የሚታወቀው `vscode` ብቻ ነው — `1`/`true` አያነቃውም። Build-time፦ ከቀየሩት በኋላ እንደገና build ያድርጉ (ለimages `docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode`፤ በቅድሚያ በተገነባ install ላይ ማዘጋጀት ምንም ውጤት የለውም)። | | `API_PORT` | _(ያልተዘጋጀ)_ | `src/lib/runtime/ports.ts` | ሲዘጋጅ፣ የ`/v1/*` proxy APIን በዚህ የተለየ ወደብ ያቀርባል። | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | ለAPI ወደብ የbind አድራሻ። | | `DASHBOARD_PORT` | _(ያልተዘጋጀ)_ | `src/lib/runtime/ports.ts` | ሲዘጋጅ፣ Dashboard UIን በዚህ የተለየ ወደብ ያቀርባል። | | `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(ቦዝኗል)_ | `src/sse/utils/backpressure.ts` | በአንድ ጊዜ በሂደት ላይ ያሉ chat connectionsን ይገድባል፤ ከገደቡ በላይ ያሉ requests `503`ን ከ`Retry-After` ጋር ያገኛሉ። አዎንታዊ integer መከላከያውን ያነቃል፤ ካልተዘጋጀ/`0` ከሆነ ያሰናክለዋል። | | `OMNIROUTE_INSTANCE_ID` | _(ያልተዘጋጀ)_ | `src/shared/resilience/peerRouting.ts` | የOmniRoute instancesን በሰንሰለት ሲያገናኙ ለዚህ gateway የሚያገለግል የማይለዋወጥ፣ ልዩ ID። የinbound peer-loop ፍተሻዎችን ያነቃል። የተፈቀዱ ቁምፊዎች፦ ፊደላት፣ አሃዞች፣ `.`፣ `_`፣ `:` እና `-`፤ ከፍተኛው 64 ቁምፊዎች። | | `OMNIROUTE_PEER_URLS` | _(ያልተዘጋጀ)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | `X-OmniRoute-Peer-Trace`ን ሊቀበሉ የሚችሉ፣ በኮማ የተለያዩ የOmniRoute base URLs። peer metadataን የሚቀበሉት በግልጽ allowlist ውስጥ የተጨመሩ upstream URLs ብቻ ናቸው፤ ሌሎች providers በሙሉ ሳይነኩ ይቀራሉ። | | `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | በሰንሰለት በተገናኘ request ላይ ቀደም ሲል የተጎበኙ የOmniRoute instances የሚፈቀደው ከፍተኛ ብዛት (`1`-`32`)። የተደጋገሙ instances ወይም ያለቀ budget HTTP `508 Loop Detected`ን ይመልሳሉ። | | `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | በDocker production ሁነታ ለDashboard በhost በኩል የሚታተም ወደብ። | | `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | በDocker production ሁነታ ለAPI በhost በኩል የሚታተም ወደብ። | | `OMNIROUTE_PORT` | _(ያልተዘጋጀ)_ | `src/lib/runtime/ports.ts` | በElectron ወይም በሌሎች wrappers ውስጥ ሲሰራ ከ`PORT` ቅድሚያ ይወስዳል። | | `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | ለእውነተኛ-ጊዜ WebSocket live monitoring server የሚያገለግል ወደብ። | | `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | ለlive WebSocket server የbind አድራሻ። በLAN ላይ ለማጋለጥ `0.0.0.0` ያዘጋጁ (`LIVE_WS_ALLOWED_ORIGINS`ንም ያዋቅሩ)። | | `LIVE_WS_ALLOWED_ORIGINS` | _(ያልተዘጋጀ)_ | `src/server/ws/liveServer.ts` | live WebSocketን እንዲከፍቱ የተፈቀደላቸው፣ በኮማ የተለያዩ ተጨማሪ origins። የloopback dashboard origins በነባሪ አስቀድመው ተፈቅደዋል። | | `LIVE_WS_ALLOWED_HOSTS` | _(ያልተዘጋጀ)_ | `src/server/ws/liveServerAllowList.ts` | ለlive WebSocket origins የተፈቀዱ፣ በኮማ የተለያዩ ተጨማሪ hostnames። ከ`LIVE_WS_ALLOWED_ORIGINS` (ሙሉ origin URLs) በተለየ መልኩ ከhost ክፍሉ ጋር ብቻ ያዛምዳል — ለLAN/Tailscale ዝግጅቶች ጠቃሚ ነው። | | `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(ያልተዘጋጀ)_ | `src/hooks/useLiveDashboard.ts` | ለlive dashboard WebSocket ይፋዊ URL (በbrowser በኩል)። WS serverን በreverse proxy ወይም Cloudflare Tunnel ፊት ለፊት ሲያቀርቡ ያዘጋጁ (ለምሳሌ `wss://ws.my-ai.com/live-ws`)፤ browserው ከ`ws://hostname:20132` ይልቅ እዚያ ይገናኛል። የpathname ክፍሉ እንደ WebSocket upgrade pathም ጥቅም ላይ ይውላል (ነባሪ፦ `/live-ws`)። | | `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` እና `scripts/start-ws-server.mjs` | የእውነተኛ-ጊዜ WebSocket serverን ለማሰናከል `0` ወይም `false` ያዘጋጁ (በነባሪ ንቁ እና ከloopback ጋር bind የተደረገ ነው)። ራሱን የቻለውን live WebSocket helper script የሚያሰናክል የCI/harness toggle። | | `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | በ-(token፣ IP) የrelay rate limit፣ requests/minute። በmemory ውስጥ፣ በእያንዳንዱ instance። `0` ወይም አሉታዊ እሴት የIP-dimension gateን ያሰናክላል (የper-token DB limit አሁንም ይተገበራል)። | | `NODE_ENV` | `production` | የNext.js core | የlogging ዝርዝርነትን፣ cachingን፣ የerror ዝርዝሮች መጋለጥን እና የNext.js optimizationsን ይቆጣጠራል። | | `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — የcode ነባሪ) | `package.json` / Next.js 16 | Turbopack ለ`npm run dev` እና `npm run build` ነባሪ bundler ነው (በbenchmark የተረጋገጠ 2-3× ፈጣን builds)። በWindows ላይ፣ የnative binding / bundler-compat አለመጣጣም ሲያጋጥም፣ **ወይም RAM ውስን በሆነባቸው ማሽኖች ላይ** ወደ webpack ለመመለስ `0` ያዘጋጁ — በዚህ የNext.js version መስመር (16.2.x) ላይ የTurbopack production builds በትላልቅ module graphs ላይ ከwebpack በጣም ከፍ ያለ የmemory ከፍተኛ አጠቃቀም እንደሚደርሱ በupstream ይታወቃል (የNext 16.3 Turbopack memory-eviction ማስተካከያ ገና stable አይደለም)፤ የwebpack fallback ከፍተኛ አጠቃቀሙ በጣም ዝቅተኛ ነው። #6409ን ይመልከቱ። | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(ያልተዘጋጀ)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | በstartup ጊዜ የSQLite integrity health checkን ለመዝለል `1` ያዘጋጁ። ትላልቅ databases ላይ ፈጣን boot ለማድረግ ጠቃሚ ነው። | | `NOTIFY_SOCKET` | _(ያልተዘጋጀ)_ | systemd (sd_notify protocol) | processው sd_notify integration ባለው service unit ስር ሲሰራ በsystemd ይዘጋጃል፤ OmniRoute READY/WATCHDOG notificationsን ለመላክ ያነበዋል (`OMNIROUTE_DISABLE_SD_NOTIFY`ን ይመልከቱ)። በተጠቃሚ ፈጽሞ መዘጋጀት የለበትም። | | `OMNIROUTE_DISABLE_SD_NOTIFY` | _(ያልተዘጋጀ)_ | `scripts/dev/systemd-notify.mjs` | በsystemd unit ስር ቢሰራም systemd sd_notifyን (Type=notify / WatchdogSec=) ለማሰናከል `1` ያዘጋጁ። notifierው ከsystemd ውጭ በማንኛውም ሁኔታ ምንም አያደርግም። | | `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | ለbackground credential health check scheduler የጊዜ ልዩነት (ms)። ዝቅተኛው፦ 10000 (10s)። | | `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | ለcached credential health status TTL (ms)። | | `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | የprovider connectionsን በbackground በየጊዜው መፈተሽን ለማሰናከል `1` ወይም `true` ያዘጋጁ። Search providers (SEARCH_VALIDATOR_CONFIGS በ`src/lib/providers/validation/searchProviders.ts` ውስጥ፣ ለምሳሌ `tavily-search`) ሁልጊዜ ከፍተሻው ይገለላሉ — የእነሱ "validation" ክፍያ የሚጠይቅ እውነተኛ upstream query ስለሆነ፣ በtimer ላይ health-check ፈጽሞ አይደረግላቸውም (#9970)። | | `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | ለNext.js dev/start server የbind አድራሻ። ሲዘጋጅ ነባሪውን `0.0.0.0` ይተካል። | | `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Playwright runner Next.jsን ሲያስነሳ የሚጠቀምበት የbind አድራሻ። ለhermetic tests ነባሪው `127.0.0.1` ነው። **ለ`omniroute serve` አይጠቀሙበት** — በምትኩ `OMNIROUTE_SERVER_HOST`ን ይጠቀሙ (POSIX shells `HOSTNAME`ን በራስ-ሰር ወደ ማሽኑ ስም ያዘጋጃሉ፤ `.env` ሊተካው አይችልም)። | | `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | ለ`omniroute serve` የbind አድራሻ። ከPOSIX shell `HOSTNAME` ተለዋዋጭ ጋር መጋጨትን ያስወግዳል (በbash/zsh ሁልጊዜ ወደ ማሽኑ ስም ይዘጋጃል)። ካልተዘጋጀ ወደ `0.0.0.0` ይመለሳል። (#6194) | ### የፖርት ሁነታዎች ``` ┌─────────────────────────── ነጠላ ፖርት (ነባሪ) ──────────────────────────┐ │ PORT=20128 │ │ → ዳሽቦርድ: http://localhost:20128 │ │ → API: http://localhost:20128/v1/chat/completions │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── የተከፋፈሉ ፖርቶች ───────────────────────────────┐ │ DASHBOARD_PORT=20128 │ │ API_PORT=20129 │ │ API_HOST=0.0.0.0 │ │ → ዳሽቦርድ: http://localhost:20128 │ │ → API: http://0.0.0.0:20129/v1/chat/completions │ │ የአጠቃቀም ሁኔታ፦ ዳሽቦርዱን ለlocalhost ብቻ በመገደብ APIን ለLAN ማቅረብ። │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── Docker ፕሮዳክሽን ──────────────────────────────┐ │ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │ │ → በdocker-compose.prod.yml ውስጥ የኮንቴነር ፖርቶችን ከአስተናጋጅ ፖርቶች ጋር ያዛምዳል። │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 4. ደህንነት እና ማረጋገጫ | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | የማሽን አሻራ ለመፍጠር ከሃርድዌር መለያዎች ጋር የሚጣመር salt። ማግለልን ለማረጋገጥ በእያንዳንዱ deployment ይቀይሩት። | | `OMNIROUTE_CLI_SALT` | _(ካልተዋቀረ = በእያንዳንዱ install በዘፈቀደ የሚፈጠር እና በ`/cli-token-salt.json` የሚቀመጥ salt)_ | `src/lib/machineToken.ts` | የአካባቢያዊውን CLI ማረጋገጫ token ለማመንጨት የሚያገለግል HMAC salt። ይህን እሴት ማዋቀር በማሽኑ ላይ ያሉትን ሁሉንም CLI tokens ያድሳል፣ እንዲሁም ሁልጊዜ ከተቀመጠው salt ይልቅ ቅድሚያ ያገኛል። `docs/security/CLI_TOKEN.md`ን ይመልከቱ። | | `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | በsession cookies ላይ የ`Secure` flagን ያዘጋጃል። ከHTTPS በስተጀርባ ሲሰራ **`true` መሆን አለበት**። | | `REQUIRE_API_KEY` | `false` | API middleware | `true` ሲሆን፣ ሁሉም የ`/v1/*` proxy requests ትክክለኛ API key ማካተት አለባቸው። **ይህ flag `GET /v1/models`ን አይገድብም**፤ በምትኩ የDashboard login postureን (`requireAuthForModels`) ይከተላል — ስለዚህ ከ`/v1/models` የሚመጣ `401` inference የተጠበቀ ነው ማለት **አይደለም**። `docs/security/INFERENCE_AUTH_POSTURE.md`ን (#13695) ይመልከቱ። | | `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | በDashboard UI ውስጥ ሙሉ የAPI key እሴቶችን ማሳየት ያስችላል። ከDashboard Feature Flags ሊዋቀር ይችላል፤ በጋራ ጥቅም ላይ በሚውሉ instances ላይ የደህንነት አደጋ አለው። | | `NO_LOG_API_KEY_IDS` | _(ባዶ)_ | `src/lib/compliance/index.ts` | request loggingን የሚያልፉ በነጠላ ሰረዝ የተለያዩ API key IDs (ለGDPR compliance)። | | `DEFAULT_RATE_LIMIT_PER_DAY` | _(ካልተዋቀረ = ያልተገደበ)_ | `src/shared/utils/apiKeyPolicy.ts` | የ`rate_limits` column null ለሆነባቸው API keys የሚተገበር ተተኪ የዕለታዊ request budget። ካልተዋቀረ ወይም ባዶ ከሆነ፦ በስውር የሚተገበር ገደብ የለም (#2289, #11017)። `0`ም ተመሳሳይ ነው (ያልተገደበ)። አዎንታዊ ኢንቲጀር N፣ N/ቀን፣ 5N/ሳምንት፣ 20N/ወር ያነቃል። ቅርጸት የተበላሸ ባዶ ያልሆነ እሴት ወደ ቀድሞው 1000/ቀን፣ 5000/ሳምንት፣ 20000/ወር windows ይመለሳል። | | `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | ከፍተኛው የተፈቀደ request body መጠን። ከዚህ ገደብ የሚበልጡ payloadsን ውድቅ ያደርጋል። | | `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | ከዚህ threshold ጋር እኩል ወይም በላይ የሆኑ ትክክለኛ request bodies JSON ከመተንተናቸው በፊት አቶሚካዊውን፣ process-local heavyweight admission lease ይወስዳሉ (BYTE path፣ `POST /v1/responses`ን ጨምሮ)። ከstructure-heavy ጋር ተመሳሳይ የ[#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) healthy-headroom escape ነው፤ አሁንም በ`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110) የተገደበ ስለሆነ [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) እንደገና አይከሰትም። | | `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | የ`Content-Length` እሴት የጎደለ፣ ልክ ያልሆነ ወይም ሐሰተኛ የሆነባቸውን ጥያቄዎች ጨምሮ፣ በተወሰነ የማስገባት ሂደት ወቅት በተነበቡ ባይቶች ላይ የሚተገበር የውይይት መስመር ጥብቅ ገደብ፤ ገደቡን ያለፈ ጥያቄ `413` ይቀበላል። | | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(አልተዋቀረም — የጥያቄ ብዛት ገደብ የለም)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** ይህ የቆየ የጥያቄ-ብዛት ገደብ አሁን የሚተገበረው በግልጽ ሲዋቀር ብቻ ነው። ሳይዋቀር ከተተወ (ነባሪው)፣ ከባድ የውይይት ጥያቄዎችን መቀበል በምትኩ በ`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` ይገደባል — በ**አንድ ሂደት** (አንድ V8 heap) ውስጥ ካለው እውነተኛ የሂደቱ የማህደረ ትውስታ ጣሪያ በራስ-ሰር የሚሰላ የባይት በጀት። ሁለት ተደራራቢ ~~750k-token `/v1/responses` በ~~12 Gi heaps ላይ መቋረጥ ያስከትላሉ (#7849) — ይህ **የማህደረ ትውስታ በጀት** ማስጠንቀቂያ እንጂ የምርቱ ጥብቅ ከፍተኛ ገደብ 2 ነው ማለት አይደለም። ጤናማ ሂደት (heap ከማስወገጃ ጥምርታው በታች ሲሆን) በ`OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` በኩል ተጨማሪ በአንድ ጊዜ የሚካሄዱ ረጅም `/v1/responses` ሊቀበል ይችላል። በአስሮች የሚቆጠሩ ረጅም SSE ደንበኞች (40–50) ጉዳይ heap + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110 ነው፣ “ከፍተኛው 2” አይደለም። ይህን “የአስተናጋጁን አቅም ለመጠቀም” በግዴለሽነት ከፍ ማድረግ #7849ን እንደገና ያስከትላል። **heaps**ን በ**N ነጻ `DATA_DIR`s** (#11024) ያባዙ፤ በአንድ SQLite ፋይል ላይ `replicas>1` ፈጽሞ አይጠቀሙ። | | `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(በራስ-ሰር የሚሰላ)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** በራስ-ሰር ለሚሰላው የማስገቢያ ባይት በጀት የሚደረግ ማሻሻያ (ከV8/cgroup የማህደረ ትውስታ ጣሪያዎች ይበልጥ ጥብቅ ከሆነው 25%፣ በ8x ጊዜያዊ ማጉላት የተከፈለ)። የተሰሉ እና በግልጽ የተዋቀሩ እሴቶች በ8 MiB–2 GiB መካከል ይገደባሉ። ከተግባራዊው በጀት የሚበልጥ body ወዲያውኑ በ`413 body_exceeds_budget` ይሳካለታል፤ በተናጠል ሊስተናገዱ በሚችሉ bodies መካከል ያለ ፉክክር እንደገና ሊሞከር የሚችል `503` ሆኖ ይቆያል። 40–50 በአንድ ጊዜ የሚገናኙ ረጅም SSE ደንበኞች ጉዳይ ይህ በጀት + heap ነው፣ ጥብቅ “ከፍተኛው 2” አይደለም። ከማስተካከልዎ በፊት በ`/api/monitoring/health` ላይ `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity`ን ያንብቡ። | | `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | ለBYTE እና STRUCTURE ከባድ ጥያቄዎች መቀበል የheap-ጫና ማስወገጃ ጥምርታ (`heapUsed / heap_size_limit`) (#10183, #10268, #10437)። `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT`ን ያለፈ በአንድ ጊዜ የሚካሄድ ከባድ ጥያቄ እንደገና ሊሞከር በሚችለው `503` የሚወገደው heap ደግሞ በዚህ ጥምርታ ወይም ከዚያ በላይ ሲሆን ብቻ ነው፤ ጤናማ heap ላይ በhealthy-headroom በኩል ይቀበላል። | | `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (ነባሪ `1`) | `src/shared/middleware/chatBodyAdmission.ts` | ለጤናማ-heap ፈጣን መንገድ (#10437) በ**ሁለቱም** STRUCTURE እና BYTE (`admitChatRequest`፣ ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES` የሆኑ bodiesን ጨምሮ) የተወሰነ ተጨማሪ አቅም። ያለዚህ ገደብ፣ heap ጤናማ ሆኖ ስራ የበዛበት እያንዳንዱ ጥያቄ ያለ ጣሪያ የመቀበያ ሂደቱን ያልፍ ነበር። በጤናማ-heap መንገድ በኩል ይህን ያህል በአንድ ጊዜ የሚካሄዱ leases ንቁ ከሆኑ በኋላ፣ ተጨማሪ የስራ ጫና ያለባቸው ጥያቄዎች በእውነተኛ heap ጫና ወቅት ወደሚጠቀመው ተመሳሳይ የተወሰነ-መጠበቂያ/ማስወገጃ መንገድ ይወርዳሉ። `0` ማለፊያውን ሙሉ በሙሉ ያሰናክላል። | | `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | bodyው ከባይት ወሰኑ በታች ቢሆንም የውይይት ጥያቄን ከባድ ብሎ የሚመድብ የመልዕክት ብዛት። | | `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | bodyው ከባይት ወሰኑ በታች ቢሆንም የውይይት ጥያቄን ከባድ ብሎ የሚመድብ የመሣሪያ ብዛት። | | `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | ጥያቄን ከባድ ብሎ የሚመድብ ጥንቃቄ ያለው በሕብረቁምፊ መጠን ላይ የተመሠረተ የtoken ግምት፤ ይህ የመቀበያ ወጪ ግምታዊ መለኪያ እንጂ የአቅራቢ ክፍያ tokenization አይደለም። | | `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (ተሰናክሏል) | `src/shared/middleware/chatBodyAdmission.ts` | አማራጭ በፈቃድ የሚነቃ የውይይት ታሪክ ገደብ። በነባሪ ተሰናክሏል፦ የመልዕክት ብዛት የስርዓት ማሰማራት ፖሊሲ እንጂ የጥያቄ ሁሉን አቀፍ ባህሪ አይደለም፣ እዚህ ላይ ገደብ ማድረግም የማመቅ ሂደቱ ሊስተናገዱ የሚችሉ ከማድረጉ በፊት ውይይቶችን በመጨረሻዊ `413` ውድቅ ያደርጋል። የheap እድገት በ`OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` እና በheap-ጫና ማስወገጃው ይገደባል። ጥብቅ ጣሪያ በሚያስፈልጋቸው የማህደረ ትውስታ ገደብ ባለባቸው ማሰማራቶች ላይ አዎንታዊ እሴት ያዋቅሩ፤ ከገደቡ ያለፈ ጥያቄ ከዚያ የተዋቀረ ማመቅ-አስፈላጊ `413` ይቀበላል። | | `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | ሙሉ በሙሉ ወደ ማህደረ ትውስታ ለሚከማች ዥረት-አልባ የላይኛው ምላሽ ጥብቅ ገደብ። ከዚህ ገደብ በላይ የላይኛው አንባቢ ይሰረዛል፣ እናም heap እስኪሟጠጥ ድረስ ገደብ የሌለው ሕብረቁምፊ እንዲያድግ ከማድረግ ይልቅ ጥያቄው በፍጥነት ይሳካለታል። | | `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | ከወደላይ የሚመጡ የምላሽ ራስጌዎች የሚተላለፉበት ከፍተኛው የዋየር ባይት መጠን። በጀቱ ሲያልፍ፣ በተለመዱ የreverse-proxy ራስጌ ገደቦች ውስጥ ለመቆየት ዝቅተኛ ቅድሚያ ያላቸው ራስጌዎች (ለምሳሌ፣ ብጁ `x-codex-*`፣ `x-oai-request-id`) ይተዋሉ። በትልቅ የምላሽ ራስጌ መጠን ምትክ ተጨማሪ ከወደላይ የሚመጣ metadata ለማስተላለፍ ከፍ ያለ ዋጋ ያዘጋጁ። | | `CORS_ORIGIN` | _(አልተዘጋጀም)_ | `src/server/cors/origins.ts` | የቆየ ባለአንድ-origin የCORS ፈቃድ ዝርዝር። ለአዳዲስ ስምሪቶች `CORS_ALLOWED_ORIGINS`ን ይምረጡ። CORS ለcross-origin የአሳሽ API ደንበኞች ብቻ ነው፤ ማንነታቸው የተረጋገጠ የዳሽቦርድ የመጻፍ ጥያቄዎች በምትኩ same-origin ጥያቄዎችን ከsession-bound CSRF ጥበቃ ጋር ይጠቀማሉ። | | `CORS_ALLOWED_ORIGINS` | _(አልተዘጋጀም)_ | `src/server/cors/origins.ts` | በነጠላ ሰረዝ የተለየ የCORS ፈቃድ ዝርዝር። `CORS_ALLOW_ALL=true` በግልጽ ካልተዋቀረ በስተቀር ምንም wildcard አይላክም። | | `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | ማንኛውንም የአሳሽ `Origin` መልሶ ለማስተጋባት ለልማት ብቻ የሚያገለግል የማለፊያ አማራጭ። በጋራ ወይም በproduction ስምሪቶች ላይ አያንቁት። | | `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuard.ts` | ወደ private/loopback/link-local IP ክልሎች የሚያመለክቱ የprovider ጥሪዎችን ያግዱ። በተነጠሉ የሙከራ አካባቢዎች ውስጥ ብቻ ያሰናክሉት። | | `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuard.ts` | ወደ private/local አውታረ መረቦች (localhost፣ 192.168.x.x፣ 10.x.x.x፣ ወዘተ) የሚያመለክቱ የprovider URLዎችን ፍቀድ። **በራስ ለሚስተናገዱ providerዎች ያስፈልጋል** (LM Studio፣ Ollama፣ vLLM፣ Llamafile፣ Triton፣ SearXNG)። `false` ሲሆን፣ ዳሽቦርዱ የlocal URLዎችን ማረጋገጥ ውድቅ ያደርጋል። | | `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuard.ts` | በlocal/private አድራሻዎች (127.0.0.1፣ localhost፣ LAN፣ private ክልሎች) ላይ providerዎችን ማከል/ማረጋገጥ ፍቀድ — ይህም በprovider ማረጋገጫ መንገድ ብቻ የተወሰነ ነው። **ነባሪው `true` ነው** (local-first)፤ public አድራሻዎችን ብቻ የሚፈቅድ ጥብቅ እገዳ ለማስፈጸም `false` ያዘጋጁ። የcloud-metadata endpoints (169.254.169.254፣ metadata.google.internal) ምንም ይሁን ምን እንደታገዱ ይቆያሉ። (#5066) | | `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | የ`/v1/audio/*` መንገዶች (የጽሑፍ ቅጂዎች፣ ንግግር፣ ትርጉሞች) ከlocalhost ውጭ የተስተናገደ OpenAI-compatible provider node እንዲጠቀሙ ፍቀድ። በነባሪ የጠፋ ነው — audioን ወደ remote host መምራት የወጪ ትራፊክ ማንነትን ይቀይራል፣ ስለዚህ ግልጽ የኦፕሬተር ውሳኔ መሆን አለበት። Loopback/private nodes (localhost፣ 127.0.0.1፣ 172.16-31.x) ሁልጊዜ የተፈቀዱ ሲሆን ተጽዕኖም አያድርባቸውም። (#3963) | | `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | `POST /v1/rerank` (እና የmemory engine loopback rerank ደረጃ) ከlocalhost ውጭ የተስተናገደ OpenAI-compatible provider node — TEI፣ Infinity፣ vLLM፣ ወዘተ የሚያስኬድ LAN ማሽን ወይም Tailscale peer — እንዲጠቀም ፍቀድ። በነባሪ የጠፋ ነው — ወደ remote host መምራት የወጪ ትራፊክ ማንነትን ይቀይራል፣ ስለዚህ ግልጽ የኦፕሬተር ውሳኔ መሆን አለበት። Loopback nodes (localhost፣ 127.0.0.1፣ 172.16-31.x) ሁልጊዜ የተፈቀዱ ሲሆን ተጽዕኖም አያድርባቸውም። Remote nodes በተጨማሪ የprovider outbound URL ፖሊሲን (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`) ማለፍ አለባቸው፤ የcloud-metadata hosts በፍጹም ወደእነሱ አይመሩም። | | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | OIDC ሲነቃ፣ ተጠቃሚዎች በOIDC Single Sign-On ብቻ ማንነታቸውን እንዲያረጋግጡ የይለፍ ቃል መግቢያን ያሰናክሉ። ቀጥተኛው alias `OIDC_DISABLE_PASSWORD_LOGIN` እንዲሁም ተቀባይነት አለው፤ ተመሳሳይ key ያለው የDashboard Feature Flag ቅድሚያ ይሰጠዋል። (#10889) | | `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | የ`OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` ቀጥተኛ alias (#10889)። | ### የደህንነት ማጠናከሪያ ማረጋገጫ ዝርዝር ```bash # ዝቅተኛው የproduction ደህንነት መስፈርት፦ AUTH_COOKIE_SECURE=true # HTTPS ያስፈልገዋል REQUIRE_API_KEY=true # ሁሉንም የproxy ጥሪዎች ማንነት ያረጋግጡ ALLOW_API_KEY_REVEAL=false # ቁልፎችን በUI ውስጥ በፍጹም አያጋልጡ CORS_ALLOWED_ORIGINS=https://your.domain.com MAX_BODY_SIZE_BYTES=5242880 # የ5 MB ገደብ ``` --- ## 5. የግቤት ማጽዳት እና የPII ጥበቃ OmniRoute ባለሁለት-ንብርብር መከላከያ ያቀርባል፦ በጥያቄው በኩል የማስገባት ሙከራ ቅኝት እና በምላሹ በኩል PIIን ማስወገድ። > **⚠️ ገደቦች፦** እነዚህ መከላከያዎች ሙሉ የprompt-injection ፋየርዎል ወይም የPII DLP ሥርዓት ሳይሆኑ _በተቻለ መጠን በግምታዊ ዘዴ_ የሚደረጉ ፍለጋዎች ናቸው። የተሳሳቱ አዎንታዊ ውጤቶችን (ጉዳት የሌላቸው የpersona/RPG prompts ምልክት ሊደረግባቸው ይችላል) እና የተሳሳቱ አሉታዊ ውጤቶችን (leetspeak፣ ክፍተት አሰጣጥ፣ እንግሊዝኛ ያልሆኑ ቅጦች) ሊያስከትሉ ይችላሉ። ለደንብ ተገዢነት ብቻቸውን በቂ አይደሉም። በእነሱ ላይ ከመተማመንዎ በፊት ሁነቶቹን ያስተካክሉ እና በትራፊክዎ ላይ ይፈትኗቸው። ### በጥያቄው በኩል፦ የPrompt Injection መከላከያ | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | --------------------------------- | ------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | ገቢ መልዕክቶችን ለprompt injection ቅጦች መቃኘትን ያንቁ። | | `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | የInjection ፖሊሲ፦ `warn` = መዝግብ ብቻ፣ `block` = ጥያቄውን በ400 ውድቅ አድርግ። የቆየው `redact` የinjection ጽሑፍን **አያስወግድም**፤ ለጥያቄ PII እንደገና መጻፍ `PII_REDACTION_ENABLED`ን ይጠቀሙ። | | `INJECTION_GUARD_MODE` | _(አልተቀናበረም)_ | `src/middleware/promptInjectionGuard.ts` | የ`INPUT_SANITIZER_MODE` የቆየ ተለዋጭ ስም — ተመሳሳይ ባህሪ። | | `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | `MODE=block` የሚወድቅበት ዝቅተኛው የክብደት ደረጃ፦ `high` (ነባሪ)፣ `medium` ወይም `low`። ወደ ዝቅተኛ ደረጃ ካልተለወጠ በስተቀር መካከለኛ ቅጦች ለምልከታ ብቻ ናቸው። | | `INJECTION_GUARD_BLOCK_THRESHOLD` | _(አልተቀናበረም)_ | `src/shared/utils/injectionSeverity.ts` | የ`INPUT_SANITIZER_BLOCK_THRESHOLD` የቆየ ተለዋጭ ስም — ተመሳሳይ ባህሪ። | | `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | `true` ሲሆን፣ በገቢ ጥያቄዎች ውስጥ PIIን ይደብቁ (ከinjection ሁነት ነጻ ነው)። | | `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | ታዋቂ የAPI-key / secret-token ቅጦችን ከጥያቄ/ምላሽ ውሂብ ይደብቁ። በምርጫ የሚነቃ ሲሆን፣ `PII_REDACTION_ENABLED`ን ይከተላል። | ### በምላሹ በኩል፦ PII ማጽጃ | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | -------------------------------- | -------- | ------------------------- | ------------------------------------------------------------- | | `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | ወደ ደንበኛው ከመመለሱ በፊት የLLM ምላሾችን ለፈሰሰ PII ይቃኙ። | | `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = PIIን ደብቅ፣ `warn` = መዝግብ ብቻ፣ `block` = ሙሉውን ምላሽ ጣል። | ### የVS Code Tokenized-Route ዐውድ ማጽጃ | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------------------- | --- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | ከ`/v1/vscode/[token]/*` ጥያቄዎች ውስጥ በተዘዋዋሪ የተካተተውን የንቁ አርታዒ ዐውድ (`editorContext`፣ `activeEditor`፣ `currentFile`፣ `selection`፣ `openTabs`…) ያስወግዳል እና በግልጽ የተያያዙ ሚስጥራዊ ፋይሎችን ይዘት ይደብቃል። በነባሪ ደህንነቱ የተጠበቀ ነው፤ ለማሰናከል ወደ `0` ያቀናብሩ። | ### ሁኔታዎች | ሁኔታ | ውቅር | | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **የድርጅት ደንብ ተገዢነት** | `INPUT_SANITIZER_ENABLED=true`፣ `INPUT_SANITIZER_MODE=block`፣ `PII_REDACTION_ENABLED=true`፣ `PII_RESPONSE_SANITIZATION=true` (injectionን ማገድ + የጥያቄ/ምላሽ PII መደበቅ፤ ሁነቶቹ እርስ በርሳቸው ነጻ ናቸው) | | **ክትትል ብቻ** | `INPUT_SANITIZER_ENABLED=true`፣ `INPUT_SANITIZER_MODE=warn` — ይመዘግባል ነገር ግን ፈጽሞ አያግድም | | **የግል አጠቃቀም** | ሁሉንም እንደተሰናከሉ ይተዉ — ምንም ተጨማሪ ወጪ የለም | --- ## 6. የመሣሪያ እና የማዘዋወሪያ ፖሊሲዎች | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------------------------------------------- | ---------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | የLLM መሣሪያ/ተግባር-ጥሪ መዳረሻን ይቆጣጠራል። `allowlist` = የተዘረዘሩ መሣሪያዎች ብቻ፣ `denylist` = ከተዘረዘሩት በስተቀር ሁሉም፣ `disabled` = ምንም ገደቦች የሉም። | | `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | የpayload ማቀናበሪያ ደንቦች JSON ፋይል መንገድ (በሞዴል/ፕሮቶኮል የሚደረጉ የupstream ማስተካከያዎች)። | | `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | የpayload ደንቦች ፋይልን በቀጥታ እንደገና ለመጫን የሚውል የጊዜ ልዩነት (ms)። ዝቅተኛው `1000` ነው። | | `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | በፈቃድ የሚነቃ፦ የአቅራቢ ቅድመ ቅጥያ ከመጠየቅ ይልቅ ከClaude Code ደንበኞች የሚመጡ ቅድመ ቅጥያ የሌላቸውን `claude-*` የሞዴል መለያዎች በClaude Code OAuth መለያ በኩል ያዘዋውራል። በግልጽ የተገለጹ የአቅራቢ ቅድመ ቅጥያዎች አሁንም ቅድሚያ ያገኛሉ። በClaude አቅራቢ ገጽ ላይ ባለው የዳሽቦርድ መቀያየሪያም ሊዋቀር ይችላል። | | `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | ለround-robin ጥምረቶች በእያንዳንዱ ሞዴል የሚተገበር የትይዩነት ገደብ (#9100)። የround-robin ጥምረት semaphore የሚሽረው ቅንብር ሳይኖረው በእያንዳንዱ ሞዴል 3 ትይዩ ጥያቄዎች ላይ በቋሚነት ተገድቦ ነበር፣ ይህም ከፍተኛ ትይዩነት ያለውን ትራፊክ ከዚያ ገደብ ጀርባ በተከታታይ እንዲሠራ ያደርግ ነበር። `>= 1` እንዲሆን ይረጋገጣል፣ በ`<= 32` ይገደባል። | | `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | ለቀጥታ ነጠላ-ሞዴል ጥያቄዎች የOmniRoute አካባቢያዊ context-window / max-input-token ምርመራን የሚዘል አደገኛ በፈቃድ የሚነቃ አማራጭ። የUpstream አቅራቢዎች አሁንም ትክክለኛ ገደቦቻቸውን ያስገድዳሉ፤ የprompt ማመቅ እና የሞዴሉ የራሱ የውጤት-token ገደብ ንቁ ሆነው ይቆያሉ። ተግባራዊው የቅድሚያ ቅደም ተከተል የFeature Flags DB መሻር > የenvironment variable > ነባሪ ነው፤ ዳግም ማስጀመር አያስፈልግም። | | `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(አልተዋቀረም)_ | `open-sse/services/selfHostedEntry.ts` | በመስመር ውስጥ የሚገለጽ YAML `providers:` ሰነድ (RIC-738, D4)። ሲዋቀር (`strategy:` ብሎክ ኖረውም ሆነ ሳይኖረው)፣ `/v1/chat/completions` ከcloud pipeline ይልቅ ወደ በራስ የሚስተናገደው የተዋሐደ OpenAI-ተኳኋኝ መግቢያ ይዘዋወራል። ካልተዋቀረ (ነባሪው)፦ መስመሩ በቀጥታ ወደ ነባሩ cloud pipeline ያልፋል። `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`ን ይመልከቱ። | | `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(አልተዋቀረም)_ | `open-sse/services/selfHostedEntry.ts` | በመስመር ውስጥ ካለ environment variable ይልቅ ፋይልን ለሚመርጡ የማሰማሪያ አካባቢዎች፣ ከ`OMNIROUTE_SELF_HOSTED_PROVIDERS` ጋር ተመሳሳይ `providers:` ሰነድን የያዘ የYAML ፋይል መንገድ። ከሁለቱ አንዱ በራስ የሚስተናገደውን መግቢያ ያነቃል። | | `OMNIROUTE_SELF_HOSTED_API_KEY` | _(አልተዋቀረም — ክፍት መስመር)_ | `open-sse/services/selfHostedEntry.ts` | ለተዋሐደው በራስ የሚስተናገድ መግቢያ አማራጭ የጋራ API ቁልፍ (D5 መሠረታዊ መዋቅር፣ ለበቁልፍ የኮታ ሥርዓት የተያዘ)። ሲዋቀር ጥያቄዎች `Authorization: Bearer `ን ማካተት አለባቸው። ካልተዋቀረ፦ መስመሩ ክፍት ሲሆን፣ ከነባሩ በራስ የሚስተናገድ የአካባቢ-አቅራቢ ንድፍ (loopback/የታመነ-አውታረ መረብ ማሰማራት) ጋር ይዛመዳል። | | `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(አልተዋቀረም)_ | `open-sse/services/routingStrategies.ts` | ለውሳኔ-አይለዋወጥ ማዘዋወሪያ ሞተር በመስመር ውስጥ የሚገለጽ YAML `strategy:` ሰነድ (M2/RIC-740, D3) — blacklist/whitelist፣ cooldown breaker፣ የወጪ ቅድሚያ፣ መዘግየትን የሚያገናዝብ፣ fallback chain። በእያንዳንዱ ቁልፍ መሠረት፣ በ`OMNIROUTE_SELF_HOSTED_PROVIDERS` ውስጥ የተካተተውን የመስመር ውስጥ `strategy:` ብሎክ ይሽራል። `docs/routing/DETERMINISTIC_ROUTING.md`ን ይመልከቱ። | | `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(አልተዋቀረም)_ | `open-sse/services/routingStrategies.ts` | በመስመር ውስጥ ካለ environment variable ይልቅ ፋይልን ለሚመርጡ የማሰማሪያ አካባቢዎች፣ ከ`OMNIROUTE_SELF_HOSTED_STRATEGY` ጋር ተመሳሳይ `strategy:` ሰነድን የያዘ የYAML ፋይል መንገድ። | | `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(አልተዋቀረም)_ | `open-sse/services/conversationTracker.ts` | የውይይት ታሪክ መሰብሰብን ለማቆም `1` ያዘጋጁ። `resolveConversationId()` SQLite ከማንበቡ ወይም የመልዕክት ታሪክን ከመተንተኑ በፊት ክትትል ያልተደረገበት ውጤት ይመልሳል፤ በደንበኛው የቀረቡ የክፍለ ጊዜ መለያዎችም በዚህ ውስጥ ይካተታሉ። የማዞሪያ ክፍለ ጊዜ አስተዳደር ሳይለወጥ ይቆያል፣ እና ነባር መዝገቦች አይሰረዙም። ይህ የዳሽቦርዱን የውይይት እይታ ለማይጠቀሙ እና የተራ ሰንጠረዡ ማደጉን ማቆም ለሚፈልጉ ስምሪቶች ነው። | --- ## 7. URLs እና Cloud Sync | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------------------- | ----------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | ውስጣዊ የማመሳሰል ሥራዎች `/api/sync/cloud`ን እንዲጠሩ የሚያገለግል የአገልጋይ-ወገን URL። መተግበሪያው በይፋ በፕሮክሲ በሚተላለፍበት ጊዜም ይህን እንደ loopback/container URL ያቆዩት። | | `CLOUD_URL` | _(ባዶ)_ | `src/lib/cloudSync.ts` | የCloud relay endpoint URL (ፕሪሚየም ባህሪ)። | | `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | ለCloud Sync ጥያቄዎች የHTTP የጊዜ ገደብ። | | `OMNIROUTE_BUILD_PROFILE` | `full` | የWebpack ግንባታ ውቅር | የግንባታ-ጊዜ መገለጫ (ልዩ መብት ያላቸውን ሞጁሎች በአካል ከbundle ለማስቀረት ወደ `minimal` ያቀናብሩት)። | | `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone ውጤት_ | `scripts/build/colocate-standalone.mjs` | ከግንባታ በኋላ ባለው የአብሮ-ማስቀመጥ ደረጃ ጥቅም ላይ ለሚውለው standalone የውጤት ማውጫ የግንባታ-ጊዜ መሻሪያ። ይህ የruntime ቅንብር አይደለም። | | `OMNIROUTE_CLOUD_SYNC_SECRET` | _(ባዶ)_ | `src/lib/cloudSync.ts` | የCloud Sync ምላሾችን HMAC-SHA256 ፊርማ ለማረጋገጥ ጥቅም ላይ የሚውል የጋራ ሚስጥር። | | `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | የCloud Sync endpoint አካባቢያዊ የመግቢያ ማረጋገጫዎችን እንዲተካ `true` ያቀናብሩት። ነባሪው `false` ነው። | | `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | ምንም አካባቢያዊ ሚስጥር ሳይዋቀር ፊርማ የሌለውን የCloud Sync ምላሽ ውድቅ ለማድረግ `true` ያቀናብሩት (#13679)። ያለ ፊርማ ሁልጊዜ ይረጋገጣል — እና `OMNIROUTE_CLOUD_SYNC_SECRET` ካልተዋቀረ፣ የዚህ ጠቋሚ ሁኔታ ምንም ይሁን ምን፣ ሁልጊዜ ውድቅ ይደረጋል። በv3.9 ነባሪው ወደ አስገዳጅነት ይቀየራል። | | `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | ያለተጠቃሚ ማረጋገጫ ወደ v3.8.5 ባለአንድ-ደረጃ «ሁሉንም ነገር አስመጣ» ባህሪ ለመመለስ `true` ያቀናብሩት። | | `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth፣ Dashboard፣ ማመሳሰል | ለOAuth redirect_uri፣ ለDashboard አገናኞች እና ለሚመነጩ ይፋዊ URLs የሚያገለግል ለሕዝብ የሚታይ URL። የOAuth callbacks ወይም የሚመነጩ የአሳሽ አገናኞች መደበኛ reverse-proxy host መጠቀም ሲኖርባቸው፣ ይህን ወደ የተረጋጋው ይፋዊ URL ያቀናብሩት። | | `NEXT_PUBLIC_CLOUD_URL` | _(ባዶ)_ | የደንበኛ-ወገን | የ`CLOUD_URL` የደንበኛ-ወገን አንጸባራቂ። | | `NEXT_PUBLIC_APP_URL` | _(አልተዋቀረም)_ | `src/shared/services/cloudSyncScheduler.ts` | ለ`NEXT_PUBLIC_BASE_URL` የቆየ የመጠባበቂያ እሴት። | | `NEXT_PUBLIC_PORT` | _(አልተዋቀረም — ወደ `PORT` ይመለሳል)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | መነሻው በማይታወቅበት ጊዜ (SSR/ሙከራዎች) ለማሳያ URLዎች የደንበኛ-ወገን መጠባበቂያ ወደብ፤ ከ`PORT` በፊት ይነበባል። | | `OMNIROUTE_PUBLIC_BASE_URL` | _(አልተዋቀረም)_ | የይፋዊ መነሻ ፈቺ፣ የምስል URLዎች | ይፋዊ URLዎችን ለማመንጨት እና ከዳሽቦርድ ውጭ ላለ የአሳሽ መነሻ ማረጋገጫ ጥቅም ላይ የሚውል፣ ከፍተኛ ቅድሚያ ያለው ለአሳሽ የሚታይ OmniRoute መነሻ። OpenWebUI ወይም ሌላ አስተላላፊ OmniRouteን በውስጣዊ URL ሲደርስ፣ ነገር ግን የተጠቃሚው አሳሽ የተመነጨውን ሚዲያ ከLAN፣ ቱነል ወይም ይፋዊ መነሻ ማምጣት ሲኖርበት ይህን ያዋቅሩ። `/v1`ን **አያካትቱ**። | | `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(አልተዋቀረም)_ | `open-sse/config/providerPluginManifestUrl.ts` | ለጎን-አገልግሎት ደንበኞች የሚታወጅ ፍጹም የአቅራቢ ተሰኪ መግለጫ URL። ካልተዋቀረ፣ OmniRoute `/api/v1/provider-plugin-manifest`ን ከጥያቄው መነሻ ወይም ከHOST/PORT ያወጣል። | | `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | የጥያቄ መነሻ ሳይኖር የአቅራቢ ተሰኪ መግለጫ URLን ከHOST/PORT ሲያወጣ ጥቅም ላይ የሚውል ፕሮቶኮል። ግልጽ `OMNIROUTE_PROVIDER_MANIFEST_URL` ሳይዋቀር በTLS ማቋረጫ ይፋዊ ፕሮክሲ ጀርባ ከሆነ ወደ `https` ያዋቅሩት። | | `OMNIROUTE_TRUST_PROXY` | _(አልተዋቀረም)_ | `src/server/origin/publicOrigin.ts` | ለተላለፉ የይፋዊ መነሻ ራስጌዎች አማራጭ የመተማመኛ ሁኔታ። አልተዋቀረም = ለደህንነት ውሳኔዎች `Forwarded` / `X-Forwarded-*`ን አትመኑ። `true` / `loopback` የተላለፈውን አስተናጋጅ/ፕሮቶኮል የሚያምነው በቶከን ምልክት ከተደረገበት loopback ፕሮክሲ ሲመጣ ብቻ ነው። `private` / `lan` የግል-LAN ፕሮክሲ አቻዎችንም ያምናል። በምርት አካባቢ ግልጽ `NEXT_PUBLIC_BASE_URL`ን ይምረጡ። | | `KIE_CALLBACK_URL` | _(አልተዋቀረም)_ | `open-sse/utils/kieTask.ts` | ለተመሳሰሉ kie.ai ሥራዎች የይፋዊ የመልስ ጥሪ URL። ከ`OMNIROUTE_KIE_CALLBACK_URL` እና `OMNIROUTE_PUBLIC_URL` በፊት ከፍተኛ ቅድሚያ ያለው ተኪ። | | `OMNIROUTE_KIE_CALLBACK_URL` | _(አልተዋቀረም)_ | `open-sse/utils/kieTask.ts` | የ`KIE_CALLBACK_URL` አማራጭ አጻጻፍ። ዋናው ተለዋዋጭ ካልተዋቀረ እንደ መጠባበቂያ ጥቅም ላይ ይውላል። | | `OMNIROUTE_PUBLIC_URL` | _(አልተዋቀረም)_ | `open-sse/utils/kieTask.ts` | ተመሳሳይ ያልሆኑ የመልስ ጥሪ URLዎችን ለመገንባት የሚያገለግል ይፋዊ መነሻ። ለkie.ai የመልስ ጥሪዎች ዝቅተኛ ቅድሚያ ያለው መጠባበቂያ፤ ለሌሎች አስተላላፊዎችም እንደ አጠቃላይ ይፋዊ URL ጥቅም ላይ ይውላል። | | `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | በUsage ገጽ ጥቅም ላይ የሚውል የCrofAI ኮታ መፈለጊያ መጨረሻ ነጥብ። ለአስተላላፊዎች / የሙከራ ናሙናዎች ይተኩት። | | `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | በUsage ገጽ ጥቅም ላይ የሚውል፣ በAPI ቁልፍ ማረጋገጫ የተጠበቀ ይፋዊ የOpenCode Go አጠቃቀም መጨረሻ ነጥብ። ለአስተላላፊዎች / የሙከራ ናሙናዎች ይተኩት። | | `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | ደንበኛው ባልላካቸው የopencode-go/zen ወደላይ ጥያቄዎች ላይ የOpenCode CLI ማንነት ራስጌዎችን (User-Agent፣ x-opencode-client/project፣ የጥያቄ/ክፍለ-ጊዜ UUIDዎች) ያመነጫል፤ ይህም በVPS መውጫ ላይ Cloudflare እንዲቀበላቸው ነው (#6210/#5997)። ከ#10571 ጀምሮ በነባሪ ነቅቷል፤ በ`false`/`0`/`no`/`off` ያሰናክሉት። | | `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | `OPENCODE_SYNTHESIZE_CLI_HEADERS` በነቃበት እና ለእያንዳንዱ አቅራቢ የ`_USER_AGENT` ተኪ ባልተዋቀረበት ጊዜ ጥቅም ላይ የሚውል ነባሪ User-Agent። በopencode አስፈጻሚዎች ላይ ብቻ ይተገበራል። ወደላይ አገልግሎቱ በሚገድበው ቁልፍ-አልባ ጥያቄ ላይ፣ `opencode/= 1.17>`ን የማያካትት የተዋቀረ እሴት ከመከልከል ይልቅ በዚህ ነባሪ ይተካል። | | `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | `OPENCODE_SYNTHESIZE_CLI_HEADERS` በርቶ ሲሆን ለሚፈጠረው `x-opencode-client` ራስጌ የሚውል እሴት። | | `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | `OPENCODE_SYNTHESIZE_CLI_HEADERS` በርቶ ሲሆን ለሚፈጠረው `x-opencode-project` ራስጌ የሚውል እሴት። | | `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(አልተዋቀረም)_ | `open-sse/executors/opencodeFreeTierContract.ts` | ቁልፍ የሌላቸውን የOpenCode ጥያቄዎች አካል (የዥረት ማስተላለፊያ ጠቋሚ እና የመሣሪያዎች ዝርዝር) ማስተካከልን ለማቆም ወደ `off` ያቀናብሩ። ራስጌዎቹ አሁንም ይተገበራሉ። በእያንዳንዱ ጥያቄ ጊዜ ይነበባል፤ ስለዚህ ለውጥ ወዲያውኑ ተግባራዊ ይሆናል። | | `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(አልተዋቀረም)_ | `open-sse/executors/opencodeFreeTierContract.ts` | ለዚያ ሞዴል እስካሁን ምንም ነገር ሳይታይ፣ ምንም መሣሪያ ባልያዘ ቁልፍ-አልባ የOpenCode ጥያቄ ላይ የሚገለጹ በኮማ የተለያዩ የመሣሪያ ስሞች። ባዶ ከሆነ፣ ሞዴሉ እንዳይጠራው ወደተነገረው አንድ ቦታ-ያዥ ይመለሳል። ቢበዛ 32 ግቤቶች፣ `[A-Za-z_][A-Za-z0-9_-]{0,63}`፤ ልክ ያልሆኑ ግቤቶች ችላ ይባላሉ። | | `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | የኮታ መረጃን ከገጹ ለማውጣት የሚያገለግል የOllama Cloud ቅንብሮች URL። ለሪሌይ / የሙከራ መሣሪያዎች ይቀይሩት። | | `OLLAMA_USAGE_COOKIE` | _(አልተዋቀረም)_ | `open-sse/services/usage.ts` | ከቅንብሮች ገጽ የኮታ መረጃን ለማውጣት የሚያገለግል የOllama Cloud `__Secure-session` ኩኪ። ሚስጥራዊ ነው፤ ብዙ መለያዎች ሲዋቀሩ የየግንኙነቱን የDashboard መስክ መጠቀም ይመረጣል። | | `OLLAMA_CLOUD_USAGE_COOKIE` | _(አልተዋቀረም)_ | `open-sse/services/usage.ts` | አማራጭ የOllama Cloud `__Secure-session` ኩኪ የአካባቢ ተለዋዋጭ። ሚስጥራዊ ነው፤ ብዙ መለያዎች ሲዋቀሩ የየግንኙነቱን የDashboard መስክ መጠቀም ይመረጣል። | | `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(አልተዋቀረም)_ | `open-sse/services/usage.ts` | ከአጭር ተለዋጭ ስሞቹ በፊት ጥቅም ላይ የሚውል አማራጭ የOllama Cloud `__Secure-session` ኩኪ የአካባቢ ተለዋዋጭ። ሚስጥራዊ ነው፤ ብዙ መለያዎች ሲዋቀሩ የየግንኙነቱን የDashboard መስክ መጠቀም ይመረጣል። | | `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | የCodeWhisperer (AWS Kiro) የአጠቃቀም ገደቦች የመዳረሻ ነጥብ። ለሪሌይ / የሙከራ መሣሪያዎች ይቀይሩት። | > [!IMPORTANT] > ከተገላቢጦሽ ፕሮክሲ (nginx, Caddy) ጀርባ ሲዘረጋ፣ የOAuth መልስ ጥሪዎች ወይም የሚፈጠሩ ይፋዊ አገናኞች ያንን የአስተናጋጅ ስም መጠቀም ሲኖርባቸው `NEXT_PUBLIC_BASE_URL`ን ወደ የተረጋጋ ይፋዊ URLዎ (ለምሳሌ፣ `https://omniroute.example.com`) ያቀናብሩ። ይህ ከሌለ፣ redirect_uri ስለማይዛመድ የOAuth መልስ ጥሪዎች ሊከሽፉ ይችላሉ፣ እንዲሁም የሚፈጠሩ ይፋዊ አገናኞች ወደ ውስጣዊው የኮንቴይነር መነሻ ሊያመለክቱ ይችላሉ። > > ለአገልጋይ-ወደ-አገልጋይ ሥራዎች `BASE_URL`ን እንደ ውስጣዊ loopback/ኮንቴይነር URL ያቆዩት። የማረጋገጫ መረጃ ለያዙ ውስጣዊ ራስ-ጥያቄዎች የአሳሽ `Origin` ወይም ይፋዊ የአስተናጋጅ ስም አይጠቀሙ። > > ማንነት የተረጋገጠባቸው የdashboard ጽሑፎች የማይለወጥ ይፋዊ መሠረታዊ URL አያስፈልጋቸውም፦ dashboardው ከክፍለ-ጊዜው ጋር የተሳሰረ CSRF ቶከን ያላቸውን ደህንነታቸው ያልተጠበቀ የተመሳሳይ-መነሻ ጥያቄዎች ይልካል። OmniRoute ለdashboard ያልሆኑ የአሳሽ ውህደቶች የይፋዊ መነሻ ማረጋገጫን አሁንም በአንድ ቦታ ያካሂዳል፦ በግልጽ የተገለጹ የይፋዊ URL የአካባቢ ተለዋዋጮች መጀመሪያ ይታመናሉ፤ `OMNIROUTE_TRUST_PROXY` ካልነቃ እና የቅርብ ፕሮክሲ አቻው እንደሚታመን በቶከን ምልክት ካልተደረገበት፣ ጥሬ `Forwarded` / `X-Forwarded-*` ራስጌዎች ችላ ይባላሉ። የተመሳሳይ-መነሻ dashboard ጥያቄዎችን ለማስተካከል የCORS ቅንብሮችን አይጠቀሙ፤ CORS ለመነሻ-ተሻጋሪ የአሳሽ ደንበኞች ብቻ ነው። --- ## 8. ወደ ውጭ የሚወጣ ፕሮክሲ ለወጪ ትራፊክ ቁጥጥር፣ ለጂኦ-ራውቲንግ ወይም የIP አድራሻን ለመደበቅ፣ ወደ ውጭ የሚላኩ የLLM አቅራቢ ጥሪዎችን በHTTP ወይም SOCKS5 ፕሮክሲ በኩል ያስተላልፉ። | ተለዋዋጭ | ነባሪ | ምንጭ ፋይል | መግለጫ | | ---------------------------------------- | ----------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | ወደ ላይኛው አገልግሎት ለሚደረጉ ጥሪዎች SOCKS5 proxy agentን ያንቁ። ለማሰናከል `false`ን ይጠቀሙ። | | `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | የደንበኛ ወገን | ስለ SOCKS5 መኖር የደንበኛ ወገን ግንዛቤ። | | `PROXY_SKIP_RECENTLY_FAILED` | `false` | `src/shared/utils/featureFlags.ts` | በፈቃድ የሚነቃ የባህሪ ጠቋሚ ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md)ን ይመልከቱ፤ የdashboard DB override ቅድሚያ ያገኛል)። Proxy pools እና የእያንዳንዱ መለያ rotation አሁን ያልተሳካን አባል (ውድቅ የተደረገ TCP probe፣ ወይም በእሱ በኩል የተገኘ 429) በእያንዳንዱ ድግግሞሽ እጥፍ ለሚሆን፣ እስከ ከፍተኛ ገደብ ድረስ ለሚደርስ ጊዜ እንደገና ማቅረብ ያቆማሉ። `true` (ወይም `1`፣ `yes`) ያነቃዋል። | | `HTTP_PROXY` | _(አልተዋቀረም)_ | የNode.js መደበኛ | ወደ ላይኛው አገልግሎት ለሚደረጉ ጥሪዎች HTTP proxy። | | `HTTPS_PROXY` | _(አልተዋቀረም)_ | የNode.js መደበኛ | ወደ ላይኛው አገልግሎት ለሚደረጉ ጥሪዎች HTTPS proxy። | | `ALL_PROXY` | _(አልተዋቀረም)_ | የNode.js መደበኛ | ሁለንተናዊ proxy (`socks5://`ን ይደግፋል)። | | `OMNIROUTE_PROXY_ECHO_URL` | _(አልተዋቀረም)_ | `src/lib/proxyEchoTarget.ts` | በproxy egress probes የሚጠቀመውን የecho-IP ዒላማ ወደ አንድ URL ይወስናል። ካልተዋቀረ፣ IPv4 ብቻ የሚደግፉ tunnels እንደማይሰሩ ሪፖርት እንዳይደረግ (#9694) probeው መጀመሪያ `api64.ipify.org`ን ከዚያ `api4.ipify.org`ን ይሞክራል። | | `NO_PROXY` | _(አልተዋቀረም)_ | የNode.js መደበኛ | proxyውን ለማለፍ በነጠላ ሰረዝ የተለዩ hostnames/IPs። | | `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | በእያንዳንዱ cached HTTP/SOCKS proxy dispatcher ላይ ከፍተኛው የተመሳሳይ ጊዜ sockets ብዛት። ብዙ ጥያቄዎች ተመሳሳይ የመለያ-ደረጃ proxyን ሲጋሩ እንደ Codex `/v1/responses` ያሉ ለረጅም ጊዜ የሚቆዩ SSE streams ከአንድ በላይ connection ያስፈልጋቸዋል። ከ`256` በላይ ያሉ እሴቶች ይገደባሉ። | | `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | የSOCKS5 handshake (connect) የጊዜ ማብቂያ በms። አንድ residential gateway host በከፍተኛ concurrency (ለምሳሌ፣ 100 በአንድ ጊዜ የሚደረጉ ጥያቄዎች) ሲጫን እሴቱን ይጨምሩ — proxyው ሊደረስበት የሚችል ቢሆንም በተጨናነቀ pool ውስጥ እውነተኛው handshake ከ10s ሊበልጥ ይችላል፤ ያለበለዚያ ይህ የውሸት `[Proxy Fast-Fail] Proxy unreachable` መልዕክት ያስከትላል። በ`120000` ይገደባል። | | `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | `false` ሲሆን (ነባሪው)፣ የተመደበለት proxy መፍታት ያልቻለው ጥያቄ ወደ ቀጥታ connection ከመመለስ ይልቅ **ውድቅ ይደረጋል (fail-closed)** — የእውነተኛ IP ፍሰትን ይከላከላል። የቀድሞውን DIRECT fallback ለመመለስ `true` ያድርጉት። | | `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | wreq-jsን በመጠቀም TLS fingerprintን ያስመስሉ (Chrome 124ን ይመስላል)። JA3/JA4 blockingን ይከላከላል። | | `TLS_FINGERPRINT_PROVIDERS` | _(አልተዋቀረም)_ | `open-sse/utils/proxyFetch.ts` | ለአዲሱ proxied TLS routing (`open-sse/utils/proxyFetch.ts`) በነጠላ ሰረዝ የተለየ የprovider allowlist። ካልተዋቀረ ቀጥተኛ TLS የቀድሞ ባህሪውን ይጠብቃል፤ በChrome-124 fingerprint bridge በኩል የሚመሩት እነዚህ providers ብቻ ናቸው። | | `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | የClaude Turnstile Playwright browser context የHTTPS certificate errorsን ችላ እንዲል ይፍቀዱ። | ### ሁኔታዎች | ሁኔታ | ውቅር | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | **በSSH tunnel በኩል SOCKS5** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` | | **የድርጅት HTTP proxy** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` | | **የጣት አሻራ መከላከያ** | `ENABLE_TLS_FINGERPRINT=true` — `wreq-js` ያስፈልገዋል (ተካትቷል) | | **መውጫ ቁጥጥር ያለበት / ቀጥተኛ መዳረሻ የሌለው** | `PROXY_FAIL_OPEN=false` እንዳለ ይተዉት (ነባሪ)። proxyው በማይገኝበት ጊዜ ጥያቄዎች በቀጥታ በመውጣት መረጃ ከማፍሰስ ይልቅ ሙሉ በሙሉ ይከሽፋሉ። | | **የቆየ / የልማት — ቀጥተኛ አማራጭን ፍቀድ** | `PROXY_FAIL_OPEN=true`። ከማጠናከሪያው በፊት የነበረውን ባህሪ ይመልሳል፦ proxyን መፍታት ሲከሽፍ ቀጥተኛ ግንኙነት ጥቅም ላይ ይውላል። | > **ማስታወሻ (የNVIDIA ማረጋገጫ ማለፊያ — #3226)፦** የNVIDIA API-key ማረጋገጫ endpoint > በዓለም አቀፍ proxy/TLS-patched fetch በኩል ሲመራ ይቆማል (undici dispatcher → 504)። > `src/lib/providers/validation.ts::directHttpsRequest()` ሆን ብሎ ለዚያ አንድ የማረጋገጫ ጥሪ > `safeOutboundFetch({ bypassProxyPatch: true })`ን በመጠቀም የproxy patchን ያልፋል። > ይህ በሰነድ የተገለጸ፣ ወሰኑ የተገደበ ልዩ ሁኔታ ነው — የውይይት/የአጠቃቀም መውጫን **አይነካም**። > የማለፊያው ወሰን በ`tests/unit/proxy-bypass-scope-guard-3226.test.ts` ተወስኗል። --- ## 9. የCLI መሣሪያ ውህደት OmniRoute የCLI የጎን አገልግሎቶችን (Claude Code፣ Codex፣ ወዘተ) እንዴት እንደሚያገኝና እንደሚያስጀምር ይቆጣጠራል። | ተለዋዋጭ | ነባሪ | ምንጭ ፋይል | መግለጫ | | --------------------------------- | -------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = በስርዓቱ PATH ውስጥ ይፈልጋል፤ `manual` = ግልጽ ዱካዎችን ብቻ ይጠቀማል። | | `CLI_EXTRA_PATHS` | _(አልተዋቀረም)_ | `src/shared/services/cliRuntime.ts` | የCLI ባይነሪዎችን ለማግኘት ተጨማሪ የPATH ግቤቶች (በኮሎን የተለያዩ)። | | `CLI_CONFIG_HOME` | _(አልተዋቀረም)_ | `src/shared/services/cliRuntime.ts` | የCLI ውቅሮችን (`~/.claude`፣ `~/.codex`) ለማንበብ የሚያገለግለውን መነሻ ማውጫ ይተካል። ፍጹም ዱካ እና በሂደቱ መነሻ ማውጫ ውስጥ መሆን አለበት — **ወይም** በኮንቴይነር ውስጥ bind-mounted የሆነ ዱካ (`/host-home` የሚሠራው በዚህ መንገድ ነው)። ሌላ ማንኛውም ዋጋ ወደ መነሻ ማውጫው ይመለሳል። | | `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | OmniRoute የCLI ውቅር ፋይሎችን (የቶከን እድሳት፣ የክፍለ ጊዜ ውሂብ) እንዲጽፍ ይፈቅዳል። እያንዳንዱ የCLI ውቅር ጽሑፍ ግልጽ የ"መጻፍ ተሰናክሏል" ስህተት እንዲመልስ `false` ያድርጉት። | | `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | ወደ Claude CLI ባይነሪ ብጁ ዱካ። | | `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | ወደ Codex CLI ባይነሪ ብጁ ዱካ። | | `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | ወደ Droid CLI ባይነሪ ብጁ ዱካ። | | `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | ወደ OpenClaw CLI ባይነሪ ብጁ ዱካ። | | `CLI_CURSOR_BIN` | `agent`፣ ከዚያ `cursor` | `src/shared/services/cliRuntime.ts` | ወደ Cursor ወኪል ባይነሪ ብጁ ዱካ። ይህ ካልተዋቀረ፣ ማግኘቱ በመጀመሪያ `agent`ን ይሞክራል፣ ካልተሳካም ወደ `cursor` ይመለሳል። | | `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | ወደ Cline CLI ባይነሪ ብጁ ዱካ። | | `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | ወደ 5dive CLI ባይነሪ ብጁ ዱካ። | | `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | የ5dive የስርዓት ሁኔታ ማውጫ (በroot ባለቤትነት የተያዙ የማረጋገጫ መገለጫዎች)፤ የ5diveን የራሱን STATE_DIR ነባሪ ያንጸባርቃል። | | `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | ወደ Continue CLI ባይነሪ ብጁ ዱካ። | | `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | ወደ Qoder CLI ባይነሪ ብጁ ዱካ። | | `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | ወደ Qwen Code CLI ባይነሪ ብጁ ዱካ። | | `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | ወደ Aider CLI ባይነሪ ብጁ ዱካ። | | `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | ወደ Goose CLI ባይነሪ ብጁ ዱካ። | | `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | ወደ Google Gemini CLI ባይነሪ ብጁ ዱካ — ለአገልጋይ-ወገን ማግኘት/ጤና ፍተሻዎች ብቻ፤ `omniroute run gemini` የ`gemini` ባይነሪን ከስርዓቱ PATH ይፈታል። | | `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | ወደ Kilo Code CLI ባይነሪ ብጁ ዱካ። | | `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | ወደ OpenCode CLI ባይነሪ ብጁ ዱካ። | | `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | ወደ Hermes ባይነሪ ብጁ ዱካ። በሁለቱም የካታሎግ ግቤቶች (`hermes` እና `hermes-agent`) ይጋራል። | | `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | ወደ ForgeCode CLI ባይነሪ ብጁ ዱካ። | | `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | ወደ jcode CLI ባይነሪ ብጁ ዱካ። | | `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | ወደ DeepSeek TUI ባይነሪ ብጁ ዱካ። | | `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | ወደ CodeWhale CLI ባይነሪ ብጁ ዱካ። | | `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | ወደ Smelt CLI ባይነሪ ብጁ ዱካ። | | `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | ወደ Pi (pi-coding-agent) ባይነሪ ብጁ ዱካ። | | `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | ወደ Crush CLI ባይነሪ ብጁ ዱካ። | | `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | ወደ Oh My Pi (`omp`) ወኪል ባይነሪ ብጁ ዱካ። | | `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | ወደ Letta CLI ባይነሪ ብጁ ዱካ። | | `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | ወደ Prime Agent (Prime Intellect) ባይነሪ ብጁ ዱካ። | | `CLI_WINDSURF_BIN` | _(የለም)_ | `src/shared/services/cliRuntime.ts` | ወደ Windsurf ባይነሪ ብጁ ዱካ። Windsurf **ምንም ነባሪ ትዕዛዝ አያካትትም** — ይህ እስኪዋቀር ድረስ የባይነሪ ማግኘት እንደተሰናከለ ይቆያል። | | `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | ወደ Devin CLI ባይነሪ (v3.8.0) ብጁ ዱካ። በWindsurf/Devin አስፈጻሚ ይጠቀማል። | | `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | የDevin Desktop `ide_version`። ተተኪ ዋጋዎች `x.y.z` ቅርጸትን መጠቀም አለባቸው፤ ልክ ያልሆኑ ዋጋዎች ወደ ተረጋገጠው ነባሪ ይመለሳሉ። | | `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | ከDesktop `ide_version` የተለየ፣ አብሮ የታሸገው Codeium/language-server `extension_version`። ተተኪ ዋጋዎች `x.y.z`ን መጠቀም አለባቸው፤ ልክ ያልሆኑ ዋጋዎች አብሮ የታሸገውን ነባሪ ይጠቀማሉ። | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | ለagentic bridge ብቻ የሚያገለግል የDevin CLI ተተኪ። አስፈጻሚው የሚቀበለው አካባቢያዊውን ACP stdio upstream ብቻ ነው። | | `DEVIN_AGENTIC_HOME` | _(ያስፈልጋል)_ | `open-sse/executors/devin-cli-agentic.ts` | ለagentic Devin ንዑስ ሂደት ፍጹም እና የተነጠለ መነሻ ማውጫ፤ ተቀባይነት ያላቸው የbridge ዱካዎች `/home/bridge` እና ለተግባሩ አካባቢያዊ የሆኑ `.sandbox` ዱካዎች ናቸው (በWindows ላይ፣ `C:\...\.sandbox\...`)። | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | bridgeው ልጅ ሂደቱን ከማቋረጡ እና ግልጽ የጊዜ ማብቂያ ከመመለሱ በፊት የአንድ Devin ACP ዙር ከፍተኛ ቆይታ። | | `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | ለተነጠለው bridge ዋናው የClaude Code ሞዴል ቅጽል። የቀጥታ harness ምሳሌውን አሁን ባለው የDevin መለያ በሚመለስ ሞዴል ይተካል። | | `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code ነባሪውን Sonnet ሲጠይቅ የሚጠቀመው የተነጠለ bridge ቅጽል። | | `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code ነባሪውን Opus ሲጠይቅ የሚጠቀመው የተነጠለ bridge ቅጽል። | | `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code ነባሪውን Haiku ሲጠይቅ የሚጠቀመው የተነጠለ bridge ቅጽል። | | `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | ለClaude Code ንዑስ ወኪሎች የሚጠቀመው የተነጠለ bridge ቅጽል። | | `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | በDevin CLI ኮታ (`GetUserStatus`) ለሚጠቀመው የCodeium seat-management API አማራጭ ተተኪ። | | `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | በአካባቢያዊው `auggie` አቅራቢ ለሚጠቀመው Augment (Auggie) CLI ባይነሪ የፍጹም-ዱካ ተተኪ። በመጀመሪያ ወደ `CLI_AUGGIE_BIN`፣ ከዚያም ወደ PATH ፍለጋ ይመለሳል። | | `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | ለAugment (Auggie) CLI ባይነሪ ዱካ የቅጽል ተተኪ (`AUGGIE_BIN` ከተፈተሸ በኋላ ይፈተሻል)። | | `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | ለአካባቢያዊው `zcode` አቅራቢ stdio ደንበኛ የሚጠቀመው ባይነሪ። በPATH ላይ ወዳለው `zcode` ይመለሳል። | | `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | በ`cliTools` በኩል ሲጀመር ወደ `zcode` ባይነሪ የሚተላለፉ ተጨማሪ ነጋሪ እሴቶች JSON ድርድር (≤16 ሕብረቁምፊዎች)። | | `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | ለZCode app-server ንዑስ ሂደት የሥራ ማውጫ። | | `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | ወደ app-server ለሚላከው የአቅራቢ መታወቂያ ተተኪ። | | `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | የZCode app-server runtime ሥር (አብሮ የታሸጉት `node` እና `zcode-server.cjs` የሚገኙበት)። | | `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | የZCode app-serverን ለማስተናገድ የሚጠቀመው Node executable። | | `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | የZCode አገልጋይን ለማስተናገድ የሚጠቀመው app-server መግቢያ ስክሪፕት። | | `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | የZCode app-server ማስጀመር እንደከሸፈ ከመቆጠሩ በፊት ያለው የማስጀመሪያ ጊዜ ገደብ (ms)። | | `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | ለZCode app-server ጥሪ የእያንዳንዱ ጥያቄ RPC ጊዜ ገደብ (ms)። | | `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | ተቆጣጣሪው ጊዜው እንዳለፈ ከመቁጠሩ በፊት የአንድ ZCode ዙር ከፍተኛ ቆይታ (ms)። | | `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | የZCode ዙር መጠናቀቅን ለመፈተሽ የምርመራ ክፍተት (ms)። | | `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | OmniRoute የHermes CLI ውቅርን የሚያነብበት/የሚጽፍበት የHermes Agent መነሻ ማውጫ። በWindows ላይ የHermes PowerShell ጫኚው ከሚያዋቅረው env var (`%LOCALAPPDATA%\hermes`) ጋር ይዛመዳል። | ### የCLI መገለጫ ራስ-ሰር ማመሳሰል እነዚህ የባህሪ ጠቋሚዎች በምርጫ የሚነቁ ሲሆኑ በነባሪ የተሰናከሉ ናቸው። እንዲሁም ከCLI Code ዳሽቦርድ ማብራት ወይም ማጥፋት ይቻላል። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------- | ------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | የአቅራቢ ሞዴል ማመሳሰል ከተከናወነ በኋላ፣ የ`~/.codex/*.config.toml` መገለጫ ፋይሎችን ከቀጥታ ካታሎጉ በራስ-ሰር እንደገና ይጽፋል። `CLI_ALLOW_CONFIG_WRITES`ን ይፈልጋል፤ ገባሪውን/ነባሪውን Codex ውቅር፣ ማረጋገጫ፣ የCodex-lb ቅንብሮችን ወይም የአቅራቢ ምርጫን ፈጽሞ አይለውጥም። | | `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | የአቅራቢ ሞዴል ማመሳሰል ከተከናወነ በኋላ፣ የ`~/.claude/profiles//settings.json` Claude Code መገለጫ ፋይሎችን ከቀጥታ ካታሎጉ በራስ-ሰር እንደገና ይጽፋል። `CLI_ALLOW_CONFIG_WRITES`ን ይፈልጋል፤ ገባሪውን/ነባሪውን Claude ውቅር፣ ማረጋገጫ ወይም የአቅራቢ ምርጫን ፈጽሞ አይለውጥም። | ### የDocker ምሳሌ ```bash # የአስተናጋጁን ባይነሪዎች ወደ ኮንቴይነሩ ይጫኑ እና ያሉበትን ቦታ ለOmniRoute ይግለጹ፦ CLI_EXTRA_PATHS=/host-cli/bin CLI_CONFIG_HOME=/host-home CLI_ALLOW_CONFIG_WRITES=true CLI_CLAUDE_BIN=/host-cli/bin/claude ``` `CLI_CONFIG_HOME` ተግባራዊ የሚሆነው ዱካው በትክክል ከአስተናጋጁ bind-mounted ሲሆን ብቻ ነው—እንደ `~/.codex:/host-home/.codex:rw` ካሉ mounts ጋር ያጣምሩት (በ `docker-compose.yml` ውስጥ ያለውን `host` መገለጫ ይመልከቱ)። በኮንቴይነሩ ተጠቃሚ መነሻ ማውጫ ውስጥም ሆነ በbind mount ውስጥ የሌለ ዱካ ችላ ይባላል፤ ምክንያቱም ወደዚያ የተጻፈው ነገር ኮንቴይነሩ እንደገና ሲፈጠር ይጣላል። ምስሉ እንደ `USER node` ይሰራል፣ ስለዚህ ያልተጫነ `/root` **ትክክለኛ** የመተኪያ ዋጋ አይደለም። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------------------- | --------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_CONTAINER` | _(ራስ-ሰር)_ | `src/shared/utils/containerEnv.ts` | የኮንቴይነር ማወቂያን እንዲበራ (`1`/`true`) ወይም እንዲጠፋ (`0`/`false`) ያስገድዳል። የራስ-ሰር ማወቂያው በማያገኛቸው runtimes ላይ ብቻ ያስፈልጋል። | | `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | ለCLI መሣሪያ የውቅር ጽሑፎች ወደ ያልተጫነ የኮንቴይነር ዱካ እንዲጻፉ ይፈቅዳል። የCLI አቻው `--allow-container-write` ነው። | ### የCLI ባይነሪ (`omniroute`) አጋዦች እነዚህ ተለዋዋጮች የ`omniroute` CLI ባይነሪውን የራሱን ባህሪ ያስተካክላሉ (ከላይ ያለውን sidecar ማወቂያ አይደለም)። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------- | ----------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_LANG` | _(ስርዓት)_ | `bin/cli/i18n.mjs` | የCLI ውጤት ቋንቋን ያስገድዳል። BCP-47 locale (ለምሳሌ `en`፣ `pt-BR`)። የስርዓቱን locale env vars (LC_ALL, LC_MESSAGES) ይተካል። | | `OMNIROUTE_SHOW_LOG` | _(አልተዋቀረም)_ | `bin/cli/runtime/processSupervisor.mjs` | ቁጥጥር በሚደረግበት ሁነታ የአገልጋዩን stdout/stderr ወደ ተርሚናሉ ለማስተላለፍ ወደ `1` ያዘጋጁ። በ`omniroute serve` ላይ ካለው `--log` ጠቋሚ ጋር ተመጣጣኝ ነው። | | `OMNIROUTE_CLI_TOKEN` | _(አልተዋቀረም)_ | `bin/cli/api.mjs` | እንደ `x-omniroute-cli-token` ራስጌ የሚካተት የማሽን ማረጋገጫ token። በተግባር 8.12 ውስጥ በራስ-ሰር ይፈጠራል። | | `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | ለCLI → አገልጋይ ጥያቄዎች በእያንዳንዱ ሙከራ የHTTP ጊዜ ገደብ (ms)። | | `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | CLIው የጊዜ ገደብ ማስጠንቀቂያ ከማተሙ በፊት የአገልጋዩን የጤና መጨረሻ ነጥብ የሚጠብቅበት ከፍተኛው ጊዜ (ms)። ለዝግተኛ cold starts (ለምሳሌ Windows) ጠቃሚ ነው። በ`--ready-timeout` በኩልም ማዋቀር ይቻላል። | | `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | በCLI ትዕዛዞች ጊዜ የድጋሚ ሙከራ/የመጠበቂያ ጊዜ ምርመራዎችን ወደ stderr ለማተም ወደ `1` ያዘጋጁ። | | `OMNIROUTE_PLUGIN_PATH` | _(አልተዋቀረም)_ | `bin/cli/plugins.mjs` | የCLI plugin ፍለጋ ብጁ ማውጫ (`omniroute-cmd-*` packages)። ካልተዋቀረ ነባሪው `~/.omniroute/plugins/` ነው። ለCLI ብቻ—በ`OMNIROUTE_PLUGINS_DIR` (ክፍል 2) የሚጠቆመው የአገልጋይ-ወገን plugin scanner ጋር ፈጽሞ አይደርስም። | --- ## 10. የውስጥ Agent እና MCP ውህደቶች | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_BASE_URL` | ራስ-ሰር ማወቅ | `open-sse/mcp-server/server.ts` | MCP/A2A መሣሪያዎች OmniRouteን ለመድረስ የሚጠቀሙበት ግልጽ URL። የlocalhost ራስ-ሰር ማወቂያን ይሽራል። | | `OMNIROUTE_API_KEY` | _(አልተዋቀረም)_ | MCP/A2A ሞጁሎች | ለውስጣዊ MCP መሣሪያ እና A2A skill ጥሪዎች የAPI ቁልፍ። | | `OMNIROUTE_API_KEY_ID` | _(አልተዋቀረም)_ | `open-sse/mcp-server/audit.ts` | የMCP ኦዲት ምዝግብ ባለቤትነት መለያ የቁልፍ ID። | | `ROUTER_API_KEY` | _(አልተዋቀረም)_ | የቆየ | ለ`OMNIROUTE_API_KEY` የቆየ ተለዋጭ ስም። | | `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | ዕለታዊ ማጽዳቱ አንድ ረድፍ ከመሰረዙ በፊት የA2A ተግባር ታሪክ በአካባቢያዊ የውሂብ ጎታው ውስጥ የሚቆይባቸው ቀናት። ካልተዋቀረ፣ ቁጥራዊ ካልሆነ ወይም `<= 0` ከሆነ ወደ `30` ይመለሳል። | | `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | ለA2A memory-hits ታዛቢነት ባህሪ የማቋረጫ መቀየሪያ። ለአንድ ተግባር የማህደረ ትውስታ መልሶ ማስታወስ ፍለጋን ሙሉ በሙሉ ለመዝለል ወደ `0` ያዋቅሩት፤ ሌላ ማንኛውም እሴት (አለመዋቀርን ጨምሮ) እንደነቃ ያቆየዋል። | | `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | ከመስመር ውጭ/አካባቢያዊ Issue Agent የተመዘገበ-ምደባ መጨረሻ ነጥብን ያነቃል። አካባቢያዊ የተመዘገበ-ምደባ የሥራ ፍሰቶችን በግልጽ ካላስኬዱ በስተቀር እንደቦዘነ ይተዉት። | | `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(አልተዋቀረም)_ | `src/lib/issueAgent/execution.ts` | ለአንድ Issue Agent የተመዘገበ-ምደባ አሂድ የጊዜ ገደብ (ms)። በውስጣዊ ከፍተኛ ወሰን ይገደባል፤ ካልተዋቀረ ወይም ልክ ካልሆነ ወደ አብሮ-የተሰራው ነባሪ ይመለሳል። | | `OMNIROUTE_CONTEXT` | _(ንቁ አውድ)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | ለ`omniroute` ትዕዛዞች የCLI የርቀት-ሁነታ አውድ/መገለጫ፤ በአካባቢያዊ የአውዶች ማከማቻ ውስጥ ያለውን ንቁ አውድ ይሽራል። ከ`--context ` ጋር ተመጣጣኝ ነው። | | `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | ለCLI አውድ ማረጋገጫዎች አማራጭ የ`keytar` OS-keychain የጀርባ አገልግሎትን ያሰናክሉ። ሲነቃ ማረጋገጫዎች በ`config.json` ሁነታ `0600` ውስጥ ይቆያሉ እና CLI የአንድ ጊዜ ወደ አማራጭ መመለስ ማስጠንቀቂያ ያወጣል፤ ሆን ተብሎ ራስ-አልባ/container አሠራር ለማከናወን የታሰበ ነው። | | `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | በMCP መሣሪያ ጥሪዎች ላይ በscope ላይ የተመሠረተ የመዳረሻ ቁጥጥርን ያስገድዳል። | | `OMNIROUTE_MCP_SCOPES` | _(ሁሉም)_ | `open-sse/mcp-server/server.ts` | በኮማ የተለዩ scopes፦ `admin`፣ `combos`፣ `health`፣ `models`፣ `routing`፣ `budget`፣ `metrics`፣ `pricing`፣ `memory`፣ `skills`። | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | manifestን ወደ ተከታታይ ቅርጽ ከመቀየር በፊት የMCP መሣሪያ መግለጫዎችን ይጨምቃል። የማንቂያ እሴቶች፦ `1`፣ `true`፣ `on`። | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | የመጨመቂያ አልጎሪዝም/መገለጫ። የማሰናከያ እሴቶች፦ `0`፣ `false`፣ `off`። | | `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | ለMCP-server ውስጣዊ የአስተዳደር ንባቦች (health፣ resilience፣ combos፣ quota፣ usage) የማቋረጫ ጊዜ በጀት (ms)። | | `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | አቅራቢን ለሚጠብቁ MCP ዝላይዎች (`route_request`፣ `web_search`፣ `web_fetch`) የማቋረጫ ጊዜ ገደብ (ms)። | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | በማህደረ ትውስታ ውስጥ የሚሸጎጡ ከፍተኛው የአካባቢያዊ ኮርፐስ ማውጫ ምሳሌዎች ብዛት (LRU፣ ለእያንዳንዱ ኢንዴክስ የተደረገ ስርወ ማውጫ አንድ)። ዝቅተኛው `1` እንዲሆን ይገደባል። | | `MODEL_SYNC_INTERVAL_HOURS` | `24` | `src/shared/services/modelSyncScheduler.ts` | የሞዴል ካታሎግ ማመሳሰያ ክፍተት በሰዓታት። | | `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | የአቅራቢ የጥያቄ መጠን ገደብ እና የኮታ ምርመራ ክፍተት። | | `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | በጅምላ ማመሳሰል ወቅት በተከታታይ የOAuth ኮታ ሰርስሮ ማውጣቶች መካከል ያለ ክፍተት (ms)፤ የላይኛው አገልግሎት በድንገት በብዙ ጥያቄዎች እንዳይጥለቀለቅ የOAuth ግንኙነቶች አንድ በአንድ ይሰረሰራሉ። `0` ከዚህ ያስወጣል (በትይዩ)። | | `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | በእያንዳንዱ ጥያቄ ቅድመ-ማጣሪያ/ክትትል መንገድ ላይ በተከታታይ ወደ ላይኛው አገልግሎት በሚደረጉ የኮታ ሰርስሮ ማውጣቶች መካከል ያለ ዝቅተኛ ክፍተት (ms)፤ በአንድ IP ላይ ያሉ ብዙ መለያዎች የላይኛውን አገልግሎት በድንገት በጥያቄዎች እንዳያጥለቀልቁ በትይዩ የሚደረጉ የአውታረ መረብ ጥሪዎችን በጊዜ ያራርቃል። ከCodex (`/wham/usage`)፣ DeepSeek፣ Bailian (በሁለቱም የሰርስሮ ማውጫ ቦታዎች)፣ OpenCode እና Crof የኮታ ሰርስሮ አውጪዎች ጋር ተያይዟል (#6009፣ #6911)። አጠቃላዩ `usage.ts::getUsageForProvider` የማሰራጫ መንገድ (github/glm/minimax/nanogpt/xai/etc.) እስካሁን አልተካተተም — በተናጠል ክትትል እየተደረገበት ነው። የመሸጎጫ ውጤቶች አይነኩም። `0` ያሰናክላል፤ በ`0..5000` ውስጥ ይገደባል። | | `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | እውነተኛ የአጠቃቀም ክስተት ከተፈጠረ በኋላ የአቅራቢ ገደቦችን ከማደስ በፊት ያለ መዘግየት (ms)፣ ይህም የላይኛው የኮታ API ፍጆታውን እንዲመዘግብ ጊዜ ይሰጣል። | | `OMNIROUTE_LOGIN_BROWSER_PATH` | ራስ-ሰር ማግኘት | `open-sse/services/adobeFireflyBrowserLogin.ts` | ለበይነተገናኝ Adobe Firefly መግቢያ እና ከማያ ገጽ ውጭ እድሳት የሚያገለግል የስርዓቱ Chrome ወይም Edge ኤክዚኪውተብል ፍጹም ዱካ። | | `ADOBE_FIREFLY_BROWSER_REFRESH` | ነቅቷል | `open-sse/services/adobeFireflySession.ts` | በመለያ የተወሰኑ Chrome CDP ክፍለ ጊዜዎችን በመጠቀም IMS እና የአሳሽ ስጋት ሁኔታን ወቅታዊ አድርጎ ያቆያል። የአሳሽ እድሳትን ለማሰናከል `0` ያዘጋጁ። | | `ADOBE_FIREFLY_SESSION_DISK` | ነቅቷል | `open-sse/services/adobeFireflySession.ts` | የተጠገኑ Adobe ክፍለ ጊዜዎችን በሂደት ዳግም ማስጀመሮች መካከል በ`DATA_DIR` ስር ያቆያል። ክፍለ ጊዜዎችን በማህደረ ትውስታ ብቻ ለማቆየት `0` ያዘጋጁ። | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | በAdobe Firefly የማመንጨት ማስገባቶች መካከል ያለ ዝቅተኛ የጊዜ ርቀት በሚሊሰከንዶች፤ `0` ርቀቱን ያሰናክላል። | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | ከእያንዳንዱ ሦስተኛ ስኬታማ የAdobe ማስገባት በኋላ ያለ ተጨማሪ የጥበቃ ጊዜ በሚሊሰከንዶች። | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | ጊዜያዊ የAdobe 408 ምላሾች ከደረሱ በኋላ ያለ መሠረታዊ የድጋሚ ሙከራ መዘግየት በሚሊሰከንዶች፤ ቢበዛ በአምስት ሙከራዎች ውስጥ ከማስገባት ጊዜ ርቀት ጋር ይጣመራል። | | `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | ሁሉንም የበስተጀርባ አገልግሎቶች (ማመሳሰል፣ የዋጋ አወሳሰን፣ የሞዴል ማደስ) ያሰናክላል። ለCI/ሙከራ ጠቃሚ ነው። | | `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(አልተዘጋጀም)_ | `src/lib/config/runtimeSettings.ts` | በራስ-ሰር የሙከራ ማወቂያ ስር የበስተጀርባ ተግባራት እንዲነቁ ያስገድዳል። የሙከራ ግምታዊ ዘዴውን ለመሻር `1` ያዘጋጁ። | | `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | የበጀት ዳግም ማስጀመሪያ ማረጋገጫ ድግግሞሽ (ms)። ዝቅተኛው `10000`። | | `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | ቅድመ-እርምጃ የግንኙነት ማቀዝቀዣ መልሶ ማግኛ ድግግሞሽ (ms)፦ ጊዜያዊ `rate_limited_until` ያለፈባቸውን ግንኙነቶች ከጥያቄው ዋና የሂደት መስመር ውጭ እንደገና ያረጋግጣል። ዝቅተኛው `5000`። | | `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | ቅድመ-እርምጃ የግንኙነት ማቀዝቀዣ መልሶ ማግኛ መርሐግብር አስኬጂውን ያሰናክሉ (`getProviderCredentials` ውስጥ ያለው ሰነፍ መልሶ ማግኛ አሁንም ተፈጻሚ ነው)። | | `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | የማመዛዘን መሸጎጫ ማጽጃ ድግግሞሽ (ms)። ዝቅተኛው `60000`። | | `OMNIROUTE_REASONING_MIN_BUDGET` | _አልተዋቀረም_ (ተሰናክሏል) | `open-sse/services/reasoningTokenBuffer.ts` | ለአስተሳሰብ ሞዴል የውጤት በጀቶች በፈቃድ የሚነቃ ዝቅተኛ ወለል፦ በ `[256, floor)` ውስጥ ያለ የጠሪ `max_tokens` ወደ ወለሉ ይጨምራል (በሞዴሉ የውጤት ገደብ የተገደበ)። አለመዋቀር = የደንበኛ በጀቶች ፈጽሞ አይሰፉም (#9507)። | | `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | ለእያንዳንዱ የነቃ የምዝግብ ማስወጫ መድረሻ ውሂብን ባዶ ለሚያደርገው የጥሪ ምዝግብ ማስወጫ ሥራ የCron አገላለጽ (UTC)። | | `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | ለውቅር ፈጣን ዳግም ጭነት የምርጫ ጥያቄ ክፍተት (ms)። ከ `1000` በታች ያለ ውድቅ ይደረጋል። | | `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(ነቅቷል)_ | `src/lib/db/apiKeys.ts` | በRedis የሚደገፈውን የAPI ቁልፍ ማረጋገጫ መሸጎጫ ለማለፍ `1` ያዋቅሩ (የDB ንባብን ያስገድዳል)። | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | በተጠቃሚ የሚተዳደሩ የRTK ፕሮጀክት ማጣሪያ ደንቦችን ያለ ጥብቅ የፊርማ ምርመራዎች እመኑ። | | `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | `lite.maxToolLength` ባልተዋቀረበት ጊዜ ለLite ቅድመ-እርምጃ የመሣሪያ ውጤት መቁረጥ የቁምፊ ገደብ። ክልል 256–1000000። የዳሽቦርድ ቅንብሩ ከዚህ env ይቀድማል። | | `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | ከፍተኛው በአንድ ጊዜ የሚሠሩ የተመሳሰሉ RTK/Caveman ሠራተኞች፤ ተጨማሪ ሥራዎች FIFOን ተከትለው ይጠብቃሉ። | | `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | የእያንዳንዱ ሥራ የጊዜ ማብቂያ በሚሊሰከንድ። ጊዜያቸው ያለፈባቸው ሠራተኞች ይቋረጣሉ፣ ጥያቄውም ሳይቀየር እንዲያልፍ ይደረጋል። | | `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | ጥቅም ላይ ያልዋለ የማመቂያ ሠራተኛ ከመቋረጡ በፊት የሚቆይበት የሥራ-ፈት ጊዜ በሚሊሰከንድ። | | `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | የT02 የተደራረበ ፓይፕላይን ለእያንዳንዱ ሞተር የወረዳ ቆራጭ ዋና መቀየሪያ። **በፈቃድ የሚነቃ (በነባሪ ጠፍቷል)** — ሲበራ፣ በተደጋጋሚ በጥያቄዎች መካከል ስህተት የሚጥል ሞተር ለማቀዝቀዣ ጊዜ ይዘለላል (fail-open)፤ ሲጠፋ = በባይት ደረጃ ተመሳሳይ የቀድሞ ባህሪ። | | `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | የአንድ ሞተር ወረዳ ቆራጭ ከመከፈቱ በፊት በተለያዩ ጥያቄዎች ላይ የሚከሰቱ ተከታታይ አለመሳካቶች። | | `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | ከፊል-ክፍት ሙከራ ከመደረጉ በፊት የተከፈተ ሞተር ተዘሎ የሚቆይበት ጊዜ በሚሊሰከንድ። | | `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | የT08/H8 CCR ሰርስሮ-ማውጣት ግብረመልስ ማሳደጊያ፦ እያንዳንዱ ቀዳሚ የተከማቸ ብሎክ ሰርስሮ ማውጣት ውጤታማ `minChars`-ን በመስመራዊ ሁኔታ ያሳድጋል (በተደጋጋሚ ሰርስሮ የሚወጣ ይዘት ያነሰ ይጨመቃል፤ `>=3` ሰርስሮ ማውጣቶች = ፈጽሞ አይጨመቅም)። `1` ማሳደጊያውን ያሰናክላል (በወሰን እሴቱ ላይ ብቻ ሁለትዮሽ መዝለል)። | | `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | CCR ዘላቂ የብሎክ ማከማቻ (#9061)። አንድ ብሎክ ከLRU ማስወገድ፣ TTL፣ ዳግም ማስጀመር ወይም የማምጣት ጥያቄ በሌላ instance ላይ ከማረፍ በኋላም እንዲቆይ፣ በማህደረ ትውስታ ያለውን ማከማቻ በSQLite ይደግፋል። ብሎኮችን በማህደረ ትውስታ ውስጥ ብቻ ለማቆየት `false` ያዘጋጁ። ከ512KB በላይ የሆኑ ብሎኮች እና cloud runtimes ምንም ቢሆን በማህደረ ትውስታ ብቻ ይቆያሉ። | | `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | በT08/H5 አጠቃቀም ምልከታ ላይ የተመሠረተ prefix freeze ዋና መቀየሪያ። **በምርጫ የሚነቃ (በነባሪ ጠፍቷል)** — ሲበራ፣ ከመጠን ገደቡ `>=` ጊዜ የታየ system prompt እንደ የተረጋጋ መሸጎጫ የሚችል prefix ይቆጠራል፤ እንዲሁም static cache heuristic ላላወቃቸው providers እንኳን ከcompression ይጠበቃል (freeze የሚያደርገው _መጠበቅ_ ብቻ ነው፣ ፈጽሞ አይቀይርም)። | | `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | አንድ system prompt እንደ frozen stable prefix ከመቆጠሩ በፊት የሚደረጉ ምልከታዎች ብዛት። | | `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | ከመጀመሪያው ማዋቀር በኋላ በbootstrap script `true` ይደረጋል። የsetup wizard ታይነትን ይቆጣጠራል። | | `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | የማምለጫ አማራጭ፦ request body የAntigravity project fieldን እንዲተካ ፍቀድ። | | `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | የGoogle One AI credits ፖሊሲ፦ `off` ፈጽሞ credits አያስገባም፣ `retry` ብቁ የሆነ quota 429 ከተከሰተ በኋላ አንድ ጊዜ ያስገባል፣ እና `always` በመጀመሪያው request ላይ ያስገባል። | | `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | upstream እውነተኛ signaturesን አሻፈረኝ ሲል፣ የAntigravity request translator ጥብቅ የCLI request-signature validationን እንዲዘል ፍቀድ (debug/antiquated-CLI mode)። ዜሮ ያልሆነ እሴት bypassን ያነቃል። | | `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | በራስ-ሰር ለሚገኘው local login import የAntigravity CLI (agy) token-file pathን ተካ። | ### OAuth CLI ድልድይ (ውስጣዊ) | ተለዋዋጭ | ነባሪ | ምንጭ ፋይል | መግለጫ | | ------------------- | ----------- | ------------------------------- | --------------------------------------- | | `OMNIROUTE_SERVER` | በራስ-ሰር ማግኘት | `src/lib/oauth/config/index.ts` | ለCLI↔OmniRoute auth bridge የserver URL። | | `OMNIROUTE_TOKEN` | _(አልተዘጋጀም)_ | `src/lib/oauth/config/index.ts` | ለCLI bridge የauth token። | | `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | ለCLI bridge sessions የuser ID። | | `SERVER_URL` | _(አልተዘጋጀም)_ | `src/lib/oauth/config/index.ts` | የ`OMNIROUTE_SERVER` የቆየ alias። | | `CLI_TOKEN` | _(አልተዘጋጀም)_ | `src/lib/oauth/config/index.ts` | የ`OMNIROUTE_TOKEN` የቆየ alias። | | `CLI_USER_ID` | _(አልተዘጋጀም)_ | `src/lib/oauth/config/index.ts` | የ`OMNIROUTE_USER_ID` የቆየ alias። | --- ## 11. የOAuth አቅራቢ ማረጋገጫ መረጃዎች ለ**localhost ልማት** አብሮገነብ ማረጋገጫ መረጃዎች። ለርቀት ስምሪቶች፣ በእያንዳንዱ አቅራቢ የገንቢ ኮንሶል ላይ የራስዎን ይመዝግቡ። | ተለዋዋጭ | አቅራቢ | ማስታወሻዎች | | ------------------------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | ይፋዊ ደንበኛ — ሚስጥር አያስፈልግም። | | `CLAUDE_CODE_REDIRECT_URI` | Claude Code | የማዘዋወሪያ URIን ይቀይሩ። ነባሪ፦ `https://platform.claude.com/oauth/code/callback` | | `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | ይፋዊ ደንበኛ። | | `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | ተዛማጅ `_SECRET` ያስፈልገዋል። | | `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — | | `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | ይፋዊ ደንበኛ። | | `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | ለይፋዊው Muse CLI የመሣሪያ ፍሰት ደንበኛ መታወቂያ አማራጭ መቀየሪያ። አብሮገነቡን ይፋዊ ደንበኛ ለመጠቀም ሳይዋቀር ይተዉት። | | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | ተዛማጅ `_SECRET` ያስፈልገዋል። | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | ይፋዊ ደንበኛ። | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | ለGitHub Enterprise Copilot OAuth ደንበኛ መታወቂያ አማራጭ መቀየሪያ። ሳይዋቀር ሲቀር ወደ `GITHUB_OAUTH_CLIENT_ID` ይፋዊ ነባሪ ይመለሳል። | | `COPILOT_INTEGRATION_ID` | GitHub Copilot | በ`Copilot-Integration-Id` እና `Editor-Plugin-Version` ራስጌዎች ውስጥ ለሚላከው የGitHub Copilot ደንበኛ ውህደት መታወቂያ አማራጭ መቀየሪያ። ነባሪው `copilot-developer-cli` ነው። | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | በእያንዳንዱ ግንኙነት የሚያገለግል ማረጋገጫ መረጃ ከሌለ፣ በ`open-sse/executors/devin-cli.ts` ጥቅም ላይ የሚውል ተተኪ API ቁልፍ። አማራጭ ነው። | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | ወደ Devin CLI ሁለትዮሽ (`devin`) ብጁ ዱካ። በ`open-sse/executors/devin-cli.ts` ይፈታል። | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | ለGitLab Duo የOAuth ደንበኛ መታወቂያ። በ`https://gitlab.com/-/profile/applications` ላይ የማዘዋወሪያ URI `/callback` እና የፍቃድ ወሰኖች `api, read_user, openid, profile, email` ያሉት መተግበሪያ ይመዝግቡ። ወደ `GITLAB_OAUTH_CLIENT_ID` ይመለሳል። | | `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | ለGitLab Duo የOAuth ደንበኛ ሚስጥር። አማራጭ ነው — የPKCE ፍሰት ሚስጥር አያስፈልገውም። ወደ `GITLAB_OAUTH_CLIENT_SECRET` ይመለሳል። | | `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | የGitLab መሠረታዊ URLን ይቀይሩ (በራስ የሚስተናገድ GitLab)። ነባሪው `https://gitlab.com` ነው። ወደ `GITLAB_BASE_URL` ይመለሳል። | | `GITLAB_BASE_URL` | GitLab Duo (v3.8) | ለ`GITLAB_DUO_BASE_URL` የቆየ ተተኪ። የ`_DUO_` ልዩነቱ ሳይዋቀር ሲቀር ጥቅም ላይ ይውላል። | | `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | በ`src/lib/oauth/constants/oauth.ts` ጥቅም ላይ ለሚውለው `GITLAB_DUO_OAUTH_CLIENT_ID` የቆየ ተተኪ። | | `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | በ`src/lib/oauth/constants/oauth.ts` ጥቅም ላይ ለሚውለው `GITLAB_DUO_OAUTH_CLIENT_SECRET` የቆየ ተተኪ። | | `QODER_OAUTH_CLIENT_SECRET` | Qoder | — | | `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Qoder OAuthን ለማንቃት ያዋቅሩት። | | `QODER_OAUTH_TOKEN_URL` | Qoder | — | | `QODER_OAUTH_USERINFO_URL` | Qoder | — | | `QODER_OAUTH_CLIENT_ID` | Qoder | — | | `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | ቀጥተኛ የAPI ቁልፍ ተተኪ (OAuthን ያልፋል)። | | `QODER_CLI_WORKSPACE` | Qoder | ለQoder CLI የWorkspace ID። | | `OMNIROUTE_QODER_WORKSPACE` | Qoder | የ`QODER_CLI_WORKSPACE` ተለዋጭ ስም። | | `QODER_CLI_CONFIG_DIR` | Qoder | የQoder CLI ውቅር ማውጫን ይተኩ (የተነጠለ PAT ክፍለ-ጊዜ፣ የአሳሽ መግቢያን እንዳያበላሽ ይከላከላል)። | | `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | በ`/api/chat` ላይ እንደ `validated` የሚላክ የፊት-ገጽ `tk` ቶከን። Blackbox የቶከን ማዛመድን ሲያስገድድ ያስፈልጋል፤ ካልሆነ OmniRoute ወደ የዘፈቀደ UUID ይመለሳል። ችግር #2252ን ይመልከቱ። | | `VISION_BRIDGE_BASE_URL` | Vision Bridge መከላከያ | Anthropic ላልሆኑ የvision-bridge ጥሪዎች OpenAI-ተኳሃኝ መሠረታዊ URL። በነባሪነት የቆየውን OpenAI URL env ወይም api.openai.com ይጠቀማል። ወደ OmniRoute የ`/v1` ራስ-ዙር ወይም ማንኛውም OpenAI-ተኳሃኝ endpoint (Gemini OpenAI-compat፣ OpenRouter) ያመልክቱ። ችግር #2232። URLው የOmniRoute የራሱ `/v1` ሲሆን፣ የመግለጫ ንዑስ-ጥያቄው `x-omniroute-admission-bypass: internal`ን ይልካል፣ እንዲሁም `REQUIRE_API_KEY=true` ማሰማሪያዎች እንዲሠሩ በተወሰነው የራስ-ዙር ማረጋገጫ (በአካባቢያዊ ሁነታ የ`sk_omniroute` sentinel፣ ወይም `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) ማንነትን ያረጋግጣል። | | `VISION_BRIDGE_API_KEY` | Vision Bridge መከላከያ | ከላይ ላለው URL የAPI ቁልፍ። Anthropic ላልሆኑ የvision-bridge ጥሪዎች የየአቅራቢውን OpenAI / Google env ተለዋዋጮች ይተካል። የAnthropic ሞዴሎች የተለየውን የAnthropic ቁልፍ መንገድ ይጠብቃሉ። ችግር #2232። | | `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge መከላከያ | «ምንም ጥቅም ላይ የሚውል እጩ የለም» የሚለው የማዞሪያ ውጤት በms ምን ያህል ጊዜ እንደሚሸጎጥ (ነባሪ `30000`)። ልክ ያልሆኑ ወይም አሉታዊ እሴቶች ወደ ነባሪው ይመለሳሉ፤ `0` አሉታዊውን መሸጎጫ ያሰናክላል። ምንጭ፦ `src/lib/guardrails/visionBridgeRouter.ts`። | > [!WARNING] > > 1. ወደ [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) ይሂዱ > 2. OAuth 2.0 Client ID ይፍጠሩ (ዓይነት፦ "Web application") > 3. የአገልጋይዎን URL እንደ Authorized redirect URI ያክሉ > 4. በ`.env` ውስጥ ያሉትን የማረጋገጫ እሴቶች ይተኩ። --- ## 12. የአቅራቢ User-Agent መተኪያዎች ወደ እያንዳንዱ የላይኛው ደረጃ አቅራቢ የሚላከውን `User-Agent` ራስጌ ይተኩ። ይህ በአስፈጻሚው መሠረታዊ ክፍል በሂደት ጊዜ በተለዋዋጭ ሁኔታ ይወሰናል፦ ``` process.env[`${PROVIDER_ID}_USER_AGENT`] ``` > **ምንጭ፦** `open-sse/executors/base.ts` → `buildHeaders()` | ተለዋዋጭ | ነባሪ እሴት | መቼ መዘመን እንዳለበት | | -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CLAUDE_USER_AGENT` | `claude-cli/2.1.258 (external, cli)` | Anthropic አዲስ የCLI ስሪት ሲለቅ | | `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | በሁለቱም ወደ Anthropic በሚያመሩ መንገዶች (የመነሻ OAuth እና CLIProxyAPI) የሦስተኛ ወገን harness መሣሪያ ስሞችን ሳይቀይሩ ወደ Anthropic ለማስተላለፍ ወደ `1`/`true` ያዘጋጁት። በነባሪነት አስፈጻሚው Claude-Code ያልሆኑ የመሣሪያ ስሞችን በወጥነት ተለዋጭ ስም ይሰጣቸዋል (ተዛማጅ ሲኖር የClaude Code መደበኛ ማዛመድን፣ ካልሆነ PascalCaseን ይጠቀማል)፣ እንዲሁም `_toolNameMap`ን በመጠቀም በምላሹ ላይ ወደ መጀመሪያ ስማቸው ይመልሳቸዋል፤ በዚህም snake_case መሣሪያዎች ያሏቸው harnesses በዲጂታል አሻራ እንደታወቁ የሦስተኛ ወገን ደንበኞች ተብለው ውድቅ አይደረጉም። ለማረም ብቻ። | | `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | OpenAI የCodex CLIን ሲያዘምን | | `CODEX_CLIENT_VERSION` | `0.155.0` | የCodex ደንበኛ ስሪትን ከሙሉው UA ሕብረቁምፊ በተናጠል ይተኩ | | `CLAUDE_CODE_CLIENT_VERSION` | `2.1.258` | የሚታወጀውን የClaude Code ስሪት ከ`CLAUDE_USER_AGENT` በተናጠል ይተኩ። Anthropic አንዳንድ ሞዴሎችን በዚህ እሴት መሠረት ይገድባል (#12417)። | | `GITHUB_COPILOT_CLI_VERSION` | `1.0.81-6` | የሚታወጀውን የCopilot CLI ስሪት ከ`GITHUB_USER_AGENT` በተናጠል ይተኩ | | `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | GitHub Copilot Chat ሲዘምን | | `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | Antigravity IDE ሲዘምን | | `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | Kiro IDE ሲዘምን | | `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | የKiro ማኅበራዊ መሣሪያ-ኮድ `clientId`ን (ይፋዊ መታወቂያ) ይተኩ | | `KIRO_VERIFY_FULL_CRC` | `false` | በፈቃድ የሚነቃ፦ በKiro ክስተት ዥረት ላይ ለእያንዳንዱ ፍሬም ሙሉ የመልዕክት CRC ማረጋገጫ (የተበላሹ ዥረቶችን ለማረም) | | `QODER_USER_AGENT` | `Qoder-Cli` | Qoder CLI ሲዘምን | | `CURSOR_USER_AGENT` | `Cursor/3.3` | Cursor ሲዘምን | > [!TIP] > `{PROVIDER_ID}_USER_AGENT` የሚለውን ንድፍ በመጠቀም ለ**ማንኛውም** አቅራቢ የUser-Agent መተኪያዎችን ማከል ይችላሉ። አስፈጻሚው የenv var ስምን በተለዋዋጭ ሁኔታ ይገነባል። --- ## 13. የCLI አሻራ ተኳኋኝነት ሲነቃ OmniRoute ከኦፊሴላዊ CLI መሣሪያዎች ትክክለኛ ፊርማ ጋር እንዲዛመዱ የHTTP ራስጌዎችን እና የJSON ይዘት መስኮችን እንደገና ያደራጃል። ይህ የፕሮክሲ IPዎን እንደተጠበቀ በማቆየት መለያዎ ምልክት የማድረግ አደጋን ይቀንሳል። **ምንጭ፦** `open-sse/config/cliFingerprints.ts`፣ `open-sse/executors/base.ts` ### ለእያንዳንዱ አቅራቢ | ተለዋዋጭ | ማግበሪያ | ውጤት | | ------------------------ | ----- | ------------------------------ | | `CLI_COMPAT_CODEX` | `=1` | የCodex CLI ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_CLAUDE` | `=1` | የClaude Code ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_GITHUB` | `=1` | የGitHub Copilot ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_ANTIGRAVITY` | `=1` | የAntigravity ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_CURSOR` | `=1` | የCursor ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_KIMI_CODING` | `=1` | የKimi Coding ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_KILOCODE` | `=1` | የKilo Code ጥያቄ ፊርማን ይመስላል | | `CLI_COMPAT_CLINE` | `=1` | የCline ጥያቄ ፊርማን ይመስላል | ### አጠቃላይ | ተለዋዋጭ | ማግበሪያ | ውጤት | | ---------------- | ----- | ----------------------------------------- | | `CLI_COMPAT_ALL` | `=1` | ለ**ሁሉም** አቅራቢዎች የአሻራ ተኳኋኝነትን በአንድ ጊዜ ያንቁ። | ### የKimi Coding CLI ማንነት መሻሪያዎች | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------- | -------------- | ---------------------------------------- | ---------------------------------------------------------- | | `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | በOAuth/API ጥሪዎች ወቅት የሚላከውን የKimi CLI ስሪት ይተኩ። | | `KIMI_CODING_DEVICE_ID` | _(የተመዘገበ ነባሪ)_ | `src/lib/oauth/providers/kimi-coding.ts` | በደንበኛ ራስጌዎች ውስጥ ጥቅም ላይ የሚውለውን የተመዘገበ የKimi መሣሪያ መታወቂያ ይተኩ። | > [!NOTE] > ይህ ባህሪ ከUser-Agent መሻሪያዎች (§12) ጋር አብሮ ይሠራል። የአሻራ ስርዓቱ የራስጌ ቅደም ተከተልን እና የይዘት መስኮች ቅደም ተከተልን ሲያስተናግድ፣ የUser-Agent መሻሪያዎች ደግሞ የተወሰነውን UA ሕብረቁምፊ ያስተናግዳሉ። ሁለቱም በተናጥል ሊነቁ ይችላሉ። --- ## 14. የAPI ቁልፍ አቅራቢዎች ቀጥተኛ ማረጋገጫ ለሚጠቀሙ አቅራቢዎች የAPI ቁልፎች። **ተመራጭ ማዋቀር፦** Dashboard → Providers → Add API Key። በአካባቢ ተለዋዋጮች በኩል ማዋቀር ለDocker ወይም ግራፊክ በይነገጽ ለሌላቸው ማሰማራቶች አማራጭ ነው። የሚታወቅ ንድፍ፦ `{PROVIDER_ID}_API_KEY` | ተለዋዋጭ | አቅራቢ | | ------------------ | -------------------------------------------------------- | | `DEEPSEEK_API_KEY` | DeepSeek | | `NVIDIA_API_KEY` | NVIDIA NIM | | `JINA_AI_API_KEY` | Jina AI (Foundation API + Reader የመጠባበቂያ አማራጭ) | | `JINA_API_KEY` | Jina AI (ለ`JINA_AI_API_KEY` ተለዋጭ ስም) | | `GEMINI_API_KEY` | Gemini (Google AI Studio) embeddings + የውይይት መጠባበቂያ አማራጭ | | `GOOGLE_API_KEY` | Gemini (ለ`GEMINI_API_KEY` ተለዋጭ ስም) | > [!NOTE] > የGroq፣ xAI፣ Mistral፣ Perplexity፣ Together AI፣ Fireworks፣ Cerebras፣ Cohere፣ Nebius እና Qianfan ቋሚ `${PROVIDER}_API_KEY` ግቤቶች በv3.8.0 ተወግደዋል፤ ምክንያቱም የአሂድ ጊዜ ስርዓቱ ከአሁን በኋላ አያነባቸውም — እነዚያ አቅራቢዎች Dashboard / `data/provider-credentials.json` / የተመሰጠረው DB ላይ ብቻ ይመረኮዛሉ። የፍልሰት መንገዱን ለማየት በዚህ ሰነድ ግርጌ ያለውን _ኦዲት፦ የተወገዱ / ጥቅም ላይ የማይውሉ ተለዋዋጮች_ ክፍል ይመልከቱ። > [!TIP] > በDashboard በኩል የተዋቀሩ ቁልፎች በSQLite ውስጥ ተመስጥረው ይከማቻሉ እና ከአካባቢ ተለዋዋጮች ቅድሚያ ያገኛሉ። > > **Jina፦** የdashboard `jina-ai` (ወይም የጋራ `jina-reader`) ግንኙነት ሲኖር፣ `jina-ai/…` embeddings፣ rerank፣ classify፣ segment እና `jina-search` የክላስተር env ቁልፍን **አያስከፍሉም** — `getProviderCredentials` መጀመሪያ የሚሞላ ነው። `JINA_AI_API_KEY` / `JINA_API_KEY` ጥቅም ላይ የሚውሉት ጠቃሚ የdashboard ቁልፍ ከሌለ ብቻ ነው። የጥሪ ምዝግቦች የenv መጠባበቂያ አማራጩን `connection_id=env:JINA_AI_API_KEY` በማለት ይመድባሉ። የReader ካርድ (`jina-reader`፣ `r.jina.ai`) `/v1/embeddings` ወይም `/v1/rerank`ን ፈጽሞ አያቀርብም። > > **Gemini፦** `gemini/gemini-embedding-2` (ተለዋጭ ስም `google/gemini-embedding-2`) መጀመሪያ የdashboard `gemini` ግንኙነትን ይጠቀማል። `GEMINI_API_KEY` / `GOOGLE_API_KEY` ጥቅም ላይ የሚውሉት ጠቃሚ የdashboard ቁልፍ ከሌለ ብቻ ነው። የጥሪ ምዝግቦች የenv መጠባበቂያ አማራጩን `connection_id=env:GEMINI_API_KEY` በማለት ይመድባሉ። የቤተኛ multimodal ትራፊክ በ`:embedContent` / `:batchEmbedContents` ላይ `x-goog-api-key`ን ይጠቀማል — N የOpenAI `input` ንጥሎች N vectors ይሆናሉ። --- ## 15. የጊዜ ገደብ ቅንብሮች ሁሉም እሴቶች በ**ሚሊሰከንድ** ናቸው። የተማከለ መፍቻው በ`src/shared/utils/runtimeTimeouts.ts` ውስጥ ይገኛል። ### የጊዜ ገደብ ተዋረድ ``` REQUEST_TIMEOUT_MS (አጠቃላይ መሻሪያ) ├─→ FETCH_TIMEOUT_MS (ወደ ውጫዊ አቅራቢዎች የሚደረጉ ጥሪዎች፣ ነባሪ፦ 600000) │ ├─→ FETCH_HEADERS_TIMEOUT_MS (ከFETCH_TIMEOUT_MS ይወርሳል) │ ├─→ FETCH_BODY_TIMEOUT_MS (ከFETCH_TIMEOUT_MS ይወርሳል) │ ├─→ TLS_CLIENT_TIMEOUT_MS (ከFETCH_TIMEOUT_MS ይወርሳል) │ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (ገለልተኛ፣ ነባሪ፦ 10000) │ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (ገለልተኛ፣ ነባሪ፦ 15000) │ ├── FETCH_CONNECT_TIMEOUT_MS (ገለልተኛ፣ ነባሪ፦ 30000) │ └── FETCH_KEEPALIVE_TIMEOUT_MS (ገለልተኛ፣ ነባሪ፦ 4000) ├─→ STREAM_IDLE_TIMEOUT_MS (ከREQUEST_TIMEOUT_MS ይወርሳል፣ ነባሪ፦ 600000) ├─→ STREAM_ACTIVE_TIMEOUT_MS (ገለልተኛ፣ ነባሪ፦ 1260000፤ 0 ያሰናክለዋል) ├─→ STREAM_READINESS_TIMEOUT_MS (ከREQUEST_TIMEOUT_MS ይወርሳል፣ ነባሪ፦ 80000) ├─→ STREAM_READINESS_MAX_TIMEOUT_MS (ተለዋዋጭ የዝግጁነት ማራዘሚያዎችን ይገድባል፣ ነባሪ፦ 180000) └─→ API_BRIDGE_PROXY_TIMEOUT_MS (ከREQUEST_TIMEOUT_MS ይወርሳል፣ ነባሪ፦ 30000) ├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (የተዋጣ፣ ነባሪ፦ 300000) ├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (ነባሪ፦ 60000) ├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (ነባሪ፦ 5000) └── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (ነባሪ፦ 0 = የተሰናከለ) ``` | ተለዋዋጭ | ነባሪ | መግለጫ | | ----------------------------------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | _(አልተዋቀረም)_ | አጠቃላይ አቋራጭ — የ`FETCH_TIMEOUT_MS` እና `STREAM_IDLE_TIMEOUT_MS` ነባሪዎችን ይሽራል። | | `FETCH_TIMEOUT_MS` | `600000` | ወደ ላይኛው አቅራቢ ለሚደረጉ ጥሪዎች አጠቃላይ የHTTP ጥያቄ ጊዜ ገደብ። | | `STREAM_IDLE_TIMEOUT_MS` | `600000` | ከማቋረጥ በፊት በጥሬ የላይኛው ምንጭ ባይቶች መካከል የሚፈቀደው ከፍተኛው የዝምታ ጊዜ። የተራዘመ አስተሳሰብ ሞዴሎች ከ90 ሰከንድ በላይ የሚቆሙት አልፎ አልፎ ነው። | | `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | ከፍተኛው አጠቃላይ የንቁ SSE ዥረት የሕይወት ጊዜ፤ በላይኛው ምንጭ ባይቶች ምክንያት ፈጽሞ ዳግም አይጀመርም፣ እንዲሁም ከ`REQUEST_TIMEOUT_MS` ነጻ ነው። በመዝገቡ ውስጥ ካለው ትልቁ የእያንዳንዱ ሞዴል `timeoutMs` (1200000፣ Codex) ላይ የ60000 ትርፍ በመጨመር የተወሰነ ስለሆነ፣ ሙሉ በጀቱን እንዲጠቀም የተፈቀደለት ሞዴል መልስ እየሰጠ በመሀል ፈጽሞ አይቋረጥም። ለማሰናከል `0` ያዋቅሩ። | | `OMNIROUTE_SSE_COMMENTS` | _(ተሰናክሏል)_ | OmniRoute የSSE `:` የአስተያየት መስመሮችን (ለምሳሌ የ`: keepalive` ምት እና `x-omniroute-*` የሜታዳታ መጨረሻ አመልካቾችን) ማውጣት ይችል እንደሆነ። ጥብቅ OpenAI-ተኳዃኝ ደንበኞች በእያንዳንዱ SSE መስመር ላይ JSON.parse በማድረግ በ`:` አስተያየቶች ላይ ስለሚበላሹ፣ በነባሪ ተሰናክሏል (#10524)፤ `data:` ምቶች ግን አይነኩም። እንደገና ለማካተት `on`/`true`/`1`/`yes` ያዋቅሩ። በ`open-sse/utils/sseHeartbeat.ts` ጥቅም ላይ ይውላል። | | `STREAM_READINESS_TIMEOUT_MS` | `80000` | የመጀመሪያውን ፒንግ ያልሆነ SSE ክስተት ለመቀበል የሚፈቀደው ጊዜ። `REQUEST_TIMEOUT_MS` ሲዋቀር ዋጋውን ይወርሳል። | | `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | ለትላልቅ፣ ብዙ መሣሪያ ለሚጠቀሙ ወይም ከፍተኛ አመክንዮ ለሚፈልጉ የዥረት ጥያቄዎች ከፍተኛው የሚላመድ የመጀመሪያ ክስተት ዝግጁነት ጊዜ። | | `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | ለ`/goal` ግምታዊ ዘዴ ድንገተኛ ማሰናከያ። ማወቂያውን ሙሉ በሙሉ ለማሰናከል `false`/`0`/`off` ያዋቅሩ — የዝግጁነት ጊዜ ገደቦች እና የዥረት መልሶ ማግኛ በጥያቄ አካል/ራስጌዎች ፈጽሞ ከፍ አይደረጉም፤ ይህም በደንበኛ የሚቆጣጠር የጊዜ ገደብ ማጉላትን ይቀንሳል። | | `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | ለተገኙ የ`/goal` ወኪል አሂዶች ወይም በ`x-omniroute-agent-goal` ለተገደዱ ጥያቄዎች ከፍተኛው የመጀመሪያ ክስተት ዝግጁነት ጊዜ። | | `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | ለተገኙ የ`/goal` ወኪል አሂዶች ቀደምት የዥረት መልሶ ማግኛን በራስ-ሰር ያንቁ። ለግቡ የተለየውን የመርጦ መግባት ለማሰናከል `false`/`0`/`off` ያዋቅሩ። ይህ ከኦፕሬተሩ ነባሪ በተጨማሪ መልሶ ማግኛን ማከል ብቻ ይችላል — ግልጽ የ`STREAM_RECOVERY_ENABLED`/DB ቅንብሮች መርጦ መውጣትን ፈጽሞ አይሽርም። | | `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | የOpenAI SDK `responses.stream()` በ502 እንዲበላሽ የሚያደርጉ መደበኛ ያልሆኑ `codex.*` SSE ክስተቶችን (ለምሳሌ `codex.rate_limits`) ያስወግዱ። በነባሪ ነቅቷል (#11014)። እነሱን ለማስተላለፍ `0`/`false`/`no`/`off` ያዋቅሩ። | | `OMNIROUTE_CODEX_APPSERVER_WS` | _(አልተዋቀረም)_ | በመርጦ መግባት የሚነቃ የCodex app-server ማጓጓዣ። የአካባቢያዊ `codex app-server` sidecar WebSocket መጨረሻ ነጥብ (`ws://`/`wss://`)። ከቶከን ጋር ሲዋቀር፣ የCodex ጥያቄዎች በHTTP Responses API ፋንታ በJSON-RPC በኩል ወደ sidecar ይመራሉ። እንዲሁም በእያንዳንዱ ግንኙነት በ`providerSpecificData.codexAppServerUrl` በኩል ሊዋቀር ይችላል። በ`open-sse/executors/codex/appServerConfig.ts` ጥቅም ላይ ይውላል። | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(አልተዋቀረም)_ | ለapp-server የሚቀርብ የመስመር ውስጥ ችሎታ/bearer ቶከን። የእያንዳንዱ ግንኙነት መሻሪያ፦ `providerSpecificData.codexAppServerToken`። | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(አልተዋቀረም)_ | የapp-server ችሎታ ቶከንን የያዘ ፋይል ዱካ (ከ`codex app-server --ws-token-file`)። `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` ሳይዋቀር ሲቀር ጥቅም ላይ ይውላል። የእያንዳንዱ ግንኙነት መሻሪያ፦ `providerSpecificData.codexAppServerTokenFile`። | | `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | የapp-server ተራ የሚሠራበት የሥራ ማውጫ። የእያንዳንዱ ግንኙነት መሻሪያ፦ `providerSpecificData.codexAppServerCwd`። | | `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(አልተዋቀረም)_ | ወደ app-server ተራ የሚተላለፍ የማጽደቅ ፖሊሲ (ለምሳሌ `never`፣ `on-request`)። የእያንዳንዱ ግንኙነት መሻሪያ፦ `providerSpecificData.codexAppServerApprovalPolicy`። | | `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(አልተዋቀረም)_ | ወደ app-server ተራ የሚተላለፍ የsandbox ፖሊሲ (ለምሳሌ `read-only`፣ `workspace-write`፣ `danger-full-access`)። ሳይዋቀር ሲቀር executor በነባሪ `workspace-write` ይጠቀማል (የተጠናከረ፤ ከዚህ በፊት `danger-full-access`)። የእያንዳንዱ ግንኙነት መሻሪያ፦ `providerSpecificData.codexAppServerSandbox`። | | `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | የapp-server የራሱን የማጽደቅ ጥያቄዎች (በአስተናጋጁ ላይ የትእዛዝ/ፋይል/ፈቃድ አፈጻጸም) በራስ-ሰር ያጽድቁ። በነባሪ ጠፍቷል — ጥያቄዎች በራስ-ሰር ውድቅ ይደረጋሉ፤ የharness መሣሪያ ጥሪዎች አይነኩም (በተለየው `item/tool/call` passthrough በኩል ይጓዛሉ)። `true`/`1`/`yes` ይቀበላል። የእያንዳንዱ ግንኙነት መሻሪያ፦ `providerSpecificData.codexAppServerAutoApprove`። | | `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | የምላሽ ራስጌዎችን ለመቀበል የሚፈቀደው ጊዜ። | | `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 ሰከንድ) | ለእያንዳንዱ ቀጥተኛ ፕሮክሲ-አልባ ሙከራ የምላሽ መጀመርን ለመጠበቅ የሚፈቀደው ከፍተኛ ጊዜ (ms)። ጊዜው ካለፈ በአዲስ socket ላይ አንድ ጊዜ እንደገና ይሞከራል፤ ገደቡን ለማሰናከል እና የቀድሞውን ባህሪ ለማስቀጠል `0` ያዘጋጁ። | | `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 ደቂቃ) | ከላይ ያለው የpooled-attempt ምላሽ-መጀመሪያ ጊዜ ካለፈ በኋላ፣ በአዲስ socket ለሚደረገው RETRY ሙከራ ከፍተኛው ገደብ (ms) (#13703)። ይህ ተጠሪው አስቀድሞ የራሱን የጊዜ ገደብ ምልክት (የተፈታው connection/model/provider/`FETCH_TIMEOUT_MS` cascade) ሲያያይዝ ብቻ ተግባራዊ ይሆናል፤ ያ ምልክት እውነተኛው ገደብ ሲሆን በታሰበው መንገድ ቀድሞ ይነሳል፣ ስለዚህ ይህ ቋሚ ጣሪያ ሳይሆን ሰፊ የመጠባበቂያ ጥበቃ ነው — ያለዚህ፣ ዳግም ሙከራው እንደ pooled attempt ተመሳሳዩን አጭር `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` የጊዜ መስኮት እንደገና ይጠቀም ነበር፣ እና ጤናማ ነገር ግን ዝግተኛ-TTFB ያላቸው reasoning models 504 እንዲመልሱ ያደርግ ነበር። ከላይ ካለው ቋሚ ዝቅተኛ ወለል በታች ፈጽሞ አይፈቀድም፤ ተጠሪው ምንም የጊዜ ገደብ ምልክት ካላቀረበ፣ ዳግም ሙከራው ቋሚውን ዝቅተኛ ወለል ሳይቀይር ይጠብቃል። | | `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | ሙሉውን የምላሽ body ለመቀበል የሚፈቀደው ጊዜ። | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | የTCP ግንኙነት ማቋቋሚያ የጊዜ ገደብ። | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | የkeep-alive socket የስራ-ፈት ጊዜ ገደብ። | | `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | የTLS fingerprint proxy (wreq-js) የጊዜ ገደብ። | | `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | በተለይ በwreq-js TLS-fingerprint transport body ላይ የመጀመሪያው-byte መድረሻ ጊዜን ይገድባል፤ headers እንደደረሱ ወዲያውኑ ስለሚፈታ፣ `TLS_CLIENT_TIMEOUT_MS` ብቻውን የቆመ body መለየት አይችልም (#12656)። ጊዜው ካለፈ wreq reader ይሰረዛል እና ወደ direct/proxy dispatcher ይመለሳል፤ `0` watchdogን ያሰናክላል። | | `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | ለOpenCode executor ብቻ፣ እንዲሁም `OPENCODE_RESPONSES_STALL_ROTATION` feature flag በርቶ ሳለ ብቻ (በነባሪ ጠፍቷል)፦ headers ከደረሱ በኋላ የstreamed Responses ምላሽ የመጀመሪያ body byteን ለመጠበቅ የሚፈቀደውን ጊዜ ይገድባል (#13484)። የResponses stream በ`response.created` ይከፈታል፣ ስለዚህ ከዚህ የጊዜ መስኮት በላይ ያለ ዝምታ መቆም ነው፦ accountው እንዲያርፍ ይደረጋል እና requestው አንድ ጊዜ ወደሚቀጥለው account ይዞራል፤ ለሁለተኛ ጊዜ ከቆመ ወዲያውኑ ይወድቃል። feature flagው ቢበራም `0` guardን ያሰናክላል። | | `OPENCODE_PARK_AND_RESUME` | `false` | ለOpenCode executor ብቻ፦ ተደጋጋሚ ጊዜያዊ 429s ከተከሰቱ በኋላ (ወይም አዲስ የpool-strain marker ካለ) requestውን ከheartbeat ጋር ያቆማል፣ ከዚያም መላውን fleet በአንድ ጊዜ ከማሰራጨት ይልቅ እስከ 3 ተከታታይ accounts የተገደበ አንድ leg እንደገና ያጫውታል (#13924)። በነባሪ ጠፍቷል፦ እያንዳንዱ 429 ልክ እንደበፊቱ ወደሚቀጥለው account ያዞራል። | | `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(አልተዘጋጀም)_ | ለOpenCode executor ብቻ፦ ከማቆም በፊት የሚነበበውን የpool-strain marker path ይተኩ (`{since, reason, ttl_s}`፣ ነባሪ `/tmp/opencode-pool-strain.json`፣ #13924)። አዲስ marker እንደገና ሳይቆጥር ያቆማል፤ ከሌለ ወይም ጊዜ ያለፈበት ከሆነ ወደ burst counter ይመለሳል። | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | ለ`/v1` bridge requests የproxy hop ጊዜ ገደብ። | | `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | የFirecrawl web-fetch executorን በራስዎ የሚስተናገድ instance ላይ ያመልክቱ (ከcloud ውጭ API key አማራጭ ነው)። | | `FIRECRAWL_TIMEOUT_MS` | `30000` | ለFirecrawl web-fetch executor የእያንዳንዱ-request ጊዜ ገደብ። | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | ለbridgeው አጠቃላይ የserver request ጊዜ ገደብ። | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | በbridgeው በኩል የresponse headersን ለመላክ የሚፈቀደው ጊዜ። | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | የbridge keep-alive የስራ-ፈት ጊዜ ገደብ። | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | የraw socket ጊዜ ገደብ (0 = ተሰናክሏል)። | | `SHUTDOWN_TIMEOUT_MS` | `30000` | ከSIGTERM/SIGINT በኋላ በግድ ከመውጣት በፊት የሚሰጥ የእፎይታ ጊዜ። | | `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | `FETCH_TIMEOUT_MS` ካልተዘጋጀ፣ በ`src/shared/utils/fetchTimeout.ts` ጥቅም ላይ የሚውል fallback። | | `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | በ`src/shared/network/safeOutboundFetch.ts` ውስጥ ላሉት `validationRead` እና `modelsProbe` presets የጊዜ ገደብ (ms)። በdashboard ውስጥ በactive/error መካከል መዋዠቅን ለመከላከል ለዝግተኛ endpoints (Cerebras, Cloudflare AI, Groq) ከፍ ያድርጉት። ልክ ላልሆኑ (<1000) ወይም ቁጥራዊ ላልሆኑ እሴቶች ወደ 8000ms ይመለሳል። | | `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | በ`open-sse/utils/proxyFetch.ts` ውስጥ ለRelay የተወሰነ የfetch ጊዜ ገደብ (#9158)። የተንጠለጠለ Relay ከደንበኛ/agent ጊዜ ገደብ (~30s) በፊት መክሸፍ አለበት፤ ይህም ጥሪ አድራጊዎች አጠቃላይ የupstream ጊዜ ማለፍን ሳይሆን ለRelay የተወሰነ ውድቀትን እንዲያዩ ያደርጋል። ሁልጊዜ ቀድሞ እንዲጀምር በ`29000` ተገድቧል። | | `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | በ`open-sse/utils/proxyFetch.ts` ውስጥ ላሉት direct/relay/proxy አንድ ጊዜ የመልሶ ሙከራ መንገዶች የጋራ የመልሶ ሙከራ መዘግየት (#9158)። `0` = ወዲያውኑ እንደገና ሞክር። | | `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | የNative wreq-js ጥያቄ ጊዜ ገደብ (`claudeTlsClient.ts`)። | | `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | በNative ጊዜ ገደቡ ላይ የሚጨመር ፍጹም የJS ጠንካራ የመጨረሻ ጊዜ ተጨማሪ ጊዜ። | | `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | የNative wreq-js ጥያቄ ጊዜ ገደብ (`perplexityTlsClient.ts`)። | | `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | በNative ጊዜ ገደቡ ላይ የሚጨመር ፍጹም የJS ጠንካራ የመጨረሻ ጊዜ ተጨማሪ ጊዜ። | | `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (ጠፍቷል) | "አብሮገነብ የድር ፍለጋ አለዎት። የፍለጋ ውጤቶችን በመጠቀም ጥያቄዎችን በቀጥታ ይመልሱ።" የሚለውን ወደ ጥሪ አድራጊው የስርዓት መልዕክት ያክላል (`perplexity-web/protocol.ts`)። በነባሪነት ጠፍቷል — Perplexity ለማንኛውም ፍለጋ ያደርጋል፣ እና ዓረፍተ ነገሩ ለኮድ ደንበኞች በሚሰጡ ምላሾች ውስጥ እንደ ሜታ-አስተያየት ይገባል። ለመመለስ `1`/`true`/`yes`/`on` ያዘጋጁ። | | `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | የNative wreq-js ጥያቄ ጊዜ ገደብ (`grokTlsClient.ts`)። | | `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | በNative ጊዜ ገደቡ ላይ የሚጨመር ፍጹም የJS ጠንካራ የመጨረሻ ጊዜ ተጨማሪ ጊዜ። | | `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | የNative wreq-js ጥያቄ ጊዜ ገደብ (`notionTlsClient.ts`)፤ `notion-web` ለረጅም የማመንጨት ሂደቶች በእያንዳንዱ ጥያቄ ወደ `180000` ከፍ ያደርገዋል። | | `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | በNative ጊዜ ገደቡ ላይ የሚጨመር ፍጹም የJS ጠንካራ የመጨረሻ ጊዜ ተጨማሪ ጊዜ። | | `OMNIROUTE_BROWSER_POOL` | `on` | በbrowser ለሚደገፍ web-cookie chat የጋራ Playwright browser pool (`browserPool.ts`)፤ ለማሰናከል `off` ያዘጋጁ። | | `OBSCURA_BIN` | `auto-detect` | በbrowser pool እና በCloudflare Playground executor እንደ ዋና ሞተር ጥቅም ላይ የሚውለው የ`obscura` binary ዱካ (`open-sse/services/obscura.ts`)፤ ካልተዘጋጀ ከስርዓቱ PATH በራስ-ሰር ይገኛል። | | `OBSCURA_CDP_ENDPOINT` | _(አልተዘጋጀም)_ | አዲስ ከማስነሳት ይልቅ አስቀድሞ ወደሚሰራ Obscura (`http://host:port`) ያመልክቱ፤ module ያንን process አያስተዳድርም (`open-sse/services/obscura.ts`)። | | `OBSCURA_PORT` | `random free port` | ለሚነሳው `obscura serve` በግልጽ የተወሰነ port፤ ካልተዘጋጀ ነፃ port በራስ-ሰር ይመረጣል (`open-sse/services/obscura.ts`)። | | `WEB_COOKIE_USE_BROWSER` | `0` | የweb-cookie chat ጥያቄን በbrowser የሚደገፈውን መንገድ እንዲጠቀም ያድርጉ (`browserBackedChat.ts`)፤ ለማንቃት `1`። | | `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | ለKimi Web (ዓለም አቀፉ kimi.ai Connect-RPC) executor መሠረታዊ URL (`kimi-web.ts`)፤ ለmirror/proxy endpoints ብቻ ይቀይሩት። | | `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | ለKimi Web executor ሙሉ የchat endpoint (`kimi-web.ts`)። | | `OMNIROUTE_LOGIN_BROWSER_PATH` | _(በራስ-ሰር የተገኘ)_ | ለAdobe Firefly በይነተገናኝ browser መግቢያ የስርዓት Chrome/Edge executable ዱካ (`adobeFireflyBrowserLogin.ts`)፤ በእያንዳንዱ OS የሚደረገውን በራስ-ሰር ማግኘት ይሽራል። | | `OMNIROUTE_STANDALONE_DIR` | _.build/ የstandalone ውጤት_ | ከbuild በኋላ ባለው የአብሮ ማስቀመጥ ደረጃ ጥቅም ላይ ለሚውለው standalone ውጤት directory በbuild ጊዜ የሚደረግ ለውጥ (`scripts/build/colocate-standalone.mjs`)፤ ይህ የbuild tooling እንጂ የruntime አይደለም። | የCombo target ሙከራዎች የተፈታውን የupstream ጥያቄ ጊዜ ገደብ (`FETCH_TIMEOUT_MS`፣ ወይም የfetch ነባሪውን ሲያቀርብ `REQUEST_TIMEOUT_MS`) ይወርሳሉ። የcombo fallback ይበልጥ ፈጣን እንዲሆን ብቻ `targetTimeoutMs`ን በcombo፣ በcombo ነባሪዎች ወይም በprovider override ውስጥ ያዘጋጁ፤ ከአሁኑ የupstream ጊዜ ገደብ በላይ ያሉ እሴቶች በupstream ጊዜ ገደቡ ይገደባሉ። `comboTimeoutMs` በfailover targets በሙሉ ላይ የሚተገበር የተለየ የጠቅላላ-combo የግድግዳ-ሰዓት በጀት ነው። ያልተዘጋጀ ይተዉት ወይም ያልተገደበ ድግግሞሽን ለማስቀጠል `0` ያዘጋጁ (በ `comboPredicates.ts` ውስጥ ያለው በኮድ የተወሰነ የ10-ደቂቃ የመንጠልጠል ማቆሚያ አሁንም ይተገበራል)። አዎንታዊ እሴት ያንን የደኅንነት መረብ ለcomboው ይተካል። ዘገምተኛው የመጀመሪያ target ካለፈ በኋላም failover ጊዜ እንዲኖረው `comboTimeoutMs`ን ከ`targetTimeoutMs` የበለጠ ያድርጉ። ### የCircuit Breaker ገደቦች በProvider ደረጃ የCircuit Breaker ማስተካከያ። ነባሪዎቹ ከv3.6 ጀምሮ ለ500+ connections ጥቅም ላይ የዋሉትን በመጠን የተስተካከሉ እሴቶች ያንጸባርቃሉ። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------------------------------- | --------- | ------------------------------ | ------------------------------------------------------------------------------------------- | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | ሰባሪው ከመቀስቀሱ በፊት ለOAuth አቅራቢዎች የተከታታይ ውድቀቶች ገደብ። | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | ለOAuth አቅራቢ ሰባሪው የዳግም ማስጀመሪያ ጊዜ መስኮት (ms)። | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | ለAPI-key አቅራቢዎች የተከታታይ ውድቀቶች ገደብ። | | `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | ለAPI-key አቅራቢ ሰባሪው የዳግም ማስጀመሪያ ጊዜ መስኮት (ms)። | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | ለአካባቢያዊ አቅራቢዎች (Ollama፣ LM Studio፣ ...) የተከታታይ ውድቀቶች ገደብ። | | `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | ለአካባቢያዊ አቅራቢ ሰባሪው የዳግም ማስጀመሪያ ጊዜ መስኮት (ms)። | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ መላው የOAuth አቅራቢ ወደ ማቀዝቀዣ ጊዜ ከመግባቱ በፊት በጊዜ መስኮቱ ውስጥ የሚፈቀዱ ውድቀቶች። | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ ለOAuth አቅራቢዎች ተንከባላይ የውድቀት ቆጠራ ጊዜ መስኮት (ms)። | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ የOAuth አቅራቢው ገደብ አንዴ ከተደረሰ በኋላ የማቀዝቀዣ ጊዜ (ms)። | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | የOAuth አቅራቢው በዚህ የውድቀት ብዛት ላይ ወደ DEGRADED ይገባል። | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | ለOAuth አቅራቢው ከፍተኛው የresetTimeout ማሳደጊያ ብዜት። | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | የOAuth አቅራቢው ከዚህ ብዛት ክፍት ዑደቶች በኋላ ይባባሳል። | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ መላው የAPI-key አቅራቢ ወደ ማቀዝቀዣ ጊዜ ከመግባቱ በፊት በጊዜ መስኮቱ ውስጥ የሚፈቀዱ ውድቀቶች። | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ ለAPI-key አቅራቢዎች ተንከባላይ የውድቀት ቆጠራ ጊዜ መስኮት (ms)። | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ የAPI-key አቅራቢው ገደብ አንዴ ከተደረሰ በኋላ የማቀዝቀዣ ጊዜ (ms)። | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | የAPI-key አቅራቢው በዚህ የውድቀት ብዛት ላይ ወደ DEGRADED ይገባል። | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | ለAPI-key አቅራቢው ከፍተኛው የresetTimeout ማሳደጊያ ብዜት። | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | የAPI-key አቅራቢው ከዚህ ብዛት ክፍት ዑደቶች በኋላ ይባባሳል። | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ መላው አካባቢያዊ አቅራቢ ወደ ማቀዝቀዣ ጊዜ ከመግባቱ በፊት የሚፈቀዱ ውድቀቶች። | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ ለአካባቢያዊ አቅራቢዎች ተንከባላይ የውድቀት ቆጠራ ጊዜ መስኮት (ms)። | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | የአቅራቢ ደረጃ ሰባሪ፦ የአካባቢያዊ አቅራቢው ገደብ አንዴ ከተደረሰ በኋላ የማቀዝቀዣ ጊዜ (ms)። | | `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | የአውድ መሸጎጫ ፒን አቅራቢ በዘላቂነት ጤናማ እንዳልሆነ የሚቆጠርበት እና ፒኑ ወደ ተጠባባቂ አሠራር ለመሸጋገር የሚጣልበት የመጠባበቂያ ጥልቀት። | | `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | የአውድ መሸጎጫ ፒን ከመጣሉ በፊት አጭር ጊዜያዊ የማቀዝቀዣ ጊዜዎችን የሚታገስ የመዋዠቅ መከላከያ ጊዜ መስኮት (ms)። | ### ሁኔታዎች | ሁኔታ | ውቅር | | ----------------------------- | -------------------------------------------------- | | **ለረጅም ጊዜ የሚሠራ የኮድ ማመንጨት** | `REQUEST_TIMEOUT_MS=900000` (15 ደቂቃ) | | **የዥረቱን አጠቃላይ የሕይወት ጊዜ መገደብ** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 ደቂቃ) | | **ለምርት API ፈጣን ውድቀት** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` | | **የተራዘመ አስተሳሰብ ሞዴሎች** | `STREAM_IDLE_TIMEOUT_MS=300000` (በክፍሎች መካከል 5 ደቂቃ) | --- ## 16. ምዝግብ ማስቀመጥ የምዝግብ ማስቀመጫ ስርዓቱ ወደ stdout እና በየጊዜው ወደሚቀያየሩ የምዝግብ ፋይሎች ይጽፋል። ሁሉም ውቅር ከ`src/lib/logEnv.ts` ይነበባል። | ተለዋዋጭ | ነባሪ | መግለጫ | | ----------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | `APP_LOG_LEVEL` | `info` | ዝቅተኛው የምዝግብ ደረጃ፦ `debug`፣ `info`፣ `warn`፣ `error`። | | `APP_LOG_FORMAT` | `text` | የውጤት ቅርጸት፦ `text` (ለሰው ለማንበብ ቀላል) ወይም `json` (የተዋቀረ)። | | `APP_LOG_TO_FILE` | `true` | ከstdout ጎን ለጎን ምዝግቦችን ወደ ፋይል ይጻፉ። | | `APP_LOG_FILE_PATH` | `logs/application/app.log` | የምዝግብ ፋይል ዱካ (ከፕሮጀክቱ ስርወ ማውጫ ወይም `DATA_DIR` አንጻር)። | | `APP_LOG_MAX_FILE_SIZE` | `50M` | ከመቀያየሩ በፊት ከፍተኛው የፋይል መጠን። የሚቀበላቸው፦ `50M`፣ `1G`፣ `512K`፣ ወይም ተራ ባይቶች። | | `APP_LOG_RETENTION_DAYS` | `7` | የተቀያየሩ የመተግበሪያ ምዝግብ ፋይሎች የሚቀመጡባቸው ቀናት። | | `APP_LOG_MAX_FILES` | `20` | ከፍተኛው የተቀያየሩ የምዝግብ ፋይል ምትኬዎች ብዛት። | | `CALL_LOG_RETENTION_DAYS` | `7` | የጥያቄ/ጥሪ ምዝግብ ግቤቶች በውሂብ ጎታው ውስጥ የሚቀመጡባቸው ቀናት። | | `CALL_LOG_MAX_ENTRIES` | `10000` | በማህደረ ትውስታ ውስጥ ባለው ቋት የሚቀመጡ ከፍተኛው የጥሪ ምዝግብ ግቤቶች ብዛት። | | `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | ከማጽዳት በፊት በ`call_logs` SQLite ሰንጠረዥ ውስጥ የሚኖሩ ከፍተኛው የረድፎች ብዛት። | | `ENABLE_REQUEST_LOGS` | _(አልተዋቀረም)_ | የዳሽቦርድ ቅንብሩን በመሻር ዝርዝር የጥያቄ ምዝግብ ማስቀመጥን በግድ ያብሩ ወይም ያጥፉ። | | `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 ሰዓት) | በማህደረ ትውስታ ውስጥ ከመጽዳታቸው በፊት፣ ባለቤት አልባ ለሆኑ ንቁ የጥያቄ ምዝግብ ግቤቶች ከፍተኛው ዕድሜ። | | `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | `call_log_pipeline_enabled=true` ሲሆን የዥረት ቁርጥራጮችን በpipeline artifacts ውስጥ ያከማቹ። በምርጫ የሚነቃ (`true`) — የዲስክ ቦታን ለመቆጠብ በነባሪ ጠፍቷል። | | `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | `call_log_pipeline_enabled=true` ሲሆን ከፍተኛው የpipeline ጥሪ ምዝግብ artifact መጠን በKB። | | `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | ከማጽዳት በፊት በ`proxy_logs` SQLite ሰንጠረዥ ውስጥ የሚኖሩ ከፍተኛው የረድፎች ብዛት። | | `PROXY_LOG_INCLUDE_IPS` | `false` | የደንበኛ/መውጫ IPዎችን እና የመለያ ቅድመ ቅጥያዎችን በ`[ProxyEgress]` የኮንሶል ምዝግቦች ውስጥ ያካትቱ። የዳሽቦርድ/ውሂብ ጎታ proxy-log መዝገቦች ሙሉ ዝርዝሮቹን ይይዛሉ። | | `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 ደቂቃ) | `src/lib/logRotation.ts` የንቁውን የምዝግብ ፋይል መጠን ምን ያህል በተደጋጋሚ እንደሚፈትሽ። | | `CHAT_LOG_TEXT_LIMIT` | `65536` | በውይይት ምዝግብ artifacts ውስጥ የሚቀመጠው ከፍተኛው የሕብረቁምፊ ርዝመት (ነባሪ 64 KB)። | | `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | የውይይት ምዝግብ payloads ሲቆረጡ ከመጨረሻቸው የሚቀመጡ የድርድር ንጥሎች ብዛት። | | `CHAT_LOG_MAX_DEPTH` | `6` | የውይይት ምዝግብ payloads ከመቆረጣቸው በፊት ከፍተኛው የመክተቻ ጥልቀት። | | `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | በውይይት ምዝግብ payloads ውስጥ የሚቀመጡ ከፍተኛው የobject keys ብዛት (0 = ያልተገደበ)። | | `CHAT_LOG_MAX_BODY_KB` | `1024` | ከሙሉ ቅጂው ይልቅ በቀላል ማጠቃለያ ከመተካቱ በፊት ያለው የጠቅላላ ጥያቄ/ምላሽ body መጠን (KB)። ረዥም agentic ውይይቶች በዳሽቦርዱ ውስጥ ከእውነተኛዎቹ መልዕክቶች ይልቅ placeholder ካሳዩ፣ ይህን ዋጋ ይጨምሩ። | | `CHAT_DEBUG_FILE` | `false` | true ሲሆን፣ `serializeArtifactForStorage` በመጠን ላይ የተመሠረተ መቆረጥን ይዘላል። ለማረሚያ ብቻ። | --- ## 17. የማህደረ ትውስታ ማመቻቸት | ተለዋዋጭ | ነባሪ | መግለጫ | | ----------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_MEMORY_MB` | _ራስ-ሰር_ (ቤር ሜታል)፤ **በDocker ምስሉ ውስጥ `1024`** | **የሚመከር** የDocker/ራሱን የቻለ V8 ሂፕ ገደብ (MB)። ካልተዋቀረ፣ በተለዋዋጭ ሁኔታ ይስተካከላል (የስርዓቱ RAM ~35%፣ በ`[512, 4096]` ውስጥ የተገደበ)፤ አጠቃላይ ማህደረ ትውስታው ሊነበብ በማይችልበት ጊዜ ብቻ `512` ዝቅተኛው ገደብ ነው። በ`run-standalone.mjs` (Docker CMD) ላይ፣ **በግልጽ የተወሰነ** እሴት እንደ `--max-old-space-size` ይጨመራል እና ከሚጋጭ NODE_OPTIONS ሂፕ ባንዲራ ላይ **ቅድሚያ ይወስዳል** (የV8 የመጨረሻ-ባንዲራ ደንብ)። `omniroute serve` አሁንም ያለውን NODE_OPTIONS ሂፕ ይመርጣል (#5238)። ሁለቱንም ወደተለያዩ ቁጥሮች አታዋቅሩ — ሂደቱ ሁለቱንም እሴቶች እና አሸናፊውን የሚጠቅስ ማስጠንቀቂያ ይመዘግባል። **ይፋዊው Docker ምስል ሁልጊዜ `1024` ያዋቅራል፣ ስለዚህ ማስተካከያው በዚያ ፈጽሞ አይሰራም።** የኮድ ወኪል `/v1/responses` `8192`–`12288` እና ተጨማሪ የcgroup ቦታ ያስፈልገዋል — [Docker መመሪያ — የሩጫ ጊዜ RAM](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents)ን ይመልከቱ። | | `PROMPT_CACHE_MAX_SIZE` | `50` | ከፍተኛው የተሸጎጡ የስርዓት ፕሮምፕት ግቤቶች ብዛት። | | `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | ከፍተኛው አጠቃላይ የፕሮምፕት መሸጎጫ መጠን። | | `PROMPT_CACHE_TTL_MS` | `300000` (5 ደቂቃ) | የፕሮምፕት መሸጎጫ ግቤት TTL። | | `SEMANTIC_CACHE_MAX_SIZE` | `100` | ከፍተኛው የተሸጎጡ temperature=0 ምላሾች ብዛት። | | `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | ከፍተኛው አጠቃላይ የትርጉም መሸጎጫ መጠን። | | `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 ደቂቃ) | የትርጉም መሸጎጫ ግቤት TTL። | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | በአንድ ጊዜ በማህደረ ትውስታ ውስጥ ንቁ ማውጫ የሚያቆዩ የአካባቢ-corpus ስሮች (`src/lib/localCorpus/configured.ts`)። LRU፦ ገደቡ ላይ ሲደረስ፣ በቅርብ ጊዜ ከሁሉም ያነሰ ጥቅም ላይ የዋለው የስር ማውጫ ይወገዳል እና በሚቀጥለው መጠይቁ እንደገና ይገነባል። አነስተኛው `1` እንዲሆን ይገደባል፤ ቁጥራዊ ያልሆነ እሴት ወደ ነባሪው ይመለሳል። | | `STREAM_HISTORY_MAX` | `50` | በዳሽቦርዱ የቀጥታ እይታ ቋት ውስጥ የሚቀመጡ ከፍተኛው የቅርብ ጊዜ የዥረት ክስተቶች ብዛት። | | `CONTEXT_LENGTH_DEFAULT` | `128000` | ግልጽ ውቅር ለሌላቸው ሞዴሎች ዓለም አቀፍ የመጠባበቂያ ከፍተኛ የአውድ ርዝመት። | | `USAGE_TOKEN_BUFFER` | `100` | የአጠቃቀም ኮታዎችን ሲከታተሉ የሚመደብ ተጨማሪ የቶከን መጠባበቂያ ቦታ። | ### መጭመቅ | ተለዋዋጭ | ነባሪ | መግለጫ | | ------------------------------------- | ------ | -------------------------------------------------------------------------------------------- | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | ያልተዋቀረ | የ`.rtk/trust.json` ሃሽ ሳይኖር የፕሮጀክት `.rtk/filters.json`ን ይመኑ። ቁጥጥር ባለበት የአካባቢ ልማት ውስጥ ብቻ ይጠቀሙ። | ### የማህደረ ትውስታ ሞተር (ዕቅድ 21) ### የማህደረ ትውስታ፣ ክህሎቶች እና የቶከን ማደስ በክስተት-ሉፕ ላይ የሚያስከትሉት ወጪ (#10349) OmniRoute **አንድ Node ሂደት** ነው። የማህደረ ትውስታ ማውጣት/ሰርስሮ ማግኘት፣ የክህሎት ማስገባት እና የአቅራቢ ቶከን ማደስ ከ`GET /healthz` እና ከዳሽቦርዱ ጋር በዚያው **ተመሳሳይ የክስተት ሉፕ** ላይ ይሰራሉ። የሠራተኛ ክር አይደሉም። | ሥራ | ኮድ | ነባሪ | የኦፕሬተር ቁጥጥር | | -------------------------- | ---------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | | ማህደረ ትውስታ ማውጣት / ሰርስሮ ማግኘት | `src/lib/memory/` | የዳሽቦርድ **memoryEnabled** (በነባሪ በርቷል) | **Settings → Memory**ን ያጥፉ። ባህሪውን በቅንብሮች ውስጥ ከማሰናከል ውጭ የተለየ የenv ማቋረጫ ማብሪያ የለም። | | የክህሎቶች ማስገባት | `src/lib/skills/injection.ts` | የዳሽቦርድ **skillsEnabled** (በነባሪ በርቷል) | **Settings → Memory/Skills**ን (`skillsEnabled`) ያጥፉ። ከታች ያሉት የsandbox መቆጣጠሪያዎች ማስገባቱ አስቀድሞ ከበራ በኋላ አፈጻጸሙን ብቻ ይገድባሉ። | | የቶከን ማደስ | `src/sse/services/tokenRefresh.ts` | ለተገናኙ OAuth/የድር አቅራቢዎች በርቷል | አቅራቢውን ያላቅቁ ወይም ቶከኖቹ የሚሰሩ ሆነው እንዲቆዩ ያድርጉ፤ በአሁኑ ጊዜ `TOKEN_REFRESH=0` env የለም። | ጸጥ ባለ ማሽን ላይ `/healthz` ዝግ ከሆነ፣ መጀመሪያ ማህደረ ትውስታንና ክህሎቶችን ያሰናክሉ፤ ከዚያም የካታሎግ/የመጭመቅ ጭነትን ይፈትሹ (#10303, #9685)። እነዚህ ባህሪዎች በ`await` ነጥቦች ላይ ቁጥጥሩን ይለቃሉ፣ ሆኖም አሁንም ለአንዱ ክር ይፎካከራሉ። ለቋሚው የማህደረ ትውስታ ንዑስ ስርዓት (`src/lib/memory/`) የembedding ንብርብር፣ vector store እና የዳግም ደረጃ አሰጣጥ መቆጣጠሪያዎች። | ተለዋዋጭ | ነባሪ | መግለጫ | | ------------------------------------ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 ደቂቃ) | በማህደረ ትውስታ ውስጥ ላለው embedding cache TTL (ለእያንዳንዱ ምንጭ/ሞዴል/ልኬት ፊርማ)። | | `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | በembedding cache ውስጥ የሚቀመጡ ከፍተኛው የLRU ግቤቶች ብዛት። | | `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | በፈቃድ ለሚነቃው `@huggingface/transformers` አካባቢያዊ MiniLM pipeline (~23 MB int8፣ ~400 MB RAM) የHF repo id። | | `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | ለቋሚው potion/Model2Vec lookup-table embedder የHF repo id። እንደ አስፈላጊነቱ ወደ cache dir ይወርዳል። | | `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | ቋሚዎቹን potion ሞዴል ፋይሎች cache ለማድረግ የሚጠቅም ማውጫ። ካልተወሰነ በነባሪ በ`DATA_DIR` ስር ይሆናል። | | `HF_HUB_ENDPOINT` | `https://huggingface.co` | `staticPotion.ts` የሚጠቀምበትን Hugging Face Hub መሠረታዊ URL ይተኩ (ለምሳሌ፦ ከአውታረ መረብ ለተነጠሉ ዝግጅቶች mirror endpoint)። | | `MEMORY_VEC_TOP_K` | `20` | በ`src/lib/memory/vectorStore.ts` ውስጥ ባለው የ`sqlite-vec` brute-force vector ፍለጋ የሚጠቀመው ነባሪ top-K። | | `MEMORY_RRF_K` | `60` | ለድብልቅ FTS5 + vector ሰርስሮ ማግኘት (sqlite-vec recipe) የReciprocal Rank Fusion ቋሚ `k`። | | `VECTOR_STORE_DISABLE_VEC` | `false` | በ`getVectorStore()` (`src/lib/memory/vectorStore.ts`) ውስጥ ያለ የሙከራ/ምርመራ መጋጠሚያ፦ `true` ሲሆን vector storeን `null` እንዲሆን ያስገድዳል (`sqlite-vec` የሌለበትን cloud/WASM አካባቢ ይመስላል)፣ የማህደረ ትውስታ ሰርስሮ ማግኘትን ወደ FTS5 ቁልፍ ቃል ፍለጋ ያወርዳል። በproduction ላይ ሳይወሰን ይተዉት። | | `NOTION_API_KEY` | _(አልተወሰነም)_ | ለNotion backend የAPI ቁልፍ (በ`genericBackend.ts` የሚታወቀው backend preset ይጠቀምበታል)። | | `NOTION_API_URL` | `https://api.notion.com/v1` | ለNotion API መሠረታዊ URL (በራስ ለሚስተናገዱ የNotion አማራጮች ሊተካ ይችላል)። | | `OBSIDIAN_API_KEY` | _(አልተወሰነም)_ | ለObsidian Vault backend የAPI ቁልፍ (በ`genericBackend.ts` የሚታወቀው backend preset ይጠቀምበታል)። | | `OBSIDIAN_API_URL` | `http://localhost:27123` | ለObsidian Vault API መሠረታዊ URL (ለርቀት vault ሊተካ ይችላል)። | | `MEMORY_TYPED_DECAY_ENABLED` | `false` | የTV6 typed memory decay ዋና ማብሪያ። **በፈቃድ የሚነቃ (በነባሪ ጠፍቷል)** — sweep የተዳከሙ ትውስታዎችን **ይሰርዛል**። ይህ ጠፍቶ ሲሆን፣ `access_count`/`last_accessed_at` ንጹህ ቴሌሜትሪ ብቻ ናቸው፣ ምንም ነገርም በፍጹም አይሰረዝም። | | `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | ጥቅም ላይ ያልዋለ `episodic` ትውስታ የሚዳከምበት TTL (በቀናት)። `0` episodicንም ከመዳከም ነፃ ያደርገዋል። ዘላቂ ዓይነቶች (`factual`/`procedural`/`semantic`) ሁልጊዜ ከመዳከም ነፃ ናቸው። የመዳከም ሰዓቱ በ`last_accessed_at` ላይ እንደገና ይመሠረታል። | | `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | `>=` ይህን ያህል ጊዜ የተወጋ ትውስታ ዓይነቱ ምንም ይሁን ምን ከመዳከም ነፃ ይሆናል። `0` የመዳረሻ ነፃነትን ያሰናክላል። | | `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (ተሰናክሏል) | በ`src/lib/memory/typedDecay.ts` ውስጥ ላለው አማራጭ ወቅታዊ decay sweep ክፍተት (በሰከንዶች)። `0`/አልተወሰነም = ወቅታዊ sweep የለም። ሁለት ጊዜ በፈቃድ የሚነቃ፦ `MEMORY_TYPED_DECAY_ENABLED=true`ንም ይፈልጋል። | | `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(አልተወሰነም)_ | የ`system` መልዕክትን **በindex 0 ላይ ብቻ** የሚቀበሉ፣ በኮማ የተለዩ provider ids (ፊደል መጠንን የማይለዩ) (`src/lib/memory/injection.ts`)። ለእነዚህ፣ cache-safe የመሃል-array ማህደረ ትውስታ splice ባለብዙ ዙር ውይይቶች ውስጥ ደህንነቱ ያልተጠበቀ ስለሆነ፣ በምትኩ ማህደረ ትውስታው እንደ መሪ system መልዕክት ይዋሃዳል/ወደ ፊት ይጨመራል። በነባሪ `xiaomi-mimo`/`mimo` ብቻ ነው፤ የchat templateቸው ተመሳሳይ የአንድ-መሪ-system-message ገደብን ለሚያስፈጽሙ በራስ ለሚስተናገዱ OpenAI-compatible endpoints (ለምሳሌ፦ Qwen3.5+/3.6) ያስፋፉት። | ### የአነስተኛ-RAM Docker ምሳሌ `128` ለዳሽቦርድ ብቻ ነው። በዚህ heap ላይ ያሉ coding agents በረጅም `/v1/responses` ጊዜ `FATAL ERROR` ያጋጥማቸዋል። ይህን ምሳሌ እንደ 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. የዋጋ ማመሳሰል ከውጫዊ ምንጮች የሞዴል ዋጋ ውሂብን በራስ-ሰር ማመሳሰል። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------- | ---------------- | ------------------------ | ------------------------- | | `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | በምርጫ የሚነቃ ወቅታዊ የዋጋ ማመሳሰል። | | `PRICING_SYNC_INTERVAL` | `86400` (24 ሰዓት) | `src/lib/pricingSync.ts` | የማመሳሰል ክፍተት በሰከንዶች። | | `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | በነጠላ ሰረዝ የተለዩ የውሂብ ምንጮች። | --- ## የArena ELO ማመሳሰል | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------- | ---------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | ወቅታዊ የArena AI የደረጃ ሰንጠረዥ ELO ማመሳሰል፤ ከDashboard Feature Flags ሊዋቀር ወይም ላለመሳተፍ `false` ሊደረግ ይችላል። | | `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | በ`GET /v1/models` ውስጥ ለሞዴል ids ጥቅም ላይ የሚውለው የቅድመ-ቅጥ ቅርጽ። `dual` ለእያንዳንዱ ሞዴል አጭሩን የተለዋጭ ስም ቅድመ-ቅጥ እና ቀኖናዊውን የአቅራቢ ቅድመ-ቅጥ ሁለቱንም ያሳያል (የኋላ ተኳኋኝነት — ካታሎጉን በግምት በእጥፍ ያሳድጋል)፤ `alias` ለእያንዳንዱ ሞዴል አንድ id ያወጣል፤ `canonical` ሙሉውን የአቅራቢ-id ቅድመ-ቅጥ ብቻ ያወጣል (ተለዋጭ ስማቸው አስቀድሞ ቀኖናዊው id የሆነ አቅራቢዎች ነጠላ ግቤታቸውን ይይዛሉ)። ደንበኞች በእያንዳንዱ ጥያቄ `?prefix=alias` በመጠቀም ሊሽሩት ይችላሉ። [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix)ን ይመልከቱ። | | `ARENA_ELO_SYNC_INTERVAL` | `86400` (24 ሰዓት) | `src/lib/arenaEloSync.ts` | የማመሳሰል ክፍተት በሰከንዶች። | --- ## PromptQL Playground አቅራቢ (ኦፊሴላዊ ያልሆነ/ሙከራዊ) ለprompt.ql.app በተገላቢጦሽ ምህንድስና የተገነባ GraphQL የክፍለ-ጊዜ ድልድይ (`src/shared/constants/providers/web-cookie.ts`)። ሁሉም አማራጭ ናቸው — ነባሪዎቹ ወደ ይፋዊው የplayground endpoints ያመለክታሉ፤ ለራስ-አስተናጋጅ/አማራጭ PromptQL ስርጭት ብቻ ይቀይሯቸው። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------ | | `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | ለውይይት/ክፍለ-ጊዜ ክንውኖች ጥቅም ላይ የሚውል GraphQL endpoint። | | `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | የክሬዲት ቀሪ ሂሳብ/አጠቃቀምን ለመጠየቅ የሚውል GraphQL endpoint። | | `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | በተቻለ መጠን token ለማደስ የሚያገለግል endpoint። | | `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | የጊዜ ገደቡ ከማለቁ በፊት `thread_events`ን ለመጠየቅ የሚፈቀደው ከፍተኛ ጊዜ (ms)። | --- ## HyperAgent የድር አቅራቢ (ኦፊሴላዊ ያልሆነ/ሙከራዊ) ለ hyperagent.com በተቃራኒ ምህንድስና የተፈጠረ የክፍለ-ጊዜ ድልድይ (`src/shared/constants/providers/web-cookie.ts`)። አማራጭ ነው — ነባሪው ወደ ይፋዊው የክፍያ/አጠቃቀም መገናኛ ነጥብ ያመለክታል፤ ራስዎ ለሚያስተናግዱት/አማራጭ HyperAgent ስርጭት ብቻ ይቀይሩት። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------- | --------------------------------------------------- | --------------------------------------- | --------------------------------------------- | | `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | የክፍያ/አጠቃቀም ክሬዲት ብሎኮችን ለማምጣት የሚያገለግል መገናኛ ነጥብ። | --- ## የKilo Code አጠቃቀም ኮታዎች ለKilo Code አቅራቢው የግል USD ቀሪ ሂሳብ እና የKilo Pass አጠቃቀም ፍለጋ። አማራጭ ነው — ነባሪው ወደ ይፋዊው Kilo API ያመለክታል፤ ለማስተላለፊያ/የሙከራ መሣሪያ ብቻ ይቀይሩት። ማረጋገጫው የግንኙነቱን ነባር OAuth የመዳረሻ ቶከን ይጠቀማል። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | -------------- | --------------------- | ------------------------------------- | ------------------------------------------------------------------- | | `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | የግል Kilo Code ቀሪ ሂሳብን እና የKilo Pass አጠቃቀምን ለማምጣት የሚያገለግል መሠረታዊ URL። | --- ## Adobe Firefly የድር አቅራቢ (ኦፊሴላዊ ያልሆነ/ሙከራዊ) በአሳሽ የሚከናወን የAdobe Firefly የድር አቅራቢ ክፍለ-ጊዜ ማደስ (`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`, `open-sse/services/adobeFireflyClient.ts`)። አማራጭ ነው — ሁሉም ነባሪዎች ለመደበኛ የዴስክቶፕ ጭነት ተስተካክለዋል። > **በ#9255 ተወግዷል።** አሮጌው በCDP የተያያዘው Chrome የማስኬጃ አካባቢ (adobeFireflyChromeRuntime.ts) > በPlaywright የአሳሽ-መግቢያ አገልግሎት ተተክቷል፣ እና ቅንብሮቹ ከእንግዲህ የሉም። > ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART ተለዋዋጮች፣ እንዲሁም > ADOBE_FIREFLY_LOGIN_WAIT_MS እና ADOBE_FIREFLY_FORTER_WAIT_MS፣ በኮድ ማከማቻው ውስጥ የትም አይነበቡም — > እነሱን ማዋቀር ምንም ውጤት የለውም። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------ | ---------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Chromeን በእውነተኛ ራስ-አልባ ሁኔታ ለማስኬድ `1` ያዘጋጁ (ለማመንጨት እንደማይሠራ ይታወቃል፤ ለማረም ብቻ)። | | `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | የቅድመ-እርምጃ አሳሽ ማሞቂያን ለማንቃት/ለማሰናከል። `0` የቅድመ-እርምጃ ማሞቂያውን ያሰናክላል (በባች መካከል የ408 መልሶ ማግኛ አሁንም ይተገበራል)። | | `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | የAdobe Firefly ክፍለ-ጊዜን በዲስክ ላይ ማቆየትን ለማሰናከል `0` ያዘጋጁ። | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(ያልተዋቀረ)_ | `open-sse/services/adobeFireflySession.ts` | በተከታታይ ማስገባቶች መካከል የሚገደደው ዝቅተኛ ክፍተት (ms)፣ አብሮገነቡን ነባሪ በመተካት። | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(ያልተዋቀረ)_ | `open-sse/services/adobeFireflySession.ts` | ከተሳካ ባች በኋላ የሚጨመር ተጨማሪ ክፍተት (ms)፣ አብሮገነቡን ነባሪ በመተካት። | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(ያልተዋቀረ)_ | `open-sse/services/adobeFireflyClient.ts` | የማመንጨት ጥያቄን ከማስገባት በፊት ያለ መሠረታዊ መዘግየት (ms)፣ አብሮገነቡን ነባሪ በመተካት። | --- ## 19. የሞዴል ማመሳሰል (ልማት) | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------------------- | ---------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MODELS_DEV_SYNC_ENABLED` | _(አልተዋቀረም)_ | `src/lib/modelsDevSync.ts` | ለ models.dev የዋጋ ማመሳሰል ግዳጅ መሻሪያ። ካልተዋቀረ = Settings > AI (`modelsDevSyncEnabled`)ን ያክብሩ። `0`/`false`/`off`/`no` **ከDBው ቅድሚያ ይኖረዋል**፣ ወቅታዊ ማመሳሰልንም ሆነ የ`getModelsDevPricing()` SQL/JSON ፍተሻዎችን ይዘላል (ዳሽቦርዱ በተመሳሳዩ event loop ላይ ሲጣበቅ ለማገገም)። `1`/`true`/`on`/`yes` ማመሳሰልን በግድ ያነቃል። የዋጋ ማስቀመጥ/ማጽዳት አሁንም `backupDbFile("pre-write")`ን ይጠራል፤ ይህም በ60 ደቂቃው ገደብ ወይም በ`DISABLE_SQLITE_AUTO_BACKUP` ስር ምንም አያደርግም። | | `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 ሰዓት) | `src/lib/modelsDevSync.ts` | በልማት ጊዜ የሞዴል ካታሎግ ማመሳሰል ክፍተት በሰከንዶች። | | `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 ሰዓት) | `src/lib/contextWindowResolver.ts` | ራሱን ለሚያርም የአውድ-መስኮት አስታራቂ (5004) ክፍተት (በሰከንዶች)፦ አቅራቢው ያወጀው ከ`/models` ፍለጋ የተገኘ መስኮት ከካታሎጉ ሲለይ እንደ `auto:discovery` መሻሪያ ይሰካል። ለማሰናከል ወደ `0` ያዋቅሩ። አስቀድሞ የተመሳሰለ ውሂብን እንደገና ይጠቀማል (አዲስ ሰርስሮ ማምጣት የለም)፤ `manual` መሻሪያዎችን ፈጽሞ አይተካም። | --- ## 20. ለአቅራቢ የተለዩ ቅንብሮች | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 ሰዓት) | `src/lib/catalog/openrouterCatalog.ts` | የOpenRouter ሞዴል ካታሎግ መሸጎጫ TTL። | | `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | በ`/v1/models` ምላሾች ውስጥ ለማሳያ ምቹ የሆኑ `name` መስኮችን ያካትቱ። መታወቂያዎችን ብቻ ለሚጠብቁ ደንበኞች ያሰናክሉት። | | `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 ሰከንድ) | `src/app/api/v1/models/catalogCache.ts` | ለተዋሃደ የ`GET /v1/models` ካታሎግ ዳግም ግንባታ የቀዝቃዛ መንገድ መጠበቂያ ገደብ (#12627)። ጊዜው ሲያልቅ፣ ካለ የመጨረሻው ትክክለኛ 200 ይቀርባል። | | `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 ቀናት) | `src/lib/db/models/activeSyncedCatalog.ts` | ከዚህ ዕድሜ በኋላ የግንኙነቱ የተመሳሰለ ሞዴል ዝርዝር ለማዞሪያ ዋነኛ ምንጭ መሆኑን ያቆማል እና ወደ ሬጂስትሪው በክፍት ሁኔታ ይመለሳል (#12849)። የጊዜ ማህተም ያልተደረገባቸው ረድፎች ያረጁ ተብለው ይቆጠራሉ። | | `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | ለNanoBanana ምስል ማመንጨት ሥራዎች ከፍተኛው የመጠበቂያ ጊዜ። | | `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | የNanoBanana ሥራ ምርመራ ድግግሞሽ። | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | ለAdobe Firefly ጥራት ማሳደጊያ የማስገባት-ዳግም ሙከራ ኤክስፖነንሻል መዘግየት መሠረታዊ የጊዜ ልዩነት። | | `AWS_REGION` | _(አልተዋቀረም)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | የAWS Bedrock መጨረሻ ነጥቦችን (Kiro፣ ድምፅ) ለመገንባት የሚያገለግል ክልል። | | `AWS_DEFAULT_REGION` | _(አልተዋቀረም)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | `AWS_REGION` ካልተዋቀረ የሚያገለግል አማራጭ። | | `CLOUDFLARE_ACCOUNT_ID` | _(አልተዋቀረም)_ | `open-sse/executors/cloudflare-ai.ts` | ለCloudflare Workers AI የመለያ መታወቂያ። | | `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(አልተዋቀረም)_ | `open-sse/executors/cloudflare-playground.ts` | ለCloudflare AI Playground አስፈጻሚ ሙሉ የዴስክቶፕ Chrome ሁለትዮሽ ፋይል ዱካ፤ ይህም ራስ-አልባ የጣት አሻራ ማረጋገጫው ከPlaywright ጋር የታሸገውን Chromium ሲያግድ ጥቅም ላይ ይውላል። | | `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | በፕሮክሲ-ፑል Workers ማስተላለፊያ አሰማሪው ጥቅም ላይ የሚውለውን የCloudflare REST API መሠረት ይተኩ (#4640 / 9router#1360)። | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | በፕሮክሲ-ፑል «ማስተላለፊያ አሰማራ» ሞዳል ውስጥ የሚጠቆመው ነባሪ የworker ፕሮጀክት ስም። | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | የCloudflare Workers ማስተላለፊያ አማራጭን ከፕሮክሲ ፑል ትር ለመደበቅ ወደ `false` ያዋቅሩ። | | `CLOUDFLARED_BIN` | በራስ-ሰር ፈልጎ ማግኘት | `src/lib/cloudflaredTunnel.ts` | ወደ `cloudflared` ሁለትዮሽ ፋይል ብጁ ዱካ። | | `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | የቱነል ማጓጓዣ ፕሮቶኮል፦ `http2` (ነባሪ)፣ `quic` ወይም `auto`። | | `CLOUDFLARED_CONFIG` | _(አልተዋቀረም)_ | `src/lib/cloudflaredTunnel.ts` | በአካባቢው ወደሚተዳደር የcloudflared `config.yml` ዱካ (`tunnel:`፣ `credentials-file:`፣ `ingress:` ያለው)። ሲዋቀር OmniRoute ጊዜያዊ ፈጣን ቱነል ከመጠቀም ይልቅ `tunnel --config run` (ስም ያለው ቱነል) ያስኬዳል። | | `CLOUDFLARED_HOSTNAME` | _(ከማዋቀሪያ ingress)_ | `src/lib/cloudflaredTunnel.ts` | እንደ `publicUrl`/`apiUrl` ሪፖርት የሚደረገውን ስም ያለው ቱነል ይፋዊ hostname (ለምሳሌ `ai.example.com`) ለመተካት። ካልተዋቀረ ከማዋቀሪያው የመጀመሪያ `ingress` hostname ይነበባል። | | `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | በproxy-pool relay deployer ጥቅም ላይ የሚውለውን Deno Deploy REST API base ይተካል (#4643 / 9router#1437)። | | `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | በproxy-pool "Deploy Relay" modal ውስጥ የሚጠቆመው ነባሪ የDeno Deploy መተግበሪያ ስም። | | `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | የDeno Deploy relay አማራጭን ከProxy Pool ትር ለመደበቅ ወደ `false` ያዋቅሩ። | | `SEARCH_CACHE_TTL_MS` | `300000` (5 ደቂቃ) | `open-sse/services/searchCache.ts` | ለsearch API (Perplexity፣ Brave፣ ወዘተ) ምላሽ cache TTL። | | `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | ለClaude Code ብቻ የሚያገለግሉ relays የሙከራ CC-compatible provider UIን ያሳያል። | | `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | የተካተተው የ9router instance የሚያዳምጥበትን host ይተካል። | | `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | የተካተተው የ9router instance የሚያዳምጥበትን port ይተካል። | | `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | ለተካተተው አገልግሎት WebSocket proxy bind host (በነባሪ loopback ብቻ)። | | `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | ለተካተተው አገልግሎት WebSocket proxy server port። | | `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI bridge host (የቆየ integration)። | | `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI bridge port። | | `CLIPROXYAPI_API_KEY` | _(ባዶ)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | የ`cliproxyapi_api_key` ቅንብር በማይኖርበት ጊዜ የdata-plane key fallback። | | `CLIPROXYAPI_MANAGEMENT_KEY` | _(ባዶ)_ | `src/lib/services/cliproxyAccountHealth.ts` | በውጪ ከሚተዳደር CLIProxyAPI instance የaccount-health ንባቦች ማኔጅመንት key። | | `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | CLIProxyAPI config ማውጫ። | | `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose የ`cliproxyapi` sidecarን የሚያትምበት host interface (#12578)። የውሂብ volumeው የprovider OAuth/API ማረጋገጫዎችን ይይዛል፣ እና pinned imageው በenv ላይ የተመሰረተ data-plane `api-keys` override የለውም (mounted `config.yaml` ብቻ)፣ ስለዚህ `0.0.0.0` ማረጋገጫዎችን የያዘ አገልግሎት ለመላው LAN ያጋልጣል። | | `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | የተካተተው Mux (coder/mux) agent-orchestration daemon የሚያዳምጥበትን port ይተካል (ሁልጊዜ 127.0.0.1)። | | `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | የተካተተው open-wa (WhatsApp Web automation) daemon የሚያዳምጥበትን port ይተካል (ሁልጊዜ 127.0.0.1)። | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | የDario embedded-service bind/connect host (በነባሪ loopback ብቻ)። | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | የDario embedded-service port። | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | የDario embedded-service bind/connect host (በነባሪ loopback ብቻ)። | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | የDario ውስጠ-ገብ አገልግሎት ወደብ። | | `LOCAL_HOSTNAMES` | _(ባዶ)_ | `open-sse/config/providerRegistry.ts` | በነጠላ ሰረዝ የተለዩ፣ እንደ «አካባቢያዊ» የሚቆጠሩ ተጨማሪ የአስተናጋጅ ስሞች (የDocker አገልግሎት ስሞች፣ ወዘተ)። | `ENABLE_CC_COMPATIBLE_PROVIDER` የClaude Code ደንበኞችን ብቻ ለሚቀበሉ የሶስተኛ ወገን ማስተላለፊያዎች ብቻ ነው። OmniRoute እነዚያ ማስተላለፊያዎች እንዲቀበሏቸው ጥያቄዎችን እንደገና ይጽፋል። Claude Code CLIን ብቻ መጠቀም ከፈለጉ፣ ወይም እነዚህ ማስተላለፊያዎች ምን እንደሆኑ እርግጠኛ ካልሆኑ፣ ይህን እንደተሰናከለ ይተዉት እና በምትኩ መደበኛ ከAnthropic ጋር ተኳሃኝ የሆነ አቅራቢ ያክሉ። --- ## 21. የፕሮክሲ ጤና | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | የፈጣን ውድቀት የጤና ምርመራ ጊዜ ገደብ። | | `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | በመዘግየት የተመቻቸው የፑል ስልት ውስጥ የዕጩ ፕሮክሲዎችን አማካይ መዘግየት ለማስላት የሚያገለግል የጊዜ መስኮት (በሰዓታት)። | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | የጤና ምርመራ ውጤት መሸጎጫ TTL። | | `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | ላልተሳኩ የፕሮክሲ ጤና ፍተሻዎች የመሸጎጫ TTL። በከፍተኛ ትይዩነት ወቅት የሚከሰቱ ጊዜያዊ የፕሮክሲ ጊዜ ማብቂያዎች፣ በእውነት የማይሠሩ ፕሮክሲዎች ላይ ፈጣን ውድቀትን ሳያሰናክሉ በፍጥነት እንደገና እንዲሞከሩ፣ ይህንን ከ`PROXY_HEALTH_CACHE_TTL_MS` ያጠረ ያድርጉት። | | `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | የተመዘገቡ ፕሮክሲዎችን በየጊዜው የሚፈትሸውን የጀርባ የፕሮክሲ ጤና መርሐግብር አስኬጅ ለማሰናከል `false` ያዘጋጁ። | | `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | የጀርባ ጤና መርሐግብር አስኬጅ የፍተሻ ክፍተት በms (ዝቅተኛው `60000`)። | | `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | በጀርባ የሚከናወን የመልሶ ማግኛ ዙር ክፍተት በms፦ ከዚህ ቀደም ጤናማ ያልነበሩ ፕሮክሲዎች ምን ያህል ጊዜ በድጋሚ እንደሚፈተሹ፣ ይህም ያገገመ ፕሮክሲ ዳግም ማስጀመር ሳያስፈልገው ወደ ዙረቱ እንዲመለስ ያደርጋል። ከ`60000` በታች ያሉ እሴቶች ወደ ነባሪው ይመለሳሉ። | | `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | በመርሐግብር አስኬጁ እና በ`/api/settings/proxies/auto-test` መጨረሻ ነጥብ የሚጠቀሙበት የተደራሽነት ፍተሻ ዒላማ። ይፋዊውን ነባሪ ለማስወገድ ወደ ውስጣዊ/በራስ የተስተናገደ URL ያመልክቱት። | | `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | በእያንዳንዱ ስብስብ በአንድ ጊዜ የሚጀመሩ ፍተሻዎች፣ በመርሐግብር አስኬጁ እና በ`/api/settings/proxies/auto-test` መጨረሻ ነጥብ መካከል የሚጋሩ። ዝቅተኛው 1 ሲሆን ከፍተኛው በ50 የተገደበ ነው። | | `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | በአንድ ስብስብ ውስጥ በሁለት ፍተሻዎች መነሻ መካከል ያለው መዘግየት በms። ይህ ከሌለ ጠቅላላው ስብስብ በተመሳሳይ ቅጽበት ይወጣል፣ እና የጋራ መውጫ IP የጥያቄ መጠኑ የተገደበ ዒላማን ሊያነቃ ይችላል። ክፍተቱን ለማሰናከል ወደ `0` ያዘጋጁ፤ ከፍተኛው በ5000 የተገደበ ነው። | | `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | ለፕሮክሲው የተመደበውን አቅራቢ እውነተኛ አስተናጋጅ (`GET /models`፣ API key የሌለው) መፈተሽን ለማቆም እና በምትኩ ሁልጊዜ `PROXY_HEALTH_TEST_URL`ን ለመጠቀም "false" ያዘጋጁ። | | `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | `false` ሲሆን (ነባሪው)፣ ራስ-ሰር የተደራሽነት ፍተሻዎች (መርሐግብር አስኬጁ + የ`/api/settings/proxies/auto-test` "ሁሉንም ፈትሽ" አዝራር) **ለንባብ ብቻ** ናቸው እና የፕሮክሲን ሁኔታ ፈጽሞ አይጽፉም — ንቁ/ንቁ ያልሆነ ሁኔታን የሚያዘጋጀው ኦፕሬተሩ ብቻ ነው፤ ስለዚህ ያልተረጋጋ ፍተሻ የተመደበ ፕሮክሲን ከአገልግሎት ውጭ ማስቀረት አይችልም (#6246)። የቀድሞውን የፍተሻና-ማዘጋጀት ባህሪ ለመመለስ `true` ያዘጋጁ። | | `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | በምርጫ የሚነቃ የባህሪ ጠቋሚ ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md)ን ይመልከቱ፤ የዳሽቦርዱ DB ማሻሻያ ቅድሚያ ይኖረዋል)። `true` (ወይም `1`፣ `yes`) ባዶ 200 ወይም ባዶ-ይዘት 502 ከማሳየት ይልቅ ባዶ የተተረጎሙ የዥረት ዙሮችን በመደበኛው የማረጋገጫ መንገድ (እስከ `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` የድጋሚ ሙከራዎች) እንደገና ይሞክራል። | | `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | በምርጫ የሚነቃ የባህሪ ጠቋሚ ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md)ን ይመልከቱ፤ የዳሽቦርዱ DB ማሻሻያ ቅድሚያ ይኖረዋል)። `true` (ወይም `1`፣ `yes`) በዳሽቦርዱ ውስጥ ከፕሮክሲ ስብስብ ስር ለንባብ ብቻ የሆነውን የስብስብ መውጫ ምልከታ ያሳያል (የተለያዩ መውጫ IPዎች፣ ግንኙነቶች እና ባለፉት 24 h በአንድ IP ጀርባ በብዛት የታየው ብዛት፣ ከፕሮክሲ ምዝግብ ማስታወሻ)። ለማዘዋወር ፈጽሞ ጥቅም ላይ አይውልም። | | `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | ተደጋጋሚ ተከታታይ አለመሳካቶች ከተከሰቱ በኋላ scheduler ፕሮክሲዎችን በራስ-ሰር እንዲያስወግድ `true` ያድርጉ። | | `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | scheduler ፕሮክሲን በራስ-ሰር ከማስወገዱ በፊት የሚፈቀዱ ተከታታይ አለመሳካቶች ብዛት (`PROXY_AUTO_REMOVE=true` ሲሆን)። | | `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | ተደጋጋሚ ተከታታይ አለመሳካቶች ከተከሰቱ በኋላ scheduler ፕሮክሲን ከማስወገድ ይልቅ በሶፍትዌር ደረጃ እንዲያሰናክለው (ሁኔታው `dead` ይሆናል፣ ፈጽሞ አይሰረዝም) `true` ያድርጉ። ይህ ለ`PROXY_AUTO_REMOVE` አጥፊ ያልሆነ አማራጭ ነው፦ ፕሮክሲው ወዲያውኑ ከpool/rotation መፍትሔ ይወጣል (በscope-pool መፍትሔ የሚጠቀመው የalive-status ማጣሪያ አስቀድሞ ያስወግደዋል)፣ እና probesን እንደገና ማለፍ ሲጀምር በራስ-ሰር እንደገና ይነቃል። የ`PROXY_AUTO_REMOVE_AFTER` thresholdን ይጋራል። ሁለቱም flags `true` ከሆኑ፣ `PROXY_AUTO_REMOVE` ቅድሚያ ይኖረዋል። | | `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | የፕሮክሲ ተደራሽነት ቅድመ-ምርመራዎች ሲያልፉ፣ OAuth እና provider ማረጋገጫ ፍሰቶች የተወሰነላቸውን ፕሮክሲ አልፈው በቀጥታ እንዲገናኙ ፍቀድ። ተግባራዊ የቅድሚያ ቅደም ተከተሉ Feature Flags DB override > env var > default ነው። | | `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 ሰከንድ) | `src/lib/resilience/settings.ts` | ነባሪ **queue-wait** በጀት፦ ጥያቄው ውድቅ ከመደረጉና upstream ጋር ሳይደርስ በፊት የprovider slotን ለመጠበቅ እና queue ውስጥ ለመቆየት የሚፈቀድለት ጊዜ። job መፈጸም እንደጀመረ timerው ይጸዳል — አፈጻጸሙ በ`RATE_LIMIT_EXECUTION_MAX_WAIT_MS` በተናጠል ይገደባል። Env የሚያዘጋጀው ነባሪውን ብቻ ነው፦ በቋሚነት የተቀመጠ `resilienceSettings.requestQueue.maxWaitMs`፣ ከዚያም ለእያንዳንዱ connection የሚዘጋጅ `rateLimitOverrides.maxWaitMs`፣ እያንዳንዳቸው በእሱ ላይ ቅድሚያ ያገኛሉ። | | `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 ደቂቃ) | `open-sse/services/rateLimitManager.ts` | ተቀባይነት ያገኘ ጥያቄ የrate-limit reservation ጊዜው ከማለቁ በፊት በexecution ውስጥ ሊቆይ የሚችልበት ከፍተኛ ጊዜ — በnon-incremental gateways ላይ የዘገየ fetch-start timeout እንዳያደርግ ከqueue-wait በጀቱ ተነጥሏል (#12027)። | | `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (ቦዝኗል) | `open-sse/services/rateLimitManager.ts` | የqueue መቀበያ ገደብ፦ ይህን ያህል ጥያቄዎች አስቀድመው queue ውስጥ ካሉ፣ በ429 `queue_full` ውድቅ ያድርጉ። `0` = ያልተገደበ (ነባሪ)። | | `RATE_LIMIT_AUTO_ENABLE` | _(አልተዘጋጀም)_ | `open-sse/services/rateLimitManager.ts` | በቋሚነት የተቀመጠው Dashboard ቅንብር ምንም ቢሆን፣ የauto-enable rate limit የደህንነት መረብን በግድ አብራ/አጥፋ። በግድ ለማብራት `true`/`1`/`on`ን፣ በግድ ለማጥፋት `false`/`0`/`off`ን ይቀበላል። | | `PROVIDER_COOLDOWN_ENABLED` | _(አልተዋቀረም → ጠፍቷል)_ | `open-sse/services/providerCooldownTracker.ts` | በምርጫ የሚነቃ፣ በሁሉም ጥያቄዎች መካከል የሚሠራ ዓለም አቀፍ የአቅራቢ/ግንኙነት የማቀዝቀዣ ጊዜ ክትትል። በነባሪነት ጠፍቷል (ከግንኙነት የማቀዝቀዣ ጊዜ / የአቅራቢ ወረዳ ቆራጭ ጋር ይደራረባል)። ለማንቃት `true`/`1`/`on` ይቀበላል። | | `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | ያልተሳካ አቅራቢ/ግንኙነት እንደገና ከመሞከሩ በፊት ያለው ዝቅተኛው የማቀዝቀዣ ጊዜ (ms)። በተከታታይ ውድቀቶች መጠን ኤክስፖነንሻል በሆነ መንገድ ይጨምራል። `PROVIDER_COOLDOWN_ENABLED` ሲነቃ ብቻ ጥቅም ላይ ይውላል። | | `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 ደቂቃ) | `open-sse/services/providerCooldownTracker.ts` | ያልተሳካ አቅራቢ/ግንኙነት ምንም ይሁን ምን እንደገና ከመሞከሩ በፊት ያለው ከፍተኛው የማቀዝቀዣ ጊዜ (ms) ገደብ። `PROVIDER_COOLDOWN_ENABLED` ሲነቃ ብቻ ጥቅም ላይ ይውላል። | | `STREAM_RECOVERY_ENABLED` | _(አልተዋቀረም → ጠፍቷል)_ | `src/lib/resilience/settings.ts` (መነሻ እሴት) → `open-sse/services/streamRecovery.ts` (አመክንዮ) | **ምንድን ነው፦** የተቋረጡ የላይኛው ምንጭ ዥረቶችን በግልጽነት ማገገም (የ-free-claude-code ዝውውር)። የመክፈቻውን SSE መስኮት እስከ `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) ድረስ ይይዛል፤ በዚህም ምንም ባይት ደንበኛው ጋር ከመድረሱ በፊት የሚከሰት _ቅድመ-ማረጋገጫ_ መቋረጥ በማይታይ ሁኔታ እንደገና ተከፍቶ ይሞከራል። **መቼ ማንቃት እንዳለብዎት፦** ያልተረጋጉ/በዥረት መጀመሪያ ላይ በተደጋጋሚ 0-ባይት የሚቋረጡ የላይኛው ምንጮች ሲኖሩ፤ በእያንዳንዱ ዥረት ላይ እስከ 750 ms የሚደርስ ተጨማሪ የመጀመሪያ-ቶከን-ጊዜ መቀበል ካልቻሉ እንደጠፋ ይተዉት። `true`/`1`/`on` ይቀበላል። የሚቀመጠውን የመቋቋም ቅንብር በመነሻ እሴት ይሞላል፤ አንዴ ከተዋቀረ የዳሽቦርዱ ቅንብር ቅድሚያ ያገኛል። | | `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(አልተዋቀረም → ጠፍቷል)_ | `src/lib/resilience/settings.ts` (መነሻ እሴት) → `open-sse/services/streamRecovery.ts` (አመክንዮ) | **ምንድን ነው፦** የዥረት-መሃል ቀጣይነት (ደረጃ 4.4) — ከ _ድህረ-ማረጋገጫ_ መቋረጥ በኋላ (ባይቶች አስቀድመው ደንበኛው ጋር ደርሰዋል)፣ ከፊል ጽሑፉን እንደ ረዳት ቅድመ-ሙሌት በመጠቀም እንደገና ይጠይቃል እና የጎደለውን ቅጥያ ያገናኛል። ለግልጽ-ጽሑፍ OpenAI-ተኳኋኝ ዥረቶች ብቻ፤ የመሣሪያ ጥሪ በሂደት ላይ እያለ ፈጽሞ አይነሳም። **መቼ ማንቃት እንዳለብዎት፦** በመልሱ መሃል የሚቋረጡ ረጅም ማመንጨቶች ሲኖሩ እና የተመለሰው የመጨረሻ ክፍል ቶከን-በ-ቶከን ሳይሆን በአንድ ጊዜ መድረሱን ከተቀበሉ። ከ`STREAM_RECOVERY_ENABLED` ነጻ ነው (የተለየ የአደጋ መገለጫ)። `true`/`1`/`on` ይቀበላል። | | `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(አልተዋቀረም → ጠፍቷል)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | በምርጫ የሚነቃ፣ ለንቁ ዥረት ጠቃሚ ውፅዓት ተቆጣጣሪ። ዥረቶች ክፍሎችን መላካቸውን ቢቀጥሉም ከተዋቀረው የረዳት-ውፅዓት ፍጥነት በታች ሲቆዩ ይለያል፤ የልብ ምት ምልክቶች፣ የአጠቃቀም ክስተቶች፣ ባዶ ለውጦች እና የመሣሪያ/የምክንያታዊ አስተሳሰብ ደረጃዎች እድገት እንዳለ አስመስለው አያቀርቡም። ከስራ-ፈት እና ከጥብቅ የመጨረሻ ጊዜ ማብቂያዎች የተለየ ነው። | | `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | የውፅዓት መጠን ምዘና ከመጀመሩ በፊት ያለው የእፎይታ ጊዜ፣ ከ0–600000 ms የተገደበ። | | `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | ተንከባላይ የጠቃሚ-ውፅዓት መስኮት፣ ከ1000–600000 ms የተገደበ፤ ከማቋረጥ በፊት አንድ ሙሉ መስኮት ያስፈልጋል። | | `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | ዝቅተኛው የUTF-8 ረዳት-ውፅዓት ባይት ፍጥነት (ጥንቃቄ የተሞላበት የቶከን ግምት)፣ ከ1–1000000 የተገደበ። | | `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | ሊለካ የሚችል ተብሎ የሚቆጠር ዝቅተኛው ዜሮ ያልሆነ የጠቃሚ-ውፅዓት ናሙና፣ ከ1–1000000 ባይቶች የተገደበ። | | `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | ሲጀመር በአቅራቢ ቶከን የጤና ፍተሻዎች መካከል ያለው የማዘግየት ክፍተት (ms)። | | `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | ድንገተኛ የጥያቄ መብዛትን ለመከላከል፣ በአቅራቢ ቶከን የጤና ምርመራዎች መካከል በ`HEALTHCHECK_STAGGER_MS` ላይ የሚጨመረው ዝቅተኛው በዘፈቀደ የሚወሰን መዘግየት (ms) (Issue #1220)። | | `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | ድንገተኛ የጥያቄ መብዛትን ለመከላከል፣ በአቅራቢ ቶከን የጤና ምርመራዎች መካከል በ`HEALTHCHECK_STAGGER_MS` ላይ የሚጨመረው ከፍተኛው በዘፈቀደ የሚወሰን መዘግየት (ms) (Issue #1220)። | | `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | ሲጀመር ለሚከናወነው የቶከን ጤና ምርመራ ቅኝት በአንድ ጊዜ የሚፈተሸው ባች መጠን፤ ትልልቅ እሴቶች ብዙ ግንኙነቶችን በትይዩ ይፈትሻሉ፣ ትናንሽ እሴቶች ድንገተኛ ጭነትን ይቀንሳሉ (Issue #7875፣ የ#7719 ዳግም መከሰት)። | | `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | ስህተቱን ወደ ደንበኛው ከመመለስ በፊት፣ በሞዴል ወሰን ባላቸው የማቀዝቀዣ ጊዜ ምላሾች ላይ የሚደረጉ ራስ-ሰር ዳግም ሙከራዎች ብዛት። | | `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | በማቀዝቀዣ ጊዜ ዳግም ሙከራዎች መካከል ከፍተኛው የመጠበቂያ ክፍተት (ሰከንዶች)። የወራጅ አቅራቢው `Retry-After` ምንም ቢሆን፣ በዚህ እሴት ይገደባል። | | `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | የHeadroom ቶከን ቆጣቢ ፕሮክሲ URL። የዳሽቦርድ የሕይወት ዑደት (`api/headroom/*`) በነባሪነት አካባቢያዊ `headroom-ai` CLI በloopback ላይ ያስነሳል፤ ይህን ከውጫዊ Docker sidecar ፕሮክሲ ጋር ለማገናኘት ብቻ ይቀይሩት። | ### የዥረት መልሶ ማግኛ ማስተካከያ ቋሚዎች የመልሶ ማግኛ የማቆያ ባህሪው በ `open-sse/config/constants.ts` (`STREAM_RECOVERY`) ውስጥ በቋሚነት በተቀመጡ ቋሚዎች የተስተካከለ ሲሆን፣ ለማጣቀሻ እዚህ ቀርበዋል — እነሱን ለመቀየር የኮድ አርትዖት ያስፈልጋል፣ የአካባቢ ተለዋዋጭ አይደለም፦ - `STREAM_RECOVERY.HOLDBACK_MS = 750` — ማንኛውም ባይት ለደንበኛው ከመላኩ በፊት ቀደምት መቆረጥ ዳግም እንዲሞከር፣ የመክፈቻው SSE መስኮት የሚቆይበት ጊዜ። - `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — በተያዘው መስኮት ላይ ያለው ጥብቅ ገደብ፤ ሰዓት ቆጣሪው ምንም ቢሆን፣ ይህን ያህል ባይቶች እንደተከማቹ ወዲያውኑ ይላካል (ማፍሰስ + በቀጥታ ማሳለፍ)። - `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — የማቆያው ይዘት ገና ሳይላክ፣ የወራጅ ዥረቱ በግልጽነት እንደገና ሊከፈት የሚችልበት ከፍተኛ ብዛት። > **ለእያንዳንዱ አቅራቢ የሚተገበር ተንሸራታች-መስኮት የፍጥነት ገደብ (የአካባቢ ተለዋዋጭ የለውም)፦** ከFCC የተላለፈው > ለእያንዳንዱ አቅራቢ የሚተገበር የተንሸራታች-መስኮት የፍጥነት ገደብ _መጠባበቂያ_ በኮድ ውስጥ አለ > (`open-sse/services/providerDefaultRateLimit.ts`፣ በ > `open-sse/services/rateLimitManager.ts` በኩል የተገናኘ)፣ ነገር ግን በ**ባዶ ነባሪ ካርታ** ይሰራጫል > እና በአሁኑ ጊዜ **የኦፕሬተር የአካባቢ ተለዋዋጭ የለውም** — የሚነቃው በሙከራ hook / > የኮድ አርትዖት ብቻ ነው። ሆን ተብሎ ከላይ ባለው ሰንጠረዥ ውስጥ አልተዘረዘረም። ማስተካከያ ያለው የእያንዳንዱ-`(token, IP)` > የrelay ገዳቢ `RELAY_IP_PER_MINUTE` ነው (§3 አውታረ መረብ እና ፖርቶች)። --- ## 22. ማረም > [!CAUTION] > እነዚህ ተለዋዋጮች **ዝርዝር ውጤት** ያመነጫሉ፣ እንዲሁም ሚስጥራዊ ውሂብን ሊያጋልጡ ይችላሉ። **በምርት አካባቢ ፈጽሞ አያንቁ።** | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CURSOR_DEBUG` | _(አልተዋቀረም)_ | `open-sse/executors/cursor.ts` | ዝርዝር የCursor አስፈጻሚ ምዝግቦችን (ዲኮድ የተደረጉ SSE ቁርጥራጮችን ወዘተ) ለማንቃት `1` ያዘጋጁ። | | `CURSOR_STREAM_DEBUG` | _(አልተዋቀረም)_ | `open-sse/executors/cursor.ts` | ወደኋላ ተኳሃኝ የሆነ የ`CURSOR_DEBUG` ቅጽል ስም። | | `CURSOR_DUMP_FILE` | _(አልተዋቀረም)_ | `open-sse/executors/cursor.ts` | `CURSOR_DEBUG=1` ሲሆን ጥሬ ዲኮድ የተደረጉ የCursor ቁርጥራጮችን የሚቀበል አማራጭ የፋይል ዱካ። | | `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | ለCursor አስፈጻሚው የዥረት ስራ-ፈት ጊዜ ገደብ (ms)። | | `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | ባይቶች በቋቱ ውስጥ ሲቀሩ ከcomposer kv_after_text ለስላሳ ማብቂያ በኋላ ያለው የጸጋ ጊዜ (ms) — ተከትሎ ለሚመጣው exec_mcp የመሣሪያ ጥሪ ፍሬሙን ለማጠናቀቅ ጊዜ ይሰጣል። | | `CURSOR_TOOL_DIRECTIVE` | ነቅቷል (`!== "0"`) | `open-sse/executors/cursor.ts` | composer-2.5 የመሣሪያ ጥሪዎችን በአስተማማኝ ሁኔታ እንዲያወጣ የሚያደርግ የመሣሪያ ማረጋገጫ መመሪያ። ለማሰናከል `0` ያዘጋጁ። | | `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(አልተዋቀረም)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | ከትርጉም በኋላ ወደስርዓት መልዕክቱ የሚጨመር በኦፕሬተሩ የተገለጸ የስርዓት ጥያቄ ጽሑፍ (ከትርጉም በኋላ ማስገባት)፤ codex/Responses እና `/v1/messages` ዱካዎችን ይደርሳል። እንዲሁም በድጋሚ ከተላኩ የስርዓት መግቢያ ብሎኮች የሚወገደው የመመሪያ ቅድመ ቅጥያ ሆኖ ያገለግላል። ለማሰናከል ሳይዋቀር ይተዉት። | | `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (ጠፍቷል) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | በድጋሚ የተላኩ የስርዓት-ጥያቄ መግቢያ ብሎኮችን ከopenai→claude ዥረት መጀመሪያ ለማስወገድ `1` ያዘጋጁ። በነባሪ ጠፍቷል — ግምታዊ ደንቦቹ በእንግሊዝኛ ስድ ጽሑፍ ቅርጽ የተሰሩ ሲሆን የምላሹን ይዘት ይቀይራሉ፤ ስለዚህ በትክክል እንዲህ ባለ ክፍል የሚጀምር ምላሽ ያንን ክፍል ያጣል። | | `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | ለርቀት `image_url` የምስል ግብዓት የእያንዳንዱ ምስል ማምጣት ጊዜ ገደብ (ms)። | | `CURSOR_STATE_DB_PATH` | _(ተፈልጎ ይገኛል)_ | `open-sse/utils/cursorVersionDetector.ts` | የIDE ስሪትን ለማወቅ የሚጠቅመውን የCursor IDE ሁኔታ DB ፍለጋ ይተኩ። | | `CURSOR_AGENT_CLI_VERSION` | _(ለይ / አ固定)_ | `open-sse/utils/cursorAgentCliVersion.ts` | በAgent Run ላይ ለ`x-cursor-client-version: cli-…` የAgent CLI ግንባታ መለያ (`YYYY.MM.DD-`)። | | `CURSOR_AGENT_BIN` | _(አልተዋቀረም)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | ምስል ለማመንጨት የሚያገለግለው የCursor Agent ባይነሪ ዱካ። ካልተዋቀረ ተቆጣጣሪው `providerSpecificData.agentBin`ን ከዚያም PATHን ይጠቀማል። | | `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | ለCursor Agent የምስል ስራዎች የእያንዳንዱ ምስል አጠቃላይ ጊዜ ገደብ (ms)። | | `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | ለCursor የምስል ስራዎች የጋራ መቀመጫ ተመሳሳይ ጊዜ ማስኬጃ በር። | | `CURSOR_IMG_MODEL` | ጥያቄ / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | ለምስል ስራዎች የCursor CLI `--model`ን ይተኩ። | | `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | የUC (uncensored.com) ምስል-ማመንጨት ውጤት ምርመራ ድግግሞሽ (ms)። | | `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | የUC ምስል-ማመንጨት ውጤት ምርመራ አጠቃላይ ጊዜ ገደብ (ms)። | | `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | የUC (uncensored.com) ቪዲዮ-ማመንጨት ውጤት ምርመራ ድግግሞሽ (ms)። | | `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | የUC ቪዲዮ-ማመንጨት ውጤት ምርመራ አጠቃላይ ጊዜ ገደብ (ms)። | | `CURSOR_DATA_DIR` | _(ተፈልጎ ይገኛል)_ | `open-sse/utils/cursorAgentCliVersion.ts` | የCursor Agent CLI ውሂብ ማውጫን (`…/versions/`) ይተኩ፤ ይህ ይፋዊው ወኪል የሚጠቀመው ተመሳሳይ ተለዋዋጭ ነው። | | `CURSOR_TOKEN` | _(አልተዋቀረም)_ | `scripts/ad-hoc/cursor-tap.cjs` | በገንቢ መሣሪያዎች የሚጠቀም ቀጥተኛ የCursor bearer ቶከን። | | `OMNIROUTE_LOG_REQUEST_SHAPE` | ተሰናክሏል (በ`"1"` በፈቃድ ይነቃል) | `src/app/api/v1/chat/completions/route.ts` | `"1"` ሲዘጋጅ ለትላልቅ የውይይት ይዘቶች የይዘት-አይነት/ርዝመት ምልክቶችን ይመዝግቡ። የምዝግብ ጫጫታን ለመቀነስ በነባሪ ጠፍቷል። | | `DEBUG_RESPONSES_SSE_TO_JSON` | _(አልተዋቀረም)_ | `open-sse/handlers/responseTranslator.ts` | የResponses API SSE→JSON ትርጉም ዝርዝሮችን ለመመዝገብ `true` ያዘጋጁ። | | `DEBUG_CLAUDE_NONSTREAM` | _(አልተዋቀረም)_ | `open-sse/handlers/responseTranslator.ts` | በClaude ምላሽ ትርጉም ዱካ ውስጥ ባዶ textContent ቁርጥራጮችን ለማሳየት `true` ያዘጋጁ (ለማረም ብቻ)። | | `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(አልተዋቀረም)_ | የE2E ሙከራ ማስኬጃ | የE2E ሙከራ ሁነታን (የተለሳለሰ ማረጋገጫ፣ የሙከራ ማያያዣዎች) ለማንቃት `true` ያዘጋጁ። | --- ## 23. የGitHub ውህደት ተጠቃሚዎች ችግሮችን በቀጥታ ከዳሽቦርዱ ሪፖርት እንዲያደርጉ ይፍቀዱ። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | --------------------- | ----------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `GITHUB_ISSUES_REPO` | _(አልተዋቀረም)_ | `src/app/api/v1/issues/report/route.ts` | በ`owner/repo` ቅርጸት የተጻፈ ማከማቻ። | | `GITHUB_ISSUES_TOKEN` | _(አልተዋቀረም)_ | `src/app/api/v1/issues/report/route.ts` | `issues:write` ወሰን ያለው የGitHub የግል መዳረሻ ቶከን። | | `GITHUB_TOKEN` | _(አልተዋቀረም)_ | የችግር ምደባ / የደመና ወኪል አጋዥ መሣሪያዎች | ለ`GITHUB_ISSUES_TOKEN` እንደ አማራጭ የሚያገለግል እና በ`src/lib/cloudAgent/*` ውስጥ ባሉ የደመና ወኪል አጋዥ መሣሪያዎች ጥቅም ላይ የሚውል አጠቃላይ የGitHub መዳረሻ ቶከን። | --- ## የማሰማራት ሁኔታዎች ለrelay backend SRE መመሪያ (የts/bifrost/auto ባህሪ፣ የ9router እና CLIProxyAPI አቀማመጥ፣ እንዲሁም የከፍተኛ ፍሰት መጠን አማራጭ ስትራቴጂ)፣ [የRelay Backend ስትራቴጂ](/docs/reference/RELAY_BACKEND_STRATEGY.md)ን ይመልከቱ። ### አነስተኛ የአካባቢ ልማት ```bash JWT_SECRET=$(openssl rand -base64 48) API_KEY_SECRET=$(openssl rand -hex 32) INITIAL_PASSWORD=dev123 PORT=20128 NODE_ENV=development ``` ### የDocker ፕሮዳክሽን ```bash JWT_SECRET= API_KEY_SECRET= INITIAL_PASSWORD= STORAGE_ENCRYPTION_KEY= DATA_DIR=/data PORT=20128 API_PORT=20129 NODE_ENV=production AUTH_COOKIE_SECURE=true REQUIRE_API_KEY=true NEXT_PUBLIC_BASE_URL=https://omniroute.example.com BASE_URL=http://localhost:20128 OMNIROUTE_MEMORY_MB=8192 CORS_ORIGIN=https://your-frontend.example.com ``` ### ከአውታረ መረብ የተለየ / CI ```bash JWT_SECRET=test-jwt-secret-for-ci API_KEY_SECRET=test-api-key-secret-for-ci INITIAL_PASSWORD=testpass NODE_ENV=production OMNIROUTE_DISABLE_BACKGROUND_SERVICES=true APP_LOG_TO_FILE=false ``` ### Reverse Proxy ያለው VPS (nginx + Cloudflare) ```bash JWT_SECRET= API_KEY_SECRET= STORAGE_ENCRYPTION_KEY= PORT=20128 AUTH_COOKIE_SECURE=true REQUIRE_API_KEY=true NEXT_PUBLIC_BASE_URL=https://omniroute.example.com BASE_URL=http://127.0.0.1:20128 CORS_ORIGIN=https://omniroute.example.com ENABLE_TLS_FINGERPRINT=true CLI_COMPAT_ALL=1 ``` --- ## 24. የክህሎቶች ሳንድቦክስ (v3.8.0+) የክህሎቶች ማዕቀፍ (`src/lib/skills/`) በተገለለ አካባቢ ውስጥ በተጠቃሚ የተገለጹ አውቶሜሽኖችን ሲያስኬድ ተግባራዊ የሚደረጉ ገደቦች እና የደህንነት ቅንብሮች። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | --------------------------------- | ---------------------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 ሰከንድ) | `src/lib/skills/builtins.ts` | ለእያንዳንዱ አፈጻጸም የተገለለ የክህሎት ኮድ የግድግዳ-ሰዓት ጊዜ ገደብ። ፍጹም ገደብ ነው፤ ከዚህ በላይ የሚቆይ ማንኛውም ነገር ይቋረጣል። | | `SKILLS_EXECUTION_TIMEOUT_MS` | _(ወደ `SKILLS_SANDBOX_TIMEOUT_MS` ይመለሳል)_ | `src/lib/skills/` | የከፍተኛ ደረጃ የክህሎት ኦርኬስትሬሽን ጊዜ ገደብ። ባለብዙ-ደረጃ የሥራ ፍሰቶችን ለመፍቀድ ከ`SKILLS_SANDBOX_TIMEOUT_MS` ከፍ አድርገው ያዋቅሩት። | | `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | አንድ ክህሎት ከማንኛውም ነጠላ የተገለለ ፋይል ማንበብ የሚችለው ከፍተኛው ባይት መጠን። | | `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | በአንድ ክህሎት ውስጥ ከማንኛውም ነጠላ HTTP ምላሽ የሚያዝ ከፍተኛው ባይት መጠን። | | `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | ከሳንድቦክስ ጥሪ የሚመለሱ የstdout/stderr ቁምፊዎች ፍጹም ገደብ። | | `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | ከሳንድቦክሱ ውስጥ ወደ ውጭ የአውታረ መረብ ግንኙነትን ለመፍቀድ `1`/`true` ያድርጉት። ለደህንነት ሲባል በነባሪ **የተገለለ** ነው። | | `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(ባዶ)_ | `src/lib/skills/builtins.ts` | ለሳንድቦክስ አፈጻጸም የተፈቀዱ በነጠላ ሰረዝ የተለዩ የኮንቴይነር ምስሎች የፈቃድ ዝርዝር። ባዶ ከሆነ አብሮ የተሰራው ነባሪ ብቻ ማለት ነው። | | `SKILLS_SANDBOX_DOCKER_IMAGE` | _(አብሮ የተሰራ ነባሪ)_ | `src/lib/skills/` | በDocker የሚደገፍ ሳንድቦክስ ሲጀመር ጥቅም ላይ የሚውል የኮንቴይነር ምስል። ብጁ የተጠናከረ መሠረታዊ ምስል ለመወሰን ይቀይሩት። | | `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | የክህሎት ሳንድቦክስ የኮንቴይነር ማስኬጃ፦ `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`። `auto` በእያንዳንዱ የአስተናጋጅ OS ላይ ከተጫኑት ማስኬጃዎች ምርጡን ይመርጣል (በmacOS ላይ Apple Container/OrbStack፣ በWindows ላይ WSL Container፣ በLinux ላይ Podman)፤ ካልተገኘ ወደ Docker ይመለሳል። | > [!CAUTION] > `SKILLS_SANDBOX_NETWORK_ENABLED=true`ን ማንቃት ከማንኛውም የክህሎት ኮድ ወደ ውጭ የሚወጣ መንገድ ይከፍታል። በጋራ ማሰማራቶች ውስጥ ከ`OUTBOUND_SSRF_GUARD_ENABLED=true` እና ጥብቅ የ`CORS_ORIGIN`/ፕሮክሲ ፖሊሲ ጋር ያጣምሩት። --- ## 25. የአቅራቢ ኮታዎች፣ ቱነሎች፣ ምትኬዎች እና ልዩ ልዩ የአሂድ ጊዜ ቅንብሮች የአቅራቢ ኮታ መገልገያ ነጥቦች፣ የአውታረ መረብ ቱነሎች (Tailscale፣ Ngrok፣ MITM የማረሚያ ፕሮክሲ)፣ የ1Proxy ወጪ ትራፊክ ፑል፣ የውሂብ ጎታ ምትኬዎች እና በአስፈጻሚው ንብርብር ወይም ስክሪፕቶች የሚጠቀሱ አነስተኛ ባህሪ-ተኮር መተኪያዎች። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | ለፍጥነት ገዳቢው የጀርባ አገልግሎት የRedis ግንኙነት ሕብረቁምፊ። | | `ALIBABA_CODING_PLAN_HOST` | _(የምርት አስተናጋጅ)_ | `open-sse/services/bailianQuotaFetcher.ts` | የAlibaba Bailian coding-plan ኮታዎችን ለማምጣት የሚያገለግለውን አስተናጋጅ ይተካል። | | `ALIBABA_CODING_PLAN_QUOTA_URL` | ከአስተናጋጁ የተወሰደ | `open-sse/services/bailianQuotaFetcher.ts` | ለAlibaba Bailian ሙሉ የኮታ URL መተኪያ። | | `QWEN_CLOUD_COOKIE` | _(አልተዘጋጀም)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | ለQwen Cloud / Model Studio የግል Token Plan ኮታ መግቢያ የኮንሶል ክፍለ-ጊዜ cookie (የinference API ቁልፉ ሊያነበው አይችልም)። በhome.qwencloud.com › Billing › Subscription (F12 › Network) ላይ ወደ `cs-data.qwencloud.com` ከሚደረግ ከማንኛውም `api.json` ጥሪ፣ `login_qwencloud_ticket`ን የያዘውን ሙሉ የ`Cookie` ጥያቄ ራስጌ ይቅዱ። ሚስጥራዊ እና በክፍለ-ጊዜ የተገደበ ነው፤ የዳሽቦርድ የእያንዳንዱ-ግንኙነት `qwenCloudCookie` መስክን መጠቀም ይመረጣል። | | `QWEN_CLOUD_SEC_TOKEN` | _(አልተዘጋጀም)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | ለToken Plan ኮንሶል መግቢያ በእጅ የሚደረግ `sec_token` መተኪያ። ሚስጥራዊ ነው፤ ካልተዘጋጀ አምጪው cookieውን በመጠቀም ከዳሽቦርድ HTML ይፈታዋል። | | `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | ለግል Token Plan ኮታ አምጪው የመግቢያ አስተናጋጅ መተኪያ (ለምሳሌ፣ ለModel Studio ኮንሶል `bailian-singapore-cs.alibabacloud.com`)። | | `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | ከገቡበት HTML ውስጥ `sec_token`ን ለማግኘት የሚያገለግል የዳሽቦርድ URL። | | `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | የAlibaba Model Studio ነጻ-ደረጃ የምስል/ሚዲያ ኮታን ለማምጣት የኮንሶል የፊት-ገጽ ዱካ መተኪያ። | | `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | የAlibaba Model Studio ነፃ ደረጃ ባለብዙ ሞዳሊቲ ኮታን ለማምጣት የኮንሶል የፊት-ገጽ ዱካ መተኪያ። | | `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | የAlibaba Model Studio ነፃ ደረጃ የድምፅ ኮታን ለማምጣት የኮንሶል የፊት-ገጽ ዱካ መተኪያ። | | `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(አልተዋቀረም)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | አብሮ የተካተተውን የAlibaba ነፃ ደረጃ የጽሑፍ-ሞዴል የፈቃድ ዝርዝር ለመተካት የሚያገለግል አማራጭ የአካባቢያዊ JSON ዱካ። መጀመሪያ `$DATA_DIR/alibaba-free-tier-allowlist.json`ን፣ ከዚያ `config/alibaba-free-tier-allowlist.json`ን እንደ አማራጭ ይጠቀማል። | | `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | የጥያቄ በጀቶችን ሲያሰላ ለማጠናቀቂያ ውጤት የሚመደቡ ቶከኖች። | | `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | ከአውድ መስኮቱ ጋር እንዲጣጣሙ የቆዩትን ምስሎች ሲቀንሱ፣ ከአዳዲሶቹ የመስመር-ውስጥ ምስሎች ስንቱ እንደሚቀመጥ (#8560)። | | `MODEL_ALIAS_COMPAT_ENABLED` | ነቅቷል | `open-sse/services/model.ts` | በቀድሞ ደንበኞች ጥቅም ላይ የሚውለውን የቆየ የሞዴል-ቅጽል ስም ተኳኋኝነት ንብርብር ማብሪያ/ማጥፊያ። | | `OMNIROUTE_EMERGENCY_FALLBACK` | ነቅቷል | `open-sse/services/emergencyFallback.ts` | ያልተሳኩ ጥያቄዎችን ወደ ነፃው `nvidia`/`openai/gpt-oss-120b` ሞዴል እንደገና የሚመራውን የበጀት-ማለቅ ድንገተኛ አማራጭ ለማሰናከል `false` (ወይም `0`) ያዘጋጁ። ተግባራዊው ቅድሚያ የባህሪ ባንዲራዎች DB መተኪያ > የአካባቢ ተለዋዋጭ > ነባሪ ነው፤ ይህ የማይገኝ ከሆነ አገልግሎቱ ያልተቀነባበረውን የአካባቢ ዋጋ እንደ አማራጭ ይጠቀማል። | | `COMMAND_CODE_CALLBACK_PORT` | _(አልተዋቀረም)_ | `src/app/api/providers/command-code/auth/shared.ts` | ከCommand Code CLI ረዳት ለሚመጡ OAuth-አይነት የመልስ ጥሪዎች ጥቅም ላይ የሚውል የአካባቢ ወደብ። | | `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | ወደ Command Code የላይኛው አገልግሎት እንደ `x-command-code-version` ራስጌ የሚላክ ዋጋ። የCLI ስሪቱን ለማሳደግ ይተኩት። | | `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | በስማርትፎን ኮታ-አምጪ ቴሌሜትሪ ጥቅም ላይ ለሚውለው የCommand Code አጠቃቀም/ኮታ የላይኛው አገልግሎት መሠረታዊ URL። በራስ ለሚስተናገድ/አማራጭ Command Code API ይተኩት። | | `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | ለMITM ማረሚያ ፕሮክሲ የአካባቢያዊ ማሰሪያ ወደብ። | | `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | የላይኛውን TLS ማረጋገጫ ለማሰናከል `1` ያድርጉ (ለልማት ብቻ)። | | `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | በፕሮክሲ ለሚተላለፉ ግንኙነቶች የስራ-ፈት socket ጊዜ ማብቂያ (ms)፤ ከዚህ ጊዜ በላይ ስራ-ፈት የሆኑ sockets በከፊል የተከፈቱ tunnels እንዳያፈስሱ ይዘጋሉ። | | `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | የAntigravity MITM bridge የሚያዳምጥበት ወደብ። | | `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | bridge-ው የAntigravity ትራፊክን የሚያስተላልፍበት የrouter endpoint። | | `CERT_DIR` | `~/.omniroute/mitm` | `bin/antigravity-bridge.mjs` | ለbridge-ው TLS listener `server.key`/`server.crt`ን የያዘ ማውጫ፤ ከሁለቱ አንዱ ከጎደለ bridge-ው ይወጣል። | | `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | የrouting-decision ምዝግብ ዝርዝርነት፦ `0` ምዝግብን ያጠፋል፤ ከፍተኛ እሴቶች ተጨማሪ የbypass/route ውሳኔዎችን ይመዘግባሉ። | | `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | የroot-CA + per-host-leaf cert ሞዴልን (#6684) በፈቃድ ለመጠቀም `true` ያድርጉ። አዲስ ጭነቶች በራስ-ሰር ያገኙታል፤ አስቀድሞ የሚታመን legacy leaf ያላቸው ጭነቶች በፈቃድ ካልመረጡት በስተቀር የlegacy fixed-SAN certን ያቆያሉ። | | `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | ለተጀመረው proxy process በMITM manager የሚዘጋጅ (`root-ca` \| `legacy`) — የcert-migration ውሳኔውን ያንጸባርቃል፤ በእጅ እንዲዘጋጅ የታሰበ አይደለም። | | `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | ከMITM cert-trust commands መጀመሪያ ላይ ያለውን `sudo` ለማስወገድ `1` (truthy) ያድርጉ — ኦፕሬተሩ CAውን በእጅ ለሚያምንባቸው root-less / user-namespaced ማሰማራቶች (ለምሳሌ በNode extra-CA-certs ዘዴ)። | | `SKIP_ANTIGRAVITY_DNS` | _(አልተዘጋጀም)_ | `src/mitm/dns/provision.ts` | ለAntigravity proxy hostnames የ`/etc/hosts` DNS ግቤቶችን ማቅረብ ሙሉ በሙሉ ለመዝለል `true` ያድርጉ — sudo/root ለማይገኝባቸው containers። | | `OMNIROUTE_SKIP_DNS_WRITE` | _(አልተዘጋጀም)_ | `src/mitm/dns/dnsConfig.ts` | DNS ግቤቶችን ሲጨምሩ/ሲያስወግዱ ወደ hosts file መጻፍን ለመዝለል `1` ያድርጉ — ለsandboxed ወይም read-only የሙከራ አካባቢዎች። | | `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | ለሙከራ/CI ብቻ የሚያገለግል መከላከያ፦ የምስክር ወረቀት እምነት መጫን/ማራገፍ ምንም እርምጃ እንዳይወስድ እና የሙከራ ስብስቡ የOS እምነት ማከማቻን ፈጽሞ እንዳይቀይር `1` ያዘጋጁ። በሙከራ ማዋቀሪያው እና በCI የሥራ ፍሰቶች በራስ-ሰር ይዘጋጃል። | | `CHANGELOG_BASE_REF` | _(በራስ-ሰር)_ | `scripts/check/check-changelog-integrity.mjs` | የCHANGELOG መጥፋትን ለሚከላከለው መቆጣጠሪያ ግልጽ የመሠረት ref (በነባሪ CI ውስጥ የPR መሠረት ቅርንጫፍን፣ ወይም ከፍተኛውን `release/v*` ይጠቀማል)። | | `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | የበስተጀርባ ነፃ-ፕሮክሲ ስብስብ ራስ-ሰር ማመሳሰያ መርሐግብር አስኪያጅን ለማንቃት `true` ያዘጋጁ። በምርጫ የሚነቃ ሲሆን፣ በነባሪ ጠፍቷል። | | `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | የራስ-ሰር ማመሳሰያ ክፍተት በሚሊሰከንድ (ነባሪው 30 ደቂቃ)። | | `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | የ1proxy ነፃ ፕሮክሲ ምንጭን ያንቁ። ለማሰናከል `false` ያዘጋጁ። | | `FREE_PROXY_1PROXY_API_URL` | _(oneproxy.tsን ይመልከቱ)_ | `src/lib/freeProxyProviders/oneproxy.ts` | የ1proxy API URL መሻሪያ። | | `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | በእያንዳንዱ ማመሳሰል ከ1proxy የሚወርዱ ከፍተኛው የፕሮክሲዎች ብዛት። | | `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | ከ1proxy ለሚገቡ ፕሮክሲዎች ዝቅተኛው የጥራት ነጥብ ገደብ። | | `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | የProxifly ነፃ ፕሮክሲ ምንጭን ያንቁ። ለማሰናከል `false` ያዘጋጁ። | | `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | በእያንዳንዱ የProxifly ማመሳሰል የሚወርዱ ፕሮክሲዎች ብዛት። | | `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | ለProxifly የማንነት መደበቂያ ደረጃ ማጣሪያ (`elite`፣ `anonymous`፣ `transparent`)። | | `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | የIPLocate ነፃ ፕሮክሲ ምንጭን ያንቁ። በፈቃድ ሲመረጥ ብቻ። | | `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | የIPLocate ፕሮክሲ ዝርዝር መሠረታዊ URL መተኪያ። | | `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | የWebshare ፕሮክሲ ስብስብ ምንጭን ያንቁ። ለማሰናከል ወደ `false` ያዘጋጁት፤ እንዲሁም `FREE_PROXY_WEBSHARE_API_KEY` መዘጋጀት ያስፈልገዋል። | | `FREE_PROXY_WEBSHARE_API_KEY` | _(የለም)_ | `src/lib/freeProxyProviders/webshare.ts` | የWebshare መለያ API ቶከን (`Authorization: Token `)። ያስፈልጋል — ያለዚህ አቅራቢው እንደተሰናከለ ይቆያል። | | `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | የWebshare ፕሮክሲ ዝርዝር API URL መተኪያ። | | `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | በእያንዳንዱ የWebshare ማመሳሰል ከፍተኛው የሚመጡ ፕሮክሲዎች ብዛት። | | `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | በፕሮክሲ ስብስብ ትር ውስጥ ያለውን Deploy Vercel Relay አዝራር ያሳዩ/ይደብቁ። | | `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | የVercel API መሠረታዊ URL መተኪያ (ለሙከራ)። | | `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | በVercel Relay ማሰማሪያ ሞዳል ውስጥ አስቀድሞ የሚሞላ ነባሪ የፕሮጀክት ስም። | | `TAILSCALE_BIN` | _(በራስ-ሰር ይገኛል)_ | `src/lib/tailscaleTunnel.ts` | ወደ `tailscale` ሁለትዮሽ ፋይል የሚወስድ ግልጽ ዱካ። | | `TAILSCALED_BIN` | _(በራስ-ሰር ይገኛል)_ | `src/lib/tailscaleTunnel.ts` | ወደ `tailscaled` daemon ሁለትዮሽ ፋይል የሚወስድ ግልጽ ዱካ። | | `TAILSCALE_AUTHKEY` | _(አልተዋቀረም)_ | `src/lib/tailscaleTunnel.ts` | መስተጋብራዊ ላልሆነ / headless `tailscale up` አስቀድሞ የተጋራ Tailscale ማረጋገጫ ቁልፍ (`--auth-key=` በመጠቀም የሚተላለፍ)። ካልተዋቀረ፣ መግባት ወደ መስተጋብራዊው የአሳሽ ማረጋገጫ URL ይመለሳል። | | `NGROK_AUTHTOKEN` | _(አልተዋቀረም)_ | `src/lib/ngrokTunnel.ts` | ወደ ውጭ የሚወጡ ngrok ቦዮችን ያረጋግጣል። | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | በእጅ/በመርሐግብር በሚከናወን የምትኬ ማጽዳት የሚቀመጡ ከፍተኛው የSQLite ምትኬ ፋይሎች ብዛት። የፍልሰት ቅጽበታዊ ቅጂዎች በይዘት አድራሻ የሚደረጉ ሲሆን፣ ለተመሳሳይ የDB ሁኔታ እንደገና ጥቅም ላይ ይውላሉ፤ በተጓዳኝ የፍልሰት ጊዜ መስኮት ውስጥ አይቆረጡም። ከSettings → Database backup retention የተቀመጠውን እሴት ይተካል። | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | በእጅ/በመርሐግብር በሚከናወን የምትኬ ማጽዳት የሚቀመጥ ከፍተኛው ዕድሜ (በቀናት)። `0` በዕድሜ ላይ የተመሠረተ መቁረጥን ያሰናክላል። የፍልሰት ቅጽበታዊ ቅጂዎች በተጓዳኝ የፍልሰት ጊዜ መስኮት ውስጥ አይቆረጡም። ከSettings → Database backup retention የተቀመጠውን እሴት ይተካል። | | `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | `backup-schedule.json`ን የሚያስፈጽመው የአገልጋይ-ጎን ሥራ የትክ ክፍተት (ሚሊሰከንድ)። ከ1-ደቂቃው የcron ዝርዝርነት በጣም በታች መቆየት አለበት፤ ከ`5000` በታች የሆኑ ወይም ሊተነተኑ የማይችሉ እሴቶች ወደ `30000` ይመለሳሉ። | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | ለመግቢያ ነጥቡ የፈቃድ ፍተሻ የኮንቴይነር ማስኬጃ ፍንጭ። ለማንኛውም የPodman ቶፖሎጂ ወደ `podman` ያዋቅሩት። ኮንቴይነሩ ሞተሩ አካባቢያዊ መሆኑን ወይም በPodman Machine በኩል መድረስ መቻሉን መወሰን ስለማይችል፣ ማስጠንቀቂያው ከቶፖሎጂ ገለልተኛ ሆኖ ይቆያል እና ወደ `contrib/podman/README.md` ይጠቁማል። | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | የኮታ-ድርሻ ፍጆታ ማከማቻ backend፦ `sqlite` (ነባሪ) ወይም `redis`። | | `QUOTA_STORE_REDIS_URL` | _(አልተዋቀረም)_ | `src/lib/quota/storeFactory.ts` | `QUOTA_STORE_DRIVER=redis` ሲሆን ጥቅም ላይ የሚውል የRedis ግንኙነት ሕብረቁምፊ (ለምሳሌ፣ `redis://localhost:6379`)። | | `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | የpool ሙላት ሬሾ (0..1)፤ ከዚህ ዋጋ ላይ/በላይ pool ወደ strict mode ይገባል (መዋስ አይፈቀድም)። | | `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | soft quota policy ለአንድ target ቅድሚያውን ሲቀንስ የሚተገበር የscore ማባዣ (0..1)። | | `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | preflight quota cutoff OFF በሆነ ጊዜ በauto-combo scoring ውስጥ ኮታው ላለቀበት provider (`credits_exhausted`/`rate_limited`) የሚተገበር የscore ማባዣ (0..1) (#4540)። | | `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | ከGC (`gcQuotaConsumption`) በፊት ለ`quota_consumption` buckets የማቆያ ጊዜ (ቀናት)። | | `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | በፈቃድ የሚነቃ (በነባሪ OFF)፦ ከscoring በፊት ዝቅተኛ ኮታ ያላቸውን candidates የሚያስወግደውን የauto-routing hard quota cutoff ያነቃል። | | `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | በፈቃድ የሚነቃ (በነባሪ OFF)፦ አንድ `auto/:` filter ከተገናኙት candidates መካከል ምንም የሚዛመድ ካላገኘ፣ ባዶ pool ከመመለስ ይልቅ ወደ ሙሉ (ያልተጣራ) pool የመመለስ legacy behavior ይመልሳል። በነባሪ OFF መሆኑ `:free` ማለት "free tier ብቻ" እንዲሆን ያደርጋል። | | `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | ለ`auto/*:chaos` broadcast variant የpanel መጠን ገደብ (በ1–10 መካከል የተገደበ) — አንድ request ቢበዛ ወደዚህ ቁጥር የሚደርሱ፣ provider-የተለያዩ models ይሰራጫል። | | `OMNIROUTE_CHAOS_MIN_PANEL` | _(የengine ነባሪ)_ | `open-sse/services/autoCombo/virtualFactory.ts` | ወደ chaos broadcast handler የሚተላለፍ ዝቅተኛው የpanel መጠን ማስተካከያ፤ ካልተዋቀረ የengine ነባሪውን ይጠብቃል። | | `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(የengine ነባሪ)_ | `open-sse/services/autoCombo/virtualFactory.ts` | ለጠቅላላው chaos panel fan-out ጥብቅ timeout (ms)፤ ካልተዋቀረ የengine ነባሪውን ይጠብቃል። | | `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | የgrok-web ሳምንታዊ ኮታን ለማምጣት ጥቅም ላይ የሚውለው የGrok CLI `auth.json` ዱካ፤ ለሙከራዎች ወይም መደበኛ ላልሆነ CLI install ይሻሩት። | | `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(አልተዋቀረም)_ | `src/mitm/manager.ts` | ለAgentBridge የወደላይ TLS ግንኙነቶች የሚታመን ተጨማሪ CA ሰርቲፊኬት (PEM)። | | `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | በTraffic Inspector የቀለበት ቋት ውስጥ የሚቀመጡ የተያዙ ጥያቄዎች ከፍተኛ ብዛት። | | `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | ከመቆረጡ በፊት የሚፈቀደው የተያዘ የጥያቄ/ምላሽ አካል ከፍተኛ መጠን (KB)። | | `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | ለTraffic Inspector HTTP ተኪ አገልጋይ የአካባቢ ወደብ። | | `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | ሲነሳ የInspector HTTP ተኪ አገልጋዩን በራስ-ሰር አስጀምር። | | `INSPECTOR_TLS_INTERCEPT` | `false` | `src/lib/inspector/captureState.ts` | ለተያዘ HTTPS ትራፊክ TLS መጥለፍን (MITM) አንቃ። | | `INSPECTOR_LLM_HOSTS_EXTRA` | _(አልተዋቀረም)_ | `src/lib/inspector/captureState.ts` | ለመያዝ እንደ LLM መጨረሻ ነጥቦች የሚቆጠሩ ተጨማሪ የአስተናጋጅ ስሞች (በኮማ የተለዩ)። | | `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | በተያዘ ትራፊክ ውስጥ ሚስጥሮችን (የማረጋገጫ ራስጌዎች / API ቁልፎች) ደብቅ። | | `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | የስርዓት ተኪ ጠባቂው የOS ተኪ ቅንብሮችን በራስ-ሰር ከመመለሱ በፊት ያሉ ደቂቃዎች። | | `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(በራስ-ሰር)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | ወደ Inspector የሚገባውን ውስጣዊ የተያዘ ውሂብ ማስገባት የሚያረጋግጥ ቶከን። | | `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | በPlayground ማነጻጸሪያ ሁነታ ውስጥ ጎን ለጎን ሊታዩ የሚችሉ ከፍተኛው የዓምዶች ብዛት። | | `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(አልተዋቀረም)_ | `src/app/(dashboard)/dashboard/playground/` | ለPlayground 'improve prompt' ድርጊት ነባሪ ሞዴል (ካልተዋቀረ ንቁውን ሞዴል ይጠቀማል)። | | `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | ለBifrost sidecar ፕሮክሲ ዋና የማቋረጫ መቀየሪያ። ወደ `0` ሲዋቀር መስመሩ 503ን ከ`X-Bifrost-Killswitch` ራስጌ ጋር ይመልሳል፣ እና ኦፕሬተሩ ወደ TS መንገድ ይመራል። እንደገና ሳያሰማሩ sidecarን ለማሰናከል ይጠቀሙበት (የደረጃ-1 ራውተር ችግር፣ የቁልፍ ማዞር)። | | `BIFROST_BASE_URL` | _(አልተዋቀረም)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | ሲዋቀር፣ የBifrost sidecar ፕሮክሲ መስመር የ`/v1/chat/completions` ትራፊክን ወደ TS relay handler ከመላክ ይልቅ ወደዚህ የGo gateway ያስተላልፋል። ካልተዋቀረ → 503 ከfallback ጋር። በመጨረሻ ያለው slash ይወገዳል። | | `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | OmniRoute የBifrost sidecarን የሕይወት ዑደት ሲያስተዳድር፣ በክትትል ስር ያለው የBifrost embedded service የሚገናኝበት port (`127.0.0.1:`)። ነባሪው `8080` ነው። | | `BIFROST_API_KEY` | _(አልተዋቀረም)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | ለBifrost gateway የAPI ቁልፍ (እንደ `Authorization: Bearer ...` ይላካል)። ካልተዋቀረ፣ መስመሩ ጥያቄው የሚሰራ የOmniRoute API ቁልፍ እንዲይዝ ይጠብቃል፤ ይህ ቁልፍ ለgateway-በኩል ማረጋገጫ ብቻ ነው። | | `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | true ሲሆን፣ የBifrost sidecar መስመር ምላሾችን በTS streaming executor በኩል ከመላክ ይልቅ በgateway በኩል በSSE ዥረት መልሶ ይልካል። ዥረት-አልባ የJSON ምላሾችን በgateway በኩል በግድ ለማስተላለፍ ወደ `0` ያዋቅሩት። | | `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | ወደ Bifrost gateway ፕሮክሲ ሲደረግ ለእያንዳንዱ ጥያቄ የሚሰጥ የጊዜ ገደብ (ms)። ጊዜው ሲያልፍ መስመሩ የTS relay መንገድን በ`X-Bifrost-Fallback` ራስጌ በኩል ይመልሳል። | | `OMNIROUTE_BIFROST_KEY` | _(አልተዋቀረም)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | የ`BIFROST_API_KEY` ተለዋጭ ስም (envን በ`OMNIROUTE_*` በኩል በሚያነቡ scripts ይጠቀሙበታል)። ሁለቱም ሲዋቀሩ `BIFROST_API_KEY` ቅድሚያ ያገኛል። | | `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | ለ`/api/v1/relay/chat/completions` የrelay backend፦ `ts \| bifrost \| auto`። `ts` = TypeScript relay (Bifrost ካልተዋቀረ ነባሪው)፤ `auto`፣ `BIFROST_BASE_URL` ከተዋቀረ እና `BIFROST_ENABLED` ≠ `0` ከሆነ Bifrostን ይመርጣል፣ sidecar ሊደረስበት ካልቻለ ደግሞ በራስ-ሰር ወደ TS fallback ያደርጋል፤ `bifrost` Bifrostን በግድ ይጠቀማል (ጥብቅ፣ fallback የለም)። Auth/rate-limit/injection-guard/allowlist ሁልጊዜ መጀመሪያ በNext መስመር ውስጥ ይሰራሉ። ምላሾች `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`ን ይይዛሉ። | | `RELAY_ROUTING_BACKEND` | _(አልተዋቀረም)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | ለ`OMNIROUTE_RELAY_BACKEND` ተቀባይነት ያለው ተለዋጭ ስም (ተመሳሳይ `ts \| bifrost \| auto` እሴቶች)። ሁለቱም ሲዋቀሩ `OMNIROUTE_RELAY_BACKEND` ቅድሚያ ይሰጠዋል። | | `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | በ`auto` ሁነታ ውስጥ የBifrost sidecar ዝላይ ከከሸፈ በኋላ relayው sidecarን እንደገና ከመሞከሩ በፊት የሚጠብቀው የማቀዝቀዣ ጊዜ (ms)፤ የማቀዝቀዣው ጊዜ እስከሚያልቅ ድረስ በቀጥታ ወደ TS መንገድ ይልካል፣ ከዚያም እንደገና ይፈትሻል። `0` ያሰናክለዋል። የሚተገበረው `OMNIROUTE_RELAY_BACKEND=auto` ሲሆን ብቻ ነው። | | `OMNIROUTE_TLS_CERT` | _(አልተዋቀረም)_ | `bin/cli/commands/serve.mjs` | `omniroute serve`ን በHTTPS ለማቅረብ የPEM TLS ሰርቲፊኬት ዱካ (ከ`--tls-cert` ጋር ተመጣጣኝ)። ከ`OMNIROUTE_TLS_KEY` ጋር በጥንድ መዋቀር አለበት፤ ከዚያ ራሱን የቻለው አገልጋይ TLSን በተመሳሳዩ listener ላይ ያቋርጣል (`wss://` ሳይለወጥ ይሰራል)። ካልተዋቀረ → መደበኛ HTTP። ከሰርቲፊኬት/ቁልፍ አንዱን ብቻ ማቅረብ፣ ወይም ሊነበብ የማይችል ዱካ መስጠት፣ ማስጠንቀቂያ ይመዘግባል እና HTTP ሆኖ ይቆያል። | | `OMNIROUTE_TLS_KEY` | _(አልተዋቀረም)_ | `bin/cli/commands/serve.mjs` | ለ`omniroute serve` HTTPS የPEM TLS የግል ቁልፍ ዱካ (ከ`--tls-key` ጋር ተመጣጣኝ)። ከ`OMNIROUTE_TLS_CERT` ጋር በጥንድ መዋቀር አለበት። `OMNIROUTE_TLS_CERT`ን ይመልከቱ። | | `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | ለ`/api/local/*` መስመሮች ዋና ማብሪያ። ካልተዋቀረ ወይም `0` ከሆነ፣ ሁሉም የ`/api/local/*` መስመሮች በምርት አካባቢ 503 ይመልሳሉ። Redis launcherን እና ተመሳሳይ በአንድ ጠቅታ የሚጀምሩ አካባቢያዊ አገልግሎቶችን loopback ባልሆኑ ማሰማሪያዎች ለማንቃት `1` መሆን አለበት። ከ`isLocalOnlyPath()` የመስመር-ጥበቃ ምደባ (`LOCAL_ONLY_API_PREFIXES` በ`src/server/authz/routeGuard.ts` ውስጥ) ጋር ድርብ መከላከያ ይሰጣል። | | `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(አልተዋቀረም)_ | `src/lib/security/localEndpoints.ts` | loopback ላይ ላልሆኑ የ`/api/local/*` ጠሪዎች (ለምሳሌ፣ desktop app) የBearer token። ሲዋቀር፣ loopback ካልሆኑ IPዎች የሚመጡ ጥያቄዎች `Authorization: Bearer ` መያዝ አለባቸው። loopback ባልሆኑ ማሰማሪያዎች `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` ሲሆን ያስፈልጋል። | | `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | በአንድ ጠቅታ ለሚጀምረው Redis launcher (`omniroute redis up`) የcontainer ስም። በCLI እና በ`RedisLauncherPanel` GUI በሁለቱም ይጠቀሙበታል። | | `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | በአንድ ጠቅታ ለሚጀምረው Redis launcher የhost port። hostው 6379ን አስቀድሞ ካስያዘ ከፍ ያድርጉት። የcontainerው ውስጣዊ port 6379 ሆኖ ይቆያል። | | `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | በአንድ ጠቅታ የሚጀምረው Redis launcher የሚያትምበት የhost interface። launcherው Redisን ያለይለፍ ቃል ስለሚያስጀምር፣ `0.0.0.0` ላይ ማሰር በLANዎ ላይ ላሉ ሁሉም hostዎች ማረጋገጫ የሌለው Redis ይሰጣል — ይህን ያስፉት እርስዎ ራስዎ በinstanceው ላይ የይለፍ ቃል ካዋቀሩ ብቻ ነው። | | `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose የRedis sidecarን የሚያትምበት የhost interface (#9286)። የcompose Redis ያለ`requirepass` ይሰራል፤ የapp containerዎች በcompose network (`redis:6379`) በኩል ይደርሱበታል — የታተመው port ያለው ለhost-side tooling ብቻ ነው። `0.0.0.0` ማረጋገጫ የሌለውን Redis ለመላው LAN ያጋልጣል። | | `REDIS_PORT` | `6379` | `docker-compose.yml` | ለ compose Redis sidecar የሆስት ፖርት። | | `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | docker-compose የመተግበሪያውን የራሱ dashboard/API/live-WS ፖርቶች የሚያጋራበት የሆስት በይነገጽ (#12568)። `REQUIRE_API_KEY=false` እንደ `.env.example` ነባሪ ቅንብር ስለሚቀርብ፣ `0.0.0.0` ማንነት ማረጋገጫ የሌለውን `/v1` LLM ፕሮክሲ ለመላው LAN/WAN ያጋልጣል — ወሰኑን የሚያሰፉት `REQUIRE_API_KEY=true` ከሆነ ወይም ከፊት ያለ reverse proxy የራሱን ማንነት ማረጋገጫ የሚያስገድድ ከሆነ ብቻ ነው። | | `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose የQdrant memory sidecarን የሚያጋራበት የሆስት በይነገጽ (#12578)። ከLAN ተደራሽነት አንጻር `REDIS_BIND_HOST` ላይ የተገለጸው ምክንያት እዚህም ይሠራል። | | `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose የBifrost router sidecarን የሚያጋራበት የሆስት በይነገጽ (#12578)። ከLAN ተደራሽነት አንጻር `REDIS_BIND_HOST` ላይ የተገለጸው ምክንያት እዚህም ይሠራል። | | `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | በእያንዳንዱ OmniRoute Redis ቁልፍ (የፍጥነት ገዳቢ፣ የማንነት ማረጋገጫ cache፣ የኮታ ማከማቻ፣ warmup circuit breaker) ላይ የሚተገበር የnamespace ቅድመ ቅጥያ። የRedis ኢንስታንሱ ከሌሎች መተግበሪያዎች ጋር ሲጋራ የቁልፍ ግጭቶችን ይከላከላል (#11042)። | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(አልተዋቀረም — ዘዴው ተሰናክሏል)_ | `src/lib/api/internalServiceAuth.ts` | ማንነትን ለሚጠብቁ ውስጣዊ REST ዝውውሮች የሚያገለግል የጋራ ሚስጥር (#9260)፦ ሌሎች አካባቢያዊ OmniRoute routesን የሚጠሩ OmniRoute components የመጀመሪያው ጠሪ ማንነት እንዲጠበቅ እንደ `x-omniroute-internal-service-token` ይልኩታል። በ`timingSafeEqual` ይነጻጸራል። | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(አልተዋቀረም)_ | `src/lib/api/internalServiceAuth.ts` | የውስጣዊ service token የsecret-file አማራጭ፦ የተከረከመው ይዘቱ token የሆነ ፋይል መንገድ። የሚታየው inline var ካልተዋቀረ ብቻ ነው። | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | የdashboard providers ዝርዝርን በOpenRouter ሳምንታዊ የደረጃ አሰጣጥ ስታቲስቲክስ ያዳብሩ (#9324)። በነባሪ የነቃ ነው፤ የጀርባ ማምጣቱን ሙሉ በሙሉ ለመዝለል `false` ያድርጉት (የማያግድ እና በፍጹም ከባድ ስህተት የማያስከትል)። | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24 ሰዓት) | `src/lib/catalog/openrouterProviderStats.ts` | የOpenRouter provider-stats snapshot cache TTL፣ በሚሊሰከንድ። | | `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | በ1-ጠቅታ Redis launcher የሚጠቀምበት Redis image። እንደ አስፈላጊነቱ ወደ `redis:8-alpine` ወይም የግል registry mirror ይቀይሩት። | | `QDRANT_HOST` | `qdrant` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | `--profile memory` ንቁ በሆነበት ጊዜ የQdrant sidecar የአስተናጋጅ ስም። ነባሪው በኔትወርኩ ውስጥ ያለውን የqdrant አገልግሎት ስም ይጠቁማል፤ ለውጫዊ deployment ይቀይሩት። በኮድ ውስጥ `qdrantEnabled` `true` ሲሆን ብቻ ጥቅም ላይ ይውላል (`src/lib/memory/vectorStore.ts:108`)። | | `QDRANT_PORT` | `6333` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | የQdrant sidecar REST ፖርት። | | `QDRANT_GRPC_PORT` | `6334` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | የQdrant sidecar gRPC ፖርት። ለstreaming ops ከREST ይልቅ gRPCን የሚመርጡ የደንበኛ ላይብረሪዎች ይጠቀሙበታል። | | `QDRANT_API_KEY` | _(ያልተዋቀረ)_ | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | ለQdrant Cloud ወይም ማረጋገጫ ለሚጠቀም on-prem instance አማራጭ API ቁልፍ። ባዶ → ምንም `api-key` header አይላክም። | | `QDRANT_COLLECTION` | `omniroute-memory` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | ለOmniRoute የውይይት ማህደረ ትውስታ embeddings የcollection ስም። በመጀመሪያው ማስኬጃ `QDRANT_VECTOR_SIZE` ልኬቶችን በመጠቀም ይፈጠራል። | | `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | በQdrant collection metadata ውስጥ የሚመዘገብ ነባሪ የembedding ሞዴል ስም። ትክክለኛዎቹ embeddings የሚመነጩት በOmniRoute ቅንብሮች ውስጥ ያለው `embeddingModel` field በሚጠቁመው provider ነው። | | `QDRANT_VECTOR_SIZE` | `1536` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | የembedding vector ልኬት። embedding ከሚያደርጉበት ሞዴል ጋር መዛመድ አለበት (text-embedding-3-small → 1536፤ ada-002 → 1536፤ nomic-embed-text → 768)። | | `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(በምርጫ የሚነቃ የክላስተር መገለጫ)_ | በHNSW index ግንባታ ጊዜ ያለ ትክክለኛነት። ከፍ ያለ = ቀርፋፋ ግንባታ፣ ፈጣን ፍለጋ። | | `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | በኦፕሬተር ሊዋቀር ለሚችል የመለያ ማዞሪያ ዋና ማብሪያ። `false` ሲሆን፣ ከታች ካሉት `OMNIROUTE_ROTATE_*` classes አንዳቸውም የመለያ fallbackን አያስነሱም (ዋናው የጠፋበት ሁኔታ በነባሪ የነቁትን 429/500/502 classesም ይከለክላል)። ተቆጣጣሪ front-end (ለምሳሌ የVibeProxy desktop app) የራሱን የማዞሪያ ደንቦች በbackend የመለያ-fallback engine ላይ እንዲያንጸባርቅ ያስችለዋል። | | `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | upstream ግልጽ የreset ፍንጭ በማይሰጥበት ጊዜ የrate limit በተደረገበት መለያ ላይ የሚተገበር የማቀዝቀዣ ጊዜ (በሰከንዶች)። `0` = ከቋሚ override ይልቅ የengineን ነባሪ የማቀዝቀዣ ጊዜ ይጠቀሙ። | | `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | የፊት-ገጽ «የዳግም ማስጀመሪያ ጊዜ ከሌለ በጥያቄ መጠን የተገደበ ብሎ አለመለየት» ምርጫ ነጸብራቅ። | | `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | ለ`429` ስህተቶች በሁኔታ ኮድ የሚወሰን የአማራጭ መፍትሔ ማንቃት። `false` ሲሆን (እና `OMNIROUTE_ROTATION_ENABLED=true` ከሆነ)፣ `429` ከእንግዲህ የመለያ ማዞርን አያስነሳም፤ በምትኩ ለደንበኛው ይመለሳል። | | `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | መለያው ከመዞሩ በፊት በ`OMNIROUTE_ROTATE_429_WINDOW_SECONDS` ውስጥ የሚያስፈልጉ የ`429` ስህተቶች ብዛት። `1` (ነባሪ) የቀድሞውን ባህሪ በመጠበቅ ወዲያውኑ ያዞራል። | | `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | የ`429` ስህተቶች ወደ `OMNIROUTE_ROTATE_429_THRESHOLD` ለመድረስ የሚቆጠሩበት ተንሸራታች የጊዜ መስኮት (በሰከንድ)። | | `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | ለ`5xx` የአገልጋይ ስህተቶች (`502` የራሱ ምድብ ስላለው ከዚህ በስተቀር) በሁኔታ ኮድ የሚወሰን የአማራጭ መፍትሔ ማንቃት። `false` ሲሆን፣ እነዚህ ስህተቶች ከእንግዲህ የመለያ ማዞርን አያስነሱም። | | `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | መለያው ከመዞሩ በፊት በ`OMNIROUTE_ROTATE_500_WINDOW_SECONDS` ውስጥ የሚያስፈልጉ የ`5xx` ስህተቶች ብዛት። `1` (ነባሪ) ወዲያውኑ ያዞራል። | | `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | የ`5xx` ስህተቶች ወደ `OMNIROUTE_ROTATE_500_THRESHOLD` ለመድረስ የሚቆጠሩበት ተንሸራታች የጊዜ መስኮት (በሰከንድ)። | | `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | ለ`502` (መጥፎ መተላለፊያ) ስህተቶች በሁኔታ ኮድ የሚወሰን የአማራጭ መፍትሔ ማንቃት። `false` ሲሆን፣ የ`502` ስህተቶች ከእንግዲህ የመለያ ማዞርን አያስነሱም። | | `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | መለያው ከመዞሩ በፊት በ`OMNIROUTE_ROTATE_502_WINDOW_SECONDS` ውስጥ የሚያስፈልጉ የ`502` ስህተቶች ብዛት። `1` (ነባሪ) ወዲያውኑ ያዞራል። | | `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | የ`502` ስህተቶች ወደ `OMNIROUTE_ROTATE_502_THRESHOLD` ለመድረስ የሚቆጠሩበት ተንሸራታች የጊዜ መስኮት (በሰከንድ)። | | `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | በፍላጎት የሚነቃ (በነባሪ OFF): `true` ሲሆን፣ መደበኛ `400` (የተሳሳተ ጥያቄ) እንዲሁም የመለያ ሽግግርን ያስጀምራል። ይህ ተጨማሪ ባህሪ ብቻ ነው — የመጠን ገደብ/ኮታ ጽሑፍ የያዘ `400` ይህ ጠቋሚ ምንም ይሁን ምን ወደ ተተኪው የሚሸጋገርበትን የሞተሩን ነባር ባህሪ ፈጽሞ አያግድም። | | `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | መለያው ከመሸጋገሩ በፊት በ`OMNIROUTE_ROTATE_400_WINDOW_SECONDS` ውስጥ የሚያስፈልጉ የ`400` ስህተቶች ብዛት (`OMNIROUTE_ROTATE_ON_400=true` ሲሆን ብቻ ጥቅም ላይ ይውላል)። | | `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | የ`400` ስህተቶች ለ`OMNIROUTE_ROTATE_400_THRESHOLD` የሚቆጠሩበት ተንሸራታች የጊዜ መስኮት (በሰከንዶች)። | ### የClaude ቅድመ-ማሞቂያ መርሐግብር አስኪያጅ በፍቃደኝነት ለነቁ የAnthropic OAuth ግንኙነቶች በCron የሚመራ ቅድመ-ማሞቂያ፤ ይህም የ5-ሰዓት የመጠን ገደብ መስኮቱ በመጀመሪያው እውነተኛ ጥያቄ ሳይሆን በቀላል ቀጠሮ በተያዘለት ጥያቄ እንዲከፈት ያደርጋል (#8848)። `OMNIROUTE_WARMUP_ENABLED` እውነት እስካልሆነ **እና** ግንኙነቱ በ`settings.claudeWarmup.connections` ውስጥ ምልክት እስካልተደረገበት ድረስ መርሐግብር አስኪያጁ አይሰራም፤ የenv ተለዋዋጩ ቢነቃም ባዶ የግንኙነት ዝርዝር ምንም ነገር እንደማይሞቅ ያመለክታል። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------ | --------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_WARMUP_ENABLED` | _(አልተዋቀረም → አይሰራም)_ | `src/lib/warmupScheduler.ts` | የቅድመ-ማሞቂያ መርሐግብር አስኪያጁ ዋና ማብሪያ። `1`/`true`/`yes`/`on` ይቀበላል (የፊደል መጠንን ሳይለይ፣ ክፍተቶችን ቆርጦ)። ሌላ ማንኛውም እሴት ወይም አለመዋቀር መርሐግብር አስኪያጁን እንዳይሰራ ያደርገዋል። | | `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | ለቅድመ-ማሞቂያ ዙሩ ባለአምስት-መስክ የcron አገላለጽ፤ የአስተናጋጁ ሰዓት ምንም ይሁን ምን በ`America/Los_Angeles` (የAnthropic ዳግም ማስጀመሪያ የሰዓት ሰቅ) ይገመገማል። | | `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | በእያንዳንዱ ዙር በትይዩ የሚሞቁ ግንኙነቶች ብዛት። በ`1`-`10` መካከል ይገደባል፤ ቁጥር ያልሆነ እሴት ወደ `3` ይመለሳል። | | `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | ለቅድመ-ማሞቂያ ጥያቄው የሚጠቀምበት ሞዴል። ነባሪው በዕቅድዎ ላይ የማይገኝ ከሆነ ብቻ ይቀይሩት፤ መስኮቱን መክፈት የሚችለውን በጣም ርካሹን ሞዴል ይምረጡ። | ### የአሳሽ-መግቢያ VNC ክፍለ-ጊዜዎች እና የData-Dir ተለዋጭ ስም ለበይነተገናኝ የአሳሽ-መግቢያ ማረጋገጫ መረጃ መያዣ (`/api/vnc-session`) ጥቅም ላይ የሚውል በኮንቴይነር የታሸገ Chromium+VNC፣ እንዲሁም አሮጌ `DATA_DIR` ተለዋጭ ስም። ሁሉም አማራጭ ናቸው — የVNC ነባሪ ቅንብሮች አብሮ የቀረበውን `omniroute-vnc-chromium:local` image ያነጣጥራሉ፣ እና የሚተኩት ለብጁ container image፣ ports ወይም lifecycle ማስተካከያ ብቻ ነው። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | ለChromium+VNC መግቢያ ኮንቴይነር የDocker ምስል መለያ። `docker/vnc-browser/chromium`ን ይገንቡ ወይም ይህን ወደ ብጁ ምስል ያመልክቱ። | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | የVNC ኮንቴይነሩን ለማስጀመር የሚያገለግል የኮንቴይነር ማስኬጃ ሁለትዮሽ ፋይል (ለምሳሌ፣ ወደ `podman` ያቀናብሩት)። | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ የተጋለጠው የVNC/noVNC ወደብ። | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ ያለው የChrome DevTools Protocol ወደብ። | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ ያለው የChromium መገለጫ ማውጫ ዱካ። | | `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | ቀጣይነት ያላቸውን የአሳሽ መግቢያ መገለጫዎች የሚይዝ የአስተናጋጅ ማውጫ። | | `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 ደቂቃ) | `src/lib/vncSession/manifest.ts` | እንቅስቃሴ የሌለው የVNC ክፍለ ጊዜ ከመወገዱ በፊት ያለው የስራ-ፈት ጊዜ ገደብ (ሚሴ)። | | `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 ደቂቃ) | `src/lib/vncSession/manifest.ts` | የአንድ VNC ክፍለ ጊዜ የህይወት ዘመን ጥብቅ ከፍተኛ ገደብ (ሚሴ)። | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | ከፍተኛው የተመሳሳይ ጊዜ VNC ክፍለ ጊዜዎች ብዛት። | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | በኮንቴይነር የተካተተው አሳሽ ለCDP ዝግጁ እስኪሆን የመጠበቂያ ጊዜ ገደብ (ሚሴ)። | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | መግባት ከተጠናቀቀ በኋላ የተያዘውን ክፍለ ጊዜ/ኩኪዎች ለመሰብሰብ የሚፈቀደው የጊዜ ገደብ (ሚሴ)። | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | በኮንቴይነር ለተካተተው Chromium የሚተላለፉ ተጨማሪ የትዕዛዝ መስመር ጠቋሚዎች። | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | ከነባሪው ብሪጅ ይልቅ የVNC መግቢያ ኮንቴይነሩ የሚቀላቀለው የተለየ Docker አውታረ መረብ (#12571)፤ በዚህም አጎራባች ኮንቴይነሮች የCDP ብሪጅ ወደቡን ማግኘት አይችሉም። | | `VIBEPROXY_DATA_DIR` | _(አልተቀናበረም)_ | `open-sse/services/notionThreadSessions.ts` | ለ`DATA_DIR` **የቆየ ተለዋጭ ስም**፤ የሚፈተሸው `DATA_DIR` እና `OMNIROUTE_DATA_DIR` ሁለቱም ካልተቀናበሩ በኋላ ብቻ ነው። የNotion የድር ክር ክፍለ ጊዜ መሸጎጫን (`/notion-web-thread-sessions.json`) ያገኛል። | --- ## 26. የሙከራ እና E2E መሣሪያ ስብስብ በ`scripts/dev/run-next-playwright.mjs`፣ `scripts/dev/smoke-electron-packaged.mjs`፣ `scripts/dev/run-ecosystem-tests.mjs` እና `scripts/build/uninstall.mjs` ጥቅም ላይ ይውላል። በምርት ስርጭቶች ውስጥ ከታች ያሉትን ሁሉንም እሴቶች ሳይዋቀሩ ይተዉ። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | -------------------------------------- | ------------------------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | ለPlaywright አስኬጁ የE2E ማስነሻ ሁነታ (`auth`፣ `fresh`፣ `reuse`)። | | `OMNIROUTE_E2E_PASSWORD` | ወደ `INITIAL_PASSWORD` ይመለሳል | `scripts/dev/run-next-playwright.mjs` | ወደ Playwright አካባቢ የሚገባ የአስተዳዳሪ የይለፍ ቃል። | | `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Playwright በሚሠራበት ጊዜ የአካባቢያዊ ጤና ምርመራ ድምጽ መስጫን ያሰናክላል። | | `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | በሙከራዎች ጊዜ የOAuth ቶከን ጤና ምርመራ ዑደትን ያሰናክላል። | | `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(አልተዋቀረም)_ | `src/lib/tokenHealthCheck.ts` | ከቅድመ-ንቁ የቶከን እድሳት ቅኝት የሚገለሉ፣ በነጠላ ሰረዝ የተለዩ አቅራቢዎች (ለምሳሌ `codex,openai`)። የጤና ምርመራውን ሙሉ በሙሉ ከማሰናከል ይልቅ ያነጣጠረ አማራጭ ነው—አጭር-TTL አቅራቢዎች መታደሳቸውን ሲቀጥሉ፣ ተከታታይ አቅራቢዎች ግን ምላሽ-ሰጪ ብቻ ሆነው ይቆያሉ። | | `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | በPlaywright stdout ውስጥ ያለውን የጤና ምርመራ ጫጫታ ያስቆማል። | | `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Playwright ከመጀመሩ በፊት የNext.js ምርት ግንባታን ይዘላል (የCI ማመቻቸት)። | | `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | የOmniRoute ማራገፊያ መንጠቆን ይዘላል (`node_modules`ን ሳይለወጥ ለማቆየት በCI የሚጠቀምበት)። | | `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | የስነ-ምህዳር/ፕሮቶኮል ሙከራዎችን ከማስኬድ በፊት አገልጋዩ ጤናማ እስኪሆን የሚጠበቅበት ጊዜ (ms)። | | `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | የElectron smoke ማስኬጃው የታሸገው መተግበሪያ እንዲያቀርበው የሚጠብቀው URL። | | `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | smoke ማስኬጃው ተስፋ ከመቁረጡ በፊት ያለው ጠቅላላ የጊዜ ገደብ (ms)። | | `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | ገጹ ከተጫነ በኋላ ያለው የመረጋጋት ጊዜ (ms)። | | `ELECTRON_SMOKE_APP_EXECUTABLE` | _(ራስ-ሰር)_ | `scripts/dev/smoke-electron-packaged.mjs` | ወደታሸገው የElectron ማስፈጸሚያ ግልጽ ዱካ። | | `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | ለElectron smoke አስኬዱ የውሂብ ማውጫ። | | `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | አስኬዱ ካለቀ በኋላ የsmoke ውሂብ ማውጫውን ለማቆየት `1` ያዘጋጁ። | | `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | በአስኬዱ ጊዜ የElectron ምዝግብ ማስታወሻዎችን ወደ stdout ለመልቀቅ `1` ያዘጋጁ። | | `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592፦ ተመሳሳዩን የውሂብ ማውጫ በመጠቀም እንደገና ያስጀምራል እና ሁለተኛው ማስጀመር የአገርኛ SQLite ነጂውን እንደሚመርጥ ያረጋግጣል። | | `CLI_DEVIN_BIN` | _(የPATH ፍለጋ)_ | `open-sse/executors/devin-cli.ts` | የDevin CLI ሁለትዮሽ ፋይል ዱካን ይተካል። | ### የሰነዶች ትርጉም የሥራ ሂደት በ`scripts/i18n/run-translation.mjs` (`npm run i18n:run` ትዕዛዝ) ጥቅም ላይ ይውላል። አምስቱም ተለዋዋጮች በነባሪነት አልተዋቀሩም — የሰነዶች ተርጓሚውን ማስኬድ በሚችሉ ማሽኖች ላይ ብቻ በ`.env` ውስጥ ያዋቅሯቸው። | ተለዋዋጭ | ነባሪ | ምንጭ ፋይል | መግለጫ | | ----------------------------------- | ---------- | ---------------------------------- | -------------------------------------------------------- | | `OMNIROUTE_TRANSLATION_API_URL` | _(ያልተዋቀረ)_ | `scripts/i18n/run-translation.mjs` | ከOpenAI ጋር ተኳኋኝ የሆነ የትርጉም ጀርባ አገልግሎት መሠረታዊ URL። | | `OMNIROUTE_TRANSLATION_API_KEY` | _(ያልተዋቀረ)_ | `scripts/i18n/run-translation.mjs` | ለትርጉም ጀርባ አገልግሎቱ የBearer ቶከን (በፍጹም በሎግ አይመዘገብም)። | | `OMNIROUTE_TRANSLATION_MODEL` | _(ያልተዋቀረ)_ | `scripts/i18n/run-translation.mjs` | የሞዴል መለያ፣ ለምሳሌ `gpt-4o-mini` ወይም `cx/gpt-5.4-mini`። | | `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | ለእያንዳንዱ ጥያቄ የሚፈቀደው የጊዜ ገደብ በሚሊሰከንድ። | | `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | በበርካታ ፋይሎች / አካባቢያዊ ቋንቋዎች ላይ ሲካሄድ በትይዩ የሚላኩ የትርጉም ጥያቄዎች። | --- ## 27. የRadar ፊድ (በራስ ማስተናገድ) በRADAR_ENABLED የባህሪ ጠቋሚ የሚቆጣጠር አማራጭ ተጨማሪ ክፍል ነው (በነባሪ ጠፍቷል — በSettings/DB በኩል የሚቀየር የባህሪ ጠቋሚ እንጂ የአካባቢ ተለዋዋጭ አይደለም፤ [docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)ን ይመልከቱ)። ከታች ያሉት የመጀመሪያዎቹ አራት ተለዋዋጮች በራስ ለሚስተናገድ ወይም fork ለተደረገ ፊድ እና ለደጋፊ-ቁልፍ ፍሰቶች አማራጭ መተኪያዎች ናቸው። አምስተኛው፣ `RADAR_ADMIN_URL`፣ ወደባለቤቱ የግል የክወናዎች ፓነል የሚወስድ፣ የተለየና ነባሪ ዋጋ የሌለው አገናኝ ነው። ለሙሉው የሞጁሉ ሰነድ እና [ከጫፍ እስከ ጫፍ የማግበር እና የተመራ ማዋቀር ቅደም ተከተል](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup) [docs/frameworks/RADAR.md](../frameworks/RADAR.md)ን ይመልከቱ። አጠቃላዩ የHome/Changelog ማስታወቂያ አንባቢ በአካባቢ ተለዋዋጭ አይዋቀርም፣ እንዲሁም በRADAR_ENABLED የባህሪ ጠቋሚ ላይ አይመረኮዝም። በ`src/shared/utils/releaseNotes.ts` ውስጥ የተገለጸውን የሕዝብ ማከማቻ `news.json` URL በGET ብቻ ያነባል፤ የመዝጊያ መለያዎች በአሳሹ አካባቢያዊ ማከማቻ ውስጥ ይቆያሉ። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | | `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | በተናጠል በፊርማ ለተረጋገጡት ካታሎግ፣ ሪፈራሎች፣ የደጋፊ ቅናሾች እና Intel ፊዶች የጋራ የመሠረት URL። በራስ ወደሚስተናገድ ወይም fork ወደተደረገ አገልግሎት ለማመልከት ይቀይሩት። | | `RADAR_FEED_PUBKEY` | _(የተሰካ ነባሪ ቁልፍ)_ | `src/lib/radar/pinnedKeys.ts` | ከብጁ ፊድ የሚመጡ የፊድ ፊርማዎችን ለማረጋገጥ የሚያገለግል Ed25519 የወል ቁልፍ (base64-DER SPKI ወይም PEM)። | | `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | በዳሽቦርዱ ላይ ያለው "እኔ አስተዋጽዖ አበርካች ነኝ" አዝራር የሚከፍተው URL (የGitHub OAuth ደጋፊ-ቁልፍ የይገባኛል ጥያቄ ፍሰት)። | | `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | በዳሽቦርዱ ላይ ያለው "ፕሮጀክቱን ይደግፉ" አዝራር የሚከፍተው URL (የክፍያ/ዕቅዶች ገጽ)። | | `RADAR_ADMIN_URL` | _(አልተዋቀረም)_ | `src/lib/radar/links.ts` | ለባለቤቱ ብቻ የሚገኝ የግል የክወናዎች-ፓነል አገናኝ። ለHTTP loopback SSH forward ካልሆነ በስተቀር HTTPS ያስፈልጋል፤ ያልተዋቀሩ ወይም ልክ ያልሆኑ እሴቶች የአሰሳ ንጥል አይፈጥሩም። | --- ## ኦዲት፦ የተወገዱ / ጥቅም ላይ የማይውሉ ተለዋዋጮች የሚከተሉት ተለዋዋጮች በቀደሙት የ`.env.example` ስሪቶች ውስጥ ታይተው ነበር፣ ነገር ግን በአሁኑ የኮድ መሠረት ውስጥ **ምንም የአሂድ ጊዜ ማጣቀሻዎች የሏቸውም**። ተወግደዋል፦ | ተለዋዋጭ | ምክንያት | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | `STORAGE_DRIVER=sqlite` | በማንኛውም የምንጭ ፋይል አይነበብም። SQLite ብቸኛው የሚደገፍ ድራይቨር ነው — ምርጫ አያስፈልግም። | | `INSTANCE_NAME=omniroute` | በድሮ ሰነዶች/የአካባቢ ቅንብር አብነቶች ውስጥ ይገኛል፣ ነገር ግን በአሂድ ጊዜ ጥቅም ላይ አይውልም። ወደፊት በሚኖር የባለብዙ-ኢንስታንስ ባህሪ ውስጥ ሊመለስ ይችላል። | | `SQLITE_MAX_SIZE_MB=2048` | በምንጭ ኮዱ ውስጥ አልተጠቀሰም። የውሂብ ጎታው መጠን በሰው ሠራሽ መንገድ አልተገደበም። | | `SQLITE_CLEAN_LEGACY_FILES=true` | በምንጭ ኮዱ ውስጥ አልተጠቀሰም። የቆዩ ፋይሎች ማጽዳት ምናልባት ተወግዷል። | | `CLI_ROO_BIN` | በ`src/shared/services/cliRuntime.ts` ውስጥ አልተመዘገበም። | | `CLI_KIMI_CODING_BIN` | በ`src/shared/services/cliRuntime.ts` ውስጥ አልተመዘገበም (Kimi Coding የCLI ባይነሪ ሳይሆን OAuth ይጠቀማል)። | | `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | በምንጭ ኮዱ ውስጥ የትኛውም ቦታ አልተጠቀሱም። | | `CEREBRAS_API_KEY` / `COHERE_API_KEY` / `FIREWORKS_API_KEY` / `GROQ_API_KEY` / `MISTRAL_API_KEY` / `NEBIUS_API_KEY` / `PERPLEXITY_API_KEY` / `TOGETHER_API_KEY` / `XAI_API_KEY` | በv3.8.0 ተወግደዋል። አሂድ ስርዓቱ እነዚህን የአካባቢ ተለዋዋጮች ከእንግዲህ አያነብም — ማረጋገጫዎች ከDashboard / `data/provider-credentials.json` / ከተመሰጠረ የውሂብ ጎታ ይመጣሉ። | | `CURSOR_PROTOBUF_DEBUG` | በv3.8.0 ተወግዷል። የCursor አስፈጻሚው `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` ይጠቀማል (§22ን ይመልከቱ)። | | `CLI_COMPAT_KIRO` | በv3.8.0 ተወግዷል። Kiro በ`CLI_COMPAT_OMITTED_PROVIDER_IDS` ውስጥ ይገኛል — መቀያየሪያው ምንም ውጤት የለውም። | | `QIANFAN_API_KEY` | በv3.8.0 ውስጥ ከሌሎች ጥቅም ላይ ካልዋሉ የአቅራቢ API ቁልፍ ስቱቦች ጋር አብሮ ተወግዷል። | ### የነባሪ እሴት ማስተካከያዎች | ተለዋዋጭ | የድሮው `.env.example` እሴት | ትክክለኛው የኮድ ነባሪ እሴት | ማስተካከያ | | ------------------------- | ----------------------- | ------------------ | ------------------------------------- | | `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ አሳሳቹ እሴት ተወግዷል፤ `7` እንደ ነባሪ ተመዝግቧል | | `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ አሳሳቹ እሴት ተወግዷል፤ `7` እንደ ነባሪ ተመዝግቧል | ### የOpenCode ቅንብርን እንደገና ማመንጨት (ለተወሰነ ጊዜ የሚያገለግል መሣሪያ) ከሚሰራው OmniRoute ኢንስታንስ የተገኙ ትክክለኛ `limit.context` እና `limit.output` እሴቶችን የያዘ `opencode.json` እንደገና ለማመንጨት በ`scripts/ad-hoc/regen-opencode-config.ts` ጥቅም ላይ ይውላል። ከእነዚህ ውስጥ አንዳቸውም ለመደበኛ አሠራር አያስፈልጉም — ስክሪፕቱ ለገንቢዎች ብቻ የተዘጋጀ መሣሪያ ነው። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------ | ------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------- | | `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | ለ`/v1/models` መጠይቅ የሚደረግበት የOmniRoute ኢንስታንስ መሠረታዊ URL። | | `OMNIROUTE_KEY` | _(አልተዘጋጀም)_ | `scripts/ad-hoc/regen-opencode-config.ts` | በOmniRoute `/v1/models` መጨረሻ ነጥብ ላይ ለማረጋገጥ የሚያገለግል API ቁልፍ። ካልተዘጋጀ `OPENCODE_API_KEY`ን ይጠቀማል። | | `OPENCODE_API_KEY` | _(አልተዘጋጀም)_ | `scripts/ad-hoc/regen-opencode-config.ts` | ዳግም በተፈጠረው `opencode.json` ውስጥ የሚጻፍ የOpenCode ዓይነት API ቁልፍ (`sk-...`)። ካልተዘጋጀ `OMNIROUTE_KEY`ን ይጠቀማል። | ### ከመስመር ውጭ የማመቅ ግምገማ ማዕቀፍ (ጊዜያዊ መሣሪያ) ከመስመር ውጭ የማመቅ ግምገማ CLI በሆነው `scripts/compression-eval/index.ts` ይጠቀምበታል። ለመደበኛ አሠራር አያስፈልግም — ለገንቢ መሣሪያነት ብቻ ነው። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ---------------------------- | --------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (ባዶ) | `scripts/compression-eval/index.ts` | ከመስመር ውጭ ባለው የማመቅ ግምገማ CLI ለሚፈተነው አቅራቢ፣ ኦፕሬተሩ የሚያቀርባቸው የJSON ማረጋገጫ መረጃዎች (በ`JSON.parse` የሚተነተኑ)። ለደረቅ ሙከራ ሳይዘጋጅ ይተዉት። | ### የVNC አሳሽ ክፍለ ጊዜዎች ለአሳሽ-ራስ-ሰር አቅራቢዎች Docker-ተኮር በይነገጽ-አልባ Chromium ክፍለ ጊዜዎችን ለማዋቀር `src/lib/vncSession/manifest.ts` ይጠቀምባቸዋል። ሁሉም አማራጭ ናቸው — ነባሪዎቹ ከታች ተመልክተዋል። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------------- | ------------------------------ | ------------------------------------------- | ---------------------------------------------------------------- | | `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | የVNC ኮንቴይነሮችን ለማስጀመር የሚጠቅመው የDocker ሁለትዮሽ ፋይል ዱካ። | | `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | ለVNC Chromium ኮንቴይነር የDocker ምስል። | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(አብሮገነብ ጠቋሚዎች)_ | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ ላለው አሳሽ የሚተላለፉ ተጨማሪ የChromium CLI ነጋሪ እሴቶች። | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ ያለው የVNC ወደብ። | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ ያለው የChrome DevTools Protocol ወደብ። | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | በኮንቴይነሩ ውስጥ ያለው የመገለጫ ማውጫ። | | `OMNIROUTE_VNC_PROFILE_DIR` | _(አልተዘጋጀም)_ | `src/lib/vncSession/manifest.ts` | ዘላቂ የአሳሽ መገለጫዎች የሚቀመጡበት በአስተናጋጁ በኩል ያለ ማውጫ። | | `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | የVNC ክፍለ ጊዜ ከመሰብሰቡ በፊት የሚቆይ የሥራ ፈት ጊዜ ገደብ (ms)። | | `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | ከፍተኛው የክፍለ ጊዜ ቆይታ (ms)። | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | ከፍተኛው በአንድ ጊዜ ሊካሄዱ የሚችሉ የVNC ክፍለ ጊዜዎች ብዛት። | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | የአሳሽ ዝግጁነት ጊዜ ገደብ (ms)። | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | የመሰብሰቢያ/የማጽጃ ጊዜ ገደብ (ms)። | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | ኮንቴይነሩ የሚቀላቀለው፣ ከነባሪው ድልድይ ውጭ ያለ የተወሰነ Docker አውታረ መረብ (#12571)። | | `VIBEPROXY_DATA_DIR` | _(አልተዘጋጀም)_ | `open-sse/services/notionThreadSessions.ts` | የNotion ምልልስ ክፍለ ጊዜ ዘላቂ ማከማቻ ማውጫ። | ### የውስጥ አገልግሎት ማረጋገጫ | ተለዋዋጭ | ነባሪ | መግለጫ | | --------------------------------------- | --- | ------------------------------------------------------------------------ | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | ለአስተዳደር ክፍል ከአገልግሎት-ወደ-አገልግሎት ማረጋገጫ የመስመር ውስጥ ቶከን። | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | የውስጥ አገልግሎት ቶከኑን የያዘ ፋይል ዱካ (በኮንቴይነሮች ውስጥ ይመረጣል፤ የመስመር ውስጥ ተለዋዋጩን ይሽራል)። | ### የOpenRouter አቅራቢ ስታቲስቲክስ | ተለዋዋጭ | ነባሪ | መግለጫ | | ----------------------------------- | --------- | -------------------------------------------------------------------- | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | ለካታሎግ ማበልጸጊያ የOpenRouter የየአቅራቢ ስታቲስቲክስን ማምጣት ለመዝለል ወደ `false` ያዘጋጁ። | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | ለተገኙት የOpenRouter አቅራቢ ስታቲስቲክስ የመሸጎጫ TTL (ms)። | ### የተካተተ Redis ትስስር | ተለዋዋጭ | ነባሪ | መግለጫ | | --------------------------- | ----------- | ------------------------------------------------ | | `REDIS_BIND_HOST` | `127.0.0.1` | ለተካተተው Redis አገልግሎት የማገናኛ አድራሻ። | | `REDIS_PORT` | `6379` | ለተካተተው Redis አገልግሎት ወደብ። | | `OMNIROUTE_REDIS_BIND_HOST` | – | ለተካተተው Redis የማገናኛ አድራሻ የOmniRoute ወሰን ያለው መሻሪያ። | --- ## 24. የRelease v3.8.50 ተጨማሪዎች እነዚህ ቅንብሮች ከቀዳሚው የአካባቢ-ውል ቅጽበታዊ ምስል በኋላ ተዋውቀዋል። | ተለዋዋጭ | ነባሪ | ምንጭ ፋይል | መግለጫ | | ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | እንደገና ሊሞከር የሚችል `503` ከመመለሱ በፊት ከፍተኛ ሀብት ለሚጠቀም የውይይት መቀበያ ቦታ የሚደረግ ከፍተኛው ጥበቃ፤ አጭርና የተገደበ ጥበቃ የወኪሎችን ድንገተኛ ጥያቄዎች ወዲያውኑ `503` ከመመለስ ይልቅ በተከታታይ ያስኬዳል። `0` ወዲያውኑ ውድቅ ማድረግን መልሶ ያስጀምራል። | | `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | ለመቀበያ ጥበቃው የተሰለፉ ባይቶች በጀት፦ ጥበቃው heap-ን እንዳያጎላ በመላው ሂደቱ የቆሙ የተጠባባቂ የይዘት ባይቶችን አጠቃላይ መጠን ይገድባል (#4380)። ከበጀቱ በላይ የሆኑ ጥበቃዎች ወዲያውኑ እንደገና ሊሞከር የሚችል `503` ይቀበላሉ። | | `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | ከ#10110 ጀምሮ የተቋረጠ እና ምንም የማያደርግ፦ በክፍለ ጊዜ የነበሩ የመቀበያ መስመሮች ተወግደው በአንድ የመላው ሂደት በጀት ተተክተዋል። ለውቅር ተኳኋኝነት ሲባል ተቀባይነት አለው፤ ነገር ግን ችላ ይባላል። | | `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | ከ#10110 ጀምሮ የተቋረጠ እና ምንም የማያደርግ፦ በክፍለ ጊዜ የነበሩ የመቀበያ መስመሮች ተወግደው በአንድ የመላው ሂደት በጀት ተተክተዋል። ለውቅር ተኳኋኝነት ሲባል ተቀባይነት አለው፤ ነገር ግን ችላ ይባላል። | | `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (ጠፍቷል) | `open-sse/services/admission/runtime.ts` | የሚላመዱ የአሂድ ጊዜ ምናባዊ የመቀበያ መስመሮች (#9654)፦ ለእያንዳንዱ tenant የሚላመደው በር (ሥርዓት 2) ዋና ማብሪያ። ከላይ ካሉት ከተቋረጡ የየግንኙነቱ መስመር ተለዋዋጮች (TTL_MS / MAX_SESSIONS፣ ከ#10110 ጀምሮ ምንም የማያደርጉ) የተለየ ነው። ተመሳሳይ ስም ያለው የDashboard ባህሪ ጠቋሚ፤ የአካባቢ ተለዋዋጩ የDashboard ሽረትን ይቀድማል፤ ዳግም ማስጀመር ያስፈልጋል። | | `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | አንድ run-now ጥሪ የተሰለፈውን አሂድ ከመጀመሩ በፊት በሂደት ላይ ያለውን ሥራ ምን ያህል ጊዜ እንደሚጠብቅ ይገድባል። | | `ADOBE_FIREFLY_BROWSER_REFRESH` | ነቅቷል | `open-sse/services/adobeFireflySession.ts` | በመለያ-ወሰን ባላቸው የChrome CDP ክፍለ ጊዜዎች አማካኝነት IMS እና የአሳሽ አደጋ ሁኔታን ወቅታዊ አድርጎ ይጠብቃል፤ ለማሰናከል `0` ያዘጋጁ። | | `ADOBE_FIREFLY_SESSION_DISK` | ነቅቷል | `open-sse/services/adobeFireflySession.ts` | የተጠገኑ የAdobe ክፍለ ጊዜዎችን በ`DATA_DIR` ስር በቋሚነት ያስቀምጣል፤ ለማህደረ ትውስታ-ብቻ ሁኔታ `0` ያዘጋጁ። | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | በAdobe Firefly የማመንጨት ማስገባቶች መካከል ያለው ዝቅተኛ የጊዜ ልዩነት። | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | ከእያንዳንዱ ሦስተኛ የተሳካ የAdobe ማስገባት በኋላ የሚኖር ተጨማሪ የእረፍት ጊዜ። | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | ለማረሚያ-ብቻ የሆነ ሙሉ headless ሁነታ፤ Adobe colligo በመደበኛነት የሚፈጠረውን የአደጋ ክፍለ ጊዜ ውድቅ ያደርጋል። | | `CHROME_PATH` | ራስ-ሰር ማግኘት | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | የመድረኩ ራስ-ሰር ማግኘት በቂ ባልሆነበት ጊዜ በአሳሽ የሚንቀሳቀሱት አስፈጻሚዎች የሚጠቀሙበት አማራጭ ፍጹም የChrome executable ዱካ። | | `TELEGRAM_BOT_TOKEN` | _(አልተዘጋጀም)_ | `src/lib/telegram/config.ts` | ወደ ውስጥ የሚመጣውን webhook የሚያነቃ እና የMini App `initData`ን የሚፈርም BotFather token። | | `TELEGRAM_WEBHOOK_SECRET` | _(አልተዘጋጀም)_ | `src/lib/telegram/config.ts` | በ`setWebhook` በኩል የሚመዘገብ እና በእያንዳንዱ webhook ማድረሻ ላይ ከ`X-Telegram-Bot-Api-Secret-Token` header ጋር የሚረጋገጥ የጋራ ሚስጥር። ለwebhook ዱካው ያስፈልጋል፤ ካልተዘጋጀ የwebhook ማድረሻዎች በ503 ውድቅ ይደረጋሉ። | | `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | ለTelegram የውይይት ምላሾች የሚያገለግለው ሞዴል። | | `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | ለproxyዎች ወይም በራስ ለሚስተናገዱ የBot API አገልጋዮች የBot API መሠረታዊ URL ሽረት። | | `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | ወደ ውጭ ለሚደረጉ የBot API ጥሪዎች በሚሊሰከንድ የሚለካ የጊዜ ገደብ። | | `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (ነቅቷል) | `scripts/build/optionalPackStaging.mjs` | ለElectron ራሱን የቻለ ዛፍ አማራጭ የML/አሳሽ ጥቅሎችን ለማዘጋጀት ሲደረግ `.tar.gz` tarballዎችን መፍጠር ለመዝለል `0` ያዘጋጁ (የጥቅል ማውጫዎች እና `optional-packs.index.json` አሁንም ይፈጠራሉ)። የartifact ሰቀላ መጠንን ለመቀነስ በdesktop release workflow ጥቅም ላይ ይውላል። | ### ChatGPT Web (Codex) ለheadless አሳሹ እና ወደ ውጭ ለሚሄደው የመሣሪያ tunnel ዓለም አቀፍ ነባሪዎች። በDashboard ውስጥ የተዘጋጁ የConnection እሴቶች ቅድሚያ አላቸው። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CHATGPT_WEB_CODEX_CHROME_PATH` | _(በራስ-ሰር ይገኛል)_ | `open-sse/executors/chatgpt-web-codex.ts` | ለ npm፣ systemd እና PM2 አሠራር በግልጽ የተወሰነ የChrome/Chromium ዱካ። | | `CHROME_PATH` | _(በራስ-ሰር ይገኛል)_ | `open-sse/executors/chatgpt-web-codex.ts` | በግልጽ ለተወሰነ የChrome/Chromium ዱካ የጋራ አማራጭ። | | `CHATGPT_WEB_CODEX_CDP_URL` | _(አልተዋቀረም)_ | `open-sse/executors/chatgpt-web-codex.ts` | ውስጣዊ የCDP መጨረሻ ነጥብ፤ Docker በፖርት `9223` ላይ ያለውን Sidecar ይጠቀማል። | | `CDP_PROXY_TOKEN` | _(አልተዋቀረም)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | ከተዋቀረ፣ ወደ CDP-Proxy-Sidecar የሚላክ እያንዳንዱ ጥያቄ ይህን እሴት በ`X-Omni-Cdp-Token` ራስጌ ውስጥ አካትቶ መላክ አለበት (#13679)። እሴት ከሌለ Proxyው ያለማረጋገጫ ያስተላልፋል — በዚያ ጊዜ ጥበቃ የሚያደርገው የCompose አውታረ መረብ `chatgpt-web-codex-net` የአውታረ መረብ ማግለል ብቻ ነው። በ`openssl rand -hex 32` ይፍጠሩት። | | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(አልተዋቀረም)_ | `open-sse/executors/chatgpt-web-codex.ts` | ለአካባቢያዊ የCodex መሣሪያ ዙሮች ዓለም አቀፍ የOpenAI Tunnel ID። | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(አልተዋቀረም)_ | `open-sse/executors/chatgpt-web-codex.ts` | ዓለም አቀፍ የTunnel Runtime Key፤ በምንም ጊዜ በሎጎች ውስጥ አያውጡት። | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | ለMCP ድልድይ አዲስ የተፈጠረው የChatGPT Custom Connector ትክክለኛ ስም። | | `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | ለBrowser፣ Broker እና Tunnel ሁኔታ የተለየ ማውጫ። | | `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | `1` ሲሆን በእያንዳንዱ Checkpoint ላይ የBrowser ምርመራ ምስሎች ይቀረጻሉ። | | `CODEX_CHATGPT_WEB_LAUNCHER` | _(አልተዋቀረም)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | ወደ ቋሚ Launcher Binary የሚያመለክት አማራጭ ፍጹም ዱካ። | | `CODEX_CHATGPT_WEB_BUN` | _(በራስ-ሰር ይገኛል)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | ወደ Bun Runtime Binary የሚያመለክት አማራጭ ፍጹም ዱካ። | | `CODEX_WEB_GPT_BUN` | _(አልተዋቀረም)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | ለ`CODEX_CHATGPT_WEB_BUN` የቀድሞ ስሪት አማራጭ፤ አዳዲስ ውቅሮች መደበኛውን ስም ይጠቀማሉ። | --- ## OmniConductor ድልድይ የOmniConductor ማዕከል ተግባራትን ወደ አካባቢያዊው A2A TaskManager (`src/lib/conductor/`) የሚያንጸባርቅ ለረጅም ጊዜ የሚሰራ SSE ተጠቃሚ። በምርጫ የሚነቃ ነው — ድልድዩ የሚጀምረው `CONDUCTOR_HUB_URL` ሲዋቀር ብቻ ነው። በሰርቨር በኩል ብቻ፦ የማዕከሉ ቶከን በፍጹም ወደ አሳሹ መድረስ የለበትም። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------ | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------ | | `CONDUCTOR_HUB_URL` | _(ባዶ)_ | `src/lib/conductor/boot.ts` | የOmniConductor ማዕከል መሠረታዊ URL (ለምሳሌ `http://127.0.0.1:7910`)። ካልተዋቀረ = ድልድዩ የተሰናከለ ነው። | | `CONDUCTOR_HUB_TOKEN` | _(ባዶ)_ | `src/lib/conductor/boot.ts` | ለSSE ምግብ የማዕከሉ ማረጋገጫ — በማዕከሉ ላይ `spokesperson`-ዓይነት አቻ ይፍጠሩ (`POST /v1/peers`፣ አስተዳዳሪ)። | | `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(ባዶ)_ | `src/lib/conductor/hubProxy.ts` | ለገቢ A2A→ማዕከል የተግባር ውክልና ማረጋገጫ (`POST /v1/tasks`)፤ ካልተዋቀረ ወደ `CONDUCTOR_HUB_TOKEN` ይመለሳል። | | `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | ከዳሽቦርዱ የውይይት ፕሮክሲ (`/api/conductor/ask`) በስተጀርባ ያለው የspokesperson (Faro) አገልግሎት መሠረታዊ URL። | ### ኮታን ያገናዘበ መርሐግብር ማስያዝ ከጥያቄ በፊት ለሚደረጉ የቶከን በጀት ፍተሻዎች በ`open-sse/services/combo.ts` እና `src/lib/quota/quotaScheduler.ts` ጥቅም ላይ ይውላል። በምርጫ የሚነቃ ነው — ካልተዋቀረ ነባሪው የማስተላለፊያ ባህሪ አይቀየርም። | ተለዋዋጭ | ነባሪ | የምንጭ ፋይል | መግለጫ | | ------------------------------- | --- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | `1` ሲሆን፣ በእያንዳንዱ ጊዜ መስኮት ያላቸው የቶከን በጀት (`rateLimitOverrides.tpm`፣ ሠንጠረዥ `provider_quota_state`) ከመላኩ በፊት የተገመተውን የጥያቄ ወጪ መሸፈን የማይችልባቸውን ግንኙነቶች ይዝለሉ። ምንም በጀት ካልተዋቀረ ጥያቄው እንዲቀጥል ይፈቀዳል። |