# Environment Variables Reference (မြန်မာ)
🌐 **Languages:** 🇺🇸 [English](../../../../reference/ENVIRONMENT.md) · 🇪🇹 [am](../../../am/docs/reference/ENVIRONMENT.md) · 🇸🇦 [ar](../../../ar/docs/reference/ENVIRONMENT.md) · 🇦🇿 [az](../../../az/docs/reference/ENVIRONMENT.md) · 🇧🇬 [bg](../../../bg/docs/reference/ENVIRONMENT.md) · 🇧🇩 [bn](../../../bn/docs/reference/ENVIRONMENT.md) · 🇧🇦 [bs](../../../bs/docs/reference/ENVIRONMENT.md) · 🇨🇿 [cs](../../../cs/docs/reference/ENVIRONMENT.md) · 🇩🇰 [da](../../../da/docs/reference/ENVIRONMENT.md) · 🇩🇪 [de](../../../de/docs/reference/ENVIRONMENT.md) · 🇬🇷 [el](../../../el/docs/reference/ENVIRONMENT.md) · 🇪🇸 [es](../../../es/docs/reference/ENVIRONMENT.md) · 🇪🇪 [et](../../../et/docs/reference/ENVIRONMENT.md) · 🇮🇷 [fa](../../../fa/docs/reference/ENVIRONMENT.md) · 🇫🇮 [fi](../../../fi/docs/reference/ENVIRONMENT.md) · 🇫🇷 [fr](../../../fr/docs/reference/ENVIRONMENT.md) · 🇮🇪 [ga](../../../ga/docs/reference/ENVIRONMENT.md) · 🇮🇳 [gu](../../../gu/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ha](../../../ha/docs/reference/ENVIRONMENT.md) · 🇮🇱 [he](../../../he/docs/reference/ENVIRONMENT.md) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇳🇵 [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 က အသိအမှတ်ပြုသော environment variable တစ်ခုချင်းစီအတွက် အပြည့်အစုံ ကိုးကားချက်။
> အမြန်စတင်အသုံးပြုနိုင်သော template အတွက် [`.env.example`](../../.env.example) ကို ကြည့်ပါ။
> [!IMPORTANT]
> ဤနေရာတွင် မှတ်တမ်းတင်ထားသော variable တိုင်းသည် `.env.example` တွင်လည်း ပါဝင်ရမည်ဖြစ်ပြီး
> `.env.example` ရှိ variable တိုင်းသည်လည်း ဤနေရာတွင် ပါဝင်ရမည်။ `npm run check:env-doc-sync` သည်
> commit ပြုလုပ်ချိန်နှင့် CI အတွင်း၌ ဤအချက်ကို အတည်ပြုစစ်ဆေးသည်။ variable တစ်ခုကို ရည်ရွယ်ချက်ရှိရှိ ချန်လှပ်ရန်
> `scripts/check/check-env-doc-sync.mjs` အတွင်းရှိ allowlist ထဲသို့ ၎င်းကို ထည့်ပါ။
---
## မာတိကာ
- [1. မဖြစ်မနေလိုအပ်သော လျှို့ဝှက်တန်ဖိုးများ](#1-required-secrets)
- [2. သိုလှောင်မှုနှင့် ဒေတာဘေ့စ်](#2-storage--database)
- [3. ကွန်ရက်နှင့် Port များ](#3-network--ports)
- [4. လုံခြုံရေးနှင့် အထောက်အထားစိစစ်ခြင်း](#4-security--authentication)
- [5. Input သန့်စင်ခြင်းနှင့် PII ကာကွယ်ရေး](#5-input-sanitization--pii-protection)
- [6. Tool နှင့် Routing မူဝါဒများ](#6-tool--routing-policies)
- [7. URL များနှင့် Cloud Sync](#7-urls--cloud-sync)
- [8. Outbound Proxy](#8-outbound-proxy)
- [9. CLI Tool ပေါင်းစပ်အသုံးပြုမှု](#9-cli-tool-integration)
- [10. Internal Agent နှင့် MCP ပေါင်းစပ်အသုံးပြုမှုများ](#10-internal-agent--mcp-integrations)
- [11. OAuth Provider အထောက်အထားများ](#11-oauth-provider-credentials)
- [12. Provider User-Agent Override များ](#12-provider-user-agent-overrides)
- [13. CLI Fingerprint ကိုက်ညီမှု](#13-cli-fingerprint-compatibility)
- [14. API Key Provider များ](#14-api-key-providers)
- [15. Timeout ဆက်တင်များ](#15-timeout-settings)
- [16. Log မှတ်တမ်းတင်ခြင်း](#16-logging)
- [17. Memory ပိုမိုကောင်းမွန်အောင် ပြုလုပ်ခြင်း](#17-memory-optimization)
- [18. ဈေးနှုန်း Sync](#18-pricing-sync)
- [19. Model Sync (Dev)](#19-model-sync-dev)
- [20. Provider အလိုက် သတ်မှတ်ထားသော ဆက်တင်များ](#20-provider-specific-settings)
- [21. Proxy အခြေအနေ](#21-proxy-health)
- [22. အမှားရှာဖွေခြင်း](#22-debugging)
- [23. GitHub ပေါင်းစပ်အသုံးပြုမှု](#23-github-integration)
- [24. Skills Sandbox (v3.8.0+)](#24-skills-sandbox-v380)
- [27. Radar Feed (ကိုယ်တိုင် Host လုပ်ခြင်း)](#27-radar-feed-self-hosting)
- [Deployment အခြေအနေများ](#deployment-scenarios)
- [စစ်ဆေးမှု- ဖယ်ရှားထားသော / အသုံးမဝင်တော့သော Variable များ](#audit-removed--dead-variables)
---
## 1. လိုအပ်သော လျှို့ဝှက်တန်ဖိုးများ
**လိုအပ်သည်** ဟု မှတ်သားထားပြီး မသတ်မှတ်ရသေးသော လျှို့ဝှက်တန်ဖိုးများ (`JWT_SECRET`, `API_KEY_SECRET`) ကို ပထမဆုံးအကြိမ် လည်ပတ်သည့်အခါ အလိုအလျောက် ထုတ်ပေးပြီး data directory ရှိ `server.env` တွင် သိမ်းဆည်းသည် — ထို directory သည် ယာယီဖြစ်နေပါက ၎င်းတို့ကို အတိအလင်း သတ်မှတ်ပါ။ ခြားနားချက်မှာ `OMNIROUTE_WS_BRIDGE_SECRET` ဖြစ်သည် — ၎င်းကို `server.env` တွင် မသိမ်းဆည်းပါ — server entrypoint များသည် boot တစ်ကြိမ်စီအတွက် process အတွင်းရှိ bridge ကသာ အသုံးပြုနိုင်သည့် ယာယီတန်ဖိုးတစ်ခု ထုတ်ပေးသောကြောင့် ပြင်ပ bridge client များအတွက် ၎င်းကို အတိအလင်း သတ်မှတ်ပေးရမည်။
| Variable | လိုအပ်မှု | မူလတန်ဖိုး | အရင်းအမြစ်ဖိုင် | ဖော်ပြချက် |
| ---------------------------- | -------------------------- | ----------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `JWT_SECRET` | **လိုအပ်သည်** | _(မရှိပါ)_ | `src/lib/auth` | Dashboard session cookie (JWT) အားလုံးကို လက်မှတ်ထိုးခြင်း/အတည်ပြုခြင်း ပြုလုပ်သည်။ `openssl rand -base64 48` ဖြင့် ထုတ်လုပ်ပါ။ |
| `API_KEY_SECRET` | **လိုအပ်သည်** | _(မရှိပါ)_ | `src/lib/db/apiKeys.ts` | SQLite တွင် သိမ်းဆည်းထားသော API key တန်ဖိုးများအတွက် AES ကုဒ်ဝှက်ရေး key ဖြစ်သည်။ `openssl rand -hex 32` ဖြင့် ထုတ်လုပ်ပါ။ |
| `INITIAL_PASSWORD` | မလိုအပ်ပါ | _(မသတ်မှတ်ထားပါ)_ | `src/lib/auth/managementPassword.ts` | မည်သည့်စကားဝှက်မျှ သိမ်းဆည်းထားခြင်း မရှိသေးသည့်အခါ startup တွင် dashboard စကားဝှက်ကို သတ်မှတ်ပေးပြီး စကားဝှက် သိမ်းဆည်းပြီးသည်နှင့် ပယ်ဖျောက်ခြင်း ခံရသည်။ npm နှင့် source install များသည် `.env.example` ကို `.env` သို့ ကူးယူသောကြောင့် ၎င်းတို့သည် အများသိထားသော placeholder `CHANGEME` ဖြင့်သာ စတင်ကြသည် — ပထမဆုံး boot မပြုလုပ်မီ ပြောင်းလဲပါ၊ သို့မဟုတ် ပထမအကြိမ် ဝင်ရောက်သည့်အခါ onboarding wizard တွင် စကားဝှက် ဖန်တီးနိုင်ရန် ထို `.env` တွင် `INITIAL_PASSWORD=` (အလွတ်) ဟု သတ်မှတ်ပါ — မသတ်မှတ်ထားသောတန်ဖိုး (Docker image ၏ မူလတန်ဖိုး) ပြုလုပ်သကဲ့သို့ပင်။ သိမ်းဆည်းထားသော စကားဝှက်ကို Dashboard → Settings → Security တွင် ပြောင်းလဲပါ၊ သို့မဟုတ် `DATA_DIR` ကို server ၏ data directory သို့ သတ်မှတ်ကာ `omniroute reset-password` (source checkout တစ်ခုတွင် `node bin/reset-password.mjs`) ကို လည်ပတ်ပါ။ |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **လိုအပ်သည်** (production) | _(မသတ်မှတ်ထားပါ)_ | `src/app/api/internal/codex-responses-ws/route.ts` | အတွင်းပိုင်း Codex Responses WebSocket bridge အတွက် မျှဝေသုံးစွဲသော လျှို့ဝှက်တန်ဖိုးဖြစ်သည်။ Electron/browser WS relay နှင့် OmniRoute အကြား bridge request များကို အထောက်အထားစစ်မှန်ကြောင်း စစ်ဆေးပေးသည်။ ⚠️ **Production တွင် မဖြစ်မနေလိုအပ်သည် — မသတ်မှတ်ထားပါက WS bridge request အားလုံးကို ငြင်းပယ်မည်။** `openssl rand -base64 32` ဖြင့် ထုတ်လုပ်ပါ။ |
| `OMNIROUTE_SW_BUILD_ID` | မလိုအပ်ပါ | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | PWA shell (#11779) အတွက် service-worker cache ကို မဖြစ်မနေ အသစ်ပြန်လည်ရယူစေမည့် သီးခြား id ဖြစ်ပြီး resolution chain တွင် ပထမဆုံးဖြစ်သည်။ |
| `SOURCE_VERSION` | မလိုအပ်ပါ | _(မသတ်မှတ်ထားပါ)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Chain ၏ ဒုတိယတန်ဖိုးဖြစ်ပြီး deploy လုပ်ထားသော commit အဖြစ် PaaS builder များ (ဥပမာ Heroku ပုံစံ) က သတ်မှတ်သည်။ |
| `NEXT_PUBLIC_SW_BUILD_ID` | မလိုအပ်ပါ | _(ဆင့်ပွားရရှိသည်)_ | `src/shared/components/PwaRegister.tsx` | Client က `/sw.js?v=…` ကို register လုပ်ရာတွင် အသုံးပြုသည့် build-time public တန်ဖိုးဖြစ်သည်။ အထက်ပါနှစ်ခုမှ ဆင့်ပွားရရှိပြီး ထို့နောက် git SHA ကို အသုံးပြုသည်။ |
| `OMNIROUTE_PEER_STAMP_TOKEN` | မလိုအပ်ပါ (အလိုအလျောက်) | _(boot တစ်ကြိမ်စီတွင် အလိုအလျောက်)_ | `src/server/authz/policies/management.ts` | ယုံကြည်စိတ်ချရသော peer-IP stamp သည် OmniRoute ၏ ကိုယ်ပိုင် HTTP server (`scripts/dev/peer-stamp.mjs`) မှ လာကြောင်း သက်သေပြသည့် process တစ်ခုချင်းစီအလိုက် လျှို့ဝှက်တန်ဖိုးဖြစ်သည်။ Stamp တွင် ဤ token ပါရှိမှသာ authz middleware သည် request ၏ local ဖြစ်မှုကို ယုံကြည်သည် (LOCAL_ONLY route များ၏ loopback/LAN ကန့်သတ်မှု)။ Boot တစ်ကြိမ်စီတွင် အလိုအလျောက် ထုတ်လုပ်ပေးသောကြောင့် မသတ်မှတ်ဘဲထားပါ။ Stamp ကို မျှဝေရန်လိုအပ်သည့် multi-process setup များအတွက်သာ တန်ဖိုးကို ပုံသေသတ်မှတ်ပါ။ |
| `OMNIROUTE_TRUSTED_PROXIES` | မလိုအပ်ပါ | _(မသတ်မှတ်ထားပါ)_ | `scripts/dev/peer-stamp.mjs` | IP ခွင့်ပြု/ငြင်းပယ်စာရင်းက ယုံကြည်နိုင်သော `X-Forwarded-For` / `X-Real-IP` ပါရှိသည့် reverse proxy များ၏ ကော်မာဖြင့် ခွဲထားသော IP များ သို့မဟုတ် CIDR range များဖြစ်သည်။ အမြဲယုံကြည်ထားသည့် loopback၊ private-network address များနှင့် Cloudflare edge များအပြင် ထပ်မံသတ်မှတ်ခြင်းဖြစ်သည်။ အခြား public address တစ်ခုခုရှိ proxy အတွက်သာ လိုအပ်သည်။ မဟုတ်ပါက filter က ထို proxy ၏ ကိုယ်ပိုင် address ကိုသာ စစ်ဆေးဆုံးဖြတ်မည်။ |
### ထုတ်လုပ်ရန် Command များ
```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` ဖိုင်များကို version control သို့ မည်သည့်အခါမျှ commit မလုပ်ပါနှင့်။ `.gitignore` တွင် `.env` ကို ဖယ်ထုတ်ထားပြီးဖြစ်သော်လည်း push မလုပ်မီ စစ်ဆေးအတည်ပြုပါ။
---
## 2. သိုလှောင်မှုနှင့် ဒေတာဘေ့စ်
OmniRoute သည် အချက်အလက်အားလုံးကို အမြဲတမ်းသိမ်းဆည်းရန် `better-sqlite3` မှတစ်ဆင့် **SQLite** ကို အသုံးပြုသည်။ ဤ variable များသည် ဒေတာတည်နေရာ၊ ကုဒ်ဝှက်ခြင်းနှင့် သက်တမ်းစက်ဝန်းကို ထိန်းချုပ်သည်။
| Variable | ပုံသေတန်ဖိုး | Source File | ဖော်ပြချက် |
| ------------------------------------------ | -------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | SQLite DB၊ backup များနှင့် ဒေတာဖိုင်များအတွက် root directory ဖြစ်သည်။ Docker volume များ သို့မဟုတ် စိတ်ကြိုက် path များအတွက် အစားထိုးသတ်မှတ်နိုင်သည်။ |
| `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(မသတ်မှတ်ထား)_ | `src/lib/dataPaths.ts` | စမ်းသပ်မှု/eval ဆိုင်ရာ DATA_DIR guard (#10428) ကို ကျော်လွှားရန် နည်းလမ်းဖြစ်သည်။ `DATA_DIR` မရှိသော စမ်းသပ်မှုများနှင့် Node eval/print probe များ (`-e`/`--eval`/`-p`/`--print`၊ `--eval=`/`--print=` ပုံစံများအပါအဝင်) ကို စွန့်ပစ်နိုင်သော ယာယီ directory တစ်ခုသို့ လမ်းကြောင်းပြောင်းပေးထားသဖြင့် operator ၏ အမှန်တကယ် database ကို ဖွင့်နိုင်မည်မဟုတ်ပါ။ အမှန်တကယ် directory ကို ပြန်လည်အသုံးပြုရန် `1` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_BUILD_SHA` | _(မသတ်မှတ်ထား)_ | `src/lib/monitoring/buildSha.ts` | လက်ရှိအလုပ်လုပ်နေသော artifact ၏ Git SHA ဖြစ်သည်။ `npm run build:release` က ထည့်သွင်းမှတ်သားပေးပြီး `dist/BUILD_SHA` sentinel မပါရှိဘဲ ဖြန့်ချိသော container များတွင် ထည့်သွင်းပေးနိုင်သည်။ `/api/monitoring/health` တွင် `system.buildSha` အဖြစ် ဖော်ပြသည်။ |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | pack-artifact provenance gate က build SHA ကို စစ်ဆေးနှိုင်းယှဉ်မည့် ref ဖြစ်သည် (#10427)။ |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(မသတ်မှတ်ထား)_ | `scripts/build/buildProvenance.ts` | release line ပေါ်တွင် SHA မရှိသော build ကို package ပြုလုပ်ခွင့်ပေးရန် `1` ဟု သတ်မှတ်ပါ။ ထိုသို့ပြုလုပ်ပါက gate ကို မအောင်မြင်စေဘဲ ရည်ရွယ်ချက်ရှိရှိ ပြုလုပ်ထားသော canary အဖြစ် မှတ်တမ်းတင်မည် (#10427)။ |
| `OMNIROUTE_SMOKE_API_KEY` | _(မသတ်မှတ်ထား)_ | `scripts/ops/deploy-canary.mjs` | canary deployment smoke probe အတွက် API key ဖြစ်ပြီး `/v1/chat/completions` သို့ `Authorization: Bearer` အဖြစ် ပေးပို့သည်။ deployment script ကသာ အသုံးပြုပြီး (#10429) server က မည်သည့်အခါမျှ အသုံးမပြုပါ။ opt-in CLI smoke harness ၏ `OMNIROUTE_SMOKE_*` variable များ (`tests/integration/upstream-cli-smoke.int.test.ts` ရှိ `RUN_CLI_SMOKE=1`၊ `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS`) နှင့် မသက်ဆိုင်ပါ — [CLI ပေါင်းစပ်မှုများ → အမှန်တကယ် smoke sweep](../guides/CLI-INTEGRATIONS.md) ကို ကြည့်ပါ။ |
| `OMNIROUTE_BUILDING` | _(မသတ်မှတ်ထား)_ | `src/lib/buildPhase.ts` | Build အဆင့် အချက်ပြမှု (#10060) ဖြစ်သည်။ `scripts/build/build-next-isolated.mjs` က `1` ဟု သတ်မှတ်ပြီး စတင်ထားသော build worker တိုင်းက ဆက်လက်ရယူသဖြင့် DB layer သည် worker ပိတ်ချိန်တွင် ရပ်တန့်ပျက်စီးစေသော မူရင်း better-sqlite3 addon ကို load လုပ်မည့်အစား မည်သည့်လုပ်ဆောင်ချက်မျှမရှိသော stub ကို ပြန်ပေးသည်။ လက်ရှိအလုပ်လုပ်နေသော server အတွက် မည်သည့်အခါမျှ မသတ်မှတ်ပါ။ |
| `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | ပုံမှန်မဟုတ်သော vendored tree များအတွက် ရွေးချယ်နိုင်သည့် မူရင်း dependency prebuild စစ်ဆေးမှုကို ကျော်ရန် `1` ဟု သတ်မှတ်ပါ။ ဤသို့ပြုလုပ်ခြင်းသည် ပျောက်ဆုံးနေသော dependency ကို build လုပ်နိုင်စေမည်မဟုတ်ပါ။ မူရင်း dependency များကို ပြင်ပနည်းလမ်းဖြင့် ပံ့ပိုးထားသည့်အခါမှသာ အသုံးပြုပါ။ |
| `OMNIROUTE_DATA_DIR` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/promptql/threadSticky.ts` | `DATA_DIR` အတွက် **အရန် alias** ဖြစ်ပြီး `DATA_DIR` ကို မသတ်မှတ်ထားသည့်အခါမှသာ စစ်ဆေးသည်။ PromptQL executor ၏ disk ပေါ်ရှိ thread-sticky session cache (`
/promptql-thread-sessions.json`) ကို ရှာဖွေရန် အသုံးပြုသည်။ variable နှစ်ခုလုံးကို မသတ်မှတ်ထားပါက cache သည် memory ထဲ၌သာ ရှိနေမည်ဖြစ်ပြီး restart များကြားတွင် ဆက်လက်သိမ်းဆည်းထားမည်မဟုတ်ပါ။ |
| `OMNIROUTE_PLUGINS_DIR` | _(မသတ်မှတ်ထား)_ | `src/lib/plugins/scanner.ts` | **runtime plugin scanner** က ဖတ်ရှုသည့် directory နှင့် plugin manager က install လုပ်သည့် root ဖြစ်ပြီး home မှ ဆင်းသက်လာသော ပုံသေတန်ဖိုးကို အစားထိုးသည် (#11827)။ scan path ကို နေရာပြောင်းရန်အတွက်သာ HOME ကို ရွှေ့မည့်အစား Docker/K8s ရှိ bind-mount လုပ်ထားသော plugin tree ကို ညွှန်ပါ။ HOME သည် အခြား home နှင့်ဆက်စပ်သော အပြုအမူအားလုံးကိုလည်း ထိန်းချုပ်သည်။ မသတ်မှတ်ထားပါက `~/.omniroute/plugins` ဖြစ်ပြီး process က home ကို လုံးဝ export မလုပ်ထားပါက `/tmp/.omniroute/plugins` ဖြစ်သည် — ဤ variable သည် သတိပေးချက်မရှိဘဲ plugin မတွေ့ရှိခြင်းကို ဖြေရှင်းပေးသည်။ ဖြေရှင်းသတ်မှတ်ထားသော directory ကို startup တွင် အနိုင်ရသော input နှင့်အတူ `scanner.dir_resolved` အဖြစ် တစ်ကြိမ် log မှတ်တမ်းတင်သည်။ Server ဘက်အတွက်သာဖြစ်သည်။ CLI command plugin များသည် ၎င်းတို့၏ ကိုယ်ပိုင် `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` | ကုဒ်ဝှက်ကီးအတွက် ဗားရှင်းအညွှန်း။ အဟောင်း backup များကို ကုဒ်ဖြည်နိုင်ရန် ကီးပြောင်းလဲလည်ပတ်မှု ပြုလုပ်သည့်အခါ တိုးမြှင့်ပါ။ |
| `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | `true` ဖြစ်ပါက ပုံမှန်/ရေးသားခြင်းမပြုမီ SQLite ဖိုင် backup များကို ကျော်သွားမည် (models.dev စျေးနှုန်း သိမ်းဆည်းခြင်း/ရှင်းလင်းခြင်း၊ ဆက်တင်ရေးသားခြင်း)။ ကိုယ်တိုင်ပြုလုပ်သော backup နှင့် ပြန်လည်ရယူခြင်းမပြုမီ backup များကို ဆက်လက်လုပ်ဆောင်ပါမည်။ Migration runner ၏ မဖြစ်မနေလုပ်ရမည့် ကြာရှည်ခံ လုံခြုံရေး snapshot သို့မဟုတ် ရှိပြီးသား persistent DB အတွက် အစုလိုက် migration ကာကွယ်မှုကို ၎င်းက **မပိတ်ပါ**။ ကိုယ်တိုင်မဟုတ်သော backup များကို 60 မိနစ်လျှင် အများဆုံးတစ်ကြိမ်သာ လုပ်ဆောင်ရန် ကန့်သတ်ထားသည်။ Dashboard **Settings → Storage** တွင် ပုံမှန် auto-backup ကို သီးခြားပိတ်နိုင်သည်။ |
| `OMNIROUTE_CRYPT_KEY` | _(မသတ်မှတ်ထား)_ | `src/lib/db/encryption.ts` | `STORAGE_ENCRYPTION_KEY` အတွက် **အဟောင်း alias**။ အဓိက variable မရှိသည့်အခါ fallback အဖြစ် လက်ခံသည်။ |
| `OMNIROUTE_API_KEY_BASE64` | _(မသတ်မှတ်ထား)_ | `src/lib/db/encryption.ts` | fallback အဖြစ် လက်ခံသည့် **အဟောင်း alias** (Base64 ဖြင့် encode လုပ်ထားသော ပုံစံ)။ အသုံးမပြုမီ အလိုအလျောက် decode လုပ်သည်။ |
| `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 mapping ကို ပျက်ပြယ်စေပြီး SIGBUS (#13973) ဖြင့် process ပျက်ကျစေနိုင်သောကြောင့် scheduler မရှိတော့ပါ။ Variable သည် အလုပ်မလုပ်တော့ပါ။ အပေါင်းတန်ဖိုးတစ်ခုသည် တစ်ကြိမ်သာပြသမည့် deprecation သတိပေးချက်ကို log မှတ်တမ်းတင်ပြီး၊ `0` သို့မဟုတ် မသတ်မှတ်ထားပါက မည်သည့်အရာမျှ မပြပါ။ WAL ကို PASSIVE checkpoint များ (အောက်တွင်) ဖြင့် ထိန်းသိမ်းပြီး shutdown checkpoint ဖြင့် ဖြတ်တောက်သည်။ |
| `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 မိနစ်) | `src/lib/db/walMaintenance.ts` | မကြာခဏလုပ်ဆောင်သည့် `wal_checkpoint(PASSIVE)` ကြားကာလ (ms) ကို အစားထိုးသတ်မှတ်ပါ။ စောင့်ဆိုင်းနေသော WAL frame များကို သေးငယ်အောင်ထားပေးသဖြင့် checkpoint များ မြန်ဆန်နေပြီး shutdown အချိန် ဖြတ်တောက်မှုများကြားတွင် WAL ဖိုင်အရွယ်အစားကို ကန့်သတ်ထားနိုင်သည်။ `0` ဖြင့် ပိတ်နိုင်သည်။ |
| `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | PASSIVE tick တစ်ခုက WAL ဖိုင်သည် ဤအရွယ်အစားထက် ကျော်လွန်နေကြောင်း တွေ့ရှိပါက mapped wal-index ကို ပြန်လည်ရေးသားခြင်းမရှိဘဲ WAL ကို အစမှပြန်စေရန် `wal_checkpoint(RESTART)` ကို လုပ်ဆောင်သည်။ တိုက်ရိုက် truncate-mode checkpoint များကို ဖယ်ရှားထားပြီးဖြစ်သည် (`OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` အတန်းကို ကြည့်ပါ)။ |
| `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | အရေးကြီးသော resource ဖိအားသည် `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` ကြာအောင် ဆက်ရှိနေပြီးနောက် process မှ ထွက်ရန် `1`/`true`/`yes`/`on` ဟု သတ်မှတ်ပါ။ ထိုသို့ပြုလုပ်ခြင်းဖြင့် 503 များကို အကန့်အသတ်မရှိ ဆက်ပေးနေမည့်အစား supervisor (systemd `Restart=always`၊ Docker restart policy) က သန့်ရှင်းသော process တစ်ခုကို ပြန်လည်စတင်ပေးနိုင်သည်။ |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 မိနစ်) | `open-sse/utils/resourcePressure.ts` | ကိုယ်တိုင်ပြန်လည်စတင်ရန် ထွက်ခြင်း မဖြစ်ပေါ်မီ အရေးကြီးသော ဖိအား ဆက်လက်ရှိနေရမည့် ကြာချိန်။ |
| `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | ဤ process ပုံမှန်ဖြစ်နေသော်လည်း ဆူညံသော အိမ်နီးချင်းတစ်ခုကြောင့် 503 များ ဖြစ်ပေါ်လာသည့်အခါ host တစ်ခုလုံး၏ `/proc/pressure/memory` (`psi_some` / `psi_full`) ကို လျစ်လျူရှုရန် `1`/`true`/`yes`/`on` ဟု သတ်မှတ်ပါ (#13124)။ Cgroup နှင့် V8 heap ကာကွယ်မှုများ ဆက်ဖွင့်ထားမည်။ `cgroup_high` အတွက် kernel throttle သက်သေအဖြစ် PSI ကို ထည့်သွင်းရေတွက်ခြင်းလည်း ရပ်သွားမည်။ ထို့နောက် `memory.high` ထက်ကျော်သော cgroup စုစုပေါင်းသည် `memory.events` ၏ `high`/`max` တိုးလာမှသာ အရေးကြီးအဆင့်သို့ ရောက်မည်။ `memory.events` မရှိပါက မူရင်းအချိုးကို ဆက်လက်ထားရှိမည်။ |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(အလိုအလျောက်ရှာဖွေ)_ | `src/lib/db/adapters/sqljsAdapter.ts` | `sql.js` WASM fallback adapter ကို အသုံးပြုသည့်အခါ `sql-wasm.wasm` သို့ ညွှန်ပြသော တိကျသည့် path (absolute သို့မဟုတ် cwd နှင့် ဆက်စပ်သော relative path)။ မသတ်မှတ်ထားပါက package dependency များနှင့် ဖြစ်နိုင်သော layout များမှတစ်ဆင့် အလိုအလျောက် ရှာဖွေသည်။ |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | အဆုံးသတ်အခြေအနေ (ပြီးဆုံး/မအောင်မြင်/ပယ်ဖျက်/သက်တမ်းကုန်) ရောက်နေသော Batch API job ၏ checkpoint များ၊ ညွှန်းထားသော input/output/error ဖိုင်များနှင့် row ကို အလိုအလျောက် cleanup sweep က မဖျက်မီ ထိန်းသိမ်းထားမည့် ရက်အရေအတွက်။ `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` ကို ဖွင့်ထားမှသာ သက်ရောက်ပြီး OpenAI ၏ ကိုယ်ပိုင် Batch API output ထိန်းသိမ်းကာလနှင့် ကိုက်ညီသည်။ Operator က စတင်လုပ်ဆောင်သော `DELETE /api/v1/batches/delete-completed` route ကို မသက်ရောက်ပါ။ ထို route သည် ဒီဇိုင်းအရ ခြွင်းချက်မရှိ ဆက်လက်လုပ်ဆောင်မည် (သက်တမ်းအလိုက် စစ်ထုတ်မှုမရှိ)။ |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | `true` ဖြစ်သည့်အခါ အလိုအလျောက် ရှင်းလင်းရေးလုပ်ငန်းစဉ်အား `OMNIROUTE_BATCH_RETENTION_DAYS` ကျော်လွန်သွားသော အဆုံးသတ်အခြေအနေရှိ Batch API အလုပ်များ (နှင့် ၎င်းတို့၏ checkpoints များ) ကို ဖျက်ရန်နှင့် သက်ဆိုင်ရာ `expires_at` ကျော်လွန်သွားသော အပ်လုဒ်တင်ထားသည့် ဖိုင်များ၏ BLOB အကြောင်းအရာကို ရှင်းလင်းရန် ခွင့်ပြုသည်။ မူလသတ်မှတ်ချက်အရ ပိတ်ထားသည်။ အော်ပရေတာတစ်ဦးက ဖွင့်ရန် ရွေးချယ်သည့်အချိန်အထိ ရှိပြီးသား ထည့်သွင်းမှုတိုင်းသည် ဤဒေတာကို ယခင်အတိုင်း အတိအကျ ထိန်းသိမ်းထားမည်ဖြစ်သည်။ Dashboard မှ တည်းဖြတ်နိုင်သော feature flag တစ်ခုလည်း ဖြစ်သည် — `docs/reference/FEATURE_FLAGS.md` → Runtime ကို ကြည့်ပါ။ |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | စတင်ချိန်တွင် DB healthcheck ကို လုံးဝကျော်ရန် `1` ဟု သတ်မှတ်ပါ။ အချိန်တိုအတွင်း ပြီးဆုံးသည့် လုပ်ဆောင်ချက်များနှင့် integration tests များအတွက် အသုံးဝင်သည်။ |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | ပုံမှန်အားဖြင့် ကျော်သွားမည့်အခြေအနေတွင်ပင် (ဥပမာ၊ အချိန်တိုအတွင်း ပြီးဆုံးသည့် လုပ်ဆောင်ချက်များ) DB healthcheck loop ကို မဖြစ်မနေ ဖွင့်ရန် `1` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | `npm install` လုပ်နေစဉ် native-runtime ကြိုတင်အသင့်ပြင်ဆင်မှုကို ကျော်ရန် `1` ဟု သတ်မှတ်ပါ။ sqlite ကို တည်ဆောက်ပြီးသားဖြစ်သည့် CI/headless ထည့်သွင်းမှုများတွင် အသုံးဝင်သည်။ |
| `OMNIROUTE_MIGRATIONS_DIR` | _(အလိုအလျောက် ရှာဖွေသတ်မှတ်သည်)_ | `src/lib/db/migrationRunner.ts` | migration runner က စစ်ဆေးသည့် directory ကို အစားထိုးသတ်မှတ်သည်။ စိတ်ကြိုက် builds များတွင် စုစည်းထည့်သွင်းထားသော migrations များကို ဖြန့်ချိသည့်အခါ အသုံးဝင်သည်။ |
| `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(မသတ်မှတ်ထား)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Platform path delimiter ဖြင့် ခွဲထားသော `namespace=dir` entries များအဖြစ် ထပ်ဆောင်း migration directories များ။ (ဥပမာ `ee=/opt/app/enterprise/db/migrations`) ထိုနေရာတွင် တွေ့ရှိသော ဖိုင်များကို `-` အဖြစ် မှတ်တမ်းတင်ထားသောကြောင့် ကိုယ်ပိုင် migrations များ ပါဝင်သည့် distribution တစ်ခုသည် upstream numeric slots များနှင့် ဘယ်တော့မှ တိုက်ဆိုင်မည်မဟုတ်ပါ။ ပုံစံမမှန်သော entry၊ မမှန်ကန်သော namespace သို့မဟုတ် မရှိသော directory တစ်ခုကြောင့် schema ကို အသိမပေးဘဲ ကျော်သွားမည့်အစား စတင်ချိန်တွင် error ဖြစ်ပေါ်စေသည်။ |
| `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | အစုလိုက်အပြုံလိုက် ဆိုင်းငံ့နေသော migrations များအတွက် ဘေးကင်းရေး သတ်မှတ်တန်ဖိုး (#3416)။ ရှိပြီးသား DB တစ်ခုတွင် ဆိုင်းငံ့နေသော migrations အရေအတွက်သည် ဤပမာဏထက် ပိုများပါက startup ကို ရပ်ဆိုင်းသည် (ရှင်းလင်းခံထားရသော tracking table ကို ကာကွယ်ပေးသည်)။ backup အဟောင်းတစ်ခုကို ပြန်လည်ရယူရန် ၎င်းကို တိုးမြှင့်ပါ။ စစ်ဆေးမှုကို ပိတ်ရန် `0` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | `check:install-upgrade` release gate အတွက် အလုပ်လုပ်သည့် directory။ ၎င်းသည် ခန့်မှန်းခြေ 12 GB (တစ်ခုလျှင် ~3 GB ရှိသော install trees နှစ်ခုနှင့် tarball) လိုအပ်သောကြောင့် သေးငယ်သည့် tmpfs ပေါ်တွင် မလုပ်ဆောင်ရပါ — self-hosted runner ရှိ `/tmp` သည် RAM ကို အသုံးပြုထားသော 12 GB tmpfs ဖြစ်ပြီး gate က ၎င်းကို ကုန်ဆုံးစေကာ package ကို ဖြတ်တောက်ပျက်စီးစေခဲ့သည်။ |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(ကုဒ်အတွင်းရှိ မူလတန်ဖိုး)_ | `src/lib/spend/batchWriter.ts` | အစုလိုက်ရေးသားသည့် spend/cost writer အတွက် flush ကြားကာလ (ms)။ တန်ဖိုးနိမ့်ပါက ရေးသားမှုများ ပေါင်းစည်းခြင်းကို လျှော့ချပေးပြီး တန်ဖိုးမြင့်ပါက DB contention ကို လျှော့ချပေးသည်။ |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(ကုဒ်အတွင်းရှိ မူလတန်ဖိုး)_ | `src/lib/spend/batchWriter.ts` | မဖြစ်မနေ flush မလုပ်မီ buffer ထဲတွင် ထားနိုင်သော spend entries အများဆုံးအရေအတွက်။ QPS မြင့်သော deployments များတွင် တိုးမြှင့်ပါ။ မှတ်ဉာဏ်ပမာဏကန့်သတ်ထားခြင်းက ပိုအရေးကြီးသည့်အခါ လျှော့ချပါ။ |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(မသတ်မှတ်ထား)_ | `open-sse/utils/proxyFetch.ts` | Vercel relay path တွင် `[ProxyFetch]` debug logs များ ထုတ်ပေးရန် `"true"` ဟု သတ်မှတ်ပါ။ Routing ဆိုင်ရာ အရိပ်အမြွက်များ ပေါက်ကြားခြင်းကို ရှောင်ရှားရန် မူလသတ်မှတ်ချက်အရ ပိတ်ထားသည်။ |
| `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(မသတ်မှတ်ထား)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | လက်ခံအသုံးပြုထားသော ဖိုင်ကို အစားမထိုးမီ ထုတ်လုပ်ထားသည့် core configuration ကို စစ်ဆေးပေးသော local proxy core binary (`sing-box` ဟု အမည်ပေးထားသည့် ဖိုင်) ၏ absolute path။ မသတ်မှတ်ထားပါက လက်ခံအသုံးပြုထားသော ဖိုင်ဘေးတွင် `.generated` ကိုသာ ရေးသားသည်။ Host environment အတွက်သာဖြစ်သည်။ binary ကို လုပ်ဆောင်မည်ဖြစ်သောကြောင့် database ထဲတွင် မည်သည့်အခါမျှ သိမ်းဆည်းခြင်းမရှိသလို management API မှလည်း လက်မခံပါ။ |
| `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(မသတ်မှတ်ထား)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | အတည်ပြုထားသော config ကို အစားထိုးပြီးနောက် local proxy core က reload လုပ်ပုံ — shell မပါဘဲ လုပ်ဆောင်သည့် JSON argument array သို့မဟုတ် ပြင်ပ observer တစ်ခုက ဖိုင်ကို အသုံးချသည့်အခါ `external` ဟူသော စာသားအတိအကျ ဖြစ်သည်။ Database ထဲတွင် မည်သည့်အခါမျှ သိမ်းဆည်းခြင်းမရှိသလို API မှတစ်ဆင့်လည်း ဖော်ထုတ်မထားပါ။ |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | အသေးစိတ် `[ProxyEgress]` process-log line တွင် client/egress IPs များနှင့် account prefix ကို ထည့်သွင်းရန် `"true"` သို့မဟုတ် `"1"` ဟု သတ်မှတ်ပါ။ Process log မှ IPs များ သို့မဟုတ် account prefix ပေါက်ကြားခြင်း မရှိစေရန် မူလသတ်မှတ်ချက်အရ ပိတ်ထားသည်။ |
| `OMNIROUTE_DEBUG` | _(မသတ်မှတ်ထား)_ | `bin/cli/commands/quota.mjs` | CLI quota command များမှ တောင်းဆိုမှုတစ်ခုချင်းစီ၏ အချိန်တိုင်းတာရေး အချက်အလက်များ (`[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 path များ (ဖတ်ခြင်း/ပြန်လည်ရယူခြင်း/ရေးသားခြင်း) မှ `[omniroute completion]` အချက်အလက်များ ထုတ်ပြရန် ဗလာမဟုတ်သည့် မည်သည့်တန်ဖိုးကိုမဆို သတ်မှတ်ပါ။ မူလအားဖြင့် ပိတ်ထားသည် — cache မရှိခြင်း သို့မဟုတ် ပျက်စီးခြင်းကြောင့် tab-completion ဘယ်သောအခါမျှ မပျက်စေရန် ထို cache များသည် အမှားဖြစ်သည့်အခါ အသံတိတ်စွာ ကျော်သွားသည်။ |
| `BATCH_RETRY_DURATION_MS` | `86400000` (24 နာရီ) | `open-sse/services/batchProcessor.ts` | batch item တစ်ခုချင်းစီအတွက် အများဆုံး ပြန်လည်ကြိုးစားနိုင်သည့် အချိန်ကာလ (ms)။ ဤကာလကို ကျော်လွန်သည့် item များကို မအောင်မြင်ဟု မှတ်သားသည်။ |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | batch item များကို ပြန်လည်ကြိုးစားရာတွင် exponential backoff အတွက် အခြေခံနှောင့်နှေးချိန် (ms)။ |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1 နာရီ) | `open-sse/services/batchProcessor.ts` | batch item များကို ပြန်လည်ကြိုးစားမှုများကြား exponential backoff အတွက် အများဆုံးကန့်သတ်ချက် (ms)။ |
| `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | တစ်ပြိုင်နက်တည်း လုပ်ဆောင်နိုင်သည့် batch အရေအတွက် အများဆုံး။ လုပ်ဆောင်နိုင်စွမ်းကို မြှင့်တင်ရန် တန်ဖိုးကို တိုးပါ။ rate-limit များ အလွန်အကျွံဖြစ်ပေါ်ခြင်းကို ရှောင်ရှားရန် တန်ဖိုးနိမ့်နိမ့်ထားပါ။ |
> [!IMPORTANT]
> လက်ရှိ persistent database တစ်ခုကို မပြောင်းလဲမီ migration runner သည် ပြည့်စုံသော
> content-addressed snapshot တစ်ခုကို `DATA_DIR/db_backups/` အောက်တွင် ထုတ်ပြန်သည်။ ထုတ်ပြန်နိုင်ရန် filesystem သည်
> filesystem တစ်ခုတည်းအတွင်း overwrite မလုပ်သော hard link များနှင့် တာရှည်တည်တံ့သော file sync ကို
> ပံ့ပိုးရမည်။ POSIX host များတွင် directory sync လည်း လိုအပ်သည်။ Windows တွင် Node က directory handle များကို ငြင်းပယ်နိုင်သောကြောင့် OmniRoute သည်
> ထုတ်ပြန်ထားသော file ကို flush လုပ်ပြီး directory-entry sync ကို အတတ်နိုင်ဆုံး လုပ်ဆောင်သည်။
> mount လုပ်ထားသော `DATA_DIR` က ထိုအာမခံချက်များကို မပေးနိုင်ပါက migration တစ်ခုကို အသုံးမပြုမီ
> startup သည် လုံခြုံစွာ ရပ်တန့်မည်။ `DATA_DIR` ကို ထိုလုပ်ဆောင်ချက်များ ပံ့ပိုးသည့် volume တစ်ခုသို့ ရွှေ့ပါ။
> migration လုံခြုံရေးကို ကျော်လွှားရန် `DISABLE_SQLITE_AUTO_BACKUP` ကို မသုံးပါနှင့်။
### အသုံးပြုမှုအခြေအနေများ
| အခြေအနေ | ဖွဲ့စည်းသတ်မှတ်ချက် |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| **စက်တွင်း ဖွံ့ဖြိုးတိုးတက်ရေး** | မူလတန်ဖိုးအားလုံးကို မပြောင်းလဲဘဲထားပါ။ DB သည် `~/.omniroute/omniroute.db` တွင် ရှိမည်။ |
| **Docker** | `DATA_DIR=/data` ဟု သတ်မှတ်ပြီး `/data` တွင် volume တစ်ခုကို mount လုပ်ပါ။ |
| **သိမ်းဆည်းထားစဉ် ကုဒ်ဝှက်ထားခြင်း** | `STORAGE_ENCRYPTION_KEY` ကို သတ်မှတ်ပြီး key ၏ backup များကို သိမ်းထားပါ။ ၎င်းပျောက်ဆုံးခြင်းသည် data ပျောက်ဆုံးခြင်းနှင့် တူညီသည်။ |
| **CI/စမ်းသပ်ခြင်း** | `DATA_DIR=/tmp/omniroute-test` — ယာယီဖြစ်သောကြောင့် encryption မလိုအပ်ပါ။ |
---
## 3. ကွန်ရက်နှင့် Port များ
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `PORT` | `20128` | `src/lib/runtime/ports.ts` | Dashboard UI နှင့် API endpoint များ နှစ်မျိုးစလုံးအတွက် အဓိက port (port တစ်ခုတည်းသုံးသည့် mode)။ |
| `OMNIROUTE_BASE_PATH` | _(ဗလာ = root)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | reverse proxy နောက်ကွယ်မှ OmniRoute ကို ဝန်ဆောင်မှုပေးရန် URL subpath (`basePath` ကို Next.js တွင် သတ်မှတ်ပေးပြီး auth redirect များသည် basePath ကို သိရှိအသုံးပြုသည်)။ ဥပမာ `/omniroute`။ Docker တွင် တန်ဖိုးကို `docker build` လုပ်စဉ် ထည့်သွင်းထားသည် (`ARG OMNIROUTE_BASE_PATH`)။ ကြိုတင်တည်ဆောက်ထားသော root image များတွင် Next.js မစတင်မီ container စတင်ချိန်၌ မတူညီသော runtime တန်ဖိုးကို တစ်ကြိမ် အသုံးချနိုင်သည်။ တူညီသော subpath ပါဝင်သည့် အများသုံး origin ကို `NEXT_PUBLIC_BASE_URL` အဖြစ် သတ်မှတ်ပါ။ |
| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(ဗလာ = root)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | `OMNIROUTE_BASE_PATH` ၏ browser တွင် မြင်နိုင်သော mirror ဖြစ်ပြီး dashboard endpoint ပြသမှု၌ `https://host/v1` အစား `https://host/omniroute/v1` ကို ပြသနိုင်ရန် build လုပ်ချိန်တွင် တိုက်ရိုက်ထည့်သွင်းထားသည်။ မသတ်မှတ်ထားပါက `OMNIROUTE_BASE_PATH` ကို fallback အဖြစ် အသုံးပြုသည်။ ပြောင်းလဲပြီးနောက် ပြန်လည် 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` ပါရှိသည်။ VS Code Simple Browser က စာမျက်နှာများကို render လုပ်နိုင်ရန် (OmniCopilot ၏ `dashboardOpen: "editor"` mode) `vscode` ဟု သတ်မှတ်ပြီး စာမျက်နှာများ (dashboard၊ login၊ docs၊ landing) ကို `frame-ancestors 'self' vscode-webview:` ဖြင့်၊ `X-Frame-Options` မပါဘဲ ဝန်ဆောင်မှုပေးပါ။ API မျက်နှာပြင် (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, root-level alias များ) တွင် မည်သည့်အခြေအနေ၌မဆို တင်းကျပ်သော header များကို ဆက်လက်ထားရှိသည်။ `vscode` တစ်ခုတည်းကိုသာ အသိအမှတ်ပြုသည် — `1`/`true` သည် ၎င်းကို မဖွင့်ပေးပါ။ Build-time ဖြစ်သည်- ပြောင်းလဲပြီးနောက် ပြန်လည် build လုပ်ပါ (image များအတွက် `docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode`; ကြိုတင်တည်ဆောက်ထားသော installation တွင် သတ်မှတ်ခြင်းသည် အကျိုးသက်ရောက်မှုမရှိပါ)။ |
| `API_PORT` | _(မသတ်မှတ်ထား)_ | `src/lib/runtime/ports.ts` | သတ်မှတ်ထားပါက `/v1/*` proxy API ကို ဤသီးခြား port မှ ဝန်ဆောင်မှုပေးသည်။ |
| `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | API port အတွက် bind address။ |
| `DASHBOARD_PORT` | _(မသတ်မှတ်ထား)_ | `src/lib/runtime/ports.ts` | သတ်မှတ်ထားပါက Dashboard UI ကို ဤသီးခြား port မှ ဝန်ဆောင်မှုပေးသည်။ |
| `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(ပိတ်ထားသည်)_ | `src/sse/utils/backpressure.ts` | တစ်ပြိုင်နက် လုပ်ဆောင်ဆဲ chat connection အရေအတွက်ကို ကန့်သတ်သည်။ သတ်မှတ်ကန့်သတ်ချက်ကျော်သည့် request များသည် `Retry-After` နှင့်အတူ `503` ကို ရရှိမည်။ အပေါင်းကိန်းပြည့်တန်ဖိုးဖြင့် guard ကို ဖွင့်နိုင်ပြီး မသတ်မှတ်ထားခြင်း/`0` သည် ၎င်းကို ပိတ်ထားသည်။ |
| `OMNIROUTE_INSTANCE_ID` | _(မသတ်မှတ်ထား)_ | `src/shared/resilience/peerRouting.ts` | OmniRoute instance များကို ချိတ်ဆက်အသုံးပြုသည့်အခါ ဤ gateway အတွက် တည်ငြိမ်ပြီး တစ်ခုတည်းသီးသန့်ဖြစ်သော ID။ အဝင် peer-loop စစ်ဆေးမှုများကို ဖွင့်ပေးသည်။ ခွင့်ပြုထားသော စာလုံးများ- အက္ခရာများ၊ ဂဏန်းများ၊ `.`, `_`, `:` နှင့် `-`။ အများဆုံး စာလုံး 64 လုံး။ |
| `OMNIROUTE_PEER_URLS` | _(မသတ်မှတ်ထား)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | `X-OmniRoute-Peer-Trace` ကို လက်ခံရရှိနိုင်သည့် ကော်မာဖြင့် ပိုင်းခြားထားသော OmniRoute အခြေခံ URL များ။ အထက်ပိုင်း URL များထဲမှ အတိအလင်း ခွင့်ပြုစာရင်းသွင်းထားသည့် URL များသာ peer metadata ကို လက်ခံရရှိမည်ဖြစ်ပြီး အခြား provider များအားလုံးကို မပြောင်းလဲဘဲ ထားရှိသည်။ |
| `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | ကွင်းဆက်ချိတ်ဆက်ထားသော request တစ်ခုတွင် ယခင်က ဝင်ရောက်ခဲ့သည့် OmniRoute instance အရေအတွက် အများဆုံး (`1`-`32`)။ instance များ ထပ်နေခြင်း သို့မဟုတ် ခွင့်ပြုအရေအတွက် ကုန်ဆုံးသွားခြင်းရှိပါက HTTP `508 Loop Detected` ကို ပြန်ပေးသည်။ |
| `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Docker production mode ရှိ Dashboard အတွက် host ဘက်မှ ထုတ်လွှင့်ထားသော port။ |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Docker production mode ရှိ API အတွက် host ဘက်မှ ထုတ်လွှင့်ထားသော port။ |
| `OMNIROUTE_PORT` | _(မသတ်မှတ်ထား)_ | `src/lib/runtime/ports.ts` | Electron သို့မဟုတ် အခြား wrapper များအတွင်း လည်ပတ်သည့်အခါ `PORT` ထက် ဦးစားပေးအသုံးပြုသည်။ |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | အချိန်နှင့်တစ်ပြေးညီ WebSocket live monitoring server အတွက် port။ |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | live WebSocket server အတွက် bind address။ LAN ပေါ်တွင် ဖွင့်ပေးရန် `0.0.0.0` ဟု သတ်မှတ်ပါ (`LIVE_WS_ALLOWED_ORIGINS` ကိုလည်း စီစဉ်သတ်မှတ်ပါ)။ |
| `LIVE_WS_ALLOWED_ORIGINS` | _(မသတ်မှတ်ထား)_ | `src/server/ws/liveServer.ts` | live WebSocket ဖွင့်ရန် ခွင့်ပြုထားသည့် အပို origin များကို ကော်မာဖြင့် ပိုင်းခြားထားသော စာရင်း။ Loopback dashboard origin များကို မူလအတိုင်း ခွင့်ပြုထားပြီးဖြစ်သည်။ |
| `LIVE_WS_ALLOWED_HOSTS` | _(မသတ်မှတ်ထား)_ | `src/server/ws/liveServerAllowList.ts` | live WebSocket origin များအတွက် ခွင့်ပြုထားသည့် အပို hostname များကို ကော်မာဖြင့် ပိုင်းခြားထားသော စာရင်း။ `LIVE_WS_ALLOWED_ORIGINS` (origin URL အပြည့်အစုံ) နှင့်မတူဘဲ 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 ကို တစ်မိနစ်လျှင် request အရေအတွက်ဖြင့် သတ်မှတ်သည်။ instance တစ်ခုချင်းစီ၏ memory အတွင်း သိမ်းဆည်းသည်။ `0` သို့မဟုတ် အနုတ်တန်ဖိုးဖြင့် IP-dimension gate ကို ပိတ်နိုင်သည် (token တစ်ခုချင်းစီအတွက် DB limit ကို ဆက်လက်အသုံးချမည်)။ |
| `NODE_ENV` | `production` | Next.js core | မှတ်တမ်းတင်မှု အသေးစိတ်အဆင့်၊ ကက်ရှ်ပြုလုပ်မှု၊ အမှားအသေးစိတ်များ ဖော်ပြမှုနှင့် Next.js အကောင်းဆုံးဖြစ်အောင် ပြုပြင်မှုများကို ထိန်းချုပ်သည်။ |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — ကုဒ်၏ မူလတန်ဖိုး) | `package.json` / Next.js 16 | Turbopack သည် `npm run dev` နှင့် `npm run build` အတွက် မူလ bundler ဖြစ်သည် (benchmark စမ်းသပ်ချက်အရ build များ 2-3× ပိုမြန်သည်)။ Windows တွင် native binding / bundler-compat မကိုက်ညီမှုများ ကြုံတွေ့သည့်အခါ **သို့မဟုတ် RAM အကန့်အသတ်ရှိသော စက်များတွင်** webpack သို့ ပြန်ပြောင်းရန် `0` ဟု သတ်မှတ်ပါ — ဤ Next.js ဗားရှင်းလိုင်း (16.2.x) ရှိ Turbopack production build များသည် ကြီးမားသော module graph များတွင် webpack ထက် memory အမြင့်ဆုံးသုံးစွဲမှု သိသိသာသာ ပိုများကြောင်း upstream တွင် သိရှိထားသည် (Next 16.3 ၏ Turbopack memory-eviction ပြင်ဆင်ချက်သည် မတည်ငြိမ်သေးပါ)၊ webpack fallback သည် အမြင့်ဆုံး memory သုံးစွဲမှု များစွာနည်းပါးသည်။ #6409 ကို ကြည့်ပါ။ **Docker image build များ၏ မူလတန်ဖိုးမှာ `0` (webpack) ဖြစ်သည်**: `Dockerfile` တွင် `ARG OMNIROUTE_USE_TURBOPACK=0` ဟု ကြေညာထားသောကြောင့် သာမန် `docker build .` (Railway နှင့် အခြား one-click host များ၊ ယာယီ self-hoster များ) သည် memory ကန့်သတ်ထားသော builder တွင် OOM ကြောင့် ရပ်တန့်ခံရမည် မဟုတ်ပါ၊ image ကို Turbopack ဖြင့် build လုပ်ရန် `--build-arg OMNIROUTE_USE_TURBOPACK=1` ကို ပေးပါ။ `docs/guides/DOCKER_GUIDE.md` → Build-time resources ကို ကြည့်ပါ။ |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(မသတ်မှတ်ထား)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | စတင်ချိန်တွင် SQLite integrity health check ကို ကျော်ရန် `1` ဟု သတ်မှတ်ပါ။ ကြီးမားသော database များကို ပိုမိုမြန်ဆန်စွာ စတင်ရန် အသုံးဝင်သည်။ |
| `NOTIFY_SOCKET` | _(မသတ်မှတ်ထား)_ | systemd (sd_notify protocol) | လုပ်ငန်းစဉ်သည် sd_notify integration ပါဝင်သည့် service unit အောက်တွင် အလုပ်လုပ်သောအခါ systemd က သတ်မှတ်ပေးသည်၊ OmniRoute သည် READY/WATCHDOG အသိပေးချက်များ ပေးပို့ရန် ၎င်းကို ဖတ်သည် (`OMNIROUTE_DISABLE_SD_NOTIFY` ကို ကြည့်ပါ)။ အသုံးပြုသူက မည်သည့်အခါမျှ မသတ်မှတ်ရပါ။ |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(မသတ်မှတ်ထား)_ | `scripts/dev/systemd-notify.mjs` | systemd unit အောက်တွင် အလုပ်လုပ်နေသည့်တိုင် systemd sd_notify (Type=notify / WatchdogSec=) ကို ပိတ်ရန် `1` ဟု သတ်မှတ်ပါ။ systemd ပြင်ပတွင် notifier သည် မည်သည့်လုပ်ဆောင်မှုမျှ မပြုပါ။ |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | နောက်ခံ credential health check scheduler အတွက် ကြားကာလ (ms)။ အနည်းဆုံး: 10000 (10s)။ |
| `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | ကက်ရှ်ထားသော credential health status အတွက် TTL (ms)။ |
| `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | Provider ချိတ်ဆက်မှုများကို နောက်ခံတွင် အချိန်မှန် စမ်းသပ်ခြင်း ပိတ်ရန် `1` သို့မဟုတ် `true` ဟု သတ်မှတ်ပါ။ Search provider များ (`src/lib/providers/validation/searchProviders.ts` ရှိ SEARCH_VALIDATOR_CONFIGS၊ ဥပမာ `tavily-search`) ကို sweep မှ အမြဲတမ်း ချန်လှပ်ထားသည် — ၎င်းတို့၏ "validation" သည် အမှန်တကယ် အခကြေးငွေကောက်ခံသည့် upstream query ဖြစ်သောကြောင့် timer ဖြင့် မည်သည့်အခါမျှ health-check မလုပ်ပါ (#9970)။ |
| `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | TTL တစ်ခုလျှင် တစ်ကြိမ် completions surface ကို နမူနာယူသည့် `/api/monitoring/health?deep=1` ကို အထောက်အထားစစ်ဆေးပြီးသော caller တစ်ဦးက တောင်းဆိုနိုင်ရန် `1` ဟု သတ်မှတ်ပါ။ အမည်မသိ caller များသည် probe ကို မည်သည့်အခါမျှ မစတင်စေပါ။ |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Next.js dev/start server အတွက် bind address။ သတ်မှတ်ထားပါက မူလ `0.0.0.0` ကို အစားထိုးသည်။ |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Next.js ကို စတင်သောအခါ Playwright runner က အသုံးပြုသည့် bind address။ hermetic test များအတွက် မူလတန်ဖိုးမှာ `127.0.0.1` ဖြစ်သည်။ **`omniroute serve` အတွက် မသုံးပါနှင့်** — ၎င်းအစား `OMNIROUTE_SERVER_HOST` ကို သုံးပါ (POSIX shell များသည် `HOSTNAME` ကို စက်အမည်အဖြစ် အလိုအလျောက် သတ်မှတ်ပြီး `.env` က ၎င်းကို အစားမထိုးနိုင်ပါ)။ |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | `omniroute serve` အတွက် ချိတ်ဆက်နားထောင်မည့် လိပ်စာ။ POSIX shell ၏ `HOSTNAME` variable (bash/zsh က စက်အမည်အဖြစ် အမြဲသတ်မှတ်ထားသည်) နှင့် ထိခိုက်မှုမဖြစ်စေရန် ရှောင်ရှားပေးသည်။ မသတ်မှတ်ထားပါက `0.0.0.0` ကို အရန်အဖြစ် အသုံးပြုသည်။ (#6194) |
### Port မုဒ်များ
```
┌─────────────────────────── Port တစ်ခုတည်း (မူလသတ်မှတ်ချက်) ────────────────┐
│ PORT=20128 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Port များ ခွဲခြားအသုံးပြုခြင်း ─────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ အသုံးပြုမှုအခြေအနေ: Dashboard ကို localhost သို့ ကန့်သတ်ထားစဉ် API ကို LAN တွင် အသုံးပြုနိုင်အောင် ဖွင့်ပေးခြင်း။ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker Production ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → docker-compose.prod.yml တွင် container port များကို host port များနှင့် ချိတ်ဆက်သတ်မှတ်သည်။ │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 4. လုံခြုံရေးနှင့် အထောက်အထားစစ်ဆေးခြင်း
| Variable | မူလသတ်မှတ်ချက် | အရင်းအမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | စက်၏ fingerprint ဖန်တီးရန် hardware identifier များနှင့် ပေါင်းစပ်အသုံးပြုသည့် salt ဖြစ်သည်။ သီးခြားခွဲထားနိုင်ရန် deployment တစ်ခုစီအလိုက် ပြောင်းလဲပါ။ |
| `OMNIROUTE_CLI_SALT` | _(မသတ်မှတ်ထားပါ = installation တစ်ခုစီအတွက် ကျပန်း salt ကို `/cli-token-salt.json` တွင် အမြဲတမ်းသိမ်းဆည်းထားသည်)_ | `src/lib/machineToken.ts` | စက်တွင်း CLI auth token ကို ထုတ်ယူဖန်တီးရန် အသုံးပြုသည့် HMAC salt ဖြစ်သည်။ ဤတန်ဖိုးကို သတ်မှတ်ခြင်းဖြင့် စက်ပေါ်ရှိ CLI token အားလုံးကို ပြောင်းလဲအသစ်ပြုလုပ်ပြီး အမြဲတမ်း သိမ်းဆည်းထားသည့် salt ထက် ဦးစားပေးအသုံးပြုသည်။ `docs/security/CLI_TOKEN.md` ကို ကြည့်ပါ။ |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | session cookie များတွင် `Secure` flag ကို သတ်မှတ်ပေးသည်။ HTTPS နောက်ကွယ်တွင် လုပ်ဆောင်နေချိန်၌ **`true` ဖြစ်ရမည်**။ |
| `REQUIRE_API_KEY` | `false` | API middleware | `true` ဖြစ်သည့်အခါ `/v1/*` proxy request အားလုံးတွင် မှန်ကန်သော API key တစ်ခု ပါဝင်ရမည်။ **ဤ flag သည် `GET /v1/models` ကို ကန့်သတ်မထားပါ**။ ၎င်းအစား ထို endpoint သည် 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 မှ စီစဉ်သတ်မှတ်နိုင်ပြီး မျှဝေအသုံးပြုသည့် instance များတွင် လုံခြုံရေးအန္တရာယ်ရှိသည်။ |
| `NO_LOG_API_KEY_IDS` | _(ဗလာ)_ | `src/lib/compliance/index.ts` | request logging ကို ကျော်လွှားမည့် API key ID များကို ကော်မာဖြင့် ခွဲခြားထားသည့် စာရင်းဖြစ်သည် (GDPR လိုက်နာမှုအတွက်)။ |
| `DEFAULT_RATE_LIMIT_PER_DAY` | _(မသတ်မှတ်ထားပါ = အကန့်အသတ်မရှိ)_ | `src/shared/utils/apiKeyPolicy.ts` | `rate_limits` column သည် null ဖြစ်နေသော API key များအတွက် အသုံးပြုသည့် တစ်ရက်လျှင် request budget အရန်တန်ဖိုးဖြစ်သည်။ မသတ်မှတ်ထားခြင်း သို့မဟုတ် ဗလာဖြစ်ခြင်းသည် သွယ်ဝိုက်သတ်မှတ်ထားသော ကန့်သတ်ချက်မရှိဟု ဆိုလိုသည် (#2289, #11017)။ `0` သည်လည်း အတူတူပင်ဖြစ်သည် (အကန့်အသတ်မရှိ)။ အပေါင်းကိန်း N သည် N/day၊ 5N/week၊ 20N/month ကို ဖွင့်ပေးသည်။ ပုံစံမမှန်သော ဗလာမဟုတ်သည့် တန်ဖိုးများသည် ယခင်သတ်မှတ်ချက်များဖြစ်သည့် 1000/day၊ 5000/week၊ 20000/month window များကို အရန်အဖြစ် အသုံးပြုသည်။ |
| `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | ခွင့်ပြုထားသည့် request body အများဆုံးအရွယ်အစားဖြစ်သည်။ ဤကန့်သတ်ချက်ထက် ကျော်လွန်သော payload များကို ငြင်းပယ်သည်။ |
| `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | ဤ threshold နှင့် ညီမျှသော သို့မဟုတ် ကျော်လွန်သော အမှန်တကယ် request body များသည် JSON parsing မပြုမီ atomic process-local heavyweight admission lease ကို ရယူသည် (BYTE path၊ `POST /v1/responses` အပါအဝင်)။ structure-heavy ကဲ့သို့ပင် ကျန်းမာသော headroom ရှိချိန်တွင် လွတ်မြောက်ခွင့်ပြုသည့် [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) ယန္တရားကို အသုံးပြုသော်လည်း `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` | ကန့်သတ်ထားသော လက်ခံဖတ်ရှုမှုအတွင်း ဖတ်ယူသည့် bytes များအပေါ် အခြေခံ၍ အတည်ပြုသည့် chat-route အမြင့်ဆုံး ကန့်သတ်ချက်ဖြစ်ပြီး `Content-Length` မပါရှိသော၊ မမှန်ကန်သော သို့မဟုတ် မရိုးသားသော တောင်းဆိုမှုများလည်း ပါဝင်သည်။ ကန့်သတ်ချက်ကျော်လွန်ပါက `413` ရရှိမည်။ |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(မသတ်မှတ်ထား — တောင်းဆိုမှုအရေအတွက် ကန့်သတ်ချက်မရှိ)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** ယခင် request-COUNT ကန့်သတ်ချက်သည် တိတိကျကျ သတ်မှတ်ထားမှသာ ယခု သက်ရောက်သည်။ မသတ်မှတ်ဘဲထားပါက (မူလသတ်မှတ်ချက်) heavyweight chat လက်ခံမှုကို `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` က တားဆီးထိန်းချုပ်မည် — ၎င်းသည် **process တစ်ခု** (V8 heap တစ်ခု) အတွင်း process ၏ အမှန်တကယ် memory အများဆုံးပမာဏမှ အလိုအလျောက်တွက်ချက်ထားသော BYTE budget ဖြစ်သည်။ တစ်ပြိုင်တည်းထပ်နေသော ~750k-token `/v1/responses` နှစ်ခုသည် ~12 Gi heaps ကို ရပ်တန့်စေသည် (#7849) — ၎င်းသည် **memory-budget** သတိပေးချက်ဖြစ်ပြီး ထုတ်ကုန်၏ အမြင့်ဆုံးကန့်သတ်ချက် 2 ဟု ဆိုလိုခြင်းမဟုတ်ပါ။ ကျန်းမာသော process တစ်ခု (heap သည် shed ratio အောက်တွင်ရှိသောအခါ) သည် `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` မှတစ်ဆင့် ရှည်လျားသော `/v1/responses` များကို ပိုမိုတစ်ပြိုင်တည်း လက်ခံနိုင်သည်။ ရှည်လျားသော SSE clients ဆယ်ဂဏန်း (40–50) ကို လက်ခံနိုင်မှုသည် heap + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110 ပေါ်မူတည်ပြီး “အများဆုံး 2” မဟုတ်ပါ။ “host ကို အသုံးချရန်” ဤတန်ဖိုးကို မစဉ်းစားဘဲ မြှင့်တင်ခြင်းသည် #7849 ကို ပြန်ဖြစ်စေသည်။ **N လွတ်လပ်သော `DATA_DIR`s** (#11024) ဖြင့် **heaps** ကို တိုးချဲ့ပါ။ SQLite file တစ်ခုတည်းပေါ်တွင် `replicas>1` ကို မည်သည့်အခါမျှ မသုံးပါနှင့်။ |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(အလိုအလျောက်တွက်ချက်ထားသည်)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** အလိုအလျောက်တွက်ချက်ထားသော ingest byte budget ကို override လုပ်ရန်ဖြစ်သည် (ပိုမိုတင်းကျပ်သော V8/cgroup memory ceiling ၏ 25% ကို ယာယီတိုးပွားမှု 8x ဖြင့် စားထားခြင်း)။ တွက်ချက်ရရှိသည့်တန်ဖိုးများနှင့် တိတိကျကျသတ်မှတ်သည့်တန်ဖိုးများကို 8 MiB–2 GiB အတွင်း ကန့်သတ်သည်။ ထိရောက်သော budget ထက်ကြီးသော body သည် `413 body_exceeds_budget` ဖြင့် ချက်ချင်းမအောင်မြင်ပါ။ တစ်ခုချင်းစီကို ဝန်ဆောင်မှုပေးနိုင်သော်လည်း အချင်းချင်း အရင်းအမြစ်ယှဉ်ပြိုင်နေသည့် bodies များအတွက်မူ ပြန်လည်ကြိုးစားနိုင်သော `503` ကို ဆက်လက်ပေးသည်။ ရှည်လျားသော SSE clients 40–50 ခုကို တစ်ပြိုင်တည်း လက်ခံနိုင်မှုသည် ဤ budget + heap ပေါ်မူတည်ပြီး “အများဆုံး 2” ဟူသော အခိုင်အမာကန့်သတ်ချက်မဟုတ်ပါ။ ချိန်ညှိခြင်းမပြုမီ `/api/monitoring/health` ရှိ `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` ကို ဖတ်ရှုပါ။ |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | BYTE နှင့် STRUCTURE heavyweight လက်ခံမှုအတွက် heap-pressure shed ratio (`heapUsed / heap_size_limit`) ဖြစ်သည် (#10183, #10268, #10437)။ `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` ကို ကျော်လွန်သော တစ်ပြိုင်တည်း heavyweight တောင်းဆိုမှုတစ်ခုကို heap သည်လည်း ဤ ratio နှင့် တူညီ သို့မဟုတ် ကျော်လွန်နေမှသာ ပြန်လည်ကြိုးစားနိုင်သော `503` ဖြင့် ပယ်ချမည်။ ကျန်းမာသော heap တွင်မူ healthy-headroom မှတစ်ဆင့် လက်ခံမည်။ |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (မူလသတ်မှတ်ချက် `1`) | `src/shared/middleware/chatBodyAdmission.ts` | STRUCTURE နှင့် BYTE **နှစ်မျိုးလုံး** (`OMNIROUTE_CHAT_LARGE_BODY_BYTES` နှင့် တူညီ သို့မဟုတ် ပိုကြီးသော bodies များအပါအဝင် `admitChatRequest`) အတွက် healthy-heap fast path (#10437) ၏ ကန့်သတ်ထားသော အပိုစွမ်းဆောင်ရည်ဖြစ်သည်။ ဤကန့်သတ်ချက်မရှိပါက အလုပ်များသော်လည်း ကျန်းမာသော heap ရှိသည့် တောင်းဆိုမှုတိုင်းသည် အများဆုံးကန့်သတ်ချက်မရှိဘဲ လက်ခံမှုထိန်းချုပ်မှုကို ကျော်လွှားသွားမည်။ healthy-heap path မှတစ်ဆင့် ဤအရေအတွက်မျှသော concurrent leases များ အသက်ဝင်နေသည်နှင့် နောက်ထပ်အလုပ်များသော တောင်းဆိုမှုများသည် အမှန်တကယ် heap pressure အောက်တွင် အသုံးပြုသည့် တူညီသော bounded-wait/shed path သို့ ဆက်လက်ဝင်ရောက်မည်။ `0` သည် bypass ကို လုံးဝပိတ်သည်။ |
| `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | body သည် byte threshold အောက်တွင် ရှိနေသည့်တိုင် chat တောင်းဆိုမှုကို heavyweight အဖြစ် သတ်မှတ်မည့် message အရေအတွက်ဖြစ်သည်။ |
| `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | body သည် byte threshold အောက်တွင် ရှိနေသည့်တိုင် chat တောင်းဆိုမှုကို heavyweight အဖြစ် သတ်မှတ်မည့် tool အရေအတွက်ဖြစ်သည်။ |
| `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | တောင်းဆိုမှုတစ်ခုကို heavyweight အဖြစ် သတ်မှတ်ရန် အသုံးပြုသည့် ရှေးရိုးစွဲ string-size token ခန့်မှန်းချက်ဖြစ်သည်။ ၎င်းသည် admission-cost proxy ဖြစ်ပြီး provider billing tokenization မဟုတ်ပါ။ |
| `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (ပိတ်ထားသည်) | `src/shared/middleware/chatBodyAdmission.ts` | ရွေးချယ်ဖွင့်နိုင်သော chat history ကန့်သတ်ချက်ဖြစ်သည်။ မူလအားဖြင့် ပိတ်ထားသည်။ message အရေအတွက်သည် deployment policy ဖြစ်ပြီး တောင်းဆိုမှုတစ်ခု၏ အများသုံးဂုဏ်သတ္တိမဟုတ်သည့်အပြင် ဤနေရာတွင် ကန့်သတ်ခြင်းသည် compression pipeline က ဝန်ဆောင်မှုပေးနိုင်အောင် မပြုလုပ်မီ conversations များကို အပြီးသတ် `413` ဖြင့် ပယ်ချမည်ဖြစ်သည်။ Heap ကြီးထွားမှုကို `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` နှင့် heap-pressure shed တို့က ကန့်သတ်ထားသည်။ အခိုင်အမာ အများဆုံးကန့်သတ်ချက်လိုအပ်သော memory-constrained deployments များတွင် အပေါင်းတန်ဖိုးတစ်ခု သတ်မှတ်ပါ။ ထိုအခါ ကန့်သတ်ချက်ကျော်လွန်မှုများသည် ဖွဲ့စည်းထားသော compact-required `413` ကို ရရှိမည်။ |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | memory ထဲသို့ အပြည့်အဝ buffer လုပ်ထားသော non-streaming upstream response အတွက် အခိုင်အမာကန့်သတ်ချက်ဖြစ်သည်။ ဤကန့်သတ်ချက်ကျော်လွန်ပါက upstream reader ကို ပယ်ဖျက်ပြီး heap ကုန်ခန်းသည်အထိ ကန့်သတ်ချက်မဲ့ string တစ်ခု ကြီးထွားနေစေမည့်အစား တောင်းဆိုမှုကို လျင်မြန်စွာ မအောင်မြင်စေသည်။ |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | upstream တုံ့ပြန်မှု header များမှ forward ပြုလုပ်မည့် အများဆုံး wire byte ပမာဏ။ သတ်မှတ်ပမာဏ ကျော်လွန်သွားပါက အသုံးများသော reverse-proxy header ကန့်သတ်ချက်များအတွင်း ရှိနေစေရန် ဦးစားပေးအဆင့်နိမ့်သည့် header များ (ဥပမာ၊ စိတ်ကြိုက် `x-codex-*`၊ `x-oai-request-id`) ကို ဖယ်ရှားမည်။ တုံ့ပြန်မှု header အရွယ်အစား ပိုကြီးလာမည့် အကျိုးဆက်ဖြင့် upstream metadata ပိုမို forward ပြုလုပ်ရန် ပိုမြင့်သောတန်ဖိုး သတ်မှတ်ပါ။ |
| `CORS_ORIGIN` | _(မသတ်မှတ်ထား)_ | `src/server/cors/origins.ts` | ယခင်ဗားရှင်း single-origin CORS ခွင့်ပြုစာရင်း။ deployment အသစ်များအတွက် `CORS_ALLOWED_ORIGINS` ကို ဦးစားပေးအသုံးပြုပါ။ CORS သည် cross-origin browser API client များအတွက်သာ ဖြစ်သည်။ authentication ပြုလုပ်ထားသော dashboard write လုပ်ဆောင်ချက်များသည် ၎င်းအစား same-origin request များနှင့် session ချိတ်ဆက်ထားသော CSRF ကာကွယ်မှုကို အသုံးပြုသည်။ |
| `CORS_ALLOWED_ORIGINS` | _(မသတ်မှတ်ထား)_ | `src/server/cors/origins.ts` | ကော်မာဖြင့် ခွဲထားသော CORS ခွင့်ပြုစာရင်း။ `CORS_ALLOW_ALL=true` ကို အတိအလင်း configure မလုပ်ထားပါက wildcard ကို ပို့မည်မဟုတ်ပါ။ |
| `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | မည်သည့် browser `Origin` ကိုမဆို ပြန်လည်တုံ့ပြန်ရန် development အတွက်သာ ရည်ရွယ်သော လွတ်မြောက်နည်းလမ်း။ မျှဝေအသုံးပြုသည့် သို့မဟုတ် production deployment များတွင် မဖွင့်ပါနှင့်။ |
| `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | ယခင်ဗားရှင်း alias။ ၎င်း၏ dashboard toggle (DB override တစ်ခု) ကို ဤ environment တန်ဖိုးမတိုင်မီ ဖတ်သည်။ နှစ်ခုထဲမှ တစ်ခုခုတွင် `false`၊ `0`၊ `no` သို့မဟုတ် `off` ဖြစ်ပါက ထို flag ၏ dashboard toggle ကို ပိတ်ထားသည်ဟု သိမ်းဆည်းထားသည့်တိုင် `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` ကဲ့သို့ host စစ်ဆေးမှုများကို ပိတ်မည်။ အခြားတန်ဖိုးများက guard ကို အောက်ပါ flag နှစ်ခု၏ ထိန်းချုပ်မှုအောက်တွင် ဆက်ထားမည်။ |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | guard mode ကို လိုက်နာသည့် provider path များတွင် outbound URL guard ၏ host စစ်ဆေးမှုများကို cloud-metadata ပိတ်ဆို့မှုအပါအဝင် ပိတ်သည် (169.254.0.0/16 အားလုံး၊ metadata.google.internal)။ ယင်း path များတွင် URL အတည်ပြုခြင်း၊ model ရှာဖွေခြင်း၊ provider-node base URL များ (remote rerank node များအပါအဝင်)၊ proxy-fallback စမ်းသပ်မှုနှင့် remote image/media ရယူခြင်းကဲ့သို့ အခြား provider နှင့်ဆက်စပ်သည့် outbound path များ ပါဝင်သည်။ ၎င်းသည် private webhook target များကိုလည်း ခွင့်ပြုသော်လည်း cloud-metadata/link-local endpoint များကိုမူ ဤ flag ဖွင့်ထားသည့်တိုင် ဆက်လက်ပိတ်ဆို့ထားသည်။ `BaseExecutor.execute()` မှတစ်ဆင့် dispatch လုပ်သော chat request များသည် ၎င်းတို့၏ cloud-metadata စစ်ဆေးမှုကို ဆက်လက်ထားရှိသည်။ Local provider များသည် မူလသတ်မှတ်ချက်များဖြင့် အလုပ်လုပ်သည်။ `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (မူလ `true`) က အတည်ပြုခြင်း၊ ရှာဖွေခြင်းနှင့် provider-node path များတွင် local နှင့် LAN URL များကို ခွင့်ပြုပြီးဖြစ်သည်။ proxy-fallback စမ်းသပ်မှုနှင့် private webhook target များသည် ဤ flag ကိုသာ ကြည့်ရှုပြီး ၎င်းပိတ်ထားစဉ် local/LAN host များကို ပိတ်ဆို့သည်။ `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false` ကို override လုပ်သည်။ dashboard toggle မှ သိမ်းဆည်းထားသော တန်ဖိုးသည် ဤ variable ထက် ဦးစားပေးသည်။ |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | provider အတည်ပြုခြင်း၊ model ရှာဖွေခြင်း၊ chat နှင့် guard mode က ထိန်းချုပ်သည့် အခြား provider နှင့်ဆက်စပ်သော outbound path များအတွက် local/private address များ (127.0.0.1၊ localhost၊ LAN၊ private range များ) ပေါ်ရှိ provider URL များကို ခွင့်ပြုသည်။ **မူလ `true`** (local-first) ဖြစ်သည်။ ထိုအခါ guard သည် cloud-metadata endpoint များဖြစ်သော 169.254.0.0/16 အားလုံးနှင့် သိရှိထားသည့် metadata hostname များ (metadata.google.internal၊ metadata.goog၊ Alibaba/Azure/Oracle IMDS၊ fd00:ec2::254) ကို ပိတ်ဆို့သည်။ private နှင့် loopback host များကိုပါ ပိတ်ဆို့သည့် public-only mode အတွက် `false` သတ်မှတ်ပါ။ guard သည် DNS lookup တစ်စုံတစ်ရာမပြုမီ ရေးသားထားသည့်အတိုင်း hostname သို့မဟုတ် IP literal ကို စစ်ဆေးသည်။ public-only mode တွင် safe-fetch wrapper က hostname ကို ထပ်မံ resolve လုပ်ပြီး private answer မည်သည့်အရာကိုမဆို ငြင်းပယ်သည်။ `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` သည် ၎င်း၏ row တွင် ဖော်ပြထားသော path များပေါ်ရှိ ဤစစ်ဆေးမှုများကို ပိတ်သည်။ LM Studio၊ Ollama၊ vLLM၊ Llamafile နှင့် Triton ကဲ့သို့ built-in local provider များသည် key အတည်ပြုခြင်းနှင့် chat အတွက် host စစ်ဆေးမှုအားလုံးကို ကျော်သွားသည်။ dashboard toggle မှ သိမ်းဆည်းထားသော တန်ဖိုးသည် ဤ variable ထက် ဦးစားပေးသည်။ (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | `/v1/audio/*` route များ (အသံမှစာသားပြောင်းခြင်း၊ စကားပြောအသံ၊ ဘာသာပြန်ခြင်း) အား localhost ပြင်ပတွင် host လုပ်ထားသော OpenAI-compatible provider node ကို အသုံးပြုခွင့်ပေးသည်။ မူလအတိုင်း ပိတ်ထားသည် — audio ကို remote host သို့ route လုပ်ခြင်းသည် egress identity ကို ပြောင်းလဲသဖြင့် operator ၏ အတိအလင်းဆုံးဖြတ်ချက် လိုအပ်သည်။ Loopback/private node များ (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 ပြင်ပတွင် host လုပ်ထားသော OpenAI-compatible provider node — TEI၊ Infinity၊ vLLM စသည်တို့ကို လုပ်ဆောင်နေသည့် LAN စက် သို့မဟုတ် Tailscale peer — ကို အသုံးပြုခွင့်ပေးသည်။ မူလအတိုင်း ပိတ်ထားသည် — remote host သို့ route လုပ်ခြင်းသည် egress identity ကို ပြောင်းလဲသဖြင့် operator ၏ အတိအလင်းဆုံးဖြတ်ချက် လိုအပ်သည်။ Loopback node များ (localhost၊ 127.0.0.1၊ 172.16-31.x) ကို အမြဲခွင့်ပြုထားပြီး သက်ရောက်မှုမရှိပါ။ remote node ၏ base URL သည် provider outbound URL policy (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`) ကိုလည်း ဖြတ်ကျော်ရမည်။ |
| `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(ဗလာ)_ | `src/shared/network/localNodeHosts.ts` | ပံ့ပိုးသူနုတ်ဒ် လမ်းကြောင်းသတ်မှတ်ခြင်းက local အဖြစ် သတ်မှတ်မည့် hostname များ (ကော်မာ သို့မဟုတ် whitespace ဖြင့် ခွဲထားသည်) — ပုံမှန်အားဖြင့် OmniRoute ၏ ကိုယ်ပိုင် Docker ကွန်ရက်ပေါ်ရှိ reranker၊ TEI သို့မဟုတ် audio sidecar ၏ Docker/Compose ဝန်ဆောင်မှုအမည် (`http://reranker:8080/v1`) ဖြစ်သောကြောင့် နုတ်ဒ်တွင် hard-coded container IP မလိုအပ်ပါ။ စာရင်းထည့်ထားသော host များသည် အဝေးရှိနုတ်ဒ်တိုင်းအတွက် `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` ကို ဖွင့်စရာမလိုဘဲ `/v1/rerank`၊ `/v1/audio/*` နှင့် local ကျန်းမာရေးစစ်ဆေးမှုတို့အတွက် အသုံးပြုနိုင်ပြီး တိုက်ရိုက်ခေါ်ဆိုသည် — `HTTP(S)_PROXY` သို့မဟုတ် connection တစ်ခု၏ သတ်မှတ်ထားသော proxy မှတစ်ဆင့် မည်သည့်အခါမျှ မခေါ်ဆိုပါ။ သို့သော် ၎င်းတို့သည် connection ၏ API key ကို ပေးပို့ဆဲဖြစ်သည်။ single-label အမည်များနှင့် `.internal`/`.local` အမည်များကိုသာ လက်ခံသည်။ public FQDN များ၊ IP literal များနှင့် cloud-metadata အမည်များကို သတိပေးချက်တစ်ခုဖြင့် လျစ်လျူရှုသည်။ (#14635) |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | OIDC ကို ဖွင့်ထားသောအခါ အသုံးပြုသူများသည် OIDC Single Sign-On မှတစ်ဆင့်သာ အထောက်အထားစိစစ်နိုင်စေရန် password login ကို ပိတ်ပါ။ အတိုကောက် 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
# ထုတ်လုပ်ရေးပတ်ဝန်းကျင်အတွက် အနည်းဆုံးလုံခြုံရေးသတ်မှတ်ချက်များ-
AUTH_COOKIE_SECURE=true # HTTPS လိုအပ်သည်
REQUIRE_API_KEY=true # proxy ခေါ်ဆိုမှုအားလုံးကို အထောက်အထားစိစစ်ပါ
ALLOW_API_KEY_REVEAL=false # UI တွင် key များကို မည်သည့်အခါမျှ မဖော်ပြပါနှင့်
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # 5 MB ကန့်သတ်ချက်
```
---
## 5. ထည့်သွင်းမှု သန့်စင်ခြင်းနှင့် PII ကာကွယ်မှု
OmniRoute သည် အလွှာနှစ်ထပ် ကာကွယ်မှုကို ပံ့ပိုးပေးသည်။ တောင်းဆိုချက်ဘက်တွင် injection စစ်ဆေးခြင်းနှင့် တုံ့ပြန်ချက်ဘက်တွင် PII ဖယ်ရှားခြင်းတို့ ဖြစ်သည်။
> **⚠️ ကန့်သတ်ချက်များ:** ဤကာကွယ်ရေးစနစ်များသည် ပြီးပြည့်စုံသော prompt-injection firewall သို့မဟုတ် PII DLP စနစ်များ မဟုတ်ဘဲ _တတ်နိုင်သမျှ လုပ်ဆောင်သည့် heuristic_ ရှာဖွေစစ်ဆေးမှုများသာ ဖြစ်သည်။ ၎င်းတို့သည် false positive များ (အန္တရာယ်မရှိသော persona/RPG prompt များကို အန္တရာယ်ရှိသည်ဟု သတ်မှတ်ခြင်း) နှင့် false negative များ (leetspeak၊ စာလုံးခြားရေးသားမှု၊ အင်္ဂလိပ်မဟုတ်သော ပုံစံများကို မတွေ့ရှိခြင်း) ဖြစ်ပေါ်စေနိုင်သည်။ စည်းမျဉ်းလိုက်နာမှုအတွက် ၎င်းတို့ကိုသာ သီးခြားအသုံးပြုခြင်းသည် မလုံလောက်ပါ။ ၎င်းတို့အပေါ် မှီခိုအသုံးမပြုမီ mode များကို ချိန်ညှိပြီး သင့် traffic နှင့် စမ်းသပ်ပါ။
### တောင်းဆိုချက်ဘက်: Prompt Injection ကာကွယ်ရေး
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| --------------------------------- | --------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | ဝင်လာသော message များတွင် prompt injection ပုံစံများ ရှိမရှိ စစ်ဆေးခြင်းကို ဖွင့်ပါ။ |
| `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Injection မူဝါဒ: `warn` = log သာ မှတ်တမ်းတင်မည်၊ `block` = တောင်းဆိုချက်ကို 400 ဖြင့် ငြင်းပယ်မည်။ အဟောင်း `redact` သည် injection စာသားကို **မဖယ်ရှားပါ**။ တောင်းဆိုချက်ရှိ PII ကို ပြန်လည်ရေးသားရန် `PII_REDACTION_ENABLED` ကို အသုံးပြုပါ။ |
| `INJECTION_GUARD_MODE` | _(မသတ်မှတ်ထား)_ | `src/middleware/promptInjectionGuard.ts` | `INPUT_SANITIZER_MODE` အတွက် အမည်ဟောင်း alias ဖြစ်ပြီး လုပ်ဆောင်ပုံ တူညီသည်။ |
| `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | `MODE=block` က ငြင်းပယ်မည့် အနိမ့်ဆုံး ပြင်းထန်မှုအဆင့်: `high` (မူလတန်ဖိုး)၊ `medium` သို့မဟုတ် `low`။ Threshold ကို မလျှော့ထားပါက medium ပုံစံများကို စောင့်ကြည့်ရုံသာ ပြုလုပ်သည်။ |
| `INJECTION_GUARD_BLOCK_THRESHOLD` | _(မသတ်မှတ်ထား)_ | `src/shared/utils/injectionSeverity.ts` | `INPUT_SANITIZER_BLOCK_THRESHOLD` အတွက် အမည်ဟောင်း alias ဖြစ်ပြီး လုပ်ဆောင်ပုံ တူညီသည်။ |
| `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | `true` ဖြစ်ပါက ဝင်လာသော တောင်းဆိုချက်များရှိ PII ကို ဖုံးကွယ်မည် (injection mode နှင့် သီးခြားဖြစ်သည်)။ |
| `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | တောင်းဆိုချက်/တုံ့ပြန်ချက် payload များမှ လူသိများသော API-key / secret-token ပုံစံများကို ဖုံးကွယ်မည်။ ရွေးချယ်ဖွင့်ရသော စနစ်ဖြစ်ပြီး `PII_REDACTION_ENABLED` နှင့် ဆင်တူစွာ လုပ်ဆောင်သည်။ |
### တုံ့ပြန်ချက်ဘက်: PII သန့်စင်စနစ်
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| -------------------------------- | ---------- | ------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | Client ထံ ပြန်မပို့မီ LLM တုံ့ပြန်ချက်များတွင် ပေါက်ကြားနေသော PII ရှိမရှိ စစ်ဆေးမည်။ |
| `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = PII ကို ဖုံးကွယ်မည်၊ `warn` = log သာ မှတ်တမ်းတင်မည်၊ `block` = တုံ့ပြန်ချက်တစ်ခုလုံးကို ပယ်ဖျက်မည်။ |
### VS Code Tokenized-Route Context သန့်စင်စနစ်
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ----------------------------------- | ---------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | `/v1/vscode/[token]/*` တောင်းဆိုချက်များမှ အလိုအလျောက် ပါဝင်လာသော လက်ရှိ editor context (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) ကို ဖယ်ရှားပြီး၊ အတိအလင်း တွဲတင်ထားသော အရေးကြီးဖိုင်များ၏ အကြောင်းအရာကို ဖုံးကွယ်သည်။ မူလအတိုင်း လုံခြုံစေရန် သတ်မှတ်ထားပြီး ပိတ်ရန် `0` ဟု သတ်မှတ်ပါ။ |
### အသုံးပြုမှုအခြေအနေများ
| အသုံးပြုမှုအခြေအနေ | ဖွဲ့စည်းသတ်မှတ်မှု |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **လုပ်ငန်းအဆင့် စည်းမျဉ်းလိုက်နာမှု** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (injection များကို ပိတ်ဆို့ခြင်း + တောင်းဆိုချက်/တုံ့ပြန်ချက်ရှိ PII ကို ဖုံးကွယ်ခြင်း၊ mode များသည် တစ်ခုနှင့်တစ်ခု သီးခြားဖြစ်သည်) |
| **စောင့်ကြည့်ခြင်းသာ** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — log မှတ်တမ်းတင်သော်လည်း မည်သည့်အခါမျှ မပိတ်ဆို့ပါ |
| **ကိုယ်ပိုင်အသုံးပြုမှု** | အားလုံးကို ပိတ်ထားပါ — ထပ်ဆောင်းကုန်ကျစရိတ် လုံးဝမရှိပါ |
---
## 6. Tool နှင့် Routing မူဝါဒများ
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ----------------------------------------------------------- | ----------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | LLM ၏ tool/function-calling အသုံးပြုခွင့်ကို ထိန်းချုပ်သည်။ `allowlist` = စာရင်းတွင် ပါဝင်သော tool များသာ၊ `denylist` = စာရင်းတွင် ပါဝင်သော tool များမှလွဲ၍ အားလုံး၊ `disabled` = ကန့်သတ်ချက်မရှိ။ |
| `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | Payload ပြုပြင်ထိန်းချုပ်မှုစည်းမျဉ်းများပါဝင်သည့် JSON ဖိုင်သို့ လမ်းကြောင်း (model/protocol တစ်ခုချင်းအလိုက် upstream ချိန်ညှိမှုများ)။ |
| `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Payload စည်းမျဉ်းဖိုင်ကို hot-reload လုပ်ရန် ကြားကာလ (ms)။ အနည်းဆုံး `1000`။ |
| `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | ရွေးချယ်ဖွင့်နိုင်သည့် ဆက်တင်- provider prefix လိုအပ်စေမည့်အစား Claude Code client များမှ prefix မပါသော `claude-*` model ID များကို Claude Code OAuth account မှတစ်ဆင့် route လုပ်ပေးသည်။ အတိအလင်း သတ်မှတ်ထားသော provider prefix များကို ဆက်လက်ဦးစားပေးသည်။ Claude provider စာမျက်နှာရှိ dashboard toggle မှတစ်ဆင့်လည်း စီစဉ်သတ်မှတ်နိုင်သည်။ |
| `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | အမွေဆက်ခံထားသော `resolveBareModelToConnectionDefault` လုပ်ဆောင်ပုံ (#4825)- prefix မပါသော မည်သည့် model အမည်ကိုမဆို ရွေးချယ်ထားသည့် connection ၏ `defaultModel` ဖြင့် အစားထိုးသည်။ မူလအားဖြင့် ပိတ်ထားပြီး `auto` သို့မဟုတ် model အလွတ်ကိုသာ အစားထိုးသည်။ ဖွင့်ထားချိန်တွင် အတွဲတစ်တွဲစီအတွက် သတိပေးချက်တစ်ခုကို log မှတ်တမ်းတင်သည်။ |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Round-robin combo များအတွက် model တစ်ခုချင်းစီ၏ တစ်ပြိုင်နက်လုပ်ဆောင်မှု အများဆုံးကန့်သတ်ချက် (#9100)။ Round-robin combo semaphore ကို အစားထိုးသတ်မှတ်နိုင်ခြင်းမရှိဘဲ model တစ်ခုလျှင် တစ်ပြိုင်နက် request 3 ခုအထိ အတိအကျကန့်သတ်ထားခဲ့သောကြောင့် ပိုမိုမြင့်မားသည့် concurrency traffic ကို ထိုကန့်သတ်ချက်နောက်တွင် အစဉ်လိုက်လုပ်ဆောင်စေခဲ့သည်။ `>= 1` ဖြစ်ကြောင်း အတည်ပြုစစ်ဆေးပြီး `<= 32` အထိ ကန့်သတ်ထားသည်။ |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | တိုက်ရိုက် single-model request များအတွက် OmniRoute ၏ local context-window / max-input-token စစ်ဆေးမှုကို ကျော်သွားစေသည့် အန္တရာယ်ရှိသော ရွေးချယ်ဖွင့်နိုင်မှု။ Upstream provider များက ၎င်းတို့၏ အမှန်တကယ်ကန့်သတ်ချက်များကို ဆက်လက်အသက်ဝင်စေသည်။ Prompt compression နှင့် model ကိုယ်တိုင်၏ output-token ကန့်သတ်ချက်တို့လည်း ဆက်လက်အသက်ဝင်နေသည်။ အကျိုးသက်ရောက်သည့် ဦးစားပေးအစီအစဉ်မှာ Feature Flags DB override > environment variable > မူလတန်ဖိုး ဖြစ်သည်။ Restart လုပ်ရန် မလိုအပ်ပါ။ |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(မသတ်မှတ်ထား)_ | `open-sse/services/selfHostedEntry.ts` | Inline YAML `providers:` document (RIC-738, D4)။ သတ်မှတ်ထားပါက (`strategy:` block ပါသည်ဖြစ်စေ၊ မပါသည်ဖြစ်စေ) `/v1/chat/completions` ကို cloud pipeline အစား self-hosted unified OpenAI-compatible entry သို့ လွှဲပို့သည်။ မသတ်မှတ်ထားပါက (မူလအခြေအနေ) route သည် လက်ရှိ cloud pipeline သို့ တိုက်ရိုက်ဆက်သွားသည်။ `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md` ကို ကြည့်ပါ။ |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/selfHostedEntry.ts` | Inline env var အစား ဖိုင်ကို ပိုနှစ်သက်သည့် deployment များအတွက် `OMNIROUTE_SELF_HOSTED_PROVIDERS` နှင့် တူညီသော `providers:` document ပါဝင်သည့် YAML ဖိုင်သို့ လမ်းကြောင်း။ တစ်ခုခုကို သတ်မှတ်ခြင်းဖြင့် self-hosted entry ကို အသက်သွင်းသည်။ |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(မသတ်မှတ်ထား — ဖွင့်ထားသော route)_ | `open-sse/services/selfHostedEntry.ts` | Unified self-hosted entry အတွက် ရွေးချယ်အသုံးပြုနိုင်သော shared API key (D5 scaffold၊ key တစ်ခုချင်းစီအလိုက် quota စနစ်အတွက် သီးသန့်ထားသည်)။ သတ်မှတ်ထားပါက request များတွင် `Authorization: Bearer ` ပါဝင်ရမည်။ မသတ်မှတ်ထားပါက route ကို ဖွင့်ထားပြီး လက်ရှိ self-hosted local-provider ပုံစံ (loopback/trusted-network deployment) နှင့် ကိုက်ညီသည်။ |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(မသတ်မှတ်ထား)_ | `open-sse/services/routingStrategies.ts` | Deterministic routing engine (M2/RIC-740, D3) အတွက် inline YAML `strategy:` document — blacklist/whitelist၊ cooldown breaker၊ cost-priority၊ latency-aware နှင့် fallback chain။ Key တစ်ခုချင်းစီအလိုက် `OMNIROUTE_SELF_HOSTED_PROVIDERS` အတွင်း ထည့်သွင်းထားသော inline `strategy:` block ကို override လုပ်သည်။ `docs/routing/DETERMINISTIC_ROUTING.md` ကို ကြည့်ပါ။ |
| `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(သတ်မှတ်မထား)_ | `open-sse/services/routingStrategies.ts` | inline env var အစား ဖိုင်ကို အသုံးပြုလိုသော deployment များအတွက် `OMNIROUTE_SELF_HOSTED_STRATEGY` နှင့် တူညီသည့် `strategy:` document ပါဝင်သော YAML ဖိုင်သို့ လမ်းကြောင်း။ |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(သတ်မှတ်မထား)_ | `open-sse/services/conversationTracker.ts` | စကားဝိုင်းမှတ်တမ်း စုဆောင်းခြင်းကို ရပ်တန့်ရန် `1` ဟု သတ်မှတ်ပါ။ `resolveConversationId()` သည် SQLite ကို ဖတ်ခြင်း သို့မဟုတ် မက်ဆေ့ချ်မှတ်တမ်းကို ခွဲခြမ်းစိတ်ဖြာခြင်းမပြုမီ ခြေရာခံမထားသော ရလဒ်ကို ပြန်ပေးပြီး၊ client မှ ပေးထားသော session ID များလည်း အကျုံးဝင်သည်။ Routing-session ကိုင်တွယ်မှုမှာ မပြောင်းလဲဘဲ ရှိပြီး လက်ရှိ record များကို မဖျက်ပါ။ dashboard ၏ စကားဝိုင်းမြင်ကွင်းကို အသုံးမပြုဘဲ turn table ဆက်လက်ကြီးထွားခြင်းကို ရပ်တန့်လိုသော deployment များအတွက် ဖြစ်သည်။ |
| `OMNIROUTE_NADIR_API_KEY` | _(သတ်မှတ်မထား)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | combo ၏ ကိုယ်ပိုင် `config.nadir.apiKey` ကို မသတ်မှတ်ထားသည့်အခါ အသုံးပြုသည့်၊ ရွေးချယ်အသုံးပြုနိုင်သော `nadir` auto-combo router strategy အတွက် API key။ ရွေးချယ်နိုင်သည်- key မပါသော call များသည် Nadir ၏ အမည်မဖော်သော tier သို့ ရောက်ရှိပြီး IP တစ်ခုချင်းအလိုက် rate limit သတ်မှတ်ထားသောကြောင့် shared gateway နောက်ကွယ်တွင် အသုံးမပြုနိုင်ပါ။ အရေးကြီးဒေတာဖြစ်သောကြောင့် combo များက မတူညီသော account များကို အသုံးပြုသည့်အခါ combo တစ်ခုချင်းစီ၏ field ကို ဦးစားပေးပါ။ |
| `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | combo ၏ ကိုယ်ပိုင် `config.nadir.baseUrl` ကို မသတ်မှတ်ထားသည့်အခါ အသုံးပြုသည့် Nadir decision API ၏ base origin။ prompt အစပိုင်းများကို သင့်ကိုယ်ပိုင် network အတွင်း၌ ထိန်းသိမ်းထားသည့် self-hosted Nadir အတွက်သာ လိုအပ်သည်။ နောက်ဆုံးရှိ `/v1` ကို လက်ခံပြီး ဖယ်ရှားပေးသည်။ |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | API key တစ်ခုချင်းစီ၏ USD အသုံးပြုမှုကန့်သတ်ချက်များအတွက် အပတ်စဉ် window (request enforcement၊ `GET /api/keys/{id}/usage-limits`၊ `@@om-usage`)။ `provider`: key က ချိတ်ဆက်အသုံးပြုနိုင်သော upstream connection များအနက် အစောဆုံး အပတ်စဉ် reset အချိန်တွင် အပတ်ကုန်ဆုံးသည်၊ သို့မဟုတ် သိရှိထားသော reset မရှိပါက ရွေ့လျားနေသော 7 ရက်တာကာလ ဖြစ်သည်။ `calendar`: ဒေသစံတော်ချိန် တနင်္လာနေ့ 00:00 မှ နောက်တနင်္လာနေ့ 00:00 အထိဖြစ်ပြီး key အားလုံးအတွက် တူညီသည်။ upstream account pool တစ်ခုကို တစ်ခုချင်းစီ budget သတ်မှတ်ထားသော key အများအပြားက မျှဝေအသုံးပြုသည့်အခါ `calendar` ကို အကြံပြုသည်။ မမှန်ကန်သောတန်ဖိုးများသည် `provider` သို့ ပြန်လည်အသုံးပြုသည်။ |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(process timezone)_ | `src/lib/usage/apiKeyUsageLimits.ts` | `calendar` အပတ်စဉ် window အတွက် တနင်္လာနေ့ 00:00 ကို သတ်မှတ်ပေးသော IANA timezone (ဥပမာ `Asia/Shanghai`)။ မသတ်မှတ်ထားလျှင် သို့မဟုတ် မမှန်ကန်လျှင်- OmniRoute process ၏ timezone (host သို့မဟုတ် container ၏ `TZ` ဖြစ်ပြီး container image များတွင် မကြာခဏ မသတ်မှတ်ထားသောကြောင့် Coordinated Universal Time ဖြစ်သည်) ကို အသုံးပြုသည်။ `provider` mode တွင် လျစ်လျူရှုသည်။ |
| `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | request တစ်ခုတွင် ခွင့်ပြုထားသော tool အရေအတွက်၏ မူလအများဆုံးကန့်သတ်ချက် (OpenAI မူလသတ်မှတ်ချက်)။ အပေါင်းကိန်းများကိုသာ လက်ခံသည်၊ မသတ်မှတ်ထားသော သို့မဟုတ် မမှန်ကန်သောတန်ဖိုးများအတွက် `128` ကို ဆက်လက်အသုံးပြုသည်။ သိရှိထားသော/ကြိုတင်သတ်မှတ်ထားသော ကန့်သတ်ချက်ရှိသည့် provider (`grok-cli` 200၊ `nvidia` 1536) သည် ၎င်း၏ကိုယ်ပိုင် အများဆုံးကန့်သတ်ချက်ကို ဆက်လက်အသုံးပြုမည်ဖြစ်ပြီး၊ ဤတန်ဖိုးသည် မူလ ceiling ကိုသာ ပြောင်းလဲပေးသည်။ |
| `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(ဖွင့်ထား)_ | `open-sse/executors/syntxChat.ts` | SYNTX.ai ၏ prompt ဖြင့် အတုယူလုပ်ဆောင်သော tool calling- မသတ်မှတ်ထားလျှင် သို့မဟုတ် `1`/`true`/`on`/`yes` ဖြစ်လျှင် local tool catalog ကို prompt ထဲသို့ ထည့်သွင်းသည်၊ အခြားမည်သည့်တန်ဖိုးမဆို (ဥပမာ `0`) ထိုထည့်သွင်းမှုကို ကျော်သွားသည်။ |
---
## 7. URL များနှင့် Cloud Sync
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ---------------------------------------- | --------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | အတွင်းပိုင်း sync job များက `/api/sync/cloud` ကို ခေါ်ဆိုရန်အတွက် server-side URL ဖြစ်သည်။ app ကို အများပြည်သူအသုံးပြုနိုင်ရန် proxy ခံထားသည့်အခါတွင်ပင် ၎င်းကို loopback/container URL အဖြစ် ဆက်လက်ထားရှိပါ။ |
| `CLOUD_URL` | _(အလွတ်)_ | `src/lib/cloudSync.ts` | Cloud relay endpoint URL (premium feature)။ |
| `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | cloud sync request များအတွက် HTTP timeout ဖြစ်သည်။ |
| `OMNIROUTE_BUILD_PROFILE` | `full` | Webpack build config | Build-time profile (အထူးအခွင့်အရေးလိုအပ်သော module များကို bundle မှ လုံးဝဖယ်ရှားရန် `minimal` ဟု သတ်မှတ်ပါ)။ |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone output_ | `scripts/build/colocate-standalone.mjs` | build ပြီးနောက် colocation အဆင့်က အသုံးပြုသည့် standalone output directory အတွက် build-time override ဖြစ်သည်။ runtime setting မဟုတ်ပါ။ |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(အလွတ်)_ | `src/lib/cloudSync.ts` | Cloud Sync response များ၏ HMAC-SHA256 signature ကို အတည်ပြုရန် အသုံးပြုသော shared secret ဖြစ်သည်။ |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Cloud Sync endpoint က local credential များကို overwrite လုပ်ခွင့်ပြုရန် `true` ဟု သတ်မှတ်ပါ။ မူလတန်ဖိုးမှာ `false` ဖြစ်သည်။ |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | local secret မသတ်မှတ်ထားသည့်အခါ signature မပါသော Cloud Sync response ကို ငြင်းပယ်ရန် `true` ဟု သတ်မှတ်ပါ (#13679)။ ဤ flag နှင့်မသက်ဆိုင်ဘဲ ပါရှိသော signature ကို အမြဲအတည်ပြုစစ်ဆေးပြီး `OMNIROUTE_CLOUD_SYNC_SECRET` ကို မသတ်မှတ်ထားပါက အမြဲငြင်းပယ်သည်။ v3.9 မှစ၍ မူလသတ်မှတ်ချက်သည် မဖြစ်မနေစစ်ဆေးသည့်ပုံစံသို့ ပြောင်းလဲမည်။ |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | အသုံးပြုသူ၏ အတည်ပြုချက်မလိုဘဲ v3.8.5 ၏ အဆင့်တစ်ဆင့်တည်းဖြင့် "အရာအားလုံးကို import လုပ်ခြင်း" အပြုအမူသို့ ပြန်ပြောင်းအသုံးပြုရန် `true` ဟု သတ်မှတ်ပါ။ |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, Dashboard, sync | OAuth `redirect_uri`၊ Dashboard link များနှင့် ထုတ်လုပ်ထားသော public URL များအတွက် အများပြည်သူအသုံးပြုနိုင်သည့် URL ဖြစ်သည်။ OAuth callback များ သို့မဟုတ် ထုတ်လုပ်ထားသော browser link များသည် သတ်မှတ်ထားသည့် reverse-proxy host ကို အသုံးပြုရမည်ဆိုပါက ၎င်းကို တည်ငြိမ်သော public URL အဖြစ် သတ်မှတ်ပါ။ |
| `NEXT_PUBLIC_CLOUD_URL` | _(အလွတ်)_ | Client-side | `CLOUD_URL` ၏ client-side mirror ဖြစ်သည်။ |
| `NEXT_PUBLIC_APP_URL` | _(မသတ်မှတ်ထား)_ | `src/shared/services/cloudSyncScheduler.ts` | `NEXT_PUBLIC_BASE_URL` အတွက် ယခင်စနစ်နှင့် တွဲဖက်အသုံးပြုနိုင်သော အရန်တန်ဖိုး။ |
| `NEXT_PUBLIC_PORT` | _(မသတ်မှတ်ထား — `PORT` ကို အရန်အဖြစ် အသုံးပြုသည်)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | မူလရင်းမြစ်ကို မသိရှိနိုင်သည့်အခါ (SSR/စမ်းသပ်မှုများ) ပြသရန် URL များအတွက် client-side အရန် port ဖြစ်သည်။ `PORT` မတိုင်မီ ဖတ်ယူသည်။ |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(မသတ်မှတ်ထား)_ | အများသုံးမူလရင်းမြစ် ဖြေရှင်းပေးသည့်စနစ်၊ ပုံ URL များ | အများသုံး URL ဖန်တီးခြင်းနှင့် dashboard မဟုတ်သော browser-origin အတည်ပြုခြင်းအတွက် အသုံးပြုသည့် ဦးစားပေးအမြင့်ဆုံး၊ browser မှ ဝင်ရောက်နိုင်သော OmniRoute မူလရင်းမြစ်။ OpenWebUI သို့မဟုတ် အခြား relay တစ်ခုက အတွင်းပိုင်း URL ဖြင့် OmniRoute သို့ ဝင်ရောက်သော်လည်း အသုံးပြုသူ၏ browser က ဖန်တီးထားသော media များကို LAN၊ tunnel သို့မဟုတ် အများသုံးမူလရင်းမြစ်မှ ရယူရမည့်အခါ ဤတန်ဖိုးကို သတ်မှတ်ပါ။ `/v1` ကို **မထည့်ပါနှင့်**။ |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(မသတ်မှတ်ထား)_ | `open-sse/config/providerPluginManifestUrl.ts` | sidecar client များထံ အသိပေးကြေညာသည့် အပြည့်အစုံ provider plugin manifest URL။ မသတ်မှတ်ထားပါက OmniRoute သည် request မူလရင်းမြစ် သို့မဟုတ် HOST/PORT မှ `/api/v1/provider-plugin-manifest` ကို ဆင်းသက်ဖန်တီးသည်။ |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | request မူလရင်းမြစ်မရှိဘဲ HOST/PORT မှ provider plugin manifest URL ကို ဆင်းသက်ဖန်တီးရာတွင် အသုံးပြုသည့် protocol။ `OMNIROUTE_PROVIDER_MANIFEST_URL` ကို အတိအလင်း မသတ်မှတ်ထားသည့်အခါ TLS ကို အဆုံးသတ်ပေးသော အများသုံး proxy နောက်ကွယ်တွင် `https` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_TRUST_PROXY` | _(မသတ်မှတ်ထား)_ | `src/server/origin/publicOrigin.ts` | လွှဲပို့ထားသော အများသုံးမူလရင်းမြစ် header များအတွက် ရွေးချယ်နိုင်သော ယုံကြည်မှုမုဒ်။ မသတ်မှတ်ထားပါက = လုံခြုံရေးဆိုင်ရာ ဆုံးဖြတ်ချက်များအတွက် `Forwarded` / `X-Forwarded-*` ကို မယုံကြည်ပါ။ `true` / `loopback` သည် token တံဆိပ်ပါသော loopback proxy ထံမှ လွှဲပို့လာသည့် host/proto ကိုသာ ယုံကြည်သည်။ `private` / `lan` သည် private-LAN proxy peer များကိုလည်း ယုံကြည်ပြီး `API_PORT` bridge ကိုလည်း ထို peer ၏ `X-Forwarded-For` အား ဆက်လက်ထိန်းသိမ်းခွင့်ပြုသည်။ production တွင် `NEXT_PUBLIC_BASE_URL` ကို အတိအလင်း သတ်မှတ်အသုံးပြုခြင်းအား ဦးစားပေးပါ။ |
| `KIE_CALLBACK_URL` | _(မသတ်မှတ်ထား)_ | `open-sse/utils/kieTask.ts` | asynchronous kie.ai အလုပ်များအတွက် အများသုံး callback URL။ `OMNIROUTE_KIE_CALLBACK_URL` နှင့် `OMNIROUTE_PUBLIC_URL` မတိုင်မီ ဦးစားပေးအမြင့်ဆုံး override ဖြစ်သည်။ |
| `OMNIROUTE_KIE_CALLBACK_URL` | _(မသတ်မှတ်ထား)_ | `open-sse/utils/kieTask.ts` | `KIE_CALLBACK_URL` ၏ အခြားစာလုံးပေါင်းပုံ။ ပင်မ variable ကို မသတ်မှတ်ထားသည့်အခါ အရန်အဖြစ် အသုံးပြုသည်။ |
| `OMNIROUTE_PUBLIC_URL` | _(မသတ်မှတ်ထား)_ | `open-sse/utils/kieTask.ts` | async callback URL များ ဖွဲ့စည်းရန် အသုံးပြုသည့် အများသုံးမူလရင်းမြစ်။ kie.ai callback များအတွက် ဦးစားပေးအနိမ့်ဆုံး အရန်တန်ဖိုးဖြစ်ပြီး အခြား relay များအတွက် ယေဘုယျအများသုံး URL အဖြစ်လည်း အသုံးပြုသည်။ |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Usage စာမျက်နှာက အသုံးပြုသော CrofAI quota ရှာဖွေရေး endpoint။ relay များ / စမ်းသပ်မှု fixture များအတွက် override လုပ်နိုင်သည်။ |
| `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Usage စာမျက်နှာက အသုံးပြုသော ClinePass 5 နာရီစာ / အပတ်စဉ် / လစဉ် quota endpoint။ relay များ / စမ်းသပ်မှု fixture များအတွက် override လုပ်နိုင်သည်။ |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Usage စာမျက်နှာက အသုံးပြုသော API key ဖြင့် စစ်မှန်ကြောင်းအတည်ပြုထားသည့် တရားဝင် OpenCode Go အသုံးပြုမှု endpoint။ relay များ / စမ်းသပ်မှု fixture များအတွက် override လုပ်နိုင်သည်။ |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | client က မပို့ခဲ့သော OpenCode CLI ကိုယ်စားပြု header များ (User-Agent, x-opencode-client/project, request/session UUID များ) ကို opencode-go/zen upstream request များတွင် ဖန်တီးဖြည့်သွင်းပေးခြင်းဖြင့် VPS egress ပေါ်ရှိ Cloudflare က ၎င်းတို့ကို လက်ခံစေသည် (#6210/#5997)။ #10571 မှစ၍ ပုံသေအားဖြင့် ဖွင့်ထားပြီး `false`/`0`/`no`/`off` ဖြင့် ပိတ်နိုင်သည်။ |
| `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | `OPENCODE_SYNTHESIZE_CLI_HEADERS` ကို ဖွင့်ထားပြီး provider တစ်ခုချင်းစီအလိုက် `_USER_AGENT` အစားထိုးသတ်မှတ်ချက် မရှိသည့်အခါ အသုံးပြုမည့် မူလ User-Agent။ opencode executor များတွင်သာ အသုံးပြုသည်။ keyless request တစ်ခုကို upstream က gate လုပ်သည့်အခါ သတ်မှတ်ထားသောတန်ဖိုးတွင် `opencode/= 1.17>` မပါရှိပါက ငြင်းပယ်မည့်အစား ဤမူလတန်ဖိုးဖြင့် အစားထိုးသည်။ |
| `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (ဖွင့်) | `open-sse/utils/opencodeHeaders.ts` | client app-attribution header များ (`x-session-id`, `x-title`, `http-referer`) ကို upstream provider များထံ ထပ်ဆင့်ပို့ပေးခြင်းဖြင့် စာရင်းဝင် harness တစ်ခုအတွင်းမှ စတင်သည့် request သည် router ကို ဖြတ်သန်းပြီးနောက်လည်း ၎င်း၏ identity ကို ဆက်လက်ထိန်းသိမ်းနိုင်သည် (OpenRouter publisher gate များသည် ယင်းတို့ကို အခြေခံသည်)။ `0`/`false`/`no`/`off` သည် registry/operator identity ကို ဆက်လက်ထိန်းသိမ်းပြီး client က ပေးပို့သောတန်ဖိုးများကို ဖယ်ရှားသည်။ Operator က သတ်မှတ်ထားသော custom header များသည် client တန်ဖိုးများထက် အမြဲဦးစားပေးသည်။ |
| `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | `OPENCODE_SYNTHESIZE_CLI_HEADERS` ကို ဖွင့်ထားသည့်အခါ ပေါင်းစပ်ဖန်တီးထားသော `x-opencode-client` header အတွက် အသုံးပြုမည့်တန်ဖိုး။ |
| `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | `OPENCODE_SYNTHESIZE_CLI_HEADERS` ကို ဖွင့်ထားသည့်အခါ ပေါင်းစပ်ဖန်တီးထားသော `x-opencode-project` header အတွက် အသုံးပြုမည့်တန်ဖိုး။ |
| `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(မသတ်မှတ်ထား)_ | `open-sse/config/providerErrorRules.ts` | upstream failure များကို egress IP အလိုက် အုပ်စုခွဲမည့် provider များ၏ အကျိုးသက်ရောက်သောအစု (429 တစ်ခု ဖြစ်ပေါ်ပါက ထို IP ကို မျှဝေသုံးစွဲနေသော sibling connection အားလုံးကို ရပ်နားထားသည်)။ မသတ်မှတ်ထားပါက free-tier မူလတန်ဖိုး `opencode,opencode-go,opencode-cli` ကို အသုံးပြုသည်။ `none`/`off`/`false`/`0` သည် cascade ကို လုံးဝပိတ်သည်။ ကော်မာဖြင့် ပိုင်းခြားထားသောစာရင်းသည် အစုကို အစားထိုးသည်။ Paid plan များကို upstream တွင် account အလိုက် အုပ်စုခွဲထားသောကြောင့် ၎င်းကို ဘေးကင်းစွာ ပိတ်နိုင်သည် (#9611)။ |
| `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/opencodeFreeTierContract.ts` | keyless OpenCode request များ၏ body (streaming flag နှင့် tool list) ကို ချိန်ညှိခြင်း ရပ်ရန် `off` ဟု သတ်မှတ်ပါ။ Header များကို ဆက်လက်အသုံးပြုသည်။ request တစ်ခုချင်းစီအလိုက် ဖတ်ရှုသောကြောင့် ပြောင်းလဲမှုသည် ချက်ချင်းအကျိုးသက်ရောက်သည်။ |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/opencodeFreeTierContract.ts` | tool မပါရှိသော keyless OpenCode request တစ်ခုအတွက်၊ ထို model နှင့်ပတ်သက်၍ မည်သည့်အရာကိုမျှ မတွေ့ရှိရသေးသည့်အခါ ကြေညာမည့် ကော်မာဖြင့် ပိုင်းခြားထားသော tool အမည်များ။ ဗလာဖြစ်နေပါက model ကို မခေါ်ရန် ညွှန်ကြားထားသော placeholder တစ်ခုတည်းကို fallback အဖြစ် အသုံးပြုသည်။ အများဆုံး entry 32 ခု၊ `[A-Za-z_][A-Za-z0-9_-]{0,63}`၊ မမှန်ကန်သော entry များကို လျစ်လျူရှုသည်။ |
| `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | quota scraping အတွက် အသုံးပြုသော Ollama Cloud settings URL။ relay / test fixture များအတွက် အစားထိုးသတ်မှတ်နိုင်သည်။ |
| `OLLAMA_USAGE_COOKIE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/usage.ts` | settings page မှ quota scraping ပြုလုပ်ရန် အသုံးပြုသော Ollama Cloud `__Secure-session` cookie။ အရေးကြီးသောလျှို့ဝှက်အချက်အလက်ဖြစ်သည်။ account များစွာကို သတ်မှတ်ထားသည့်အခါ connection တစ်ခုချင်းစီအလိုက် Dashboard field ကို ဦးစားပေးအသုံးပြုပါ။ |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/usage.ts` | အစားထိုးအသုံးပြုနိုင်သော Ollama Cloud `__Secure-session` cookie env var။ အရေးကြီးသောလျှို့ဝှက်အချက်အလက်ဖြစ်သည်။ account များစွာကို သတ်မှတ်ထားသည့်အခါ connection တစ်ခုချင်းစီအလိုက် Dashboard field ကို ဦးစားပေးအသုံးပြုပါ။ |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/usage.ts` | ပိုတိုသော alias များမတိုင်မီ အသုံးပြုသည့် အစားထိုး Ollama Cloud `__Secure-session` cookie env var။ အရေးကြီးသောလျှို့ဝှက်အချက်အလက်ဖြစ်သည်။ account များစွာကို သတ်မှတ်ထားသည့်အခါ connection တစ်ခုချင်းစီအလိုက် Dashboard field ကို ဦးစားပေးအသုံးပြုပါ။ |
| `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | CodeWhisperer (AWS Kiro) အသုံးပြုမှုကန့်သတ်ချက် endpoint။ relay / test fixture များအတွက် အစားထိုးသတ်မှတ်နိုင်သည်။ |
> [!IMPORTANT]
> reverse proxy (nginx, Caddy) နောက်ကွယ်တွင် deploy လုပ်သည့်အခါ OAuth callback များ သို့မဟုတ် ဖန်တီးထားသော public link များက ထို hostname ကို အသုံးပြုရမည်ဆိုလျှင် `NEXT_PUBLIC_BASE_URL` ကို သင့်၏ တည်ငြိမ်သော public URL (ဥပမာ၊ `https://omniroute.example.com`) အဖြစ် သတ်မှတ်ပါ။ ထိုသို့ မသတ်မှတ်ပါက redirect_uri မကိုက်ညီသောကြောင့် OAuth callback များ မအောင်မြင်နိုင်သည့်အပြင် ဖန်တီးထားသော public link များသည် internal container origin သို့ ညွှန်ပြနိုင်ပါသည်။
>
> server-to-server job များအတွက် `BASE_URL` ကို internal loopback/container URL အဖြစ် ဆက်လက်ထားရှိပါ။ credential များ ပါဝင်သော internal self-fetch များအတွက် browser `Origin` သို့မဟုတ် public hostname ကို အသုံးမပြုပါနှင့်။
>
> အထောက်အထားဖြင့် ဝင်ရောက်ထားသော dashboard write လုပ်ဆောင်ချက်များအတွက် static public base URL မလိုအပ်ပါ။ dashboard သည် session နှင့် ချိတ်ဆက်ထားသော CSRF token ဖြင့် same-origin unsafe request များကို ပေးပို့ပါသည်။ OmniRoute သည် dashboard မဟုတ်သော browser integration များအတွက် public-origin validation ကို ဗဟိုပြု၍ ဆက်လက်စီမံပါသည်။ explicit public URL env var များကို ဦးစွာ ယုံကြည်ပြီး၊ `OMNIROUTE_TRUST_PROXY` ကို ဖွင့်ထားကာ ချက်ချင်းဆက်သွယ်နေသော proxy peer ကို ယုံကြည်ရသူအဖြစ် token ဖြင့် အမှတ်အသားပြုထားခြင်း မရှိပါက raw `Forwarded` / `X-Forwarded-*` header များကို လျစ်လျူရှုပါသည်။ same-origin dashboard request များကို ပြင်ဆင်ရန် CORS setting များကို အသုံးမပြုပါနှင့်။ CORS သည် cross-origin browser client များအတွက်သာ ဖြစ်ပါသည်။
---
## 8. အထွက် Proxy
အထွက်လမ်းကြောင်း ထိန်းချုပ်ခြင်း၊ ပထဝီဝင်အလိုက် လမ်းကြောင်းသတ်မှတ်ခြင်း သို့မဟုတ် IP ဖုံးကွယ်ခြင်းတို့အတွက် upstream LLM provider ခေါ်ဆိုမှုများကို HTTP သို့မဟုတ် SOCKS5 proxy မှတစ်ဆင့် လမ်းကြောင်းပို့ပါ။
`OMNIROUTE_UPSTREAM_HTTP2_ENABLED` ၏ မူလတန်ဖိုးမှာ `true` ဖြစ်သည်။ `open-sse/utils/proxyDispatcher.ts`
နှင့် `open-sse/utils/proxyFetch.ts` ရှိ Undici dispatcher များတွင် HTTP/1.1 ကို အတင်းအကျပ် အသုံးပြုစေရန် ၎င်းကို `false`, `0`, `no` သို့မဟုတ်
`off` ဟု သတ်မှတ်ပါ။ ၎င်းသည် တိုက်ရိုက်အထွက်လမ်းကြောင်း၊ HTTP(S)/SOCKS proxy များ၊ relay များနှင့်
၎င်းတို့၏ socket အသစ်ဖြင့် ပြန်လည်ကြိုးစားမှုများအားလုံးအပေါ် သက်ရောက်သည်။ ဤလုပ်ဆောင်ချက်သည် TLS certificate စစ်ဆေးအတည်ပြုခြင်း၊ proxy
authentication၊ ချိတ်ဆက်မှုကန့်သတ်ချက်များနှင့် keep-alive ဆက်တင်များကို မပြောင်းလဲဘဲ ထိန်းသိမ်းထားသည်။ Dispatcher များကို cache လုပ်ထားပြီး relay agent များကို စတင်ချိန်တွင် ဖန်တီးထားသောကြောင့်
၎င်းကို ပြောင်းလဲပြီးနောက် OmniRoute ကို ပြန်လည်စတင်ပါ။
ဤ switch သည် wreq TLS fingerprinting သို့မဟုတ် provider အလိုက် သတ်မှတ်ထားသော transport များကို မထိန်းချုပ်ပါ။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ---------------------------------------- | --------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | upstream ခေါ်ဆိုမှုများအတွက် SOCKS5 proxy agent ကို ဖွင့်ပါ။ မသုံးလိုပါက `false` ဖြင့် ပိတ်နိုင်သည်။ |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Client-side | SOCKS5 အသုံးပြုနိုင်မှုကို client-side မှ သိရှိစေသည်။ |
| `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | ပုံသေအားဖြင့် ဖွင့်ထားသော feature flag ဖြစ်သည် ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ကို ကြည့်ပါ။ dashboard DB override က ဦးစားပေးသည်)။ Proxy pool များနှင့် account တစ်ခုချင်းစီအလိုက် rotation သည် ယခုလေးတင် မအောင်မြင်ခဲ့သော member တစ်ခုကို (TCP probe ငြင်းပယ်ခံရခြင်း သို့မဟုတ် ၎င်းမှတစ်ဆင့် 429 ရရှိခြင်း) ထပ်မံအသုံးမပြုဘဲ၊ ထပ်ခါတလဲလဲဖြစ်တိုင်း နှစ်ဆတိုးသည့် ကာလတစ်ခုအထိ အများဆုံးသတ်မှတ်ချက်အတွင်း ရပ်ထားသည်။ `false` သည် ပုံမှန်ရွေးချယ်မှုကို ပြန်လည်အသုံးပြုစေသည်။ |
| `SELECTOR_CONTROL_ALLOWLIST` | _(မသတ်မှတ်ထား)_ | `src/lib/proxySubscription/selectorGuard.ts` | loopback ပြင်ပရှိ local-core selector-control ပစ်မှတ်များအတွက် allow-list ဖြစ်သည် (ကော်မာ/space ဖြင့် ခွဲထားသော host များ သို့မဟုတ် IP များ၊ `*` သည် LAN/private ကို ဖွင့်ပေးသော်လည်း metadata/link-local ကို မည်သည့်အခါမျှ မဖွင့်ပါ)။ http/https မှတစ်ဆင့် loopback ကို ပုံသေအားဖြင့် ခွင့်ပြုထားသည်။ သတ်မှတ်ထားပြီး ဗလာမဟုတ်ပါက dashboard DB တန်ဖိုးသည် ဤကိန်းရှင်ထက် ဦးစားပေးသည်။ |
| `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | 429 set-aside ၏ အခြေခံကာလ (ms) ဖြစ်ပြီး ထပ်ခါတလဲလဲဖြစ်တိုင်း နှစ်ဆတိုးသည်။ စတင်ချိန်တွင် တစ်ကြိမ်သာ ဖတ်သည်။ `1000..3600000` အတွင်း ကန့်သတ်ထားသည်။ သတ်မှတ်အပိုင်းအခြားပြင်ပဖြစ်ခြင်း သို့မဟုတ် ဖတ်မရခြင်းတို့တွင် သတိပေးချက်တစ်ခုဖြင့် ပုံသေတန်ဖိုးသို့ ပြန်သွားသည်။ |
| `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | 429 set-aside ၏ အများဆုံးကန့်သတ်ကာလ (ms) ဖြစ်သည်။ စတင်ချိန်တွင် တစ်ကြိမ်သာ ဖတ်သည်။ `1000..3600000` အတွင်း ကန့်သတ်ထားသည်။ သတ်မှတ်အပိုင်းအခြားပြင်ပဖြစ်ခြင်း သို့မဟုတ် ဖတ်မရခြင်းတို့တွင် သတိပေးချက်တစ်ခုဖြင့် ပုံသေတန်ဖိုးသို့ ပြန်သွားသည်။ အများဆုံးကန့်သတ်ချက်သည် အခြေခံတန်ဖိုးထက် နိမ့်ပါက ပုံသေတန်ဖိုးသို့ ပြန်သွားသည်။ အများဆုံးကန့်သတ်ချက်ကို လျှော့ချခြင်းသည် streak များကို မေ့ပျောက်သည့်ကာလကိုလည်း တိုစေသည်။ သက်တမ်းကုန်ပြီးနောက် entry များကို `2 x max` တွင် ဖယ်ရှားသည်။ |
| `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | ရွေးချယ်ဖွင့်နိုင်သော feature flag ဖြစ်သည် ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ကို ကြည့်ပါ။ dashboard DB override က ဦးစားပေးသည်)။ quota ကို egress address အလိုက် bucket ခွဲထားသော provider များအတွက်၊ မကြာသေးမီက ငြင်းပယ်ခံထားရသော member ၏ တွေ့ရှိထားသည့် egress address ကို မျှဝေသုံးစွဲသည့် pool member ကို ကျန်းမာသော member များ၏ အောက်ဘက်တစ်ဆင့်တွင် အဆင့်သတ်မှတ်သည်။ အစီအစဉ်သာ ပြောင်းလဲပြီး မည်သည့်အခါမျှ ဖယ်ထုတ်ခြင်းမရှိပါ။ ၎င်းဖတ်ရှုသည့် refusal signal ကို ထုတ်ပေးသော `PROXY_SKIP_RECENTLY_FAILED` လိုအပ်သည်။ |
| `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | ငြင်းပယ်မှုများ ဆက်တိုက်ဖြစ်ပေါ်သည့်အခါ event တစ်ခုသာ ပေးပို့စေရန် pool member တစ်ခုစီအလိုက် ထပ်တလဲလဲဖြစ်သော `proxy.set_aside` webhook alert များကို ကန့်သတ်သည့် rebound window (ms) ဖြစ်သည်။ emit လုပ်တိုင်း ဖတ်သည်။ `1000..3600000` အတွင်း ကန့်သတ်ထားသည်။ သတ်မှတ်အပိုင်းအခြားပြင်ပဖြစ်ခြင်း သို့မဟုတ် ဖတ်မရခြင်းတို့တွင် အသိပေးခြင်းမရှိဘဲ ပုံသေတန်ဖိုးသို့ ပြန်သွားသည်။ |
| `HTTP_PROXY` | _(မသတ်မှတ်ထား)_ | Node.js စံသတ်မှတ်ချက် | upstream ခေါ်ဆိုမှုများအတွက် HTTP proxy ဖြစ်သည်။ |
| `HTTPS_PROXY` | _(မသတ်မှတ်ထား)_ | Node.js စံသတ်မှတ်ချက် | upstream ခေါ်ဆိုမှုများအတွက် HTTPS proxy ဖြစ်သည်။ |
| `ALL_PROXY` | _(မသတ်မှတ်ထား)_ | Node.js စံသတ်မှတ်ချက် | Universal proxy ဖြစ်သည် (`socks5://` ကို ပံ့ပိုးသည်)။ |
| `OMNIROUTE_PROXY_ECHO_URL` | _(မသတ်မှတ်ထား)_ | `src/lib/proxyEchoTarget.ts` | Proxy အထွက်လမ်းကြောင်း စမ်းသပ်မှုများတွင် အသုံးပြုသည့် echo-IP ပစ်မှတ်ကို URL တစ်ခုတည်းအဖြစ် သတ်မှတ်ထားသည်။ မသတ်မှတ်ထားပါက IPv4 သီးသန့် tunnel များကို အသုံးမပြုနိုင်ဟု မှားယွင်းစွာ မဖော်ပြစေရန် စမ်းသပ်မှုသည် `api64.ipify.org` ကို ဦးစွာ စမ်းပြီးနောက် `api4.ipify.org` ကို စမ်းသည် (#9694)။ |
| `NO_PROXY` | _(မသတ်မှတ်ထား)_ | Node.js စံနှုန်း | Proxy ကို ကျော်သွားရန် ကော်မာဖြင့် ပိုင်းခြားထားသော hostname/IP များ။ |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Cache လုပ်ထားသော HTTP/SOCKS proxy dispatcher တစ်ခုလျှင် တစ်ပြိုင်နက် အသုံးပြုနိုင်သည့် socket အများဆုံးအရေအတွက်။ တောင်းဆိုမှုများစွာက တူညီသော account-level proxy ကို မျှဝေသည့်အခါ Codex `/v1/responses` ကဲ့သို့ ကြာရှည်ချိတ်ဆက်ထားသည့် SSE stream များအတွက် connection တစ်ခုထက်ပို၍ လိုအပ်သည်။ `256` ထက်ပိုသော တန်ဖိုးများကို ကန့်သတ်ထားသည်။ |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | SOCKS5 handshake (ချိတ်ဆက်မှု) အတွက် အချိန်ကုန်ဆုံးကန့်သတ်ချက်ကို ms ဖြင့် သတ်မှတ်သည်။ Residential gateway host တစ်ခုတည်းကို တစ်ပြိုင်နက် တောင်းဆိုမှုအများအပြား (ဥပမာ တစ်ချိန်တည်း တောင်းဆိုမှု 100 ခု) ဝင်ရောက်သည့်အခါ ၎င်းကို မြှင့်တင်ပါ — proxy ကို ဆက်သွယ်နိုင်သော်လည်း pool ပြည့်ကျပ်နေချိန်တွင် အမှန်တကယ် handshake သည် 10s ကျော်ကြာနိုင်ပြီး၊ မမြှင့်တင်ပါက `[Proxy Fast-Fail] Proxy unreachable` ဟု မှားယွင်းစွာ ပေါ်လာနိုင်သည်။ `120000` အထိ ကန့်သတ်ထားသည်။ |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | `false` (မူလသတ်မှတ်ချက်) ဖြစ်ပါက တာဝန်ပေးထားသော proxy ကို ဖြေရှင်းမရသည့် တောင်းဆိုမှုကို တိုက်ရိုက်ချိတ်ဆက်မှုသို့ ပြန်လည်ပြောင်းသုံးမည့်အစား **ငြင်းပယ်သည် (fail-closed)** — IP အစစ် ပေါက်ကြားမှုများကို တားဆီးပေးသည်။ ယခင် DIRECT fallback ကို ပြန်လည်အသုံးပြုရန် `true` သတ်မှတ်ပါ။ |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | wreq-js ကို အသုံးပြု၍ TLS fingerprint ကို အယောင်ဆောင်သည် (Chrome 124 ကို တုပသည်)။ JA3/JA4 ပိတ်ဆို့မှုကို တန်ပြန်သည်။ |
| `TLS_FINGERPRINT_PROVIDERS` | _(မသတ်မှတ်ထား)_ | `open-sse/utils/proxyFetch.ts` | Proxy မှတစ်ဆင့် TLS လမ်းကြောင်းအသစ် (`open-sse/utils/proxyFetch.ts`) အတွက် ကော်မာဖြင့် ပိုင်းခြားထားသော provider ခွင့်ပြုစာရင်း။ မသတ်မှတ်ထားပါက တိုက်ရိုက် TLS သည် ယခင်အပြုအမူအတိုင်း ဆက်လက်လုပ်ဆောင်ပြီး၊ ဤ provider များသာ Chrome-124 fingerprint bridge မှတစ်ဆင့် လမ်းကြောင်းပြောင်းသည်။ Groq (`api.groq.com`) ကို ခွင့်ပြုစာရင်း မသတ်မှတ်ထားသည့်အခါတွင်ပင် ဖယ်ထုတ်ထားသည်၊ အဘယ်ကြောင့်ဆိုသော် Chrome JA3 သည် Cloudflare 1010 ကို ဖြစ်စေသော်လည်း native undici က API ကို ဆက်သွယ်နိုင်သောကြောင့် ဖြစ်သည်။ |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Claude Turnstile Playwright browser context ကို HTTPS certificate အမှားများအား လျစ်လျူရှုခွင့်ပြုသည်။ |
### အခြေအနေများ
| အခြေအနေ | ဖွဲ့စည်းသတ်မှတ်မှု |
| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **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` |
| **Fingerprint ဆန့်ကျင်ရေး** | `ENABLE_TLS_FINGERPRINT=true` — `wreq-js` လိုအပ်သည် (ထည့်သွင်းပေးထားသည်) |
| **အထွက်လမ်းကြောင်း ထိန်းချုပ်ထားမှု / တိုက်ရိုက်ဝင်ရောက်ခွင့်မရှိမှု** | `PROXY_FAIL_OPEN=false` (မူလသတ်မှတ်ချက်) အတိုင်းထားပါ။ Proxy မရရှိနိုင်သည့်အခါ တောင်းဆိုမှုများသည် တိုက်ရိုက်လမ်းကြောင်းမှ ပေါက်ကြားမည့်အစား လုံးဝပျက်ကွက်သည်။ |
| **ယခင်စနစ် / dev — တိုက်ရိုက် fallback ခွင့်ပြုရန်** | `PROXY_FAIL_OPEN=true`။ လုံခြုံရေးတင်းကျပ်မှု မပြုမီက အပြုအမူကို ပြန်လည်အသုံးပြုစေသည်၊ ဆိုလိုသည်မှာ proxy ဖြေရှင်းမှု မအောင်မြင်သည့်အခါ တိုက်ရိုက်ချိတ်ဆက်မှုကို အသုံးပြုသည်။ |
> **မှတ်ချက် (NVIDIA validation bypass — #3226):** NVIDIA ၏ API-key validation endpoint သည်
> ကမ္ဘာလုံးဆိုင်ရာ proxy/TLS ပြင်ဆင်ထားသော fetch မှတစ်ဆင့် လမ်းကြောင်းပို့သည့်အခါ ရပ်တန့်နေသည် (undici dispatcher → 504)။
> `src/lib/providers/validation.ts::directHttpsRequest()` သည် `safeOutboundFetch({ bypassProxyPatch: true })` ကို အသုံးပြု၍
> ထို validation ခေါ်ဆိုမှုတစ်ခုတည်းအတွက် proxy patch ကို ရည်ရွယ်ချက်ရှိရှိ ကျော်သွားသည်။
> ၎င်းသည် မှတ်တမ်းပြုထားပြီး နယ်ပယ်ကန့်သတ်ထားသော ခြွင်းချက်ဖြစ်သည် — chat/usage အထွက်လမ်းကြောင်းကို **မထိခိုက်ပါ**။
> Bypass ၏ နယ်ပယ်ကို `tests/unit/proxy-bypass-scope-guard-3226.test.ts` ဖြင့် သတ်မှတ်ကန့်သတ်ထားသည်။
---
## 9. CLI Tool ပေါင်းစည်းမှု
OmniRoute က CLI sidecar များ (Claude Code၊ Codex စသည်တို့) ကို မည်သို့ ရှာဖွေပြီး စတင်လုပ်ဆောင်သည်ကို ထိန်းချုပ်သည်။
| Variable | Default | Source File | ဖော်ပြချက် |
| --------------------------------- | -------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = စနစ်၏ PATH တွင် ရှာဖွေသည်၊ `manual` = အတိအလင်း သတ်မှတ်ထားသော path များကိုသာ အသုံးပြုသည်။ |
| `CLI_EXTRA_PATHS` | _(မသတ်မှတ်ထား)_ | `src/shared/services/cliRuntime.ts` | CLI binary ရှာဖွေတွေ့ရှိမှုအတွက် ထပ်ဆောင်း PATH entry များ (colon ဖြင့် ပိုင်းခြားထားသည်)။ |
| `CLI_CONFIG_HOME` | _(မသတ်မှတ်ထား)_ | `src/shared/services/cliRuntime.ts` | CLI config များ (`~/.claude`, `~/.codex`) ကို ဖတ်ရှုရန် home directory ကို အစားထိုးသတ်မှတ်သည်။ ၎င်းသည် absolute path ဖြစ်ပြီး process home အတွင်း၌ ရှိရမည် — **သို့မဟုတ်** container တစ်ခုအတွင်း၌ bind-mount လုပ်ထားသော path ဖြစ်ရမည် (`/host-home` အလုပ်လုပ်ပုံမှာ ထိုသို့ဖြစ်သည်)။ အခြားမည်သည့်တန်ဖိုးမဆို home directory ကို ပြန်လည်အသုံးပြုမည်။ |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | OmniRoute အား CLI config file များ (token refresh၊ session data) ရေးသားခွင့်ပြုသည်။ CLI config ရေးသားမှုတိုင်းကို အတိအလင်း "writes disabled" error ဖြင့် မအောင်မြင်စေရန် `false` ဟု သတ်မှတ်ပါ။ |
| `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Claude CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Codex CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Droid CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | OpenClaw CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_CURSOR_BIN` | `agent`, ထို့နောက် `cursor` | `src/shared/services/cliRuntime.ts` | Cursor agent binary သို့ စိတ်ကြိုက် path။ ၎င်းမရှိပါက ရှာဖွေစစ်ဆေးမှုသည် `agent` ကို ဦးစွာ စမ်းသပ်ပြီး မတွေ့လျှင် `cursor` ကို အသုံးပြုသည်။ |
| `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Cline CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | 5dive CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | 5dive ၏ system state directory (root ပိုင်ဆိုင်သော auth profile များ)၊ 5dive ၏ မူလ STATE_DIR တန်ဖိုးနှင့် ကိုက်ညီသည်။ |
| `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Continue CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Qoder CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Qwen Code CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Aider CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Goose CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Google Gemini CLI binary သို့ စိတ်ကြိုက် path — server ဘက်မှ ရှာဖွေစစ်ဆေးမှုနှင့် ကျန်းမာရေးစစ်ဆေးမှုများအတွက်သာ ဖြစ်သည်၊ `omniroute run gemini` သည် စနစ်၏ PATH မှ `gemini` binary ကို ရှာဖွေသတ်မှတ်သည်။ |
| `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Kilo Code CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | OpenCode CLI binary သို့ စိတ်ကြိုက် path။ |
| `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Hermes binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ catalog entry နှစ်ခုစလုံး (`hermes` နှင့် `hermes-agent`) က မျှဝေအသုံးပြုသည်။ |
| `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | ForgeCode CLI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | jcode CLI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | DeepSeek TUI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | CodeWhale CLI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Smelt CLI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Pi (pi-coding-agent) binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Crush CLI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Oh My Pi (`omp`) agent binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Letta CLI binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Prime Agent (Prime Intellect) binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLI_WINDSURF_BIN` | _(မရှိ)_ | `src/shared/services/cliRuntime.ts` | Windsurf binary သို့ စိတ်ကြိုက်လမ်းကြောင်း။ Windsurf တွင် **မူလ command မပါရှိပါ** — ဤတန်ဖိုးကို သတ်မှတ်မထားမချင်း binary ရှာဖွေခြင်းကို ပိတ်ထားမည်။ |
| `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Devin CLI binary (v3.8.0) သို့ စိတ်ကြိုက်လမ်းကြောင်း။ Windsurf/Devin executor က အသုံးပြုသည်။ |
| `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 အစားထိုးတန်ဖိုး။ executor သည် local ACP stdio upstream ကိုသာ လက်ခံသည်။ |
| `DEVIN_AGENTIC_HOME` | _(လိုအပ်သည်)_ | `open-sse/executors/devin-cli-agentic.ts` | agentic Devin subprocess အတွက် သီးခြားခွဲထားသော absolute home။ လက်ခံသည့် bridge လမ်းကြောင်းများမှာ `/home/bridge` နှင့် task-local `.sandbox` လမ်းကြောင်းများဖြစ်သည် (Windows တွင် `C:\...\.sandbox\...`)။ |
| `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | bridge က child process ကို ရပ်တန့်ပြီး တိကျသော timeout ကို ပြန်မပေးမီ Devin ACP turn တစ်ကြိမ်အတွက် အများဆုံးကြာချိန်။ |
| `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | သီးခြားခွဲထားသော bridge အတွက် အဓိက Claude Code model alias။ live harness သည် ဥပမာတန်ဖိုးကို လက်ရှိ Devin account က ပြန်ပေးသော model ဖြင့် အစားထိုးသည်။ |
| `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code က ၎င်း၏ မူလ Sonnet ကို တောင်းဆိုသည့်အခါ အသုံးပြုသည့် သီးခြားခွဲထားသော bridge alias။ |
| `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code က ၎င်း၏ မူလ Opus ကို တောင်းဆိုသည့်အခါ အသုံးပြုသည့် သီးခြားခွဲထားသော bridge alias။ |
| `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code က ၎င်း၏ မူလ Haiku ကို တောင်းဆိုသည့်အခါ အသုံးပြုသည့် သီးခြားခွဲထားသော bridge alias။ |
| `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code subagent များအတွက် အသုံးပြုသည့် သီးခြားခွဲထားသော bridge alias။ |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Devin CLI quota (`GetUserStatus`) က အသုံးပြုသည့် Codeium seat-management API အတွက် စိတ်ကြိုက် အစားထိုးသတ်မှတ်ချက်။ |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | local `auggie` provider က အသုံးပြုသည့် Augment (Auggie) CLI binary အတွက် absolute-path အစားထိုးသတ်မှတ်ချက်။ မသတ်မှတ်ထားပါက `CLI_AUGGIE_BIN` ကို အသုံးပြုပြီး၊ ထို့နောက် PATH တွင် ရှာဖွေသည်။ |
| `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Augment (Auggie) CLI binary path အတွက် alias အစားထိုးသတ်မှတ်ချက် (`AUGGIE_BIN` ပြီးနောက် စစ်ဆေးသည်)။ |
| `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | local `zcode` provider ၏ stdio client အတွက် အသုံးပြုသည့် binary။ မသတ်မှတ်ထားပါက PATH ပေါ်ရှိ `zcode` ကို အသုံးပြုသည်။ |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | `cliTools` မှတစ်ဆင့် စတင်သည့်အခါ `zcode` binary သို့ ပေးပို့မည့် အပို argument များ၏ JSON array (string ≤16 ခု)။ |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | ZCode app-server subprocess အတွက် အလုပ်လုပ်မည့် directory။ |
| `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | app-server သို့ ပေးပို့မည့် provider id အတွက် အစားထိုးသတ်မှတ်ချက်။ |
| `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | ZCode app-server runtime ၏ root (`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 server ကို လက်ခံလည်ပတ်ရန် အသုံးပြုသည့် app-server entry script။ |
| `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | ZCode app-server စတင်ခြင်းကို မအောင်မြင်ဟု သတ်မှတ်မည့် startup timeout (ms)။ |
| `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | ZCode app-server call တစ်ခုစီအတွက် RPC timeout (ms)။ |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | supervisor က timeout အဖြစ် မသတ်မှတ်မီ ZCode turn တစ်ခု၏ အများဆုံးကြာချိန် (ms)။ |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | ZCode turn ပြီးစီးမှုကို စစ်ဆေးသည့် polling interval (ms)။ |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | OmniRoute က Hermes CLI config ကို ဖတ်/ရေးသည့် Hermes Agent home directory။ Windows တွင် Hermes PowerShell installer က သတ်မှတ်ပေးသော env var (`%LOCALAPPDATA%\hermes`) နှင့် ကိုက်ညီသည်။ |
### CLI Profile အလိုအလျောက် Sync လုပ်ခြင်း
ဤ feature flag များသည် opt-in ဖြစ်ပြီး ပုံမှန်အားဖြင့် ပိတ်ထားသည်။ ၎င်းတို့ကို
CLI Code dashboard မှလည်း ဖွင့်/ပိတ်နိုင်သည်။
| Variable | ပုံသေ | Source File | ဖော်ပြချက် |
| ------------------------------------- | ------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | provider model sync လုပ်ပြီးနောက် live catalog မှ `~/.codex/*.config.toml` profile file များကို အလိုအလျောက် ပြန်လည်ရေးသားသည်။ `CLI_ALLOW_CONFIG_WRITES` လိုအပ်သည်။ လက်ရှိအသုံးပြုနေသည့် သို့မဟုတ် ပုံသေ Codex config၊ auth၊ Codex-lb setting များ သို့မဟုတ် provider ရွေးချယ်မှုကို မည်သည့်အခါမျှ မပြောင်းလဲပါ။ |
| `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | provider model sync လုပ်ပြီးနောက် live catalog မှ `~/.claude/profiles//settings.json` Claude Code profile file များကို အလိုအလျောက် ပြန်လည်ရေးသားသည်။ `CLI_ALLOW_CONFIG_WRITES` လိုအပ်သည်။ လက်ရှိအသုံးပြုနေသည့် သို့မဟုတ် ပုံသေ Claude config၊ auth သို့မဟုတ် provider ရွေးချယ်မှုကို မည်သည့်အခါမျှ မပြောင်းလဲပါ။ |
### Docker နမူနာ
```bash
# Host binary များကို container အတွင်း mount လုပ်ပြီး ၎င်းတို့၏တည်နေရာကို 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` သည် လမ်းကြောင်းကို host မှ အမှန်တကယ် bind-mount လုပ်ထားသည့်အခါမှသာ
အကျိုးသက်ရောက်သည် — `~/.codex:/host-home/.codex:rw` ကဲ့သို့သော mount များနှင့် တွဲဖက်အသုံးပြုပါ (`docker-compose.yml` ရှိ
`host` profile ကို ကြည့်ပါ)။ Container အသုံးပြုသူ၏ home အတွင်း၌လည်း မရှိသလို bind mount တစ်ခုလည်း မဟုတ်သည့်
လမ်းကြောင်းကို လျစ်လျူရှုမည်ဖြစ်သည်။ အကြောင်းမှာ ထိုနေရာသို့ ရေးသားထားသည့်အရာများသည်
container ကို ပြန်လည်ဖန်တီးသည့်အခါ ပျက်သွားမည်ဖြစ်သောကြောင့် ဖြစ်သည်။
Image သည် `USER node` အဖြစ် အလုပ်လုပ်သောကြောင့် mount မလုပ်ထားသည့် `/root` သည် မှန်ကန်သော
override **မဟုတ်ပါ**။
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ---------------------------------------- | --------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(အလိုအလျောက်)_ | `src/shared/utils/containerEnv.ts` | Container စစ်ဆေးခြင်းကို ဖွင့်ရန် (`1`/`true`) သို့မဟုတ် ပိတ်ရန် (`0`/`false`) အတင်းသတ်မှတ်သည်။ အလိုအလျောက်စစ်ဆေးမှုက မတွေ့ရှိနိုင်သည့် runtime များတွင်သာ လိုအပ်သည်။ |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Mount မလုပ်ထားသည့် container လမ်းကြောင်းအတွင်းသို့ CLI tool configuration များကို မည်သို့ပင်ဖြစ်စေ ရေးသားခွင့်ပြုသည်။ CLI နှင့် ညီမျှသော option မှာ `--allow-container-write` ဖြစ်သည်။ |
### CLI Binary (`omniroute`) အကူအညီပေးသည့် Variable များ
ဤ variable များသည် `omniroute` CLI binary ကိုယ်တိုင်၏ လုပ်ဆောင်ပုံကို ချိန်ညှိပေးသည် (အထက်ပါ sidecar
စစ်ဆေးခြင်းနှင့် မသက်ဆိုင်ပါ)။
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ------------------------------------- | --------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_LANG` | _(စနစ်)_ | `bin/cli/i18n.mjs` | CLI output ဘာသာစကားကို အတင်းသတ်မှတ်သည်။ BCP-47 locale (ဥပမာ `en`, `pt-BR`)။ စနစ် locale environment variable များ (LC_ALL, LC_MESSAGES) ထက် ဦးစားပေးသည်။ |
| `OMNIROUTE_SHOW_LOG` | _(မသတ်မှတ်ထား)_ | `bin/cli/runtime/processSupervisor.mjs` | ကြီးကြပ်မုဒ်တွင် server stdout/stderr ကို terminal သို့ ပို့ရန် `1` ဟု သတ်မှတ်ပါ။ `omniroute serve` ရှိ `--log` flag နှင့် ညီမျှသည်။ |
| `OMNIROUTE_CLI_TOKEN` | _(မသတ်မှတ်ထား)_ | `bin/cli/api.mjs` | `x-omniroute-cli-token` header အဖြစ် ထည့်သွင်းပေးသည့် machine-auth token။ Task 8.12 တွင် အလိုအလျောက်ထုတ်ပေးသည်။ |
| `GEMINI_CLI_HOME` | _(မသတ်မှတ်ထား)_ | `bin/cli/commands/setup-gemini.mjs` | အမြဲတမ်းသိမ်းဆည်းထားမည့် Gemini home root၊ တစ်ကြိမ်သာ run ခြင်းတွင် ယာယီသီးခြားခွဲထားသော home ကို အသုံးပြုသည်။ |
| `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Signal ပေးထားသည့် CLI child ကို အတင်းပိတ်ခြင်းမပြုမီ စောင့်ဆိုင်းပေးမည့်ကာလကို millisecond ဖြင့် သတ်မှတ်သည်။ |
| `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(မသတ်မှတ်ထား)_ | `bin/omniroute.mjs` | မူလအသုံးပြုသူ၏ data-directory environment file ကို ကျော်ရန် အတိအလင်းသတ်မှတ်ထားသော DATA_DIR နှင့်အတူ `1` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_SYNC_TOKEN` | _(မသတ်မှတ်ထား)_ | `bin/cli/commands/sync.mjs` | `omniroute sync bundle` အတွက် sync token (`GET /api/sync/bundle` သည် API key မဟုတ်ဘဲ sync token ကိုသာ လက်ခံသည်)။ `--token` နှင့် ညီမျှသည်။ |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | CLI → server request များအတွက် ကြိုးပမ်းမှုတစ်ကြိမ်ချင်းစီ၏ HTTP timeout (ms)။ |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Timeout သတိပေးချက်ကို မဖော်ပြမီ CLI က server health endpoint ကို စောင့်ဆိုင်းမည့် အများဆုံးအချိန် (ms)။ နှေးကွေးသော cold start များ (ဥပမာ Windows) အတွက် အသုံးဝင်သည်။ `--ready-timeout` မှတစ်ဆင့်လည်း သတ်မှတ်နိုင်သည်။ |
| `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | CLI command များ လုပ်ဆောင်နေစဉ် retry/backoff ဆိုင်ရာ ရောဂါရှာဖွေရေးအချက်အလက်များကို stderr သို့ ထုတ်ပြရန် `1` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_PLUGIN_PATH` | _(မသတ်မှတ်ထား)_ | `bin/cli/plugins.mjs` | CLI plugin ရှာဖွေမှုအတွက် စိတ်ကြိုက် directory (`omniroute-cmd-*` package များ)။ မသတ်မှတ်ထားပါက `~/.omniroute/plugins/` ကို မူလအဖြစ် အသုံးပြုသည်။ CLI အတွက်သာဖြစ်သည် — `OMNIROUTE_PLUGINS_DIR` (အပိုင်း 2) က ညွှန်ပြထားသည့် server-side plugin scanner သို့ မည်သည့်အခါမျှ မရောက်ရှိပါ။ |
| `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(မသတ်မှတ်ထား)_ | `bin/omniroute.mjs` | ဗလာမဟုတ်သော တန်ဖိုးတစ်ခုခု သတ်မှတ်ထားပါက process ပြီးဆုံးချိန်တွင် CLI update အသိပေးချက်ကို မပြသပါ။ CI၊ quiet mode နှင့် text မဟုတ်သော output mode များတွင်မူ အသိပေးချက်ကို သီးခြားပိတ်ထားဆဲဖြစ်သည်။ |
| `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(ဆင့်ပွားရရှိ)_ | `bin/cli/commands/doctor.mjs` | `omniroute doctor` က စမ်းသပ်စစ်ဆေးမည့် liveness URL။ Programmatic `livenessUrl` option ကို ဦးစားပေးသည်၊ မရှိပါက ဤတန်ဖိုးကို ပြောင်းလဲခြင်းမရှိဘဲ အသုံးပြုသည်။ မသတ်မှတ်ထားပါက CLI သည် local dashboard ၏ `/api/health/degradation` endpoint ကို ဆင့်ပွားသတ်မှတ်သည်။ |
| `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | CLI provider command များက အသုံးပြုသည့် provider catalog လမ်းကြောင်း။ Programmatic `catalogPath` option ကို ဦးစားပေးသည်။ Absolute path များကို မူလအတိုင်း အသုံးပြုပြီး relative path များကို project root မှ စတင်ဖြေရှင်းသည်။ မသတ်မှတ်ထားပါက CLI သည် provider constants directory ကို အသုံးပြုပြီး legacy `providers.ts` file ကို အရန်အဖြစ် အသုံးပြုသည်။ |
| `OMNIROUTE_PROVIDER_TEST_MODEL` | _(provider မူလတန်ဖိုး)_ | `bin/cli/provider-test.mjs` | CLI provider connection test များအတွက် အားလုံးအကျုံးဝင်သော fallback model။ ဦးစားပေးအစဉ်မှာ configure လုပ်ထားသည့် connection model၊ provider အလိုက် model override၊ ဤတန်ဖိုး၊ ထို့နောက် provider တွင် ထည့်သွင်းပါရှိသည့် test model ဖြစ်သည်။ |
---
## 10. အတွင်းပိုင်း Agent နှင့် MCP ပေါင်းစည်းမှုများ
| ကိန်းရှင် | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_BASE_URL` | အလိုအလျောက် ရှာဖွေသတ်မှတ်ခြင်း | `open-sse/mcp-server/server.ts` | OmniRoute သို့ MCP/A2A ကိရိယာများ ချိတ်ဆက်ရန် သတ်မှတ်ထားသော URL ဖြစ်သည်။ localhost အလိုအလျောက်ရှာဖွေသတ်မှတ်ခြင်းကို အစားထိုးသည်။ |
| `OMNIROUTE_API_KEY` | _(မသတ်မှတ်ထား)_ | MCP/A2A မော်ဂျူးများ | အတွင်းပိုင်း MCP ကိရိယာနှင့် A2A skill ခေါ်ဆိုမှုများအတွက် API key ဖြစ်သည်။ |
| `OMNIROUTE_API_KEY_ID` | _(မသတ်မှတ်ထား)_ | `open-sse/mcp-server/audit.ts` | MCP audit log တွင် သက်ဆိုင်ရာရင်းမြစ်ကို သတ်မှတ်ဖော်ပြရန် Key ID ဖြစ်သည်။ |
| `ROUTER_API_KEY` | _(မသတ်မှတ်ထား)_ | အဟောင်းစနစ် | `OMNIROUTE_API_KEY` အတွက် အဟောင်း alias ဖြစ်သည်။ |
| `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | နေ့စဉ်ရှင်းလင်းမှုက row တစ်ခုကို မဖျက်မီ local database တွင် ထိန်းသိမ်းထားမည့် A2A task history ရက်အရေအတွက်ဖြစ်သည်။ မသတ်မှတ်ထားခြင်း၊ ဂဏန်းမဟုတ်ခြင်း သို့မဟုတ် `<= 0` ဖြစ်ခြင်းတို့အတွက် `30` သို့ ပြန်လည်သတ်မှတ်သည်။ |
| `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | A2A memory-hits စောင့်ကြည့်နိုင်မှု feature အတွက် kill-switch ဖြစ်သည်။ task တစ်ခု၏ memory recall lookup ကို လုံးဝကျော်ရန် `0` ဟု သတ်မှတ်ပါ။ အခြားတန်ဖိုးများအားလုံးတွင် (မသတ်မှတ်ထားခြင်းအပါအဝင်) ၎င်းကို ဖွင့်ထားသည်။ |
| `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | offline/local Issue Agent recorded-triage endpoint ကို ဖွင့်ပေးသည်။ local recorded-triage workflow များကို ရည်ရွယ်ချက်ရှိရှိ လုပ်ဆောင်နေခြင်းမဟုတ်ပါက ပိတ်ထားပါ။ |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(မသတ်မှတ်ထား)_ | `src/lib/issueAgent/execution.ts` | Issue Agent recorded-triage run တစ်ကြိမ်အတွက် timeout (ms) ဖြစ်သည်။ အတွင်းပိုင်း အများဆုံးတန်ဖိုးအထိ ကန့်သတ်ထားပြီး မသတ်မှတ်ထားလျှင် သို့မဟုတ် မမှန်ကန်လျှင် built-in မူလတန်ဖိုးသို့ ပြန်သွားသည်။ |
| `OMNIROUTE_CONTEXT` | _(လက်ရှိအသုံးပြုနေသော context)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | `omniroute` command များအတွက် CLI remote-mode context/profile ဖြစ်ပြီး local contexts store ရှိ လက်ရှိအသုံးပြုနေသော context ကို အစားထိုးသည်။ `--context ` နှင့် အဓိပ္ပာယ်တူသည်။ |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | CLI context credential များအတွက် ရွေးချယ်အသုံးပြုနိုင်သော `keytar` OS-keychain backend ကို ပိတ်သည်။ ဖွင့်ထားသောအခါ credential များသည် `config.json` mode `0600` တွင် ဆက်ရှိနေပြီး CLI က fallback သတိပေးချက်ကို တစ်ကြိမ်ထုတ်ပေးသည်။ ရည်ရွယ်ချက်ရှိသော headless/container လည်ပတ်မှုအတွက် ဖြစ်သည်။ |
| `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | MCP ကိရိယာခေါ်ဆိုမှုများတွင် scope အခြေပြု access control ကို အတင်းအကျပ်သက်ရောက်စေသည်။ |
| `OMNIROUTE_MCP_SCOPES` | _(အားလုံး)_ | `open-sse/mcp-server/server.ts` | ကော်မာဖြင့်ခွဲထားသော scope များ- `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`။ |
| `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | manifest ကို serialize မလုပ်မီ MCP ကိရိယာဖော်ပြချက်များကို ချုံ့သည်။ ဖွင့်ရန်တန်ဖိုးများ- `1`, `true`, `on`။ |
| `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | ချုံ့သည့် algorithm/profile ဖြစ်သည်။ ပိတ်ရန်တန်ဖိုးများ- `0`, `false`, `off`။ |
| `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | MCP-server ၏ အတွင်းပိုင်း စီမံခန့်ခွဲမှုဆိုင်ရာ read များ (health, resilience, combos, quota, usage) အတွက် ရပ်ဆိုင်းချိန် budget (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` | မမ်မိုရီတွင် cache လုပ်ထားမည့် local-corpus index instance အများဆုံးအရေအတွက် (LRU၊ index လုပ်ထားသည့် root directory တစ်ခုလျှင် တစ်ခု)။ အနည်းဆုံး `1` သို့ ကန့်သတ်ထားသည်။ |
| `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | Model catalog ကို sync လုပ်သည့် ကြားကာလကို နာရီဖြင့် သတ်မှတ်သည်။ |
| `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | ပံ့ပိုးသူ၏ rate-limit နှင့် quota ကို စစ်ဆေးသည့် ကြားကာလ။ |
| `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | အစုလိုက် sync လုပ်ရာတွင် ဆက်တိုက် OAuth quota ရယူမှုများအကြား ကြားကာလ (ms)။ Upstream သို့ တစ်ပြိုင်နက်တည်း အများအပြား မပို့မိစေရန် OAuth connection များကို တစ်ကြိမ်လျှင် တစ်ခုစီ ရယူသည်။ `0` သည် ယင်းလုပ်ဆောင်ချက်ကို မသုံးဘဲ တစ်ပြိုင်နက်တည်း လုပ်ဆောင်စေသည်။ |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Request တစ်ခုချင်းစီ၏ preflight/monitor လမ်းကြောင်းပေါ်တွင် ဆက်တိုက် upstream quota ရယူမှုများအကြား အနည်းဆုံးကြားကာလ (ms)။ IP တစ်ခုတည်းပေါ်ရှိ account အများအပြားက upstream သို့ တစ်ပြိုင်နက်တည်း အများအပြား မပို့မိစေရန် တစ်ပြိုင်နက် network call များကို အချိန်ခြားပေးသည်။ Codex (`/wham/usage`), DeepSeek, Bailian (ရယူသည့်နေရာနှစ်ခုလုံး), OpenCode နှင့် Crof quota fetcher များတွင် ချိတ်ဆက်အသုံးပြုထားသည် (#6009, #6911)။ ယေဘုယျ `usage.ts::getUsageForProvider` dispatch လမ်းကြောင်း (github/glm/minimax/nanogpt/xai/etc.) ကို မထည့်သွင်းရသေးဘဲ သီးခြားခြေရာခံထားသည်။ Cache hit များအပေါ် သက်ရောက်မှုမရှိပါ။ `0` ဖြင့် ပိတ်နိုင်ပြီး `0..5000` အတွင်း ကန့်သတ်ထားသည်။ |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | အမှန်တကယ် usage event တစ်ခုပြီးနောက် provider limit များကို refresh မလုပ်မီ စောင့်ဆိုင်းချိန် (ms)။ Upstream quota API က သုံးစွဲမှုကို မှတ်တမ်းတင်ရန် အချိန်ပေးသည်။ |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | အလိုအလျောက်ရှာဖွေခြင်း | `open-sse/services/adobeFireflyBrowserLogin.ts` | Interactive Adobe Firefly sign-in နှင့် off-screen renewal အတွက် အသုံးပြုသည့် စနစ် Chrome သို့မဟုတ် Edge executable ၏ absolute path။ |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | ဖွင့်ထားသည် | `open-sse/services/adobeFireflySession.ts` | Account အလိုက် Chrome CDP session များဖြင့် IMS နှင့် browser-risk state ကို အသစ်ဖြစ်နေစေသည်။ Browser renewal ကို ပိတ်ရန် `0` သတ်မှတ်ပါ။ |
| `ADOBE_FIREFLY_SESSION_DISK` | ဖွင့်ထားသည် | `open-sse/services/adobeFireflySession.ts` | ပြုပြင်ထားသည့် Adobe session များကို process restart များတစ်လျှောက် ထိန်းသိမ်းနိုင်ရန် `DATA_DIR` အောက်တွင် သိမ်းဆည်းထားသည်။ Session များကို မမ်မိုရီထဲတွင်သာ ထားရန် `0` သတ်မှတ်ပါ။ |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Adobe Firefly generate submission များအကြား အနည်းဆုံးကြားကာလကို millisecond ဖြင့် သတ်မှတ်သည်။ `0` ဖြင့် ကြားကာလခြားခြင်းကို ပိတ်နိုင်သည်။ |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | Adobe submission သုံးကြိမ်မြောက် အောင်မြင်ပြီးတိုင်း ထပ်ဆောင်းနားချိန်ကို millisecond ဖြင့် သတ်မှတ်သည်။ |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | ယာယီ Adobe 408 response များနောက်တွင် အခြေခံ backoff ကြာချိန်ကို millisecond ဖြင့် သတ်မှတ်သည်။ အများဆုံး ငါးကြိမ် ကြိုးစားမှုအတွင်း submission ကြားကာလနှင့် ပေါင်းစပ်အသုံးပြုသည်။ |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | နောက်ခံ service အားလုံး (sync, pricing, model refresh) ကို ပိတ်သည်။ CI/test အတွက် အသုံးဝင်သည်။ |
| `OMNIROUTE_HEADLESS` | _(မသတ်မှတ်ထား)_ | `src/lib/system/headless.ts` | Proxy-engine သီးသန့် စတင်ခြင်းဖြစ်ပြီး ရွေးချယ်နိုင်သော subsystem များကို ကျော်ကာ `/dashboard` → 404 ဖြစ်စေသည်။ `omniroute serve --headless` နှင့် တူညီသည်။ [HEADLESS.md](../guides/HEADLESS.md) ကို ကြည့်ပါ။ |
| `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(မသတ်မှတ်ထား)_ | `src/lib/config/runtimeSettings.ts` | အလိုအလျောက် test ရှာဖွေတွေ့ရှိမှုအောက်တွင် နောက်ခံ task များကို မဖြစ်မနေ ဖွင့်သည်။ Test heuristic ကို ကျော်လွှားရန် `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` | ကြိုတင်လုပ်ဆောင်သော ချိတ်ဆက်မှု cooldown ပြန်လည်ရယူရေး ကြားကာလ (ms)။ ယာယီ `rate_limited_until` ကုန်ဆုံးသွားသည့် ချိတ်ဆက်မှုများကို request hot path ပြင်ပတွင် ပြန်လည်စစ်ဆေးအတည်ပြုသည်။ အနိမ့်ဆုံး `5000`။ |
| `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | ကြိုတင်လုပ်ဆောင်သော ချိတ်ဆက်မှု cooldown ပြန်လည်ရယူရေး scheduler ကို ပိတ်ရန် (`getProviderCredentials` ရှိ lazy recovery သည် ဆက်လက်သက်ရောက်သည်)။ |
| `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Reasoning cache ရှင်းလင်းရေး ကြားကာလ (ms)။ အနိမ့်ဆုံး `60000`။ |
| `OMNIROUTE_REASONING_MIN_BUDGET` | _သတ်မှတ်မထား_ (ပိတ်ထားသည်) | `open-sse/services/reasoningTokenBuffer.ts` | Thinking-model output budget များအတွက် ရွေးချယ်ဖွင့်နိုင်သော အနိမ့်ဆုံးတန်ဖိုး။ `[256, floor)` အတွင်းရှိ caller `max_tokens` ကို အနိမ့်ဆုံးတန်ဖိုးအထိ မြှင့်ပေးသည် (model output အများဆုံးတန်ဖိုးဖြင့် ကန့်သတ်ထားသည်)။ သတ်မှတ်မထားပါက client budget များကို မည်သည့်အခါမျှ မတိုးချဲ့ပါ (#9507)။ |
| `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _သတ်မှတ်မထား_ (ပိတ်ထားသည်) | `open-sse/services/learnedReasoningEffortCaps.ts` | ရွေးချယ်ဖွင့်နိုင်သော၊ ကော်မာဖြင့်ခွဲထားသည့် provider id များ (သို့မဟုတ် `*`)။ `reasoning_effort` 400/422 တွင် လက်ခံသည့် set ကို ဖော်ပြမထားပါက tier တစ်ဆင့်နိမ့်၍ တစ်ကြိမ်ထပ်စမ်းသည် (`low` အောက်သို့ မည်သည့်အခါမျှ မလျှော့ပါ)။ Probe ကို တုံ့ပြန်မှသာ ထို tier ကို လေ့လာမှတ်သားသည် (#14895)။ |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | ဖွင့်ထားသည့် log-export destination တိုင်းကို ထုတ်ယူရှင်းလင်းသည့် call-log export job အတွက် Cron expression (UTC)။ |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Config hot-reload အတွက် polling ကြားကာလ (ms)။ `1000` ထက်နိမ့်ပါက လက်မခံပါ။ |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(ဖွင့်ထားသည်)_ | `src/lib/db/apiKeys.ts` | Redis-backed API-key auth cache ကို ကျော်သွားရန် `1` သတ်မှတ်ပါ (DB ဖတ်ရှုမှုများကို မဖြစ်မနေပြုလုပ်စေသည်)။ |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | အသုံးပြုသူစီမံသော RTK project filter rule များကို တင်းကျပ်သည့် signature စစ်ဆေးမှုများမရှိဘဲ ယုံကြည်ရန်။ |
| `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | `lite.maxToolLength` ကို မသတ်မှတ်ထားသည့်အခါ Lite ၏ ကြိုတင် tool-result ဖြတ်တောက်မှုအတွက် အက္ခရာအရေအတွက် ကန့်သတ်ချက်။ အပိုင်းအခြား 256–1000000။ Dashboard setting သည် ဤ env ထက် ဦးစားပေးသည်။ |
| `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | တစ်ပြိုင်နက်တည်း လုပ်ဆောင်နိုင်သည့် synchronous RTK/Caveman worker အများဆုံးအရေအတွက်။ ပိုလျှံသော job များသည် FIFO အတိုင်း စောင့်ဆိုင်းသည်။ |
| `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | Job တစ်ခုချင်းအလိုက် timeout ကို မီလီစက္ကန့်ဖြင့် သတ်မှတ်သည်။ Timeout ဖြစ်သော worker များကို ရပ်ဆိုင်းပြီး request ကို မပြောင်းလဲဘဲ fail-open လုပ်သည်။ |
| `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | အသုံးမပြုသည့် compression worker ကို ရပ်ဆိုင်းခြင်းမပြုမီ မီလီစက္ကန့်ဖြင့် သတ်မှတ်ထားသော idle သက်တမ်း။ |
| `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Mode အားလုံးတွင် compression worker တစ်ခုချင်းစီအတွက် V8 old-generation heap ကန့်သတ်ချက်ကို MB ဖြင့် သတ်မှတ်သည် (အနိမ့်ဆုံး `128`)။ ၎င်းကို ကျော်လွန်သည့် job သည် gateway heap ကို တိုးချဲ့မည့်အစား fail-open ဖြစ်သည် (ချုံ့မထားဘဲ)။ |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | T02 stacked-pipeline ၏ engine တစ်ခုချင်းအလိုက် circuit-breaker master switch။ **ရွေးချယ်ဖွင့်ရသည် (မူလအတိုင်း ပိတ်ထားသည်)** — ဖွင့်ထားသည့်အခါ request များစွာတွင် ထပ်ခါတလဲလဲ error ဖြစ်သည့် engine ကို cooldown ကာလတစ်ခုအတွင်း ကျော်သွားသည် (fail-open)။ ပိတ်ထားပါက byte အဆင့်အထိ တူညီသည့် အမွေဆက်ခံအပြုအမူကို အသုံးပြုသည်။ |
| `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Engine တစ်ခု၏ breaker မပွင့်မီ request အများအပြားတစ်လျှောက် ဆက်တိုက်ဖြစ်ရမည့် failure အရေအတွက်။ |
| `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | ဖွင့်ထားသော engine တစ်ခုကို half-open probe မပြုလုပ်မီ ကျော်သွားမည့် မီလီစက္ကန့်အချိန်။ |
| `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | T08/H8 CCR ပြန်လည်ရယူမှု-တုံ့ပြန်ချက် ramp- သိမ်းဆည်းထားသော block တစ်ခုကို ယခင်အကြိမ်တိုင်း ပြန်လည်ရယူခြင်းက ၎င်း၏ ထိရောက်သော `minChars` ကို linear ပုံစံဖြင့် မြှင့်တင်သည် (မကြာခဏ ပြန်လည်ရယူသော အကြောင်းအရာသည် ဖိသိပ်မှုနည်းသည်၊ ပြန်လည်ရယူမှု `>=3` ကြိမ် = မည်သည့်အခါမျှ ဖိသိပ်မည်မဟုတ်)။ `1` သည် ramp ကို ပိတ်သည် (သတ်မှတ်ချက်အမှတ်တွင် binary skip သာ ပြုလုပ်သည်)။ |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | CCR အမြဲတမ်းခံနိုင်သော block store (#9061)။ Block တစ်ခုသည် LRU ဖယ်ရှားမှု၊ TTL၊ ပြန်လည်စတင်မှု သို့မဟုတ် အခြား instance တစ်ခုပေါ်သို့ ကျရောက်သော ပြန်လည်ရယူမှုတို့ပြီးနောက် ဆက်လက်တည်ရှိနိုင်စေရန် in-memory store ကို SQLite ဖြင့် ကျောထောက်နောက်ခံပြုသည်။ Block များကို memory ထဲတွင်သာ ထားရှိရန် `false` ဟု သတ်မှတ်ပါ။ 512KB ကျော်သော block များနှင့် cloud runtime များသည် မည်သို့ပင်ဖြစ်စေ memory-only အဖြစ်သာ ရှိနေမည်။ |
| `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | T08/H5 အသုံးပြုမှု-လေ့လာတွေ့ရှိချက်အခြေပြု prefix freeze ပင်မခလုတ်။ **ရွေးချယ်ဖွင့်ရမည် (မူလအားဖြင့် ပိတ်ထားသည်)** — ဖွင့်ထားသည့်အခါ သတ်မှတ်ချက်အမှတ်ကို `>=` ဖြစ်ကြောင်း လေ့လာတွေ့ရှိထားသော system prompt ကို တည်ငြိမ်ပြီး cache လုပ်နိုင်သည့် prefix အဖြစ် သတ်မှတ်ကာ static cache heuristic က မဖမ်းမိသော provider များအတွက်ပင် ဖိသိပ်ခြင်းမှ ထိန်းသိမ်းထားသည် (freeze သည် _ထိန်းသိမ်းခြင်း_ သာပြုလုပ်ပြီး မည်သည့်အခါမျှ ပြောင်းလဲခြင်းမပြုပါ)။ |
| `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | System prompt တစ်ခုကို freeze လုပ်ထားသော တည်ငြိမ်သည့် 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 က အစစ်အမှန် signature များကို ငြင်းပယ်သည့်အခါ Antigravity request translator အား ၎င်း၏ တင်းကျပ်သော CLI request-signature အတည်ပြုမှုကို ကျော်သွားခွင့်ပြုသည် (debug/ခေတ်မမီသော-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 Bridge (အတွင်းပိုင်း)
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ------------------- | -------------------- | ------------------------------- | ------------------------------------------- |
| `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 session များအတွက် 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 ဖွံ့ဖြိုးတိုးတက်မှု** အတွက် တည်ဆောက်ထားသော အထောက်အထားများ။ အဝေးထိန်းဖြန့်ကျက်မှုများအတွက်၊ ပံ့ပိုးသူတစ်ဦးစီ၏ developer console တွင် သင့်ကိုယ်ပိုင်ကို မှတ်ပုံတင်ပါ။
| Variable | ပံ့ပိုးသူ | မှတ်စုများ |
| ------------------------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | အများပြည်သူသုံး client — လျှို့ဝှက်ချက်မလိုအပ်ပါ။ |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | redirect URI ကို ပြောင်းလဲပါ။ မူရင်း- `https://platform.claude.com/oauth/code/callback` |
| `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | အများပြည်သူသုံး client။ |
| `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | `_SECRET` နှင့် ကိုက်ညီရန် လိုအပ်သည်။ |
| `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — |
| `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | အများပြည်သူသုံး client။ |
| `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | အများပြည်သူသုံး Muse CLI device-flow client id အတွက် ရွေးချယ်နိုင်သော ပြောင်းလဲမှု။ တည်ဆောက်ထားသော အများပြည်သူသုံး client ကို အသုံးပြုရန် မသတ်မှတ်ဘဲ ထားပါ။ |
| `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | `_SECRET` နှင့် ကိုက်ညီရန် လိုအပ်သည်။ |
| `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — |
| `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | အများပြည်သူသုံး client။ |
| `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | GitHub Enterprise Copilot ၏ OAuth client id အတွက် ရွေးချယ်နိုင်သော ပြောင်းလဲမှု။ မသတ်မှတ်ပါက `GITHUB_OAUTH_CLIENT_ID` ၏ အများပြည်သူသုံး မူရင်းသို့ ပြန်လည်ရောက်ရှိမည်။ |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | `Copilot-Integration-Id` နှင့် `Editor-Plugin-Version` headers များတွင် ပေးပို့သော GitHub Copilot client integration ID အတွက် ရွေးချယ်နိုင်သော ပြောင်းလဲမှု။ မူရင်းမှာ `copilot-developer-cli` ဖြစ်သည်။ |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | ချိတ်ဆက်မှုတစ်ခုစီအတွက် အထောက်အထားမရရှိနိုင်သည့်အခါ `open-sse/executors/devin-cli.ts` မှ အသုံးပြုသော API key fallback။ ရွေးချယ်နိုင်သည်။ |
| `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Devin CLI binary (`devin`) သို့ စိတ်ကြိုက်လမ်းကြောင်း။ `open-sse/executors/devin-cli.ts` မှ ဖြေရှင်းသည်။ |
| `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | GitLab Duo အတွက် OAuth client ID။ `https://gitlab.com/-/profile/applications` တွင် redirect URI `/callback` နှင့် scopes `api, read_user, openid, profile, email` ဖြင့် app တစ်ခုကို မှတ်ပုံတင်ပါ။ `GITLAB_OAUTH_CLIENT_ID` သို့ ပြန်လည်ရောက်ရှိမည်။ |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | GitLab Duo အတွက် OAuth client secret။ ရွေးချယ်နိုင်သည် — PKCE flow သည် လျှို့ဝှက်ချက်မလိုအပ်ပါ။ `GITLAB_OAUTH_CLIENT_SECRET` သို့ ပြန်လည်ရောက်ရှိမည်။ |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | GitLab base URL (self-hosted 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 config directory ကို ပြောင်းလဲခြင်း (သီးခြား PAT session၊ browser login ကို မထိခိုက်စေရန်)။ |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | `/api/chat` တွင် `validated` အဖြစ် ပေးပို့ရန် Frontend `tk` token။ Blackbox မှ token ကိုက်ညီမှုကို အတင်းအကျပ်တောင်းဆိုသည့်အခါ လိုအပ်သည်။ မဟုတ်ပါက OmniRoute သည် ကျပန်း UUID သို့ ပြန်လည်ရောက်ရှိသည်။ ပြဿနာ #2252 ကို ကြည့်ပါ။ |
| `VISION_BRIDGE_BASE_URL` | Vision Bridge guardrail | Anthropic မဟုတ်သော vision-bridge ခေါ်ဆိုမှုများအတွက် OpenAI-compatible base URL။ အဟောင်း OpenAI URL env သို့မဟုတ် api.openai.com သို့ ပုံမှန်အားဖြင့် သတ်မှတ်ထားသည်။ OmniRoute ၏ `/v1` self-loop သို့မဟုတ် မည်သည့် OpenAI-compat endpoint (Gemini OpenAI-compat, OpenRouter) ကိုမဆို ညွှန်ပြပါ။ ပြဿနာ #2232။ URL သည် OmniRoute ၏ ကိုယ်ပိုင် `/v1` ဖြစ်သည့်အခါ၊ describe sub-request သည် `x-omniroute-admission-bypass: internal` ကို ပေးပို့ပြီး ဖြေရှင်းပြီးသား self-loop credential (`sk_omniroute` sentinel in local mode, သို့မဟုတ် `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) ဖြင့် အတည်ပြုသောကြောင့် `REQUIRE_API_KEY=true` deployments များ အလုပ်လုပ်သည်။ |
| `VISION_BRIDGE_API_KEY` | Vision Bridge guardrail | အထက်ပါ URL အတွက် API သော့။ Anthropic မဟုတ်သော vision-bridge ခေါ်ဆိုမှုများအတွက် provider တစ်ခုစီ၏ OpenAI / Google env vars ကို ကျော်လွှားသည်။ Anthropic မော်ဒယ်များသည် ၎င်းတို့၏ သီးသန့် Anthropic သော့လမ်းကြောင်းကို ထိန်းသိမ်းထားသည်။ ပြဿနာ #2232။ |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge guardrail | "အသုံးပြုနိုင်သော ကိုယ်စားလှယ်မရှိ" ဟူသော routing ရလဒ်ကို မည်မျှကြာအောင် cache လုပ်ထားမည်နည်း၊ ms ဖြင့် (ပုံမှန် `30000`)။ မမှန်ကန်သော သို့မဟုတ် အနုတ်လက္ခဏာတန်ဖိုးများသည် ပုံမှန်သို့ ပြန်လည်ရောက်ရှိသည်။ `0` သည် negative cache ကို ပိတ်သည်။ အရင်းအမြစ်: `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. သင်၏ server URL ကို Authorized redirect URI အဖြစ် ထည့်ပါ။
> 4. `.env` ရှိ credential တန်ဖိုးများကို အစားထိုးပါ။
---
## 12. Provider User-Agent အစားထိုးသတ်မှတ်ချက်များ
Upstream provider တစ်ခုစီထံ ပေးပို့သည့် `User-Agent` header ကို အစားထိုးသတ်မှတ်ပါ။ ၎င်းကို executor base class က runtime တွင် အောက်ပါအတိုင်း dynamic ဖြေရှင်းပေးသည်-
```
process.env[`${PROVIDER_ID}_USER_AGENT`]
```
> **ရင်းမြစ်:** `open-sse/executors/base.ts` → `buildHeaders()`
| Variable | မူလတန်ဖိုး | အပ်ဒိတ်လုပ်ရမည့်အချိန် |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Anthropic က CLI version အသစ် ထုတ်ပြန်သည့်အခါ |
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Anthropic သို့ ဦးတည်သည့် လမ်းကြောင်းနှစ်ခုစလုံး (native OAuth နှင့် CLIProxyAPI) တွင် third-party harness tool အမည်များကို မူရင်းအတိုင်း ပေးပို့ရန် `1`/`true` ဟု သတ်မှတ်ပါ။ မူလအတိုင်းဆိုလျှင် executor သည် Claude Code မဟုတ်သော tool အမည်များကို သတ်မှတ်ထားသည့်နည်းလမ်းအတိုင်း alias ပြုလုပ်သည် (ရှိပါက Claude Code canonical mapping ကို အသုံးပြုပြီး၊ မရှိပါက PascalCase ကို အသုံးပြုသည်)။ ထို့နောက် response တွင် `_toolNameMap` မှတစ်ဆင့် မူလအမည်များသို့ ပြန်ပြောင်းပေးသောကြောင့် snake_case tool များပါဝင်သည့် harness များကို fingerprinted third-party client များအဖြစ် သတ်မှတ်၍ ငြင်းပယ်ခြင်းမရှိပါ။ Debugging အတွက်သာ ဖြစ်သည်။ |
| `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | OpenAI က Codex CLI ကို အပ်ဒိတ်လုပ်သည့်အခါ |
| `CODEX_CLIENT_VERSION` | `0.155.0` | UA string အပြည့်အစုံနှင့် သီးခြားစီ Codex client version ကို အစားထိုးသတ်မှတ်ရန် |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | `CLAUDE_USER_AGENT` နှင့် သီးခြားစီ ကြေညာထားသော Claude Code version ကို အစားထိုးသတ်မှတ်ရန်။ Anthropic သည် model အချို့ကို ဤတန်ဖိုးအပေါ် အခြေခံ၍ ကန့်သတ်ထားသည် (#12417)။ |
| `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Claude billing block ရှိ `cc_version=` တွင် OmniRoute က ထည့်သွင်းသည့် အက္ခရာ 3 လုံးပါ suffix ကို အစားထိုးသတ်မှတ်ရန်။ `CLAUDE_CODE_CLIENT_VERSION` နှင့်အတူ တိုးမြှင့်ပါ — version တစ်ခုတည်းကို pin လုပ်ခြင်းသည် အမှန်တကယ် binary တစ်ခုမျှ မထုတ်လွှတ်သည့် `version.revision` အတွဲကို ကြေညာရာရောက်သည်။ |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | `GITHUB_USER_AGENT` နှင့် သီးခြားစီ ကြေညာထားသော Copilot CLI version ကို အစားထိုးသတ်မှတ်ရန် |
| `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 social device-code `clientId` (အများသုံး id) ကို အစားထိုးသတ်မှတ်ရန် |
| `KIRO_VERIFY_FULL_CRC` | `false` | ရွေးချယ်ဖွင့်နိုင်သည်- Kiro event stream တွင် frame တစ်ခုချင်းစီအတွက် message CRC validation အပြည့်အစုံ ပြုလုပ်ရန် (ပျက်စီးနေသော stream များကို debug လုပ်ရန်) |
| `QODER_USER_AGENT` | `Qoder-Cli` | Qoder CLI ကို အပ်ဒိတ်လုပ်သည့်အခါ |
| `CURSOR_USER_AGENT` | `Cursor/3.3` | Cursor ကို အပ်ဒိတ်လုပ်သည့်အခါ |
> [!TIP]
> `{PROVIDER_ID}_USER_AGENT` pattern ကို အသုံးပြု၍ **မည်သည့်** provider အတွက်မဆို User-Agent အစားထိုးသတ်မှတ်ချက်များကို ထည့်သွင်းနိုင်သည်။ Executor က env var အမည်ကို dynamic တည်ဆောက်ပေးသည်။
---
## 13. CLI Fingerprint လိုက်ဖက်ညီမှု
ဖွင့်ထားသည့်အခါ OmniRoute သည် တရားဝင် CLI ကိရိယာများ၏ အတိအကျ signature နှင့် ကိုက်ညီစေရန် HTTP header များနှင့် JSON body field များကို အစီအစဉ်ပြန်စီပေးသည်။ ဤနည်းဖြင့် သင့် proxy IP ကို ဆက်လက်ထိန်းသိမ်းထားစဉ် account flag လုပ်ခံရနိုင်ခြေကို လျှော့ချပေးသည်။
**ရင်းမြစ်:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts`
### Provider တစ်ခုချင်းအလိုက်
| Variable | အသက်သွင်းမှု | အကျိုးသက်ရောက်မှု |
| ------------------------ | ------------ | ------------------------------------------- |
| `CLI_COMPAT_CODEX` | `=1` | Codex CLI request signature ကို တုပသည် |
| `CLI_COMPAT_CLAUDE` | `=1` | Claude Code request signature ကို တုပသည် |
| `CLI_COMPAT_GITHUB` | `=1` | GitHub Copilot request signature ကို တုပသည် |
| `CLI_COMPAT_ANTIGRAVITY` | `=1` | Antigravity request signature ကို တုပသည် |
| `CLI_COMPAT_CURSOR` | `=1` | Cursor request signature ကို တုပသည် |
| `CLI_COMPAT_KIMI_CODING` | `=1` | Kimi Coding request signature ကို တုပသည် |
| `CLI_COMPAT_KILOCODE` | `=1` | Kilo Code request signature ကို တုပသည် |
| `CLI_COMPAT_CLINE` | `=1` | Cline request signature ကို တုပသည် |
### အားလုံးအတွက်
| Variable | အသက်သွင်းမှု | အကျိုးသက်ရောက်မှု |
| ---------------- | ------------ | ------------------------------------------------------------------------------ |
| `CLI_COMPAT_ALL` | `=1` | Provider **အားလုံး** အတွက် fingerprint လိုက်ဖက်ညီမှုကို တစ်ပြိုင်နက် ဖွင့်သည်။ |
### Kimi Coding CLI identity အစားထိုးသတ်မှတ်ချက်များ
| Variable | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ----------------------- | ---------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------- |
| `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | OAuth/API call များအတွင်း ပေးပို့သည့် Kimi CLI version ကို အစားထိုးသတ်မှတ်သည်။ |
| `KIMI_CODING_DEVICE_ID` | _(ဖမ်းယူထားသည့် မူလတန်ဖိုး)_ | `src/lib/oauth/providers/kimi-coding.ts` | Client header များတွင် အသုံးပြုသည့် ဖမ်းယူထားသော Kimi device ID ကို အစားထိုးသတ်မှတ်သည်။ |
> [!NOTE]
> ဤလုပ်ဆောင်ချက်သည် User-Agent အစားထိုးသတ်မှတ်ချက်များ (§12) နှင့် တွဲဖက်အလုပ်လုပ်သည်။ Fingerprint စနစ်က header အစီအစဉ်နှင့် body field အစီအစဉ်ကို ကိုင်တွယ်ပြီး User-Agent အစားထိုးသတ်မှတ်ချက်များက သီးခြား UA string ကို ကိုင်တွယ်သည်။ နှစ်ခုလုံးကို သီးခြားစီ ဖွင့်နိုင်သည်။
---
## 14. API Key Provider များ
တိုက်ရိုက် authentication အသုံးပြုသည့် provider များအတွက် API key များဖြစ်သည်။ **အကြံပြုထားသည့် စနစ်ထည့်သွင်းနည်း:** Dashboard → Providers → Add API Key။
Environment variable များမှတစ်ဆင့် သတ်မှတ်ခြင်းသည် Docker သို့မဟုတ် headless deployment များအတွက် အခြားရွေးချယ်စရာတစ်ခုဖြစ်သည်။
အသိအမှတ်ပြုထားသော pattern: `{PROVIDER_ID}_API_KEY`
| Variable | Provider |
| ------------------ | --------------------------------------------------------------- |
| `DEEPSEEK_API_KEY` | DeepSeek |
| `NVIDIA_API_KEY` | NVIDIA NIM |
| `JINA_AI_API_KEY` | Jina AI (Foundation API + Reader အရန်အသုံးပြုမှု) |
| `JINA_API_KEY` | Jina AI (`JINA_AI_API_KEY` အတွက် alias) |
| `GEMINI_API_KEY` | Gemini (Google AI Studio) embedding များ + chat အရန်အသုံးပြုမှု |
| `GOOGLE_API_KEY` | Gemini (`GEMINI_API_KEY` အတွက် alias) |
> [!NOTE]
> Runtime က ၎င်းတို့ကို မဖတ်တော့သဖြင့် Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius နှင့် Qianfan တို့အတွက် static `${PROVIDER}_API_KEY` entry များကို v3.8.0 တွင် ဖယ်ရှားခဲ့သည် — ထို provider များသည် Dashboard / `data/provider-credentials.json` / encrypted DB တို့ကိုသာ သီးသန့်မှီခိုသည်။ ရွှေ့ပြောင်းရန်နည်းလမ်းကို ဤစာတမ်း၏ အောက်ခြေရှိ _စစ်ဆေးချက်: ဖယ်ရှားပြီး / အသုံးမဝင်တော့သော Variable များ_ အပိုင်းတွင် ကြည့်ပါ။
> [!TIP]
> Dashboard မှတစ်ဆင့် သတ်မှတ်ထားသော key များကို SQLite တွင် encryption ပြုလုပ်၍ သိမ်းဆည်းထားပြီး environment variable များထက် ဦးစားပေးအသုံးပြုသည်။
>
> **Jina:** Dashboard တွင် `jina-ai` (သို့မဟုတ် မျှဝေထားသော `jina-reader`) connection ရှိသည့်အခါ `jina-ai/…` embedding, rerank, classify, segment နှင့် `jina-search` တို့သည် cluster env key ကို အသုံးပြု၍ ငွေတောင်းခံခြင်း **မပြုပါ** — `getProviderCredentials` သည် ပထမဦးစွာ ဖြည့်သွင်းသည့်စနစ်ဖြစ်သည်။ အသုံးပြုနိုင်သော dashboard key မရှိသည့်အခါမှသာ `JINA_AI_API_KEY` / `JINA_API_KEY` ကို အသုံးပြုသည်။ Call log များတွင် env အရန်အသုံးပြုမှုကို `connection_id=env:JINA_AI_API_KEY` အဖြစ် သတ်မှတ်ဖော်ပြသည်။ Reader card (`jina-reader`, `r.jina.ai`) သည် `/v1/embeddings` သို့မဟုတ် `/v1/rerank` ကို မည်သည့်အခါမျှ ပံ့ပိုးမပေးပါ။
>
> **Gemini:** `gemini/gemini-embedding-2` (alias `google/gemini-embedding-2`) သည် dashboard `gemini` connection ကို ဦးစွာအသုံးပြုသည်။ အသုံးပြုနိုင်သော dashboard key မရှိသည့်အခါမှသာ `GEMINI_API_KEY` / `GOOGLE_API_KEY` ကို အသုံးပြုသည်။ Call log များတွင် env အရန်အသုံးပြုမှုကို `connection_id=env:GEMINI_API_KEY` အဖြစ် သတ်မှတ်ဖော်ပြသည်။ Native multimodal traffic သည် `:embedContent` / `:batchEmbedContents` သို့ ချိတ်ဆက်ရာတွင် `x-goog-api-key` ကို အသုံးပြုသည် — OpenAI `input` item N ခုသည် vector N ခု ဖြစ်လာသည်။
---
## 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)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (သီးခြားလွတ်လပ်သည်၊ မူလတန်ဖိုး: 0 = ပိတ်ထား၊ အကြံပြုတန်ဖိုး: 30000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (သီးခြားလွတ်လပ်သည်၊ မူလတန်ဖိုး: 2)
│ ├── 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` | upstream provider ခေါ်ဆိုမှုများအတွက် HTTP request စုစုပေါင်း timeout။ |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | ရပ်တန့်မပစ်မီ raw upstream bytes များကြား ခွင့်ပြုထားသော အကြာဆုံး တိတ်ဆိတ်ချိန်။ Extended-thinking model များသည် 90s ထက်ပို၍ ခေတ္တရပ်နားခဲသည်။ |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Active SSE stream ၏ စုစုပေါင်းသက်တမ်း အများဆုံးပမာဏ၊ upstream bytes များရောက်လာသည့်အခါ ပြန်လည်စတင်ခြင်းမရှိဘဲ `REQUEST_TIMEOUT_MS` နှင့်လည်း သီးခြားလွတ်လပ်သည်။ Registry ရှိ model အလိုက် အကြီးဆုံး `timeoutMs` (1200000, Codex) ကို 60000 အပိုဆောင်း၍ သတ်မှတ်ထားသောကြောင့် model တစ်ခုအား ခွင့်ပြုထားသည့် budget အပြည့် လည်ပတ်စေသည့်အခါ အဖြေအလယ်တွင် ဖြတ်တောက်ခံရမည်မဟုတ်ပါ။ ပိတ်ရန် `0` သတ်မှတ်ပါ။ |
| `OMNIROUTE_SSE_COMMENTS` | _(ပိတ်ထားသည်)_ | OmniRoute က SSE `:` comment line များ (ဥပမာ `: keepalive` heartbeat နှင့် `x-omniroute-*` metadata trailer များ) ထုတ်လွှတ်နိုင်ခြင်း ရှိ၊ မရှိ။ တင်းကျပ်သော OpenAI-compatible client များသည် SSE line တိုင်းကို JSON.parse လုပ်ပြီး `:` comment များကြောင့် ပျက်စီးသွားသောကြောင့် မူလအားဖြင့် ပိတ်ထားသည် (#10524)။ `data:` heartbeat များကို မထိခိုက်ပါ။ ပြန်လည်ဖွင့်ရန် `on`/`true`/`1`/`yes` သတ်မှတ်ပါ။ `open-sse/utils/sseHeartbeat.ts` က အသုံးပြုသည်။ |
| `SSE_COALESCE_MS` | `0` (ပိတ်) | ရွေးချယ်ဖွင့်နိုင်သည်- Claude client များထံ ပို့သော ဆက်တိုက် Claude `content_block_delta` event များ (တူညီသော block index နှင့် delta type) ကို ပေါင်းစည်းပြီး အနည်းဆုံး N ms တစ်ကြိမ် ပို့ထုတ်သည်။ ဒေတာဆုံးရှုံးမှုမရှိပါ။ `signature_delta` နှင့် boundary event များကို လုံးဝမပေါင်းစည်းပါ။ အောက်တွင် type အလိုက် ကိန်းရှင်တစ်ခု သတ်မှတ်ထားခြင်းမရှိပါက delta type အားလုံးနှင့် သက်ဆိုင်သည်။ `open-sse/utils/sseDeltaCoalesce.ts` က အသုံးပြုသည်။ |
| `SSE_COALESCE_THINKING_MS` | `0` (ပိတ်) | `thinking_delta` အတွက် `SSE_COALESCE_MS` ကို type အလိုက် အစားထိုးသတ်မှတ်ချက်။ |
| `SSE_COALESCE_TEXT_MS` | `0` (ပိတ်) | `text_delta` အတွက် `SSE_COALESCE_MS` ကို type အလိုက် အစားထိုးသတ်မှတ်ချက်။ |
| `SSE_COALESCE_INPUT_JSON_MS` | `0` (ပိတ်) | `input_json_delta` အတွက် `SSE_COALESCE_MS` ကို type အလိုက် အစားထိုးသတ်မှတ်ချက်။ |
| `SSE_FRAME_COALESCE_MS` | `0` (ပိတ်) | ရွေးချယ်ဖွင့်နိုင်သည်- N ms အတွင်း လွှဲပို့သော SSE frame များကို client ထံ တစ်ကြိမ်တည်း ရေးသားပို့ရန် စုစည်းသည်။ ပထမ frame နှင့် terminal frame များ (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) ကို လုံးဝနှောင့်နှေးစေမည်မဟုတ်ပါ။ Batching ဖွင့်ထားပါက ITL သည် batch များကြား အချိန်ကွာဟချက်ကို တိုင်းတာသည်။ `open-sse/utils/sseOutputSink.ts` က အသုံးပြုသည်။ |
| `SSE_STALL_WATCHDOG` | `timer` | Streamed response များအတွက် byte-stall watchdog အကောင်အထည်ဖော်မှု။ `timer` သည် upstream chunk တစ်ခုစီအတွက် timer တစ်ခုကို ပြန်လည်တပ်ဆင်သည် (stall budget အတိအကျတွင် အလုပ်လုပ်သည်)။ `interval` သည် stream တစ်ခုစီအတွက် `clamp(budget/4, 1s, 5s)` ကြာချိန်ကာလဖြင့် စစ်ဆေးမှုတစ်ခုကို ထားရှိသောကြောင့် stall သည် budget + period အတွင်း အလုပ်လုပ်သည်။ `open-sse/utils/streamStallWatchdog.ts` က အသုံးပြုသည်။ |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | ပထမဆုံး non-ping SSE event ကို လက်ခံရရှိရန် အချိန်။ `REQUEST_TIMEOUT_MS` သတ်မှတ်ထားသည့်အခါ ၎င်းထံမှ အမွေဆက်ခံသည်။ |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | ကြီးမားသော၊ tool အသုံးများသော သို့မဟုတ် reasoning မြင့်မားသော streaming request များအတွက် လိုက်လျောညီထွေဖြစ်သော first-event readiness window အများဆုံး။ |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | `/goal` heuristic အတွက် kill-switch။ Detection ကို အပြည့်အဝပိတ်ရန် `false`/`0`/`off` သတ်မှတ်ပါ — request body/header များကြောင့် readiness timeout နှင့် stream recovery တိုးမြှင့်ခြင်းကို လုံးဝမပြုတော့သဖြင့် client ထိန်းချုပ်နိုင်သော timeout ချဲ့ထွင်မှုကို လျော့ပါးစေသည်။ |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | ရှာဖွေသတ်မှတ်ထားသော `/goal` agent run များ သို့မဟုတ် `x-omniroute-agent-goal` ဖြင့် အတင်းအကျပ်သတ်မှတ်ထားသော request များအတွက် first-event readiness window အများဆုံး။ |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | ရှာဖွေသတ်မှတ်ထားသော `/goal` agent run များအတွက် early stream recovery ကို အလိုအလျောက်ဖွင့်သည်။ Goal အတွက် သီးသန့် opt-in ကို ပိတ်ရန် `false`/`0`/`off` သတ်မှတ်ပါ။ ၎င်းသည် operator မူလသတ်မှတ်ချက်အပေါ် recovery ကို ထပ်ပေါင်းနိုင်ရုံသာဖြစ်ပြီး အတိအလင်းသတ်မှတ်ထားသော `STREAM_RECOVERY_ENABLED`/DB settings opt-out ကို လုံးဝအစားမထိုးပါ။ |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | OpenAI SDK ၏ `responses.stream()` ကို 502 ဖြင့် ပျက်စီးစေသော စံမဟုတ်သည့် `codex.*` SSE event များ (ဥပမာ `codex.rate_limits`) ကို ဖယ်ရှားသည်။ မူလအားဖြင့် ဖွင့်ထားသည် (#11014)။ ၎င်းတို့ကို ဆက်လက်လွှဲပို့ရန် `0`/`false`/`no`/`off` သတ်မှတ်ပါ။ |
| `OMNIROUTE_CODEX_APPSERVER_WS` | _(မသတ်မှတ်ထား)_ | ရွေးချယ်ဖွင့်နိုင်သော Codex app-server transport။ Local `codex app-server` sidecar တစ်ခု၏ WebSocket endpoint (`ws://`/`wss://`) ဖြစ်သည်။ Token တစ်ခုနှင့်အတူ သတ်မှတ်ထားသည့်အခါ Codex request များကို HTTP Responses API အစား JSON-RPC မှတစ်ဆင့် sidecar သို့ လမ်းကြောင်းပေးသည်။ Connection တစ်ခုချင်းအလိုက် `providerSpecificData.codexAppServerUrl` မှတစ်ဆင့်လည်း သတ်မှတ်နိုင်သည်။ `open-sse/executors/codex/appServerConfig.ts` က အသုံးပြုသည်။ |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(မသတ်မှတ်ထား)_ | App-server ထံ တင်ပြသော inline capability/bearer token။ Connection တစ်ခုချင်းအလိုက် အစားထိုးသတ်မှတ်ချက်- `providerSpecificData.codexAppServerToken`။ |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(မသတ်မှတ်ထား)_ | app-server capability token ပါဝင်သော ဖိုင်သို့ လမ်းကြောင်း (`codex app-server --ws-token-file` မှ)။ `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` ကို မသတ်မှတ်ထားသည့်အခါ အသုံးပြုသည်။ ချိတ်ဆက်မှုတစ်ခုချင်းအလိုက် အစားထိုးသတ်မှတ်ချက်: `providerSpecificData.codexAppServerTokenFile`။ |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | app-server turn လည်ပတ်သည့် အလုပ်လုပ်ရာ directory။ ချိတ်ဆက်မှုတစ်ခုချင်းအလိုက် အစားထိုးသတ်မှတ်ချက်: `providerSpecificData.codexAppServerCwd`။ |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(မသတ်မှတ်ထား)_ | app-server turn သို့ ပေးပို့သည့် အတည်ပြုမှု မူဝါဒ (ဥပမာ `never`, `on-request`)။ ချိတ်ဆက်မှုတစ်ခုချင်းအလိုက် အစားထိုးသတ်မှတ်ချက်: `providerSpecificData.codexAppServerApprovalPolicy`။ |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(မသတ်မှတ်ထား)_ | app-server turn သို့ ပေးပို့သည့် sandbox မူဝါဒ (ဥပမာ `read-only`, `workspace-write`, `danger-full-access`)။ မသတ်မှတ်ထားသည့်အခါ executor သည် ပုံသေအားဖြင့် `workspace-write` ကို အသုံးပြုသည် (လုံခြုံရေးတင်းကျပ်ထားသည်၊ ယခင်က `danger-full-access`)။ ချိတ်ဆက်မှုတစ်ခုချင်းအလိုက် အစားထိုးသတ်မှတ်ချက်: `providerSpecificData.codexAppServerSandbox`။ |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | app-server ကိုယ်တိုင် ထုတ်ပေးသည့် အတည်ပြုမှု prompt များကို အလိုအလျောက် အတည်ပြုသည် (host ပေါ်တွင် command/file/permission လုပ်ဆောင်ခြင်း)။ ပုံသေအားဖြင့် ပိတ်ထားသည် — prompt များကို အလိုအလျောက် ငြင်းပယ်သည်။ harness tool call များကို မထိခိုက်ပါ (၎င်းတို့သည် သီးခြား `item/tool/call` passthrough မှတစ်ဆင့် သွားသည်)။ `true`/`1`/`yes` ကို လက်ခံသည်။ ချိတ်ဆက်မှုတစ်ခုချင်းအလိုက် အစားထိုးသတ်မှတ်ချက်: `providerSpecificData.codexAppServerAutoApprove`။ |
| `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | response header များကို လက်ခံရရှိရန် အချိန်။ |
| `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | streaming request များအတွက် response header များကို စောင့်ဆိုင်းမည့် အများဆုံးအချိန် (ms)။ `0` သည် ဤကန့်သတ်ချက်ကို ပိတ်သည်။ provider တွင် `fetchStartTimeoutCapMs` ကို တိတိကျကျ သတ်မှတ်ထားပါက ၎င်းကို ဦးစားပေးသည်။ |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 စက္ကန့်) | proxy မသုံးသော direct ကြိုးပမ်းမှုတစ်ခုစီအတွက် response စတင်ရန် စောင့်ဆိုင်းမည့် အများဆုံးအချိန် (ms)။ timeout ဖြစ်ပါက socket အသစ်ဖြင့် တစ်ကြိမ် ထပ်မံကြိုးပမ်းသည်။ ကန့်သတ်ချက်ကို ပိတ်ပြီး ယခင်အပြုအမူကို ဆက်လက်ထားရှိရန် `0` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 မိနစ်) | ပစ်မှတ် host သည် private/LAN/loopback ဖြစ်သော (ဥပမာ `localhost`, `host.docker.internal`, `192.168.x.x`) proxy မသုံးသည့် direct ကြိုးပမ်းမှုများအတွက် response စတင်ချိန်၏ အနည်းဆုံးကန့်သတ်ချက် (ms) ဖြစ်ပြီး native Ollama ၏ cold start ကို အထက်ပါ ပုံသေ 30 စက္ကန့်ဖြင့် မဖြတ်တောက်စေရန် ဖြစ်သည်။ အနည်းဆုံးကန့်သတ်ချက်အဖြစ် သက်ရောက်သည်—အမှန်တကယ်စောင့်ဆိုင်းချိန်သည် ဤတန်ဖိုးနှင့် `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` တို့အနက် ပိုကြီးသည့်တန်ဖိုး ဖြစ်သည်။ `0` သို့မဟုတ် မမှန်ကန်သောတန်ဖိုးသည် local အနည်းဆုံးကန့်သတ်ချက်ကို ဖယ်ရှားသည်။ Remote host များကို မထိခိုက်ပါ။ |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 မိနစ်) | အထက်ပါ pooled-attempt response-start timeout ဖြစ်ပြီးနောက် socket အသစ်ဖြင့် RETRY ကြိုးပမ်းမှုအတွက် အများဆုံးကန့်သတ်ချက် (ms) (#13703)။ caller က ၎င်း၏ကိုယ်ပိုင် deadline signal ကို ပူးတွဲထားပြီးသား ဖြစ်သည့်အခါမှသာ သက်ရောက်သည် (ဖြေရှင်းပြီးသား connection/model/provider/`FETCH_TIMEOUT_MS` အဆင့်ဆင့်ရွေးချယ်မှု)။ ရည်ရွယ်ထားသည့် လမ်းကြောင်းတွင် ထို signal က အမှန်တကယ်ကန့်သတ်ချက်ဖြစ်ပြီး ဦးစွာ အလုပ်လုပ်သောကြောင့်၊ ၎င်းသည် ပုံသေတန်းတူ အများဆုံးကန့်သတ်ချက်မဟုတ်ဘဲ လုံလောက်စွာ ခွင့်ပြုထားသည့် အရန်ကန့်သတ်ချက် ဖြစ်သည်—၎င်းမရှိပါက retry သည် pooled ကြိုးပမ်းမှုနှင့် တူညီသော တိုတောင်းသည့် `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` window ကို ပြန်လည်အသုံးပြုပြီး ပုံမှန်အလုပ်လုပ်နေသော်လည်း TTFB နှေးသော reasoning model များတွင် 504 ဖြစ်စေခဲ့သည်။ အထက်ပါ ပုံသေအနည်းဆုံးကန့်သတ်ချက်ထက် နိမ့်ရန် မည်သည့်အခါမျှ ခွင့်မပြုပါ။ caller က deadline signal လုံးဝမပေးထားပါက retry သည် ပုံသေအနည်းဆုံးကန့်သတ်ချက်ကို မပြောင်းဘဲ ဆက်ထားသည်။ |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | response body အပြည့်အစုံကို လက်ခံရရှိရန် အချိန်။ |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | TCP ချိတ်ဆက်မှု တည်ဆောက်ရန် timeout။ |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Keep-alive socket အားလပ်နေချိန် timeout။ |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | TLS fingerprint proxy (wreq-js) timeout။ |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | wreq-js TLS-fingerprint transport ၏ body အတွက်သာ ပထမဆုံး byte ရရှိသည်အထိ ကြာချိန်ကို ကန့်သတ်သည်။ header များ ရောက်လာသည်နှင့် resolve ဖြစ်သောကြောင့် `TLS_CLIENT_TIMEOUT_MS` တစ်ခုတည်းဖြင့် ရပ်တန့်နေသော body ကို မဖမ်းယူနိုင်ပါ (#12656)။ timeout ဖြစ်ပါက wreq reader ကို ပယ်ဖျက်ပြီး direct/proxy dispatcher သို့ ပြန်လည်ပြောင်းသည်။ `0` သည် watchdog ကို ပိတ်သည်။ |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | OpenCode executor အတွက်သာဖြစ်ပြီး `OPENCODE_RESPONSES_STALL_ROTATION` feature flag ကို ဖွင့်ထားသည့်အခါတွင်သာ သက်ရောက်သည် (ပုံသေအားဖြင့် ပိတ်ထားသည်)။ header များရောက်လာပြီးနောက် streamed Responses reply ၏ ပထမဆုံး body byte ကို စောင့်ဆိုင်းမည့်အချိန်ကို ကန့်သတ်သည် (#13484)။ Responses stream သည် `response.created` ဖြင့် စတင်သောကြောင့် ဤအချိန်ကာလကျော်သည်အထိ တိတ်ဆိတ်နေခြင်းသည် stall ဖြစ်သည်။ account ကို cooldown လုပ်ပြီး request ကို နောက် account သို့ တစ်ကြိမ် လှည့်ပို့သည်။ ဒုတိယအကြိမ် stall ဖြစ်ပါက ချက်ချင်း မအောင်မြင်ကြောင်း သတ်မှတ်သည်။ flag ဖွင့်ထားသော်လည်း `0` သည် guard ကို ပိတ်သည်။ |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= ပိတ်ထားသည်) | OpenCode executor အတွက်သာ—အခြား account တစ်ခု အသုံးပြုနိုင်သေးသည့်အခါ streamed Responses call တစ်ခု၏ upstream response header များကို စောင့်ဆိုင်းမည့်အချိန်ကို ကန့်သတ်သည်။ queue ထဲရှိ request သည် header စောင့်ဆိုင်းချိန်အပြည့်ကို ဆက်မစောင့်ဘဲ ရှေ့ဆက်သွားသည်။ streamed Responses call များကိုသာ သက်ရောက်သည် (Responses stream သည် `response.created` ဖြင့် စတင်သောကြောင့် ထိုနေရာတွင် တိတ်ဆိတ်နေခြင်းသည် generation မဟုတ်ဘဲ queue ဖြစ်သည်)။ chat completion များနှင့် non-streamed call များကို မထိခိုက်ပါ။ ထို့အပြင် ဤ window သည် အမှန်တကယ် fetch-start အများဆုံးကန့်သတ်ချက်ကို တိုစေရုံသာဖြစ်ပြီး မည်သည့်အခါမျှ တိုးမပေးပါ။ ဖွင့်သည့်အခါ အကြံပြုတန်ဖိုး: `30000`။ `0` သည် ပိတ်သည်။ |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | OpenCode executor အတွက်သာဖြစ်သည်- တောင်းဆိုမှုတစ်ခုစီအတွက် အထက်ပါ headers စောင့်ဆိုင်းမှု ကန့်သတ်ချက်ကို နောက် account သို့ အများဆုံး ဘယ်နှကြိမ် ရွှေ့နိုင်သည်ကို သတ်မှတ်သည်။ နောက်ဆုံးကျန်ရှိသော account သည် headers စောင့်ဆိုင်းချိန်အပြည့်ကို အမြဲရရှိသည်။ |
| `OPENCODE_PARK_AND_RESUME` | `false` | OpenCode executor အတွက်သာဖြစ်သည်- ယာယီ 429 များ ထပ်ခါတလဲလဲ ဖြစ်ပေါ်ပြီးနောက် (သို့မဟုတ် အသစ်ဖြစ်သော pool-strain marker တစ်ခု ရှိသည့်အခါ) တောင်းဆိုမှုကို heartbeat ဖြင့် ယာယီရပ်ထားပြီးနောက် fleet တစ်ခုလုံးသို့ တစ်ပြိုင်နက် ဖြန့်ပို့မည့်အစား account 3 ခုအထိ အစဉ်လိုက်ပါဝင်သော ကန့်သတ် replay leg တစ်ခုကို ပြန်လည်လုပ်ဆောင်သည် (#13924)။ ပုံသေအားဖြင့် ပိတ်ထားသည်- 429 တစ်ခုစီသည် ယခင်အတိုင်း နောက် account သို့ အတိအကျ ပြောင်းသွားသည်။ |
| `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | OpenCode executor အတွက်သာဖြစ်သည်- park-and-resume replay leg အတွင်း cooldown ပြီး၍ အသင့်ဖြစ်နေသော account အားလုံးကို proxy-refusal memory က ဘေးဖယ်ထားသည့်အခါ ဘာမျှ replay မလုပ်ဘဲနေမည့်အစား ထို account များကို မည်သို့ပင်ဖြစ်စေ အသုံးပြုသည် (#14851၊ #14750 ၏ နောက်ဆက်တွဲ)။ ပုံသေအားဖြင့် ပိတ်ထားသည်- ထိုအခြေအနေတွင် #14750 မတိုင်မီကဲ့သို့ replay leg သည် အလွတ်ဖြစ်သည်။ |
| `STREAM_READINESS_STALL_RETRY` | `false` | Streaming chat အတွက်သာဖြစ်သည်- ပထမ upstream body သည် အသုံးပြုနိုင်သော event တစ်ခု မထုတ်ပေးမီ ရပ်တန့်နေပါက တူညီသော routing path မှတစ်ဆင့်၊ တူညီသော readiness budget ဖြင့်၊ account အပေါ် အပြစ်ဒဏ်မရှိဘဲ ကန့်သတ်ထားသော ဒုတိယအကြိမ် ကြိုးပမ်းမှုတစ်ခု ပြုလုပ်သည်။ ပုံသေအားဖြင့် ပိတ်ထားသည်- ပထမ body ရပ်တန့်နေပါက retry မလုပ်ဘဲ တောင်းဆိုမှု မအောင်မြင်ပါ။ |
| `OPENCODE_POOL_RESELECT` | `false` | OpenCode executor အတွက်သာဖြစ်သည်- ambient pool context အောက်ရှိ proxy မပါသော account တစ်ခုတွင် egress-bucketed provider ထံမှ 429 ရရှိပြီးနောက် တူညီသော egress address ကို ထပ်မံကြိုးစားမည့်အစား နောက်ကြိုးပမ်းမှုအတွက် အခြား member တစ်ခုကို connection pool ထံ တောင်းဆိုသည်။ အစီအစဉ်ကိုသာ သတ်မှတ်ပြီး ဖယ်ထုတ်ခြင်းမပြုပါ- pool ကုန်ဆုံးသွားပါက လက်ရှိအပြုအမူကို ဆက်လက်ထားရှိသည်။ ပုံသေအားဖြင့် ပိတ်ထားသည်- 429 တစ်ခုစီသည် ယခင်အတိုင်း နောက် account သို့ အတိအကျ ပြောင်းသွားသည်။ |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(မသတ်မှတ်ထား)_ | OpenCode executor အတွက်သာဖြစ်သည်- ယာယီရပ်ထားခြင်းမပြုမီ ဖတ်ရှုသော pool-strain marker ၏ path ကို အစားထိုးသတ်မှတ်သည် (`{since, reason, ttl_s}`၊ ပုံသေ `/tmp/opencode-pool-strain.json`၊ #13924)။ အသစ်ဖြစ်သော marker တစ်ခုရှိပါက ပြန်လည်ရေတွက်ခြင်းမရှိဘဲ ယာယီရပ်ထားသည်။ marker မရှိပါက သို့မဟုတ် သက်တမ်းလွန်နေပါက burst counter ကို ပြန်လည်အသုံးပြုသည်။ |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | `/v1` bridge တောင်းဆိုမှုများအတွက် proxy hop timeout။ |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Firecrawl web-fetch executor ကို self-hosted instance တစ်ခုသို့ ညွှန်ပြသည် (cloud ပြင်ပတွင် API key မလိုအပ်နိုင်ပါ)။ |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Firecrawl web-fetch executor အတွက် တောင်းဆိုမှုတစ်ခုစီ၏ timeout။ |
| `TAVILY_BASE_URL` | _(မသတ်မှတ်ထား)_ | Tavily `/usage` quota fetcher (Provider Limits) အတွက် Base URL။ `api.tavily.com` ကို ညွှန်ပြသည့်အခါ လျစ်လျူရှုသည်။ မသတ်မှတ်ထားပါက connection ၏ base URL ကို ပြန်လည်အသုံးပြုသည်။ |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | bridge အတွက် server request timeout အလုံးစုံ။ |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | bridge မှတစ်ဆင့် response headers ပေးပို့ရန် အချိန်။ |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Bridge keep-alive အားလပ်နေချိန် timeout။ |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Raw socket timeout (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` preset များအတွက် timeout (ms)။ dashboard တွင် active/error အကြား မတည်မငြိမ် ပြောင်းလဲခြင်းကို ကာကွယ်ရန် နှေးကွေးသော endpoint များ (Cerebras, Cloudflare AI, Groq) အတွက် တိုးမြှင့်ပါ။ မမှန်ကန်သော (<1000) သို့မဟုတ် ကိန်းဂဏန်းမဟုတ်သော တန်ဖိုးများအတွက် 8000ms ကို ပြန်လည်အသုံးပြုသည်။ |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | `open-sse/utils/proxyFetch.ts` ရှိ relay သီးသန့် fetch timeout (#9158)။ ခေါ်ယူသူများက ယေဘုယျ upstream timeout အစား relay သီးသန့် မအောင်မြင်မှုကို မြင်ရစေရန် ရပ်တန့်နေသော relay တစ်ခုသည် client/agent timeout (~30s) မတိုင်မီ မအောင်မြင်ရမည်။ အမြဲတမ်း အရင်ဆုံး သက်ရောက်စေရန် `29000` ဖြင့် အများဆုံး ကန့်သတ်ထားသည်။ |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | `open-sse/utils/proxyFetch.ts` ရှိ direct/relay/proxy retry-once path များအတွက် မျှဝေသုံးစွဲသော retry backoff (#9158)။ `0` = ချက်ချင်း retry လုပ်သည်။ |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | မူရင်း wreq-js request timeout (`claudeTlsClient.ts`)။ |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | မူရင်း timeout အပေါ် ထပ်ပေါင်းထားသော အကြွင်းမဲ့ JS hard-deadline အပိုခွင့်ပြုချိန်။ |
| `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | မူရင်း wreq-js request timeout (`perplexityTlsClient.ts`)။ |
| `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | မူရင်း timeout အပြင် ထပ်ပေါင်းထားသော အတိအကျ JS hard-deadline grace ကာလ။ |
| `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (ပိတ်ထားသည်) | ခေါ်ဆိုသူ၏ system message တွင် "သင့်တွင် အသင့်ပါဝင်သော ဝဘ်ရှာဖွေမှုရှိသည်။ ရှာဖွေမှုရလဒ်များကို အသုံးပြုပြီး မေးခွန်းများကို တိုက်ရိုက်ဖြေပါ။" ဟူသောစာသားကို ထပ်ဖြည့်သည် (`perplexity-web/protocol.ts`)။ မူလအတိုင်း ပိတ်ထားသည် — Perplexity က မည်သို့ပင်ဖြစ်စေ ရှာဖွေပြီး၊ ထိုဝါကျသည် coding client များအတွက် တုံ့ပြန်ချက်များထဲသို့ meta-commentary အဖြစ် ပေါက်ကြားဝင်ရောက်တတ်သည်။ ပြန်လည်ဖွင့်ရန် `1`/`true`/`yes`/`on` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | မူရင်း wreq-js တောင်းဆိုမှု timeout (`grokTlsClient.ts`)။ |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | မူရင်း timeout အပြင် ထပ်ပေါင်းထားသော အတိအကျ JS hard-deadline grace ကာလ။ |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | မူရင်း wreq-js တောင်းဆိုမှု timeout (`notionTlsClient.ts`); ကြာမြင့်သော generation များအတွက် `notion-web` က တောင်းဆိုမှုတစ်ခုချင်းစီအလိုက် `180000` သို့ တိုးမြှင့်သည်။ |
| `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | မူရင်း timeout အပြင် ထပ်ပေါင်းထားသော အတိအကျ JS hard-deadline grace ကာလ။ |
| `OMNIROUTE_BROWSER_POOL` | `on` | Browser ဖြင့် ပံ့ပိုးထားသော web-cookie chat အတွက် မျှဝေသုံး Playwright browser pool (`browserPool.ts`); ပိတ်ရန် `off` ဟု သတ်မှတ်ပါ။ |
| `OBSCURA_BIN` | `auto-detect` | Browser pool နှင့် Cloudflare Playground executor တို့က အဓိက engine အဖြစ် အသုံးပြုသည့် `obscura` binary သို့ လမ်းကြောင်း (`open-sse/services/obscura.ts`); မသတ်မှတ်ထားပါက system 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 endpoint များအတွက်သာ ပြောင်းလဲသတ်မှတ်ပါ။ |
| `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 interactive browser sign-in အတွက် system Chrome/Edge executable သို့ လမ်းကြောင်း (`adobeFireflyBrowserLogin.ts`); OS တစ်ခုချင်းစီအလိုက် အလိုအလျောက်ရှာဖွေမှုကို အစားထိုးသတ်မှတ်သည်။ |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone output_ | Build ပြီးနောက် colocation အဆင့်က အသုံးပြုသော standalone output directory အတွက် build-time override (`scripts/build/colocate-standalone.mjs`); runtime အတွက်မဟုတ်ဘဲ build tooling အတွက် ဖြစ်သည်။ |
Combo target ကြိုးပမ်းမှုများသည် ဖြေရှင်းသတ်မှတ်ပြီးသော upstream တောင်းဆိုမှု timeout (`FETCH_TIMEOUT_MS`၊ သို့မဟုတ်
fetch default ကို ဖြည့်ပေးသည့်အခါ `REQUEST_TIMEOUT_MS`) ကို ဆက်ခံသည်။ Combo fallback ကို ပိုမြန်စေရန်သာ combo၊
combo default များ၊ သို့မဟုတ် provider override တွင် `targetTimeoutMs` ကို သတ်မှတ်ပါ; လက်ရှိ
upstream timeout ထက် မြင့်သောတန်ဖိုးများကို upstream timeout အထိ ကန့်သတ်ထားသည်။
`comboTimeoutMs` သည် failover target များအားလုံးအတွက် combo တစ်ခုလုံး၏ သီးခြား wall-clock အချိန်ဘတ်ဂျက် ဖြစ်သည်။
အကန့်အသတ်မရှိ ထပ်တလဲလဲ ကြိုးပမ်းမှုကို ဆက်ထားရန် ၎င်းကို မသတ်မှတ်ဘဲထားပါ သို့မဟုတ် `0` ဟု သတ်မှတ်ပါ (`comboPredicates.ts`
ထဲရှိ hardcoded 10 မိနစ်ကြာ hang-stop သည် ဆက်လက်သက်ရောက်ဆဲ ဖြစ်သည်)။ အပေါင်းတန်ဖိုးတစ်ခုက combo အတွက် ထို
ဘေးကင်းရေးအကာအကွယ်ကို အစားထိုးသည်။ နှေးကွေးသော ပထမ target ပြီးနောက် failover အတွက် အချိန်ကျန်ရှိစေရန်
`comboTimeoutMs` ကို `targetTimeoutMs` ထက် ပိုရှည်အောင်ထားပါ။
### Circuit Breaker သတ်မှတ်ချက်များ
Provider အဆင့် circuit breaker ချိန်ညှိမှု။ Default များသည် connection 500+ အတွက် v3.6 ကတည်းက အသုံးပြုလာသော ချဲ့ထားသည့်တန်ဖိုးများကို ထင်ဟပ်သည်။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------------------------------------------------- | ------------ | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | breaker အလုပ်လုပ်မသွားမီ OAuth provider များအတွက် ဆက်တိုက် မအောင်မြင်မှု အတိုင်းအတာ။ |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | OAuth provider breaker အတွက် ပြန်လည်သတ်မှတ်ချိန်ကာလ (ms)။ |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | API-key provider များအတွက် ဆက်တိုက် မအောင်မြင်မှု အတိုင်းအတာ။ |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | API-key provider breaker အတွက် ပြန်လည်သတ်မှတ်ချိန်ကာလ (ms)။ |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | local provider များ (Ollama၊ LM Studio၊ ...) အတွက် ဆက်တိုက် မအောင်မြင်မှု အတိုင်းအတာ။ |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | local provider breaker အတွက် ပြန်လည်သတ်မှတ်ချိန်ကာလ (ms)။ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- OAuth provider တစ်ခုလုံး cooldown အခြေအနေသို့ မဝင်မီ သတ်မှတ်ချိန်ကာလအတွင်း မအောင်မြင်မှု အရေအတွက်။ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- OAuth provider များအတွက် ရွေ့လျားသည့် မအောင်မြင်မှုရေတွက်ချိန်ကာလ (ms)။ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- OAuth provider အတိုင်းအတာသို့ ရောက်ရှိပြီးနောက် cooldown ကြာချိန် (ms)။ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | ဤမအောင်မြင်မှုအရေအတွက်သို့ ရောက်လျှင် OAuth provider သည် DEGRADED အခြေအနေသို့ ဝင်သည်။ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | OAuth provider ၏ အမြင့်ဆုံး resetTimeout တိုးမြှင့်မှု မြှောက်ကိန်း။ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | ဤ open cycle အရေအတွက်ပြီးနောက် OAuth provider သည် backoff အဆင့်ကို တိုးမြှင့်သည်။ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- API-key provider တစ်ခုလုံး cooldown အခြေအနေသို့ မဝင်မီ သတ်မှတ်ချိန်ကာလအတွင်း မအောင်မြင်မှု အရေအတွက်။ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- API-key provider များအတွက် ရွေ့လျားသည့် မအောင်မြင်မှုရေတွက်ချိန်ကာလ (ms)။ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- API-key provider အတိုင်းအတာသို့ ရောက်ရှိပြီးနောက် cooldown ကြာချိန် (ms)။ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | ဤမအောင်မြင်မှုအရေအတွက်သို့ ရောက်လျှင် API-key provider သည် DEGRADED အခြေအနေသို့ ဝင်သည်။ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | API-key provider ၏ အမြင့်ဆုံး resetTimeout တိုးမြှင့်မှု မြှောက်ကိန်း။ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | ဤ open cycle အရေအတွက်ပြီးနောက် API-key provider သည် backoff အဆင့်ကို တိုးမြှင့်သည်။ |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- local provider တစ်ခုလုံး cooldown အခြေအနေသို့ မဝင်မီ မအောင်မြင်မှု အရေအတွက်။ |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- local provider များအတွက် ရွေ့လျားသည့် မအောင်မြင်မှုရေတွက်ချိန်ကာလ (ms)။ |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | Provider အဆင့် breaker- local provider အတိုင်းအတာသို့ ရောက်ရှိပြီးနောက် cooldown ကြာချိန် (ms)။ |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | upstream 429 တွင် `Retry-After` မပါလာသောအခါ multi-key API-key rotation က key တစ်ခုချင်းစီအတွက် သတ်မှတ်ပေးသည့် cooldown (ms) (#14573)။ သုညအောက် သို့မဟုတ် ကိန်းဂဏန်းမဟုတ်သော တန်ဖိုးများကို ပုံသေတန်ဖိုးဖြင့် အစားထိုးသည်။ |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | context-cache pin ၏ provider ကို ရေရှည်မကျန်းမာဟု သတ်မှတ်ပြီး failover အတွက် pin ကို ဖယ်ရှားမည့် backoff အနက်အဆင့်။ |
| `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | context-cache pin တစ်ခုကို မဖယ်ရှားမီ ခဏတာဖြစ်ပေါ်သော cooldown များကို သည်းခံပေးသည့် anti-flap ချိန်ကာလ (ms)။ |
### အခြေအနေများ
| အခြေအနေ | ဖွဲ့စည်းသတ်မှတ်မှု |
| ------------------------------------------------------ | -------------------------------------------------------- |
| **ကြာရှည်စွာ လုပ်ဆောင်သည့် code generation** | `REQUEST_TIMEOUT_MS=900000` (15 မိနစ်) |
| **စုစုပေါင်း stream သက်တမ်းကို ကန့်သတ်ခြင်း** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 မိနစ်) |
| **Production API အတွက် လျင်မြန်စွာ မအောင်မြင်စေခြင်း** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` |
| **တိုးချဲ့စဉ်းစားမှု model များ** | `STREAM_IDLE_TIMEOUT_MS=300000` (chunk များကြား 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` | မှတ်တမ်းဖိုင်လမ်းကြောင်း (ပရောဂျက် root သို့မဟုတ် `DATA_DIR` နှင့် ဆက်စပ်သောလမ်းကြောင်း)။ |
| `APP_LOG_MAX_FILE_SIZE` | `50M` | လှည့်ပတ်သိမ်းဆည်းခြင်းမပြုမီ အများဆုံးဖိုင်အရွယ်အစား။ လက်ခံသည့်ပုံစံများ- `50M`, `1G`, `512K` သို့မဟုတ် ရိုးရိုး byte အရေအတွက်။ |
| `APP_LOG_RETENTION_DAYS` | `7` | လှည့်ပတ်သိမ်းဆည်းထားသော အပလီကေးရှင်းမှတ်တမ်းဖိုင်များကို ထိန်းသိမ်းထားမည့် ရက်အရေအတွက်။ |
| `APP_LOG_MAX_FILES` | `20` | လှည့်ပတ်သိမ်းဆည်းထားသော မှတ်တမ်းဖိုင် အရန်မိတ္တူ အများဆုံးအရေအတွက်။ |
| `CALL_LOG_RETENTION_DAYS` | `7` | ဒေတာဘေ့စ်ရှိ request/call မှတ်တမ်းအချက်အလက်များကို ထိန်းသိမ်းထားမည့် ရက်အရေအတွက်။ |
| `CALL_LOG_MAX_ENTRIES` | `10000` | မမ်မိုရီအတွင်း buffer ရှိ call မှတ်တမ်းအချက်အလက် အများဆုံးအရေအတွက်။ |
| `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | ရှင်းလင်းမဖယ်ရှားမီ `call_logs` SQLite ဇယားတွင် ရှိနိုင်သည့် row အများဆုံးအရေအတွက်။ |
| `ENABLE_REQUEST_LOGS` | _(မသတ်မှတ်ထား)_ | dashboard ဆက်တင်ကို ကျော်လွန်၍ အသေးစိတ် request မှတ်တမ်းတင်ခြင်းကို အတင်းအကျပ် ဖွင့် သို့မဟုတ် ပိတ်ပါ။ |
| `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 နာရီ) | မမ်မိုရီအတွင်း ရှင်းလင်းခြင်းမပြုမီ ဆက်နွယ်မှုမဲ့နေသော active request မှတ်တမ်းအချက်အလက်များအတွက် အများဆုံးသက်တမ်း။ |
| `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | `call_log_pipeline_enabled=true` ဖြစ်သည့်အခါ pipeline artifact များတွင် stream chunk များကို သိမ်းဆည်းပါ။ ကိုယ်တိုင်ရွေးချယ်ဖွင့်ရသည် (`true`) — disk နေရာချွေတာရန် မူလအားဖြင့် ပိတ်ထားသည်။ |
| `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | `call_log_pipeline_enabled=true` ဖြစ်သည့်အခါ pipeline call မှတ်တမ်း artifact ၏ အများဆုံးအရွယ်အစားကို KB ဖြင့် သတ်မှတ်သည်။ |
| `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | ရှင်းလင်းမဖယ်ရှားမီ `proxy_logs` SQLite ဇယားတွင် ရှိနိုင်သည့် row အများဆုံးအရေအတွက်။ |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `[ProxyEgress]` console မှတ်တမ်းများတွင် client/egress IP များနှင့် account prefix များကို ထည့်သွင်းပါ။ dashboard/database proxy-log မှတ်တမ်းများတွင် အပြည့်အစုံကို ဆက်လက်ထိန်းသိမ်းထားသည်။ |
| `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | proxy-log row များတွင် `first_chunk_ms` (ပေးပို့မှုစတင်ချိန်မှ ပထမဆုံးအသုံးဝင်သော body byte ရရှိချိန်အထိ) ကို မှတ်တမ်းတင်ရန် `"true"` သို့မဟုတ် `"1"` ဟု သတ်မှတ်ပါ။ upstream body တစ်ခုစီကို lazy passthrough stream ဖြင့် ထုပ်ပိုးပြီး byte ရောက်လာသည်နှင့် row ကို ပြင်ဆင်သည်။ response များကို မပြောင်းလဲဘဲ ဖြတ်သန်းစေရန် မူလအားဖြင့် ပိတ်ထားသည်။ |
| `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 မိနစ်) | `src/lib/logRotation.ts` က အသုံးပြုနေသော မှတ်တမ်းဖိုင်အရွယ်အစားကို မည်မျှကြာတိုင်း ပြန်လည်စစ်ဆေးမည်ကို သတ်မှတ်သည်။ |
| `CHAT_LOG_TEXT_LIMIT` | `65536` | chat မှတ်တမ်း artifact များတွင် ထိန်းသိမ်းထားမည့် string ၏ အများဆုံးအရှည် (မူလတန်ဖိုး 64 KB)။ |
| `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | chat မှတ်တမ်း payload များကို ဖြတ်တောက်သည့်အခါ array ၏ နောက်ဆုံးပိုင်းမှ ထိန်းသိမ်းထားမည့် item အရေအတွက်။ |
| `CHAT_LOG_MAX_DEPTH` | `6` | chat မှတ်တမ်း payload များကို မဖြစ်မနေ ဖြတ်တောက်မီ အများဆုံး ထပ်ဆင့်ဖွဲ့စည်းမှုအနက်။ |
| `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | chat မှတ်တမ်း payload များတွင် ထိန်းသိမ်းထားမည့် object key အများဆုံးအရေအတွက် (0 = အကန့်အသတ်မရှိ)။ |
| `CHAT_LOG_MAX_BODY_KB` | `1024` | clone အပြည့်အစုံအစား အကျဉ်းချုပ်သက်သက်ဖြင့် အစားထိုးမည့် request/response body တစ်ခုလုံး၏ အရွယ်အစား (KB)။ ရှည်လျားသော agentic စကားဝိုင်းများတွင် dashboard ပေါ်၌ အမှန်တကယ် message များအစား placeholder တစ်ခု ပြနေပါက ဤတန်ဖိုးကို မြှင့်ပါ။ |
| `CHAT_DEBUG_FILE` | `false` | true ဖြစ်သည့်အခါ `serializeArtifactForStorage` သည် အရွယ်အစားအခြေပြု ဖြတ်တောက်ခြင်းကို ကျော်သွားသည်။ Debug ပြုလုပ်ရန်အတွက်သာ ဖြစ်သည်။ |
---
## 17. မမ်မိုရီ အကောင်းဆုံးဖြစ်အောင် ပြုလုပ်ခြင်း
| Variable | Default | Description |
| ----------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_MEMORY_MB` | _အလိုအလျောက်_ (bare metal); **Docker image တွင် `1024`** | Docker/standalone V8 heap ကန့်သတ်ချက် (MB) အတွက် **အကြံပြုတန်ဖိုး**။ သတ်မှတ်မထားပါက စနစ် RAM ၏ ~35% ကို အခြေခံ၍ အလိုအလျောက် ချိန်ညှိပြီး `[512, 4096]` အတွင်း ကန့်သတ်ထားသည်။ စုစုပေါင်းမမ်မိုရီကို ဖတ်၍မရသည့်အခါမှသာ `512` ကို အနိမ့်ဆုံးတန်ဖိုးအဖြစ် အသုံးပြုသည်။ `run-standalone.mjs` (Docker CMD) တွင် **အတိအလင်း** သတ်မှတ်ထားသောတန်ဖိုးကို `--max-old-space-size` အဖြစ် ဖြည့်စွက်ပြီး ကွဲလွဲနေသော NODE_OPTIONS heap flag ထက် **ဦးစားပေးသည်** (V8 ၏ နောက်ဆုံး flag)။ `omniroute serve` သည် ရှိပြီးသား NODE_OPTIONS heap ကို ဆက်လက်ဦးစားပေးသည် (#5238)။ နှစ်ခုလုံးကို မတူညီသောကိန်းဂဏန်းများဖြင့် မသတ်မှတ်ပါနှင့် — process သည် တန်ဖိုးနှစ်ခုလုံးနှင့် အနိုင်ရသည့်တန်ဖိုးကို ဖော်ပြသော သတိပေးချက်တစ်ခုကို log ရေးသားသည်။ **တရားဝင် Docker image သည် `1024` ကို အမြဲသတ်မှတ်ထားသောကြောင့် ထိုနေရာတွင် အလိုအလျောက်ချိန်ညှိခြင်း လုံးဝမလုပ်ဆောင်ပါ။** Coding-agent `/v1/responses` သည် `8192`–`12288` နှင့် cgroup အတွက် အပိုလွတ်နေရာ လိုအပ်သည် — [Docker လမ်းညွှန် — runtime RAM](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents) ကို ကြည့်ပါ။ |
| `OMNIROUTE_RSS_PRESSURE_MB` | _အလိုအလျောက်_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; `OMNIROUTE_MEMORY_MB` ကို မသတ်မှတ်ထားပါက ပိတ်ထားသည်) | `open-sse/utils/resourcePressure.ts` | V8 `heapUsed` က မမြင်နိုင်သော native/external မမ်မိုရီအတွက် အကြွင်းမဲ့ process-RSS fuse (MB) ဖြစ်သည်။ ၎င်းထက်ကျော်လွန်ပါက request အသစ်များသည် 503 `resource_pressure` ကို ရရှိမည်။ RSS သည် ရုတ်တရက်မြင့်တက်ပြီးနောက် ပြန်လည်ကျဆင်းခဲသောကြောင့် `OMNIROUTE_PRESSURE_SELF_RESTART` နှင့် တွဲဖက်အသုံးပြုပါ။ |
| `PROMPT_CACHE_MAX_SIZE` | `50` | Cache လုပ်ထားနိုင်သည့် system prompt entry အများဆုံးအရေအတွက်။ |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Prompt cache ၏ စုစုပေါင်းအများဆုံးအရွယ်အစား။ |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 မိနစ်) | Prompt cache entry ၏ TTL။ |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | Cache လုပ်ထားနိုင်သည့် temperature=0 response အများဆုံးအရေအတွက်။ |
| `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Semantic cache ၏ စုစုပေါင်းအများဆုံးအရွယ်အစား။ |
| `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 မိနစ်) | Semantic cache entry ၏ TTL။ |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | တစ်ချိန်တည်းတွင် အသက်ဝင်သော in-memory index တစ်ခုကို ထိန်းသိမ်းထားမည့် local-corpus root များ (`src/lib/localCorpus/configured.ts`)။ LRU: ကန့်သတ်ချက်သို့ ရောက်သောအခါ မကြာသေးမီက အနည်းဆုံးအသုံးပြုထားသည့် root ၏ index ကို ဖယ်ရှားပြီး နောက်တစ်ကြိမ် query လုပ်သည့်အခါ ပြန်လည်တည်ဆောက်သည်။ အနိမ့်ဆုံး `1` အဖြစ် ကန့်သတ်ထားပြီး ကိန်းဂဏန်းမဟုတ်သောတန်ဖိုးကို ပုံသေတန်ဖိုးသို့ ပြန်လည်သတ်မှတ်သည်။ |
| `STREAM_HISTORY_MAX` | `50` | Dashboard live view buffer အတွင်းရှိ လတ်တလော stream event အများဆုံးအရေအတွက်။ |
| `CONTEXT_LENGTH_DEFAULT` | _(မသတ်မှတ်ထား)_ | `CONTEXT_LENGTH_` variable မရှိသော provider အားလုံးအတွက် ကမ္ဘာလုံးဆိုင်ရာ context-length override (token များ)။ သတ်မှတ်ထားပါက ထို provider များအတွက် catalog၊ dashboard override နှင့် registry တန်ဖိုးများကို ၎င်းက **အစားထိုးသည်**။ မသတ်မှတ်ထားပါက OmniRoute သည် နောက်ဆုံးအရန်တန်ဖိုး `128000` ဖြစ်သော built-in chain ကို အသုံးပြုသည်။ [Provider တစ်ခုချင်းအလိုက် context length](#per-provider-context-length-context_length_provider) ကို ကြည့်ပါ။ |
| `USAGE_TOKEN_BUFFER` | `100` | အသုံးပြုမှုပမာဏကန့်သတ်ချက်များကို ခြေရာခံရာတွင် သီးသန့်ချန်ထားသော အပို token လွတ်နေရာ။ |
### Provider တစ်ခုချင်းအလိုက် context length (`CONTEXT_LENGTH_`)
`open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) သည် runtime တွင် provider ID မှ အမည်တည်ဆောက်ထားသော
**provider တစ်ခုချင်းအလိုက်** ပုံစံကိုလည်း ဖတ်ရှုသည်။ ထို့ကြောင့် အထက်ပါဇယား သို့မဟုတ် `.env.example` တွင်
တစ်တန်းချင်းစီ စာရင်းပြုစု၍ မရနိုင်ပါ။
**အမည်။** `CONTEXT_LENGTH_` ဖြစ်ပြီး၊ `` သည် provider ID ကို စာလုံးအကြီးပြောင်းထားကာ `A-Z` / `0-9` ပြင်ပရှိ စာလုံးတိုင်းကို `_` ဖြင့် အစားထိုးထားခြင်းဖြစ်သည်။ provider ID သည် alias ဖြေရှင်းပြီးနောက် ရရှိသည့် canonical ID ဖြစ်သည် (short alias တစ်ခုကို ဖြေရှင်းပြီးနောက် `provider/model` စာသား၏ `provider` အပိုင်း)။ စိတ်ကြိုက် OpenAI- သို့မဟုတ် Anthropic-compatible node များသည် ၎င်းတို့အတွက် ဖန်တီးထားသော node ID ကို အသုံးပြုသဖြင့် UUID သည် variable အမည်၏ အစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ တန်ဖိုးသည် အပေါင်းကိန်း token အရေအတွက် ဖြစ်ရမည်။ အခြားတန်ဖိုးမှန်သမျှ (အလွတ်၊ `0`၊ အနှုတ်ကိန်း၊ ဂဏန်းမဟုတ်သောတန်ဖိုး) ကို လျစ်လျူရှုပြီး ဖြေရှင်းမှုသည် နောက်အဆင့်သို့ ဆက်သွားမည်။
| Provider ID | Variable အမည် |
| ----------------------------------------------------------- | -------------------------------------------------------------------------- |
| agentrouter | CONTEXT_LENGTH_AGENTROUTER |
| openrouter | CONTEXT_LENGTH_OPENROUTER |
| openai-compatible-chat-0f8e2c1a-5b7d-4e3f-9a6c-2d1b8e4f7a90 | CONTEXT_LENGTH_OPENAI_COMPATIBLE_CHAT_0F8E2C1A_5B7D_4E3F_9A6C_2D1B8E4F7A90 |
**ဦးစားပေးအစီအစဉ်။** `provider/model` အတွဲတစ်ခုအတွက် တန်ဖိုးတစ်ခုရရှိစေသော ပထမဆုံးအဆင့်ကို အသုံးပြုသည်-
1. ထို provider အတွက် `CONTEXT_LENGTH_`။
2. `CONTEXT_LENGTH_DEFAULT` (စနစ်တစ်ခုလုံးအတွက် environment override)။
3. Model အလိုက် window- dashboard တွင် သတ်မှတ်ထားသော သို့မဟုတ် discovery reconciler မှ အလိုအလျောက် pin လုပ်ထားသော သိမ်းဆည်းထားသည့် context override (`CONTEXT_WINDOW_RECONCILE_INTERVAL` ကိုကြည့်ပါ)၊ မရှိပါက sync လုပ်ထားသော catalog / models.dev တန်ဖိုး။
4. Provider ၏ registry `defaultContextLength`။
5. Model အမည်အပေါ်အခြေခံသည့် heuristics (`claude` 200000၊ `gemini` 1000000၊ `gpt` / `o1` / `o3` / `o4` /
`codex` 400000)။
6. ထည့်သွင်းတည်ဆောက်ထားသော provider အလိုက် မူလတန်ဖိုးများ၊ ထို့နောက် `128000`။
Environment အဆင့်နှစ်ခုစလုံးသည် **provider တစ်ခုလုံး** အပေါ် သက်ရောက်သည်- ထို provider ၏ model တိုင်းသည် တူညီသော limit ကို ရရှိပြီး model အလိုက် dashboard override များထက် ဦးစားပေးခံရသည်။ Provider တစ်ခု၏ model တစ်ခုတည်းသာ မတူညီသော window လိုအပ်ပါက dashboard ထဲတွင် model အလိုက် override ကို အသုံးပြုပါ။
**သက်ရောက်မှုနယ်ပယ်။** ဤအစီအစဉ်သည် request ပေးပို့ချိန် context-window စစ်ဆေးမှု (`open-sse/handlers/chatCore.ts` ထဲရှိ `context_length_exceeded` / "ထည့်သွင်းမှုသည် context window ကို ကျော်လွန်နေသည်" ဟူသော ငြင်းပယ်မှု)၊ prompt compression budget များနှင့် combo context limit များကို ထိန်းချုပ်သည်။ `GET /v1/models` က ဖော်ပြပေးသော `context_length` သည် catalog သို့မဟုတ် registry metadata မှ ဆက်လက်ရရှိနိုင်ပြီး environment override ကို ထင်ဟပ်မည်ဟု အာမခံမထားပါ။
**ဥပမာ။** Catalog တွင် 128,000 ဟု ဖော်ပြထားသော်လည်း model က 1,050,000-token window ကို လက်ခံနိုင်သော provider တစ်ခု-
```dotenv
CONTEXT_LENGTH_AGENTROUTER=1050000
```
၎င်းကို ပြောင်းလဲပြီးနောက် server ကို restart လုပ်ပါ- တန်ဖိုးကို server process environment မှ ဖတ်ယူသည်။ **Desktop app** တွင် server သည် child process အဖြစ် လည်ပတ်ပြီး app စတင်ပြီးနောက် သတ်မှတ်ထားသော system variable ကို မမြင်နိုင်ပါ။ App က load လုပ်သော `.env` ဖိုင်ထဲတွင် ထိုစာကြောင်းကို ထည့်ပါ ([Electron လမ်းညွှန်- Environment ဖိုင် ရှာဖွေသည့်အစီအစဉ်](../guides/ELECTRON_GUIDE.md#environment-file-lookup) တွင် ရှာဖွေသည့်အစီအစဉ်ကို ကြည့်ပါ)၊ ထို့နောက် app ကို အပြီးပိတ်ပြီး ပြန်လည်စတင်ပါ။
### Compression
| Variable | မူလတန်ဖိုး | ဖော်ပြချက် |
| ------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | မသတ်မှတ်ထား | `.rtk/trust.json` hash မရှိဘဲ project `.rtk/filters.json` ကို ယုံကြည်ပါ။ ထိန်းချုပ်ထားသော local development တွင်သာ အသုံးပြုပါ။ |
### Memory Engine (အစီအစဉ် 21)
### Memory၊ skills နှင့် token refresh တို့၏ event-loop ကုန်ကျစရိတ် (#10349)
OmniRoute သည် **Node process တစ်ခုတည်း** ဖြစ်သည်။ Memory extraction/retrieval၊ skills injection နှင့် provider token refresh တို့သည် `GET /healthz` နှင့် dashboard အသုံးပြုသည့် **တူညီသော event loop** ပေါ်တွင် လည်ပတ်သည်။ ၎င်းတို့သည် worker thread မဟုတ်ပါ။
| လုပ်ဆောင်မှု | Code | မူလတန်ဖိုး | Operator ထိန်းချုပ်မှု |
| ----------------------------- | ---------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Memory extraction / retrieval | `src/lib/memory/` | Dashboard **memoryEnabled** (မူလအတိုင်း ဖွင့်ထားသည်) | **Settings → Memory** ကို ပိတ်ပါ။ Settings ထဲတွင် feature ကို ပိတ်ခြင်းမှလွဲ၍ သီးခြား env kill switch မရှိပါ။ |
| Skills injection | `src/lib/skills/injection.ts` | Dashboard **skillsEnabled** (မူလအတိုင်း ဖွင့်ထားသည်) | **Settings → Memory/Skills** (`skillsEnabled`) ကို ပိတ်ပါ။ အောက်ပါ sandbox ချိန်ညှိမှုများသည် injection ဖွင့်ထားပြီးနောက် လုပ်ဆောင်မှုကိုသာ ကန့်သတ်ပေးသည်။ |
| Token refresh | `src/sse/services/tokenRefresh.ts` | ချိတ်ဆက်ထားသော OAuth/web provider များအတွက် ဖွင့်ထားသည် | Provider ကို ချိတ်ဆက်မှုဖြုတ်ပါ သို့မဟုတ် token များကို သက်တမ်းမကုန်ဘဲ ထားပါ။ လက်ရှိတွင် `TOKEN_REFRESH=0` env မရှိပါ။ |
အသုံးပြုမှုမရှိသလောက်ဖြစ်သော စက်တစ်ခုတွင် `/healthz` နှေးနေပါက memory + skills ကို ဦးစွာပိတ်ပြီးနောက် catalog/compression load ကို စစ်ဆေးပါ (#10303, #9685)။ ဤ feature များသည် `await` နေရာများတွင် အခြားလုပ်ငန်းများကို အလှည့်ပေးသော်လည်း thread တစ်ခုတည်းအတွက် ယှဉ်ပြိုင်နေရဆဲဖြစ်သည်။
Persistent memory subsystem (`src/lib/memory/`) အတွက် embedding layer၊ vector store နှင့် reranking ချိန်ညှိမှုများ။
| Variable | Default | ဖော်ပြချက် |
| ------------------------------------ | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (၅ မိနစ်) | မှတ်ဉာဏ်အတွင်းရှိ embedding cache အတွက် TTL (source/model/dim signature တစ်ခုစီအလိုက်)။ |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | embedding cache တွင် ထိန်းသိမ်းထားမည့် LRU entry အများဆုံးအရေအတွက်။ |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | ရွေးချယ်ဖွင့်သုံးနိုင်သည့် `@huggingface/transformers` local MiniLM pipeline (~23 MB int8၊ ~400 MB RAM) အတွက် HF repo id။ |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | static potion/Model2Vec lookup-table embedder အတွက် HF repo id။ လိုအပ်သည့်အချိန်မှသာ cache directory ထဲသို့ ဒေါင်းလုဒ်လုပ်သည်။ |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | static potion model ဖိုင်များကို cache လုပ်ရန် အသုံးပြုသည့် directory။ မသတ်မှတ်ထားပါက `DATA_DIR` အောက်တွင် ပုံသေထားရှိသည်။ |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | `staticPotion.ts` အသုံးပြုသည့် Hugging Face Hub အခြေခံ URL ကို အစားထိုးသတ်မှတ်ရန် (ဥပမာ air-gapped စနစ်များအတွက် mirror endpoint)။ |
| `MEMORY_VEC_TOP_K` | `20` | `src/lib/memory/vectorStore.ts` အတွင်းရှိ `sqlite-vec` brute-force vector search က အသုံးပြုသည့် ပုံသေ top-K။ |
| `MEMORY_RRF_K` | `60` | ပေါင်းစပ် FTS5 + vector retrieval (sqlite-vec recipe) အတွက် Reciprocal Rank Fusion ကိန်းသေ `k`။ |
| `VECTOR_STORE_DISABLE_VEC` | `false` | `getVectorStore()` (`src/lib/memory/vectorStore.ts`) ရှိ စမ်းသပ်ခြင်း/ရောဂါရှာဖွေခြင်း seam—`true` ဖြစ်ပါက vector store ကို `null` အဖြစ် အတင်းသတ်မှတ်သည် (`sqlite-vec` မရှိသည့် cloud/WASM environment ကို ပုံတူလုပ်သည်)၊ ထို့ကြောင့် memory retrieval သည် FTS5 keyword search သို့ အဆင့်လျော့သွားသည်။ production တွင် မသတ်မှတ်ဘဲထားပါ။ |
| `NOTION_API_KEY` | _(မသတ်မှတ်ထား)_ | Notion backend အတွက် API key (`genericBackend.ts` ၏ သိရှိပြီးသား backend preset က အသုံးပြုသည်)။ |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Notion API အတွက် အခြေခံ URL (ကိုယ်တိုင် host လုပ်ထားသည့် Notion အစားထိုးစနစ်များအတွက် အစားထိုးသတ်မှတ်နိုင်သည်)။ |
| `OBSIDIAN_API_KEY` | _(မသတ်မှတ်ထား)_ | Obsidian Vault backend အတွက် API key (`genericBackend.ts` ၏ သိရှိပြီးသား backend preset က အသုံးပြုသည်)။ |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Obsidian Vault API အတွက် အခြေခံ URL (remote vault အတွက် အစားထိုးသတ်မှတ်နိုင်သည်)။ |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | TV6 typed memory decay ၏ ပင်မခလုတ်။ **ကိုယ်တိုင်ရွေးချယ်ဖွင့်ရသည် (ပုံသေအားဖြင့် ပိတ်ထားသည်)** — sweep သည် decay ဖြစ်ပြီးသား memory များကို **ဖျက်ပစ်သည်**။ ၎င်းကို ပိတ်ထားပါက `access_count`/`last_accessed_at` သည် telemetry သက်သက်သာဖြစ်ပြီး မည်သည့်အရာမျှ ဖျက်ပစ်မည်မဟုတ်ပါ။ |
| `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | အသုံးမပြုထားသည့် `episodic` memory တစ်ခု decay ဖြစ်မည့် TTL (ရက်)။ `0` သည် episodic ကိုလည်း decay မဖြစ်စေပါ။ တည်တံ့သော type များ (`factual`/`procedural`/`semantic`) သည် အမြဲတမ်း decay မဖြစ်ပါ။ decay clock ကို `last_accessed_at` အပေါ် အခြေခံ၍ ပြန်လည်သတ်မှတ်သည်။ |
| `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | ဤအကြိမ်အရေအတွက်နှင့်အထက် (`>=`) ထည့်သွင်းအသုံးပြုထားသည့် memory သည် type မည်သို့ပင်ဖြစ်စေ decay မဖြစ်တော့ပါ။ `0` သည် access immunity ကို ပိတ်သည်။ |
| `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` message ကို **index 0 တွင်သာ** လက်ခံသည့် comma ခြား provider id များ (စာလုံးအကြီးအသေးမခွဲ၊ `src/lib/memory/injection.ts`)။ ယင်းတို့အတွက် cache-safe mid-array memory splice သည် multi-turn conversation များတွင် မလုံခြုံသဖြင့် memory ကို ပထမဆုံး system message အဖြစ် ပေါင်းစည်းခြင်း/ရှေ့မှထည့်ခြင်း ပြုလုပ်သည်။ ပုံသေအားဖြင့် `xiaomi-mimo`/`mimo` ကိုသာ သတ်မှတ်ထားသည်။ တစ်ခုတည်းသော ရှေ့ဆုံး system message သတ်မှတ်ချက်ကို chat template က အလားတူ အတင်းသတ်မှတ်ထားသည့် ကိုယ်တိုင် host လုပ်ထားသော OpenAI-compatible endpoint များ (ဥပမာ Qwen3.5+/3.6) အတွက် တိုးချဲ့ထည့်သွင်းပါ။ |
### RAM နည်းသော Docker နမူနာ
`128` သည် dashboard အတွက်သာ ဖြစ်သည်။ ဤ heap ပေါ်ရှိ coding agent များသည် ကြာရှည်သော `/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` (24h) | `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` ရှိ မော်ဒယ် ID များအတွက် အသုံးပြုသော ရှေ့ဆက်ပုံစံ။ `dual` သည် မော်ဒယ်တိုင်းအတွက် အတိုကောက်အမည် ရှေ့ဆက်နှင့် စံသတ်မှတ်ထားသော ဝန်ဆောင်မှုပေးသူ ရှေ့ဆက်နှစ်မျိုးစလုံးကို ဖော်ပြသည် (ယခင်ဗားရှင်းများနှင့် ကိုက်ညီမှုရှိစေရန် — ကတ်တလောက်အရွယ်အစားကို အကြမ်းဖျင်း နှစ်ဆဖြစ်စေသည်)။ `alias` သည် မော်ဒယ်တစ်ခုလျှင် ID တစ်ခုကို ထုတ်ပေးသည်။ `canonical` သည် ဝန်ဆောင်မှုပေးသူ ID အပြည့်အစုံပါဝင်သော ရှေ့ဆက်ကိုသာ ထုတ်ပေးသည် (အတိုကောက်အမည်သည် စံ ID နှင့် တူညီပြီးသား ဝန်ဆောင်မှုပေးသူများတွင် ၎င်းတို့၏ တစ်ခုတည်းသော မှတ်တမ်းကို ဆက်လက်ထားရှိသည်)။ ကလိုင်းယင့်များသည် တောင်းဆိုမှုတစ်ခုချင်းအလိုက် `?prefix=alias` ဖြင့် အစားထိုးသတ်မှတ်နိုင်သည်။ [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix) ကို ကြည့်ပါ။ |
| `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | စက္ကန့်ဖြင့် သတ်မှတ်ထားသော ချိန်ညှိမှုကြားကာလ။ |
---
## PromptQL Playground ဝန်ဆောင်မှုပေးသူ (တရားဝင်မဟုတ်သော/စမ်းသပ်ဆဲ)
prompt.ql.app အတွက် ပြန်လည်လေ့လာဖော်ထုတ်ထားသော GraphQL session bridge (`src/shared/constants/providers/web-cookie.ts`)။ အားလုံးမှာ ရွေးချယ်နိုင်သော သတ်မှတ်ချက်များဖြစ်သည် — မူလတန်ဖိုးများသည် အများသုံး playground endpoint များကို ညွှန်ပြထားသည်။ ကိုယ်တိုင်လက်ခံထားသော သို့မဟုတ် အခြားရွေးချယ်စရာ PromptQL deployment အတွက်သာ အစားထိုးသတ်မှတ်ပါ။
| ကိန်းရှင် | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | ချတ်/session လုပ်ဆောင်မှုများအတွက် အသုံးပြုသော 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 အတွက် reverse-engineer ပြုလုပ်ထားသော session bridge (`src/shared/constants/providers/web-cookie.ts`)။ ရွေးချယ်နိုင်သည် — မူလသတ်မှတ်ချက်သည် အများသုံး billing/usage endpoint ကို ညွှန်ပြထားသည်။ ကိုယ်တိုင် host လုပ်ထားသော သို့မဟုတ် အစားထိုး HyperAgent deployment အတွက်သာ override လုပ်ပါ။
| Variable | မူလသတ်မှတ်ချက် | Source File | ဖော်ပြချက် |
| ---------------------- | --------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- |
| `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | billing/usage credit block များကို ရယူရန် အသုံးပြုသည့် endpoint။ |
---
## Kilo Code အသုံးပြုမှု Quota များ
Kilo Code ပံ့ပိုးသူအတွက် ကိုယ်ပိုင် USD လက်ကျန်နှင့် Kilo Pass အသုံးပြုမှုကို ရှာဖွေစစ်ဆေးခြင်း။ ရွေးချယ်နိုင်သည် — မူလသတ်မှတ်ချက်သည် အများသုံး Kilo API ကို ညွှန်ပြထားသည်။ relay/test fixture အတွက်သာ override လုပ်ပါ။ Authentication အတွက် connection တွင် ရှိပြီးသား OAuth access token ကို အသုံးပြုသည်။
| Variable | မူလသတ်မှတ်ချက် | Source File | ဖော်ပြချက် |
| -------------- | --------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | ကိုယ်ပိုင် Kilo Code လက်ကျန်နှင့် Kilo Pass အသုံးပြုမှုကို ရယူရန် အသုံးပြုသည့် အခြေခံ URL။ |
---
## Adobe Firefly ဝဘ်ပံ့ပိုးသူ (တရားဝင်မဟုတ်/စမ်းသပ်ဆဲ)
Adobe Firefly ဝဘ်ပံ့ပိုးသူအတွက် browser မှတစ်ဆင့် လုပ်ဆောင်သည့် session refresh
(`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`,
`open-sse/services/adobeFireflyClient.ts`)။ ရွေးချယ်နိုင်သည် — မူလသတ်မှတ်ချက်အားလုံးကို ပုံမှန်
desktop installation အတွက် ချိန်ညှိထားသည်။
> **#9255 တွင် ဖယ်ရှားခဲ့သည်။** ယခင် CDP ချိတ်ဆက်ထားသော Chrome runtime (adobeFireflyChromeRuntime.ts) ကို
> Playwright browser-login service ဖြင့် အစားထိုးခဲ့ပြီး ၎င်း၏ configuration option များသည် မရှိတော့ပါ။
> ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART variable များအပြင်
> ADOBE_FIREFLY_LOGIN_WAIT_MS နှင့် ADOBE_FIREFLY_FORTER_WAIT_MS တို့ကို codebase အတွင်း မည်သည့်နေရာတွင်မျှ
> ဖတ်ယူအသုံးပြုခြင်းမရှိပါ — ၎င်းတို့ကို သတ်မှတ်ခြင်းသည် မည်သည့်အကျိုးသက်ရောက်မှုမျှ မရှိပါ။
| Variable | မူလသတ်မှတ်ချက် | Source File | ဖော်ပြချက် |
| ------------------------------------ | --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | အမှန်တကယ် headless Chrome ကို အသုံးပြုရန် `1` ဟု သတ်မှတ်ပါ (generate အတွက် အလုပ်မလုပ်ကြောင်း သိရှိထားပြီး debug အတွက်သာ ဖြစ်သည်)။ |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | ကြိုတင် browser warm ပြုလုပ်ခြင်းကို ဖွင့်/ပိတ်ရန်။ `0` သည် ကြိုတင် warm ပြုလုပ်ခြင်းကို ပိတ်သည် (batch လုပ်ဆောင်နေစဉ် 408 recovery ကို ဆက်လက်အသုံးပြုနေဆဲဖြစ်သည်)။ |
| `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Adobe Firefly session ကို disk တွင် ဆက်လက်သိမ်းဆည်းခြင်းအား ပိတ်ရန် `0` ဟု သတ်မှတ်ပါ။ |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(မသတ်မှတ်ထား)_ | `open-sse/services/adobeFireflySession.ts` | ဆက်တိုက် submit ပြုလုပ်မှုများအကြား အနည်းဆုံး ထားရှိရမည့် ကြားကာလ (ms) ဖြစ်ပြီး built-in မူလသတ်မှတ်ချက်ကို override လုပ်သည်။ |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(မသတ်မှတ်ထား)_ | `open-sse/services/adobeFireflySession.ts` | batch အောင်မြင်ပြီးနောက် ထပ်ပေါင်းထည့်မည့် ကြားကာလ (ms) ဖြစ်ပြီး built-in မူလသတ်မှတ်ချက်ကို override လုပ်သည်။ |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(မသတ်မှတ်ထား)_ | `open-sse/services/adobeFireflyClient.ts` | generation request တစ်ခုကို submit မလုပ်မီ အခြေခံစောင့်ဆိုင်းချိန် (ms) ဖြစ်ပြီး built-in မူလသတ်မှတ်ချက်ကို override လုပ်သည်။ |
---
## 19. မော်ဒယ် စင့်ခ်လုပ်ခြင်း (ဖွံ့ဖြိုးတိုးတက်ရေး)
| ကိန်းရှင် | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ----------------------------------- | ----------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MODELS_DEV_SYNC_ENABLED` | _(မသတ်မှတ်ထား)_ | `src/lib/modelsDevSync.ts` | models.dev ဈေးနှုန်း စင့်ခ်လုပ်ခြင်းကို အတင်းအကျပ် ထိန်းချုပ်သည့် သတ်မှတ်ချက်။ မသတ်မှတ်ထားပါက Settings > AI (`modelsDevSyncEnabled`) ကို လိုက်နာသည်။ `0`/`false`/`off`/`no` သည် **DB ထက် ဦးစားပေးအကျိုးသက်ရောက်ပြီး** အချိန်မှန် စင့်ခ်လုပ်ခြင်းနှင့် `getModelsDevPricing()` SQL/JSON စစ်ဆေးမှုများ နှစ်မျိုးလုံးကို ကျော်သွားသည် (တူညီသော event loop တွင် dashboard ရပ်တန့်နေသည့်အခါ ပြန်လည်နာလန်ထူရန်)။ `1`/`true`/`on`/`yes` သည် စင့်ခ်လုပ်ခြင်းကို အတင်းအကျပ် ဖွင့်ပေးသည်။ ဈေးနှုန်း သိမ်းဆည်းခြင်း/ရှင်းလင်းခြင်းသည် `backupDbFile("pre-write")` ကို ဆက်လက်ခေါ်ယူသော်လည်း 60 မိနစ် throttle သို့မဟုတ် `DISABLE_SQLITE_AUTO_BACKUP` အောက်တွင် မည်သည့်လုပ်ဆောင်ချက်မျှ မရှိပါ။ |
| `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 နာရီ) | `src/lib/modelsDevSync.ts` | ဖွံ့ဖြိုးတိုးတက်ရေးကာလ မော်ဒယ်ကတ်တလောက် စင့်ခ်လုပ်သည့် ကြားကာလကို စက္ကန့်ဖြင့် သတ်မှတ်သည်။ |
| `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 နာရီ) | `src/lib/contextWindowResolver.ts` | ကိုယ်တိုင်ပြင်ဆင်နိုင်သော context-window reconciler (5004) အတွက် ကြားကာလ (စက္ကန့်)။ `/models` ရှာဖွေတွေ့ရှိမှုမှ provider က ကြေညာထားသော window များသည် ကတ်တလောက်နှင့် ကွဲလွဲသည့်အခါ ၎င်းတို့ကို `auto:discovery` override များအဖြစ် သတ်မှတ်ထားသည်။ ပိတ်ရန် `0` ဟု သတ်မှတ်ပါ။ စင့်ခ်လုပ်ပြီးသား ဒေတာကို ပြန်လည်အသုံးပြုသည် (အသစ် ထပ်မံရယူခြင်းမရှိပါ)၊ `manual` override များကို မည်သည့်အခါမျှ ထပ်ရေးမည်မဟုတ်ပါ။ |
---
## 20. Provider အလိုက် သတ်မှတ်ချက်များ
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 နာရီ) | `src/lib/catalog/openrouterCatalog.ts` | OpenRouter model catalog cache ၏ TTL။ |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | `/v1/models` တုံ့ပြန်ချက်များတွင် ဖတ်ရှုရလွယ်ကူသော `name` field များကို ထည့်သွင်းပါ။ ID များကိုသာ မျှော်လင့်သည့် client များအတွက် ပိတ်ထားပါ။ |
| `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 စက္ကန့်) | `src/app/api/v1/models/catalogCache.ts` | ပေါင်းစည်းထားသည့် `GET /v1/models` catalog ပြန်လည်တည်ဆောက်မှုအတွက် cold-path စောင့်ဆိုင်းချိန်ကန့်သတ်ချက် (#12627)။ Timeout ဖြစ်သောအခါ နောက်ဆုံးအောင်မြင်ခဲ့သည့် 200 တုံ့ပြန်ချက်ရှိပါက ၎င်းကို ပေးပို့သည်။ |
| `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (ရက် 30) | `src/lib/db/models/activeSyncedCatalog.ts` | Connection တစ်ခု၏ ချိန်ကိုက်ထားသော model စာရင်းသည် routing အတွက် အတည်ပြုကိုးကားနိုင်မှု ရပ်တန့်ပြီး registry ကို အတားအဆီးမရှိ ဆက်လက်အသုံးပြုသည့် သက်တမ်း (#12849)။ Timestamp တစ်ခါမျှ မသတ်မှတ်ထားသော row များကိုလည်း ဟောင်းနွမ်းသည်ဟု သတ်မှတ်သည်။ |
| `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 စက္ကန့်) | `src/lib/usage/analyticsResponseCache.ts` | တူညီသော query string အတွက် နှေးကွေးသည့် `GET /api/usage/analytics` တုံ့ပြန်ချက်ကို ပြန်လည်အသုံးပြုမည့် ကြာချိန် (#15629)။ `0` သည် cache ကို ပိတ်သည်။ |
| `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1 စက္ကန့်) | `src/lib/usage/analyticsResponseCache.ts` | တည်ဆောက်ရန် အနည်းဆုံး ဤမျှကြာသော analytics တုံ့ပြန်ချက်များကိုသာ cache လုပ်သဖြင့် instance အသေးများတွင် အမြဲတမ်း နောက်ဆုံးပေါ်ဒေတာကို မြင်ရသည်။ |
| `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | NanoBanana ပုံထုတ်လုပ်ခြင်း job များအတွက် အများဆုံးစောင့်ဆိုင်းချိန်။ |
| `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | NanoBanana job ကို poll လုပ်သည့် အကြိမ်ရေ။ |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Adobe Firefly upscale တင်သွင်းမှုကို ပြန်လည်ကြိုးစားရာတွင် exponential backoff အတွက် အခြေခံနှောင့်နှေးချိန်။ |
| `AWS_REGION` | _(မသတ်မှတ်ထား)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | AWS Bedrock endpoint များ (Kiro၊ audio) တည်ဆောက်ရန် အသုံးပြုသည့် region။ |
| `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 အတွက် account ID။ |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/cloudflare-playground.ts` | Headless fingerprint စစ်ဆေးမှုက Playwright နှင့်အတူ ပါဝင်သော Chromium ကို ပိတ်ဆို့သည့်အခါ အသုံးပြုရန် Cloudflare AI Playground executor အတွက် desktop Chrome binary လမ်းကြောင်းအပြည့်အစုံ။ |
| `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) | `open-sse/executors/codebuddy/shared.ts` | CodeBuddy (CN နှင့် International) သို့ ပေးပို့သော caller system prompt များအတွက် ရွေးချယ်နိုင်သည့် အရှည်ကန့်သတ်ချက်။ မူလအားဖြင့် coding-agent identity marker ပါဝင်သော prompt ကိုသာ ဘက်မလိုက်သည့် prompt ဖြင့် အစားထိုးသည် (Tencent ၏ content filter က ယင်းတို့ကို ငြင်းပယ်သောကြောင့်ဖြစ်သည်)။ ရှည်လျားသော prompt များကို ဆက်လက်ထိန်းသိမ်းထားသည်။ 0 ထက်ကြီးသော integer သည် သတ်မှတ်ထားသည့် character အရေအတွက်ထက် ပိုရှည်သော system prompt မှန်သမျှကိုလည်း အစားထိုးသည်။ မသတ်မှတ်ထားခြင်း၊ `0` သို့မဟုတ် integer မဟုတ်သော တန်ဖိုးသည် ကန့်သတ်ချက်ကို ပိတ်သည်။ အစားထိုးမှုတစ်ခုစီတွင် မည်သည့် rule အလုပ်လုပ်ခဲ့သည်ကို (identity marker သို့မဟုတ် အရှည်) log မှတ်တမ်းတင်သည်။ |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Proxy-pool Workers relay deployer အသုံးပြုသော Cloudflare REST API base ကို အစားထိုးသတ်မှတ်ပါ (#4640 / 9router#1360)။ |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Proxy-pool "Deploy Relay" modal တွင် အကြံပြုထားသော မူလ worker project အမည်။ |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Proxy Pool tab မှ Cloudflare Workers relay ရွေးချယ်စရာကို ဖျောက်ရန် `false` ဟု သတ်မှတ်ပါ။ |
| `CLOUDFLARED_BIN` | အလိုအလျောက် ရှာဖွေသတ်မှတ်သည် | `src/lib/cloudflaredTunnel.ts` | `cloudflared` binary အတွက် စိတ်ကြိုက်လမ်းကြောင်း။ |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Tunnel ပို့ဆောင်ရေး protocol- `http2` (မူလသတ်မှတ်ချက်)၊ `quic` သို့မဟုတ် `auto`။ |
| `CLOUDFLARED_CONFIG` | _(မသတ်မှတ်ထား)_ | `src/lib/cloudflaredTunnel.ts` | စက်တွင်း၌ စီမံထားသော cloudflared `config.yml` (`tunnel:`၊ `credentials-file:`၊ `ingress:` ပါဝင်သော) သို့ လမ်းကြောင်း။ သတ်မှတ်ထားသည့်အခါ OmniRoute သည် ယာယီ quick tunnel အစား `tunnel --config run` (အမည်ပေးထားသော tunnel) ကို လုပ်ဆောင်သည်။ |
| `CLOUDFLARED_HOSTNAME` | _(config ingress မှ)_ | `src/lib/cloudflaredTunnel.ts` | `publicUrl`/`apiUrl` အဖြစ် အစီရင်ခံသော အမည်ပေးထားသည့် tunnel ၏ အများသုံး hostname (ဥပမာ `ai.example.com`) ကို အစားထိုးသတ်မှတ်ရန်။ မသတ်မှတ်ထားပါက config ၏ ပထမဆုံး `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 app အမည်။ |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Proxy Pool tab မှ Deno Deploy relay ရွေးချယ်စရာကို ဖျောက်ရန် `false` ဟု သတ်မှတ်ပါ။ |
| `SEARCH_CACHE_TTL_MS` | `300000` (၅ မိနစ်) | `open-sse/services/searchCache.ts` | Search API (Perplexity၊ Brave စသည်) တုံ့ပြန်မှု cache အတွက် TTL။ |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Claude Code သီးသန့် relay များအတွက် စမ်းသပ်ဆဲ 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` | ထည့်သွင်းမြှုပ်နှံထားသော service WebSocket proxy အတွက် bind host (မူလအားဖြင့် loopback သီးသန့်)။ |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | ထည့်သွင်းမြှုပ်နှံထားသော service WebSocket proxy server အတွက် port။ |
| `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI bridge host (အမွေဆက်ခံထားသော ပေါင်းစည်းမှု)။ |
| `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI bridge port။ |
| `CLIPROXYAPI_API_KEY` | _(အလွတ်)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | `cliproxyapi_api_key` setting မရှိသည့်အခါ အသုံးပြုမည့် data-plane key အရန်တန်ဖိုး။ |
| `CLIPROXYAPI_MANAGEMENT_KEY` | _(အလွတ်)_ | `src/lib/services/cliproxyAccountHealth.ts` | ပြင်ပမှ စီမံထားသော CLIProxyAPI instance မှ account-health အချက်အလက်များ ဖတ်ယူရန် management key။ |
| `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | CLIProxyAPI config directory။ |
| `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose က `cliproxyapi` sidecar ကို publish လုပ်ပေးသည့် host interface (#12578)။ ၎င်း၏ data volume တွင် provider OAuth/API အထောက်အထားများ ပါဝင်ပြီး pin လုပ်ထားသော image တွင် env-based data-plane `api-keys` override မရှိဘဲ mount လုပ်ထားသော `config.yaml` သာရှိသောကြောင့် `0.0.0.0` သည် အထောက်အထားများပါဝင်သည့် service ကို 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 ထည့်သွင်းဝန်ဆောင်မှု၏ bind/connect host (မူလသတ်မှတ်ချက်အရ loopback သာ)။ |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Dario ထည့်သွင်းဝန်ဆောင်မှု၏ port။ |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Dario ထည့်သွင်းဝန်ဆောင်မှု၏ bind/connect host (မူလသတ်မှတ်ချက်အရ loopback သာ)။ |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Dario ထည့်သွင်းဝန်ဆောင်မှု၏ port။ |
| `LOCAL_HOSTNAMES` | _(ဗလာ)_ | `open-sse/config/providerRegistry.ts` | "local" အဖြစ် သတ်မှတ်ယူမည့် ထပ်ဆောင်း hostname များကို ကော်မာဖြင့် ခွဲထားသောစာရင်း (Docker ဝန်ဆောင်မှုအမည်များ စသည်)။ |
`ENABLE_CC_COMPATIBLE_PROVIDER` သည် Claude Code client များကိုသာ
လက်ခံသည့် ပြင်ပအဖွဲ့အစည်း relay များအတွက်သာ ဖြစ်သည်။ ထို relay များက လက်ခံနိုင်စေရန် OmniRoute သည် request များကို ပြန်လည်ရေးသားပေးသည်။ သင်သည်
Claude Code CLI ကိုသာ အသုံးပြုလိုခြင်းဖြစ်ပါက သို့မဟုတ် ထို relay များက ဘာလဲဆိုသည်ကို မသေချာပါက၊ ဤရွေးချယ်မှုကို ပိတ်ထားပြီး ပုံမှန်
Anthropic-compatible provider တစ်ခုကို အစားထိုးထည့်သွင်းပါ။
---
## 21. Proxy ကျန်းမာရေးအခြေအနေ
| Variable | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | လျင်မြန်စွာ မအောင်မြင်ကြောင်း သတ်မှတ်သည့် ကျန်းမာရေးစစ်ဆေးမှု အချိန်ကုန်ဆုံးကာလ။ |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | latency အလိုက် အကောင်းဆုံးဖြစ်အောင် ပြုလုပ်ထားသည့် pool strategy တွင် ရွေးချယ်နိုင်သော proxy များ၏ ပျမ်းမျှ latency ကို တွက်ချက်ရန် အသုံးပြုသည့် အချိန်ကာလ (နာရီ)။ |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | ကျန်းမာရေးစစ်ဆေးမှုရလဒ် cache ၏ TTL။ |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | မအောင်မြင်သော proxy ကျန်းမာရေး probe များအတွက် cache TTL။ မြင့်မားသော concurrency အောက်တွင် ယာယီ proxy timeout များကို လျင်မြန်စွာ ပြန်လည်ကြိုးစားနိုင်စေရန်နှင့် အမှန်တကယ် အသုံးမပြုနိုင်တော့သော proxy များအတွက် fast-fail ကို မပိတ်မိစေရန် ဤတန်ဖိုးကို `PROXY_HEALTH_CACHE_TTL_MS` ထက် ပိုတိုအောင်ထားပါ။ |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | မှတ်ပုံတင်ထားသော proxy များကို အခါအားလျော်စွာ probe လုပ်သည့် နောက်ခံ proxy ကျန်းမာရေး scheduler ကို ပိတ်ရန် `false` ဟု သတ်မှတ်ပါ။ |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | နောက်ခံ ကျန်းမာရေး scheduler ၏ sweep interval ကို ms ဖြင့် သတ်မှတ်ခြင်း (အနည်းဆုံး `60000`)။ |
| `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | ငွေကောက်ခံသည့် serverless isolate ကို probe များက နှိုးပေးရသော edge-relay proxy များ (`deno`/`vercel`/`cloudflare`) အတွက် probe ပြုလုပ်သည့် ကြားကာလကို ms ဖြင့် သတ်မှတ်သည် (အနည်းဆုံး `60000`)။ |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | နောက်ခံ recovery-pass ကြားကာလကို ms ဖြင့် သတ်မှတ်သည်။ ယခင်က မကျန်းမာခဲ့သော proxy များကို မည်မျှကြာတိုင်း ပြန်လည် probe ပြုလုပ်မည်ကို သတ်မှတ်ခြင်းဖြင့် ပြန်လည်ကောင်းမွန်လာသော proxy ကို restart လုပ်စရာမလိုဘဲ rotation ထဲသို့ ပြန်ဝင်စေသည်။ `60000` အောက်ရှိ တန်ဖိုးများသည် ပုံသေတန်ဖိုးကို ပြန်လည်အသုံးပြုသည်။ |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | scheduler နှင့် `/api/settings/proxies/auto-test` endpoint တို့က အသုံးပြုသည့် ချိတ်ဆက်ရောက်ရှိနိုင်မှု probe ပစ်မှတ်။ အများသုံး ပုံသေတန်ဖိုးကို ရှောင်ရှားရန် internal/self-hosted URL တစ်ခုသို့ ညွှန်ပါ။ |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | batch တစ်ခုစီတွင် တစ်ပြိုင်နက် စတင်သည့် probe အရေအတွက်ဖြစ်ပြီး scheduler နှင့် `/api/settings/proxies/auto-test` endpoint တို့က မျှဝေအသုံးပြုသည်။ အနည်းဆုံး 1 အဖြစ် သတ်မှတ်ပြီး အများဆုံး 50 အထိ ကန့်သတ်ထားသည်။ |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | batch တစ်ခုအတွင်း probe နှစ်ခု ထွက်ခွာချိန်ကြား နှောင့်နှေးမှုကို ms ဖြင့် သတ်မှတ်သည်။ ၎င်းမရှိပါက batch တစ်ခုလုံးသည် တစ်ချိန်တည်း ထွက်ခွာမည်ဖြစ်ပြီး မျှဝေသုံးစွဲသည့် egress IP တစ်ခုကြောင့် rate limit သတ်မှတ်ထားသော ပစ်မှတ်ကို ထိခိုက်စေနိုင်သည်။ အချိန်ခြားမှုကို ပိတ်ရန် `0` ဟု သတ်မှတ်ပါ။ အများဆုံး 5000 အထိ ကန့်သတ်ထားသည်။ |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | proxy တစ်ခုအား သတ်မှတ်ပေးထားသည့် provider ၏ တကယ့် host ကို probe ပြုလုပ်ခြင်း (`GET /models`၊ API key မပါ) ရပ်တန့်ပြီး ၎င်းအစား `PROXY_HEALTH_TEST_URL` ကို အမြဲအသုံးပြုရန် "false" ဟု သတ်မှတ်ပါ။ |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | `false` (ပုံသေ) ဖြစ်သည့်အခါ အလိုအလျောက် ချိတ်ဆက်ရောက်ရှိနိုင်မှု probe များ (scheduler + `/api/settings/proxies/auto-test` ရှိ "Test All" ခလုတ်) သည် **ဖတ်ရန်သက်သက်** ဖြစ်ပြီး proxy ၏ status ကို မည်သည့်အခါမျှ မရေးပါ။ operator ကသာ active/inactive အဖြစ် သတ်မှတ်သောကြောင့် မတည်ငြိမ်သည့် probe တစ်ခုက သတ်မှတ်ထားသော proxy ကို အသုံးမပြုနိုင်အောင် မဖြစ်စေနိုင်ပါ (#6246)။ ယခင် test-and-set အပြုအမူကို ပြန်လည်အသုံးပြုရန် `true` ဟု သတ်မှတ်ပါ။ |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | ရွေးချယ်ဖွင့်နိုင်သော feature flag ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ကို ကြည့်ပါ။ dashboard DB override က ဦးစားပေးသည်)။ `true` (သို့မဟုတ် `1`, `yes`) သည် အကြောင်းအရာမပါသော 200 သို့မဟုတ် အကြောင်းအရာမပါသော 502 ကို ဖော်ပြမည့်အစား ပုံမှန် credential လမ်းကြောင်းမှတစ်ဆင့် ဘာသာပြန်ပြီး အလွတ်ဖြစ်နေသော streaming turn များကို (`STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` အကြိမ်အထိ) ပြန်လည်ကြိုးစားသည်။ |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | ရွေးချယ်ဖွင့်နိုင်သော feature flag ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ကို ကြည့်ပါ။ dashboard DB override က ဦးစားပေးသည်)။ `true` (သို့မဟုတ် `1`, `yes`) သည် dashboard ရှိ proxy pool တစ်ခုအောက်တွင် ဖတ်ရန်သက်သက်ဖြစ်သော pool egress လေ့လာမှုကို ပြသသည် (proxy log မှ နောက်ဆုံး 24 h အတွင်း မတူညီသော egress IP များ၊ ချိတ်ဆက်မှုများနှင့် IP တစ်ခု၏ နောက်ကွယ်တွင် အများဆုံးတွေ့ရသည့် အရေအတွက်)။ routing အတွက် မည်သည့်အခါမျှ အသုံးမပြုပါ။ |
| `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | ရွေးချယ်ဖွင့်နိုင်သော feature flag ဖြစ်သည် ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ကို ကြည့်ပါ၊ dashboard DB override က ဦးစားပေးသည်)။ `true` (သို့မဟုတ် `1`, `yes`) ဖြစ်ပါက operator က ပေးပို့သော ရက်စွဲပါ observed address များကို pool member တစ်ခုချင်းစီအလိုက် လက်ခံပြီး ပြသမှုနှင့် pool အစီအစဉ်အတွက် journal read နှင့် ပေါင်းစည်းသည်။ |
| `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Operator က ပေးပို့သော egress row များအတွက် နာရီဖြင့်သတ်မှတ်သည့် observation window ဖြစ်သည် (read ပြုလုပ်တိုင်း ဖတ်ရှုသည်၊ restart လုပ်ရန် မလိုပါ)။ `1..168` အတွင်း ကန့်သတ်ထားပြီး အပိုင်းအခြားပြင်ပဖြစ်ခြင်း၊ ကိန်းဂဏန်းမဟုတ်ခြင်း သို့မဟုတ် ဗလာဖြစ်ခြင်းတို့တွင် exception ပစ်မည့်အစား process တစ်ခုလုံးအတွက် warning တစ်ကြိမ်သာ ထုတ်ပြီး 24 ကို ပြန်လည်အသုံးပြုသည်။ |
| `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | အကြိမ်ကြိမ် ဆက်တိုက်မအောင်မြင်ပြီးနောက် scheduler က proxy များကို အလိုအလျောက်ဖယ်ရှားစေရန် `true` ဟု သတ်မှတ်ပါ။ |
| `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Scheduler က proxy တစ်ခုကို အလိုအလျောက်မဖယ်ရှားမီ ဆက်တိုက်မအောင်မြင်ရမည့် အကြိမ်အရေအတွက် (`PROXY_AUTO_REMOVE=true` ဖြစ်သည့်အခါ)။ |
| `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | အကြိမ်ကြိမ် ဆက်တိုက်မအောင်မြင်ပြီးနောက် proxy ကို ဖယ်ရှားမည့်အစား scheduler က soft-disable (status သည် `dead` ဖြစ်ပြီး မည်သည့်အခါမျှ ဖျက်ပစ်မည်မဟုတ်) ပြုလုပ်စေရန် `true` ဟု သတ်မှတ်ပါ။ `PROXY_AUTO_REMOVE` အတွက် ဖျက်ဆီးမှုမရှိသော အစားထိုးနည်းလမ်းဖြစ်သည်။ Proxy သည် pool/rotation resolution မှ ချက်ချင်းဖယ်ထွက်သွားမည် (scope-pool resolution က အသုံးပြုသည့် alive-status filter က ၎င်းကို ဖယ်ထုတ်ထားပြီးဖြစ်သည်) ဖြစ်ပြီး probe များကို ပြန်လည်အောင်မြင်သည်နှင့် အလိုအလျောက် ပြန်လည်အသက်သွင်းပေးသည်။ `PROXY_AUTO_REMOVE_AFTER` threshold ကို မျှဝေအသုံးပြုသည်။ Flag နှစ်ခုလုံး `true` ဖြစ်ပါက `PROXY_AUTO_REMOVE` က ဦးစားပေးသည်။ |
| `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | ရွေးချယ်ဖွင့်နိုင်သော passive skip ဖြစ်သည်။ `true` ဖြစ်သည့်အခါ မကြာသေးမီက production traffic က endpoint တစ်ခု အလုပ်လုပ်ကြောင်း သက်သေပြပြီးဖြစ်ပါက scheduler သည် ထို endpoint အတွက် live probe ကို ကျော်သွားသည် (window အတွင်း အနည်းဆုံး အောင်မြင်မှုတစ်ကြိမ်ရှိပြီး proxy ကြောင့်ဖြစ်သည်ဟု သတ်မှတ်ထားသော failure မရှိခြင်း၊ provider တစ်ခုတည်းကိုသာ တွေ့ရှိထားခြင်း)။ မူလအားဖြင့် ပိတ်ထားပြီး proxy တိုင်းကို probe ပြုလုပ်သည်။ |
| `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Passive skip က စစ်ဆေးသည့် production traffic ၏ window ကို ms ဖြင့် သတ်မှတ်သည် (`60000..599999` အတွင်း ကန့်သတ်ထားသည်)။ 10-minute sweep interval ထက် ပိုတိုသောကြောင့် မကြာသေးမီက failure တစ်ခုသည် ရောနှော၍ အားလျော့သွားခြင်းမရှိဘဲ အဓိကသက်ရောက်မှုရှိသည်။ |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Proxy ချိတ်ဆက်နိုင်မှု pre-check များ မအောင်မြင်သည့်အခါ OAuth နှင့် provider validation flow များကို pinned proxy အား ကျော်လွှား၍ တိုက်ရိုက်ချိတ်ဆက်ခွင့်ပြုသည်။ အမှန်တကယ်သက်ရောက်သော ဦးစားပေးအစီအစဉ်မှာ Feature Flags DB override > env var > default ဖြစ်သည်။ |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30s) | `src/lib/resilience/settings.ts` | မူလ **queue-wait** အချိန်ဘတ်ဂျက်- request တစ်ခုသည် provider slot တစ်ခုရရှိရန်နှင့် ပယ်ချခံရခြင်းမတိုင်မီ queue ထဲတွင် မည်မျှကြာအောင် စောင့်ဆိုင်းနိုင်သည်ကို သတ်မှတ်ပြီး၊ ပယ်ချခံရပါက upstream သို့ လုံးဝမရောက်ရှိပါ။ 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` | လက်ခံထားသော request တစ်ခု၏ rate-limit reservation သက်တမ်းမကုန်မီ execution အတွင်း အများဆုံးနေနိုင်သည့် အချိန်ကန့်သတ်ချက် — incremental မဟုတ်သော gateway များတွင် နှေးကွေးသော fetch စတင်မှုကြောင့် timeout မဖြစ်စေရန် queue-wait ဘတ်ဂျက်နှင့် သီးခြားခွဲထားသည် (#12027)။ |
| `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (ပိတ်ထားသည်) | `open-sse/services/rateLimitManager.ts` | Queue လက်ခံမှုကန့်သတ်ချက်- ဤအရေအတွက်မျှသော request များ queue ထဲတွင် ရှိနှင့်ပြီးပါက 429 `queue_full` ဖြင့် ပယ်ချသည်။ `0` = အကန့်အသတ်မရှိ (မူလတန်ဖိုး)။ |
| `RATE_LIMIT_AUTO_ENABLE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/rateLimitManager.ts` | သိမ်းဆည်းထားသော Dashboard setting ကို မစဉ်းစားဘဲ အလိုအလျောက်ဖွင့်သည့် rate limit လုံခြုံရေးကွန်ရက်ကို မဖြစ်မနေ ဖွင့်/ပိတ်စေသည်။ မဖြစ်မနေဖွင့်ရန် `true`/`1`/`on`၊ မဖြစ်မနေပိတ်ရန် `false`/`0`/`off` ကို လက်ခံသည်။ |
| `PROVIDER_COOLDOWN_ENABLED` | _(မသတ်မှတ်ထား → ပိတ်)_ | `open-sse/services/providerCooldownTracker.ts` | Request များအကြား အကျုံးဝင်သော global provider/connection cooldown ခြေရာခံမှုကို စိတ်ကြိုက်ဖွင့်နိုင်စေသည်။ မူလအားဖြင့် ပိတ်ထားသည် (Connection Cooldown / Provider Circuit Breaker နှင့် ထပ်နေသည်)။ ဖွင့်ရန် `true`/`1`/`on` ကို လက်ခံသည်။ |
| `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | မအောင်မြင်သော provider/connection တစ်ခုကို ပြန်လည်ကြိုးစားခြင်းမပြုမီ အနည်းဆုံး cooldown (ms)။ ဆက်တိုက်မအောင်မြင်မှုများအလိုက် exponential ပုံစံဖြင့် တိုးမြှင့်သည်။ `PROVIDER_COOLDOWN_ENABLED` ဖွင့်ထားချိန်တွင်သာ အသုံးပြုသည်။ |
| `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 မိနစ်) | `open-sse/services/providerCooldownTracker.ts` | မအောင်မြင်သော provider/connection တစ်ခုကို မည်သို့ပင်ဖြစ်စေ ပြန်လည်ကြိုးစားခြင်းမပြုမီ အများဆုံး cooldown (ms) ကန့်သတ်ချက်။ `PROVIDER_COOLDOWN_ENABLED` ဖွင့်ထားချိန်တွင်သာ အသုံးပြုသည်။ |
| `STREAM_RECOVERY_ENABLED` | _(မသတ်မှတ်ထား → ပိတ်)_ | `src/lib/resilience/settings.ts` (ကနဦးတန်ဖိုး) → `open-sse/services/streamRecovery.ts` (လုပ်ဆောင်ချက်) | **အကြောင်းအရာ:** ပြတ်တောက်သွားသော upstream stream များကို ပွင့်လင်းမြင်သာစွာ ပြန်လည်ရယူခြင်း (free-claude-code port)။ _pre-commit_ ပြတ်တောက်မှု — client ထံ byte တစ်ခုမျှ မရောက်မီ ဖြစ်ပေါ်သော ပြတ်တောက်မှု — ကို ပြန်ဖွင့်ပြီး မမြင်သာစွာ ပြန်လည်ကြိုးစားနိုင်ရန် စတင်ဖွင့်လှစ်သည့် SSE window ကို `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) အထိ ထိန်းထားသည်။ **ဖွင့်သင့်သည့်အချိန်:** stream စတင်ချိန်တွင် 0-byte ဖြင့် မကြာခဏ ပြတ်တောက်တတ်သော မတည်ငြိမ်သည့် upstream များအတွက် ဖွင့်ပါ။ Stream တိုင်းတွင် ပထမဆုံး token ရရှိချိန်အထိ အပို 750 ms ထပ်တိုးခြင်းကို လက်မခံနိုင်ပါက ပိတ်ထားပါ။ `true`/`1`/`on` ကို လက်ခံသည်။ သိမ်းဆည်းထားသော Resilience setting ၏ ကနဦးတန်ဖိုးကို သတ်မှတ်ပေးပြီး၊ Dashboard setting သတ်မှတ်ပြီးသည်နှင့် ၎င်းက ဦးစားပေးသည်။ |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(မသတ်မှတ်ထား → ပိတ်)_ | `src/lib/resilience/settings.ts` (မူလတန်ဖိုး) → `open-sse/services/streamRecovery.ts` (လုပ်ဆောင်ချက်) | **ဘာလဲ:** stream အလယ်ပိုင်း ဆက်လက်လုပ်ဆောင်ခြင်း (အဆင့် 4.4) — _post-commit_ ဖြတ်တောက်မှုတစ်ခု (bytes များသည် client ထံ ရောက်ရှိပြီးဖြစ်သည်) ဖြစ်ပေါ်ပြီးနောက်၊ တစ်စိတ်တစ်ပိုင်းစာသားကို assistant prefill အဖြစ် အသုံးပြု၍ ထပ်မံတောင်းဆိုပြီး ပျောက်ဆုံးနေသော suffix ကို ဆက်စပ်ပေါင်းစည်းသည်။ ရိုးရိုးစာသား OpenAI-compatible streams များအတွက်သာ ဖြစ်ပြီး tool call တစ်ခု လုပ်ဆောင်နေစဉ် မည်သည့်အခါမျှ အလုပ်မလုပ်ပါ။ **မည်သည့်အချိန်တွင် ဖွင့်သင့်သလဲ:** အဖြေထုတ်လုပ်နေစဉ် အလယ်တွင် ဖြတ်တောက်ခံရသော ရှည်လျားသည့် generations များအတွက်နှင့် ပြန်လည်ရယူထားသော နောက်ပိုင်းအပိုင်းသည် token တစ်ခုချင်းစီအစား တစ်ကြိမ်တည်း အစုလိုက်ရောက်ရှိလာခြင်းကို လက်ခံနိုင်သည့်အခါ။ `STREAM_RECOVERY_ENABLED` နှင့် သီးခြားဖြစ်သည် (အန္တရာယ်ပုံစံ မတူညီပါ)။ `true`/`1`/`on` ကို လက်ခံသည်။ |
| `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(မသတ်မှတ်ထား → ပိတ်)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | ရွေးချယ်ဖွင့်နိုင်သော active-stream အကျိုးရှိသည့် output စောင့်ကြည့်စနစ်။ chunks များကို ဆက်လက်ပို့နေသော်လည်း သတ်မှတ်ထားသော assistant-output နှုန်းထက် နိမ့်နေသည့် streams များကို ရှာဖွေသိရှိသည်။ heartbeats၊ usage events၊ empty deltas နှင့် tool/reasoning အဆင့်များကို တိုးတက်မှုအဖြစ် မှားယွင်းသတ်မှတ်ခြင်း မပြုပါ။ idle နှင့် hard-deadline timeouts များမှ သီးခြားဖြစ်သည်။ |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | throughput အကဲဖြတ်မှု မစတင်မီ ခွင့်ပြုကာလဖြစ်ပြီး 0–600000 ms အတွင်း ကန့်သတ်ထားသည်။ |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | အကျိုးရှိသည့် output အတွက် ရွေ့လျား window ဖြစ်ပြီး 1000–600000 ms အတွင်း ကန့်သတ်ထားသည်။ abort မလုပ်မီ window အပြည့်တစ်ခု လိုအပ်သည်။ |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | အနည်းဆုံး UTF-8 assistant-output byte နှုန်း (သတိထားခန့်မှန်းသော token proxy) ဖြစ်ပြီး 1–1000000 အတွင်း ကန့်သတ်ထားသည်။ |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | တိုင်းတာနိုင်သည်ဟု ယူဆသော သုညမဟုတ်သည့် အကျိုးရှိသော output sample ၏ အနည်းဆုံးပမာဏဖြစ်ပြီး 1–1000000 bytes အတွင်း ကန့်သတ်ထားသည်။ |
| `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | စတင်ချိန်တွင် provider token healthchecks များအကြား ခွဲခြားထားသော ကြားကာလ (ms)။ |
| `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | တစ်ပြိုင်နက် အစုလိုက်ဖြစ်ပေါ်ခြင်းကို တားဆီးရန် provider token healthchecks များအကြား `HEALTHCHECK_STAGGER_MS` အပေါ် ထပ်ပေါင်းထည့်သည့် အနည်းဆုံး ကျပန်း jitter (ms) (Issue #1220)။ |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | တစ်ပြိုင်နက် အစုလိုက်ဖြစ်ပေါ်ခြင်းကို တားဆီးရန် provider token healthchecks များအကြား `HEALTHCHECK_STAGGER_MS` အပေါ် ထပ်ပေါင်းထည့်သည့် အများဆုံး ကျပန်း jitter (ms) (Issue #1220)။ |
| `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | စတင်ချိန် token-healthcheck sweep အတွက် တစ်ပြိုင်နက် စစ်ဆေးသည့် batch အရွယ်အစား။ တန်ဖိုးကြီးလေလေ connections များကို အပြိုင်ပိုမိုစစ်ဆေးပြီး၊ တန်ဖိုးငယ်လေလေ အစုလိုက်ဝန်အားကို လျှော့ချပေးသည် (Issue #7875၊ #7719 ၏ regression)။ |
| `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | client ထံ error ပြန်မပို့မီ model-scoped cooldown responses များအတွက် အလိုအလျောက် ပြန်လည်ကြိုးစားသည့် အကြိမ်အရေအတွက်။ |
| `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | cooldown ပြန်လည်ကြိုးစားမှုများအကြား အများဆုံး backoff ကြားကာလ (စက္ကန့်)။ အထက်ပိုင်း `Retry-After` တန်ဖိုး မည်သို့ပင်ဖြစ်စေ ဤတန်ဖိုးဖြင့် အများဆုံးကန့်သတ်ထားသည်။ |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | Headroom တိုကင်ချွေတာရေး proxy URL။ dashboard lifecycle (`api/headroom/*`) သည် မူလသတ်မှတ်ချက်အရ loopback ပေါ်တွင် local `headroom-ai` CLI တစ်ခုကို စတင်ပေးသည်။ ပြင်ပ Docker sidecar proxy တစ်ခုကို ညွှန်ပြလိုသည့်အခါမှသာ override လုပ်ပါ။ |
### Stream ပြန်လည်ရယူခြင်း ချိန်ညှိမှု ကိန်းသေများ
ပြန်လည်ရယူခြင်း holdback လုပ်ဆောင်ပုံကို
`open-sse/config/constants.ts` (`STREAM_RECOVERY`) ရှိ hardcoded ကိန်းသေများဖြင့် ချိန်ညှိထားသည်။ ကိုးကားရန်အတွက် ဤနေရာတွင် ဖော်ပြထားသည် —
၎င်းတို့ကို ပြောင်းလဲရန် env var မဟုတ်ဘဲ code ကို ပြင်ဆင်ရန် လိုအပ်သည်-
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — အစပိုင်း SSE window ကို ထိန်းထားသည့် ကြာချိန်ဖြစ်ပြီး
client ထံ byte တစ်ခုခု မပို့မီ စောစီးစွာ ပြတ်တောက်မှု ဖြစ်ပေါ်ပါက ပြန်လည်ကြိုးစားနိုင်စေသည်။
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — ထိန်းထားသော window အတွက် အမြင့်ဆုံး ကန့်သတ်ချက်ဖြစ်သည်။ timer ကို မည်သို့ပင် သတ်မှတ်ထားစေကာမူ
ဤမျှသော bytes စုဆောင်းမိသည်နှင့် ချက်ချင်း commit
(flush + passthrough) လုပ်သည်။
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — holdback ကို commit မလုပ်ရသေးစဉ်
အထက်ပိုင်း stream ကို ပွင့်လင်းမြင်သာစွာ ပြန်ဖွင့်နိုင်သည့် အများဆုံးအကြိမ်ရေ။
> **Provider တစ်ခုချင်းစီအလိုက် sliding-window rate limit (env var မရှိ):** FCC မှ port လုပ်ထားသော
> provider တစ်ခုချင်းစီအလိုက် sliding-window rate-limit _fallback_ သည် code ထဲတွင် ရှိသည်
> (`open-sse/services/providerDefaultRateLimit.ts`၊
> `open-sse/services/rateLimitManager.ts` မှတစ်ဆင့် ချိတ်ဆက်ထားသည်)၊ သို့သော် **default map အလွတ်** ဖြင့် ထုတ်ပေးထားပြီး
> လက်ရှိတွင် **operator env var မရှိပါ** — test hook /
> code ပြင်ဆင်မှုမှတစ်ဆင့်သာ ဖွင့်နိုင်သည်။ ၎င်းကို အထက်ပါဇယားတွင် ရည်ရွယ်ချက်ရှိရှိ ထည့်သွင်းမထားပါ။ ထိန်းချုပ်မှု knob ရှိသည့် per-`(token, IP)`
> relay limiter မှာ `RELAY_IP_PER_MINUTE` (§3 Network & Ports) ဖြစ်သည်။
---
## 22. အမှားရှာဖွေခြင်း
> [!CAUTION]
> ဤ variable များသည် **အသေးစိတ် output** ကို ထုတ်ပေးပြီး အရေးကြီးသော data များ ပေါက်ကြားစေနိုင်သည်။ **Production တွင် မည်သည့်အခါမျှ ဖွင့်မထားပါနှင့်။**
| Variable | ပုံသေတန်ဖိုး | Source File | ဖော်ပြချက် |
| ------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CURSOR_DEBUG` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/cursor.ts` | အသေးစိတ် Cursor executor log များ (decode လုပ်ထားသော SSE chunk များ စသည်) ကို ဖွင့်ရန် `1` ဟု သတ်မှတ်ပါ။ |
| `CURSOR_STREAM_DEBUG` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/cursor.ts` | `CURSOR_DEBUG` ၏ နောက်ပြန်သဟဇာတဖြစ်သော alias ဖြစ်သည်။ |
| `CURSOR_DUMP_FILE` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/cursor.ts` | `CURSOR_DEBUG=1` ဖြစ်ချိန်တွင် decode လုပ်ထားသော Cursor chunk အကြမ်းများကို လက်ခံသိမ်းဆည်းမည့် ရွေးချယ်နိုင်သော file path ဖြစ်သည်။ |
| `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Cursor executor အတွက် stream အားလပ်နေချိန် timeout (ms) ဖြစ်သည်။ |
| `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Byte များ buffer ထဲတွင် ကျန်ရှိနေချိန် composer kv_after_text soft terminator ပြီးနောက် စောင့်ပေးသည့်ကာလ (ms) — နောက်ဆုံးမှ ရောက်လာသော exec_mcp tool call ကို ၎င်း၏ frame ပြီးဆုံးစေရန် အချိန်ပေးသည်။ |
| `CURSOR_TOOL_DIRECTIVE` | ဖွင့်ထားသည် (`!== "0"`) | `open-sse/executors/cursor.ts` | composer-2.5 က tool call များကို ယုံကြည်စိတ်ချစွာ ပြုလုပ်စေသည့် tool-commit directive ဖြစ်သည်။ ပိတ်ရန် `0` ဟု သတ်မှတ်ပါ။ |
| `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(မသတ်မှတ်ထား)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | ဘာသာပြန်ပြီးနောက် system message ထဲသို့ ထည့်ပေါင်းသည့် operator သတ်မှတ်ထားသော system prompt စာသား (post-translation injection) ဖြစ်ပြီး codex/Responses နှင့် `/v1/messages` path များသို့ ရောက်ရှိသည်။ ထပ်မံဖော်ပြလာသော system preamble block များမှ ဖယ်ရှားမည့် directive prefix အဖြစ်လည်း အသုံးပြုသည်။ ပိတ်ထားရန် မသတ်မှတ်ဘဲ ထားပါ။ |
| `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (ပိတ်ထားသည်) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | openai→claude stream ၏ အစမှ ထပ်မံဖော်ပြလာသော system-prompt preamble block များကို ဖယ်ရှားရန် `1` ဟု သတ်မှတ်ပါ။ ပုံသေအားဖြင့် ပိတ်ထားသည် — heuristic များသည် အင်္ဂလိပ်စကားပြေ ပုံစံအပေါ် အခြေခံထားပြီး response payload ကို ပြောင်းလဲသောကြောင့် ထိုသို့သော section ဖြင့် အမှန်တကယ် စတင်သည့် reply သည် ၎င်းကို ဆုံးရှုံးသွားမည်ဖြစ်သည်။ |
| `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | အဝေးရှိ `image_url` vision input အတွက် ပုံတစ်ပုံချင်းစီ၏ fetch timeout (ms) ဖြစ်သည်။ |
| `CURSOR_STATE_DB_PATH` | _(စစ်ဆေးရှာဖွေသည်)_ | `open-sse/utils/cursorVersionDetector.ts` | IDE version ရှာဖွေသတ်မှတ်ရန် အသုံးပြုသော Cursor IDE state DB ရှာဖွေမှုကို အစားထိုးသတ်မှတ်သည်။ |
| `CURSOR_AGENT_CLI_VERSION` | _(ရှာဖွေ / သတ်မှတ်ထား)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Agent Run ပေါ်ရှိ `x-cursor-client-version: cli-…` အတွက် Agent CLI build id (`YYYY.MM.DD-`) ဖြစ်သည်။ |
| `CURSOR_AGENT_BIN` | _(မသတ်မှတ်ထား)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | ပုံဖန်တီးရန် အသုံးပြုသော Cursor Agent binary ၏ path ဖြစ်သည်။ မသတ်မှတ်ထားပါက handler သည် `providerSpecificData.agentBin` ကို အသုံးပြုပြီးနောက် PATH ကို အသုံးပြုသည်။ |
| `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Cursor Agent ပုံလုပ်ငန်းများအတွက် ပုံတစ်ပုံချင်းစီ၏ wall clock အချိန် (ms) ဖြစ်သည်။ |
| `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Cursor ပုံလုပ်ငန်းများအတွက် မျှဝေထားသော seat ၏ တစ်ပြိုင်နက်လုပ်ဆောင်မှု ကန့်သတ်ချက် ဖြစ်သည်။ |
| `CURSOR_IMG_MODEL` | request / `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) ပုံဖန်တီးမှု ရလဒ်ကို poll လုပ်သည့် အကြိမ်နှုန်း (ms) ဖြစ်သည်။ |
| `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | UC ပုံဖန်တီးမှု ရလဒ်ကို poll လုပ်ရန် wall clock အချိန် (ms) ဖြစ်သည်။ |
| `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | UC (uncensored.com) ဗီဒီယိုဖန်တီးမှု ရလဒ်ကို poll လုပ်သည့် အကြိမ်နှုန်း (ms) ဖြစ်သည်။ |
| `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | UC ဗီဒီယိုဖန်တီးမှု ရလဒ်ကို poll လုပ်ရန် wall clock အချိန် (ms) ဖြစ်သည်။ |
| `CURSOR_DATA_DIR` | _(စစ်ဆေးရှာဖွေသည်)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Cursor Agent CLI data dir (`…/versions/`) ကို အစားထိုးသတ်မှတ်သည်။ တရားဝင် agent အသုံးပြုသော var နှင့် တူညီသည်။ |
| `CURSOR_TOKEN` | _(မသတ်မှတ်ထား)_ | `scripts/ad-hoc/cursor-tap.cjs` | Developer tooling က အသုံးပြုသော တိုက်ရိုက် Cursor bearer token ဖြစ်သည်။ |
| `OMNIROUTE_LOG_REQUEST_SHAPE` | ပိတ်ထားသည် (`"1"` ဖြင့် ရွေးချယ်ဖွင့်နိုင်) | `src/app/api/v1/chat/completions/route.ts` | `"1"` ဟု သတ်မှတ်ထားချိန်တွင် ကြီးမားသော chat payload များအတွက် content-type/length marker များကို log ရေးသည်။ Log ဆူညံမှုကို လျှော့ချရန် ပုံသေအားဖြင့် ပိတ်ထားသည်။ |
| `DEBUG_RESPONSES_SSE_TO_JSON` | _(မသတ်မှတ်ထား)_ | `open-sse/handlers/responseTranslator.ts` | Responses API SSE→JSON ဘာသာပြန်မှု အသေးစိတ်များကို log ရေးရန် `true` ဟု သတ်မှတ်ပါ။ |
| `DEBUG_CLAUDE_NONSTREAM` | _(မသတ်မှတ်ထား)_ | `open-sse/handlers/responseTranslator.ts` | Claude response ဘာသာပြန်လမ်းကြောင်းတွင် အလွတ် textContent chunk များကို ဖော်ထုတ်ပြသရန် `true` ဟု သတ်မှတ်ပါ (debug အတွက်သာ)။ |
| `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(မသတ်မှတ်ထား)_ | E2E စမ်းသပ်မှု harness | E2E စမ်းသပ်မှု mode (ဖြေလျှော့ထားသော auth၊ test hook များ) ကို ဖွင့်ရန် `true` ဟု သတ်မှတ်ပါ။ |
---
## 23. GitHub ပေါင်းစပ်မှု
အသုံးပြုသူများအား Dashboard မှတစ်ဆင့် ပြဿနာများကို တိုက်ရိုက်တင်ပြနိုင်စေသည်။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| --------------------- | --------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GITHUB_ISSUES_REPO` | _(သတ်မှတ်မထား)_ | `src/app/api/v1/issues/report/route.ts` | `owner/repo` ဖော်မတ်ဖြင့် ရေးထားသော repository။ |
| `GITHUB_ISSUES_TOKEN` | _(သတ်မှတ်မထား)_ | `src/app/api/v1/issues/report/route.ts` | `issues:write` scope ပါရှိသည့် GitHub Personal Access Token။ |
| `GITHUB_TOKEN` | _(သတ်မှတ်မထား)_ | ပြဿနာအမျိုးအစားခွဲခြားခြင်း / cloud agent အကူကိရိယာများ | `GITHUB_ISSUES_TOKEN` အတွက် အရန်အဖြစ် အသုံးပြုပြီး `src/lib/cloudAgent/*` ရှိ cloud agent အကူကိရိယာများက အသုံးပြုသည့် ယေဘုယျ GitHub access token။ |
---
## ဖြန့်ကျက်အသုံးပြုမှု အခြေအနေများ
Relay backend SRE လမ်းညွှန်ချက် (`ts`/`bifrost`/`auto` အပြုအမူ၊ `9router` နှင့် `CLIProxyAPI` ထားရှိမှု၊ မြင့်မားသော တောင်းဆိုမှုနှုန်းအတွက် fallback မဟာဗျူဟာ) ကို [Relay Backend Strategy](/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 (`nginx` + `Cloudflare`) ပါသော VPS
```bash
JWT_SECRET=
API_KEY_SECRET=
STORAGE_ENCRYPTION_KEY=
PORT=20128
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
NEXT_PUBLIC_BASE_URL=https://omniroute.example.com
BASE_URL=http://127.0.0.1:20128
CORS_ORIGIN=https://omniroute.example.com
ENABLE_TLS_FINGERPRINT=true
CLI_COMPAT_ALL=1
```
---
## 24. Skills Sandbox (v3.8.0+)
Skills framework (`src/lib/skills/`) က အသုံးပြုသူသတ်မှတ်ထားသော အလိုအလျောက်လုပ်ဆောင်မှုများကို sandbox ပတ်ဝန်းကျင်တစ်ခုအတွင်း လုပ်ဆောင်သည့်အခါ အသုံးပြုသော ကန့်သတ်ချက်များနှင့် လုံခြုံရေးထိန်းချုပ်မှုများ။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| --------------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 စက္ကန့်) | `src/lib/skills/builtins.ts` | sandbox အတွင်းရှိ skill code တစ်ကြိမ်လုပ်ဆောင်မှုတိုင်းအတွက် wall-clock အချိန်ကန့်သတ်ချက်။ အမြင့်ဆုံးကန့်သတ်ချက်ဖြစ်ပြီး ယင်းထက်ကြာလျှင် ရပ်တန့်ပစ်မည်။ |
| `SKILLS_EXECUTION_TIMEOUT_MS` | _(`SKILLS_SANDBOX_TIMEOUT_MS` ကို အရန်အဖြစ် အသုံးပြုသည်)_ | `src/lib/skills/` | အဆင့်မြင့် skill စီမံလုပ်ဆောင်မှုအတွက် အချိန်ကန့်သတ်ချက်။ အဆင့်များစွာပါဝင်သော workflow များကို ခွင့်ပြုရန် `SKILLS_SANDBOX_TIMEOUT_MS` ထက် မြင့်မားစွာ သတ်မှတ်ပါ။ |
| `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | sandbox ဖိုင်တစ်ဖိုင်မှ skill တစ်ခု ဖတ်ရှုနိုင်သည့် အများဆုံး byte ပမာဏ။ |
| `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | skill တစ်ခုအတွင်း HTTP response တစ်ခုချင်းစီမှ မှတ်တမ်းတင်နိုင်သည့် အများဆုံး byte ပမာဏ။ |
| `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | sandbox ခေါ်ယူလုပ်ဆောင်မှုတစ်ခုမှ ပြန်ပေးသည့် stdout/stderr စာလုံးအရေအတွက်အတွက် အမြင့်ဆုံးကန့်သတ်ချက်။ |
| `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | sandbox အတွင်းမှ ပြင်ပကွန်ရက်သို့ ချိတ်ဆက်မှုကို ခွင့်ပြုရန် `1`/`true` ဟု သတ်မှတ်ပါ။ လုံခြုံရေးအတွက် ပုံသေအားဖြင့် **သီးခြားခွဲထားသည်**။ |
| `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(ဗလာ)_ | `src/lib/skills/builtins.ts` | sandbox လုပ်ဆောင်မှုအတွက် ခွင့်ပြုထားသော container image များကို ကော်မာဖြင့် ပိုင်းခြားထားသည့် allowlist။ ဗလာဖြစ်ပါက built-in ပုံသေတန်ဖိုးကိုသာ အသုံးပြုသည်။ |
| `SKILLS_SANDBOX_DOCKER_IMAGE` | _(built-in ပုံသေတန်ဖိုး)_ | `src/lib/skills/` | Docker အခြေပြု sandbox တစ်ခု စတင်သည့်အခါ အသုံးပြုသော container image။ စိတ်ကြိုက်လုံခြုံရေးမြှင့်တင်ထားသည့် base image ကို သတ်မှတ်ရန် override လုပ်ပါ။ |
| `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | skill sandboxing အတွက် container runtime: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`။ `auto` သည် host OS တစ်ခုချင်းစီတွင် ထည့်သွင်းထားသည့် အကောင်းဆုံး runtime ကို ရွေးချယ်သည် (macOS တွင် Apple Container/OrbStack၊ Windows တွင် WSL Container၊ Linux တွင် Podman)၊ မရရှိပါက Docker ကို အရန်အဖြစ် အသုံးပြုသည်။ |
> [!CAUTION]
> `SKILLS_SANDBOX_NETWORK_ENABLED=true` ကို ဖွင့်ထားခြင်းသည် မည်သည့် skill code မှမဆို ပြင်ပသို့ ထွက်ခွာချိတ်ဆက်နိုင်သည့် လမ်းကြောင်းတစ်ခုကို ဖွင့်ပေးသည်။ မျှဝေအသုံးပြုသည့် deployment များတွင် `OUTBOUND_SSRF_GUARD_ENABLED=true`၊ တင်းကျပ်သော `CORS_ORIGIN`/proxy မူဝါဒတို့နှင့် တွဲဖက်အသုံးပြုပါ။
---
## 25. Provider ခွဲတမ်းများ၊ Tunnels၊ Backups နှင့် အထွေထွေ Runtime
Provider ခွဲတမ်းဆိုင်ရာ endpoints များ၊ network tunnels များ (Tailscale၊ Ngrok၊ MITM debug proxy)၊ 1Proxy egress pool၊ database backups များနှင့် executor layer သို့မဟုတ် scripts များက ကိုးကားအသုံးပြုသည့် feature တစ်ခုချင်းစီအလိုက် အသေးစား overrides များ။
| ကိန်းရှင် | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | နှုန်းကန့်သတ်စနစ် backend အတွက် Redis ချိတ်ဆက်မှုစာကြောင်း။ |
| `ALIBABA_CODING_PLAN_HOST` | _(ထုတ်လုပ်မှုပတ်ဝန်းကျင် host)_ | `open-sse/services/bailianQuotaFetcher.ts` | Alibaba Bailian coding-plan quota များကို ရယူရာတွင် အသုံးပြုသည့် host ကို အစားထိုးသတ်မှတ်ရန်။ |
| `ALIBABA_CODING_PLAN_QUOTA_URL` | host မှ ဆင်းသက်သတ်မှတ်သည် | `open-sse/services/bailianQuotaFetcher.ts` | Alibaba Bailian အတွက် quota URL အပြည့်အစုံကို အစားထိုးသတ်မှတ်ရန်။ |
| `QWEN_CLOUD_COOKIE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Qwen Cloud / Model Studio ကိုယ်ပိုင် Token Plan quota gateway အတွက် console session cookie (inference API key ဖြင့် ၎င်းကို ဖတ်၍မရပါ)။ `login_qwencloud_ticket` ပါဝင်သည့် `Cookie` request header တစ်ခုလုံးကို home.qwencloud.com › Billing › Subscription (F12 › Network) ရှိ `cs-data.qwencloud.com` သို့ ပြုလုပ်သော မည်သည့် `api.json` ခေါ်ဆိုမှုမှမဆို ကူးယူပါ။ အထိခိုက်မခံသင့်သော အချက်အလက်ဖြစ်ပြီး session အလိုက်သာ သက်ရောက်သည်။ connection တစ်ခုချင်းစီအတွက် `qwenCloudCookie` Dashboard field ကို ဦးစားပေးအသုံးပြုပါ။ |
| `QWEN_CLOUD_SEC_TOKEN` | _(မသတ်မှတ်ထား)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Token Plan console gateway အတွက် `sec_token` ကို ကိုယ်တိုင်အစားထိုးသတ်မှတ်ရန်။ အထိခိုက်မခံသင့်သော အချက်အလက်ဖြစ်သည်။ မသတ်မှတ်ထားပါက fetcher သည် cookie ကို အသုံးပြု၍ dashboard HTML မှ ၎င်းကို ရယူဖြေရှင်းသည်။ |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | ကိုယ်ပိုင် Token Plan quota fetcher အတွက် gateway host ကို အစားထိုးသတ်မှတ်ရန် (ဥပမာ Model Studio console အတွက် `bailian-singapore-cs.alibabacloud.com`)။ |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | အကောင့်ဝင်ထားသော HTML မှ `sec_token` ကို ရယူဖြေရှင်းရန် အသုံးပြုသည့် Dashboard URL။ |
| `XIAOMI_MIMO_CONSOLE_COOKIE` | _(မသတ်မှတ်ထား)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Xiaomi MiMo Token Plan quota API (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — inference API key ဖြင့် ၎င်းကို ဖတ်၍မရပါ) အတွက် console session cookie။ `api-platform_serviceToken` နှင့် `userId` ပါဝင်သည့် `Cookie` request header တစ်ခုလုံးကို Token Plan စာမျက်နှာ (F12 › Network) ပေါ်ရှိ `platform.xiaomimimo.com` သို့ ပြုလုပ်သော မည်သည့် request မှမဆို ကူးယူပါ။ အထိခိုက်မခံသင့်သော အချက်အလက်ဖြစ်ပြီး session အလိုက်သာ သက်ရောက်သည်။ connection တစ်ခုချင်းစီအတွက် `xiaomiMimoConsoleCookie` Dashboard field ကို ဦးစားပေးအသုံးပြုပါ။ |
| `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Console cookie မသတ်မှတ်ထားသည့်အခါ အသုံးပြုသော OmniRoute မှ ခြေရာခံသည့် Xiaomi MiMo fallback အတွက် လစဉ်ဘတ်ဂျက် (Credits)။ မူလတန်ဖိုးသည် Lite အဆင့်၏ 4.1B ဖြစ်သည်။ သက်ဆိုင်ရာအစီအစဉ်၏ Credits (Standard 11B / Pro 38B / Max 82B) အဖြစ် သတ်မှတ်ပါ။ ချိတ်ဆက်မှုတစ်ခုချင်းအလိုက် `providerSpecificData.monthlyTokenLimit` ဖြင့် override လုပ်ထားပါက ဤ env var ထက် ဦးစားပေးမည်။ |
| `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Alibaba Model Studio ၏ free-tier vision/media quota ကို ရယူရန်အတွက် console front-end path override။ |
| `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Alibaba Model Studio ၏ free-tier multimodal quota ကို ရယူရန်အတွက် console front-end path override။ |
| `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Alibaba Model Studio ၏ free-tier audio quota ကို ရယူရန်အတွက် console front-end path override။ |
| `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(မသတ်မှတ်ထား)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Built-in Alibaba free-tier text-model allowlist ကို override လုပ်ရန်အတွက် ဒေသတွင်း JSON ဖိုင်၏ ရွေးချယ်နိုင်သော path။ မရှိပါက `$DATA_DIR/alibaba-free-tier-allowlist.json` ကို အသုံးပြုပြီး၊ ထို့နောက် `config/alibaba-free-tier-allowlist.json` ကို အသုံးပြုမည်။ |
| `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Prompt ဘတ်ဂျက်များကို တွက်ချက်ရာတွင် completion output အတွက် သီးသန့်ချန်ထားသော token အရေအတွက်။ |
| `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | Context window အတွင်း အံဝင်ခွင်ကျဖြစ်စေရန် ပုံအဟောင်းများကို ဖြုတ်ထုတ်သည့်အခါ နောက်ဆုံးပေါ် inline ပုံ မည်မျှကို ဆက်လက်ထားရှိမည်ကို သတ်မှတ်သည် (#8560)။ |
| `MODEL_ALIAS_COMPAT_ENABLED` | ဖွင့်ထားသည် | `open-sse/services/model.ts` | Client အဟောင်းများ အသုံးပြုသည့် legacy model-alias compatibility layer ကို ဖွင့်/ပိတ်ရန်။ |
| `OMNIROUTE_EMERGENCY_FALLBACK` | ဖွင့်ထားသည် | `open-sse/services/emergencyFallback.ts` | မအောင်မြင်သော request များကို အခမဲ့ `nvidia`/`openai/gpt-oss-120b` model သို့ လမ်းကြောင်းပြောင်းပေးသည့် ဘတ်ဂျက်ကုန်ဆုံးမှုဆိုင်ရာ အရေးပေါ် fallback ကို ပိတ်ရန် `false` (သို့မဟုတ် `0`) ဟု သတ်မှတ်ပါ။ အကျိုးသက်ရောက်သော ဦးစားပေးအစီအစဉ်မှာ Feature Flags DB override > env var > မူလတန်ဖိုး ဖြစ်သည်။ ၎င်းကို မရရှိနိုင်ပါက service သည် မူရင်း env တန်ဖိုးကို fallback အဖြစ် အသုံးပြုမည်။ |
| `COMMAND_CODE_CALLBACK_PORT` | _(မသတ်မှတ်ထား)_ | `src/app/api/providers/command-code/auth/shared.ts` | Command Code CLI helper မှ OAuth ပုံစံ callback များအတွက် အသုံးပြုသည့် local port။ |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Command Code upstream သို့ `x-command-code-version` header အဖြစ် ပေးပို့သည့်တန်ဖိုး။ CLI ဗားရှင်းကို မြှင့်တင်ရန် override လုပ်ပါ။ |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | စမတ်ဖုန်း quota-fetcher telemetry က အသုံးပြုသည့် Command Code usage/quota upstream အတွက် အခြေခံ URL။ ကိုယ်တိုင် host လုပ်ထားသော သို့မဟုတ် အခြား Command Code API ကို အသုံးပြုရန် override လုပ်ပါ။ |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | MITM debug proxy အတွက် local bind port။ |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Upstream TLS စစ်ဆေးအတည်ပြုခြင်းကို ပိတ်ရန် `1` ဟု သတ်မှတ်ပါ (development အတွက်သာ)။ |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Proxy လုပ်ထားသော connection များအတွက် idle socket timeout (ms)၊ half-open tunnel များ မပေါက်ကြားစေရန် ဤသတ်မှတ်ချိန်ထက်ကျော်လွန်၍ idle ဖြစ်နေသော socket များကို ဖြုတ်ချသည်။ |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Antigravity MITM bridge က စောင့်ကြည့်နေသည့် port။ |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Bridge က Antigravity traffic ကို forward လုပ်ပေးသည့် router endpoint။ |
| `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Bridge က ၎င်း၏ TLS material များကို ဖတ်ယူသည့် directory ကို override လုပ်သည်။ Cert model ကို AgentBridge server လုပ်သည့်နည်းအတိုင်း ရွေးချယ်သည်− legacy leaf install အတွက် `server.crt`/`server.key` ကို အသုံးပြုပြီး၊ ထိုသို့မဟုတ်ပါက `ca.crt`/`ca.key` (root CA၊ ကြားဖြတ်ထားသည့် host တစ်ခုစီအတွက် leaf တစ်ခု၊ `MITM_ROOT_CA_ENABLED=true` ဖြင့် အတင်းအကျပ်သတ်မှတ်နိုင်သည်) ကို အသုံးပြုသည်။ လက်ရှိအသုံးပြုနေသော model အတွက် လိုအပ်သည့် file များ မရှိပါက bridge သည် startup အချိန်တွင် exit လုပ်သည်။ |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Routing decision log ၏ အသေးစိတ်မှတ်တမ်းတင်မှုအဆင့်− `0` သည် log များကို ပိတ်ပြီး၊ ပိုမြင့်သောတန်ဖိုးများသည် bypass/route decision များကို ပိုမိုမှတ်တမ်းတင်သည်။ |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Root-CA + host တစ်ခုစီအလိုက် leaf cert model (#6684) ကို ရွေးချယ်အသုံးပြုရန် `true` ဟု သတ်မှတ်ပါ။ အသစ် install လုပ်ထားသည့်စနစ်များတွင် ၎င်းကို အလိုအလျောက်ရရှိသည်။ ယခင်ကတည်းက ယုံကြည်စိတ်ချရသော legacy leaf ရှိပြီးသား install များသည် ကိုယ်တိုင်ရွေးချယ်မသုံးသရွေ့ legacy fixed-SAN cert ကို ဆက်လက်ထိန်းသိမ်းထားသည်။ |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Spawn လုပ်ထားသော proxy process အတွက် MITM manager က သတ်မှတ်ပေးသည့်တန်ဖိုး (`root-ca` \| `legacy`) — cert migration ဆုံးဖြတ်ချက်ကို ဖော်ပြသည်။ ကိုယ်တိုင်သတ်မှတ်ရန် မရည်ရွယ်ပါ။ |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | MITM လက်မှတ်ယုံကြည်မှု command များမှ ရှေ့ဆုံးရှိ `sudo` ကို ဖယ်ရှားရန် `1` (truthy) ဟု သတ်မှတ်ပါ — operator က CA ကို ကိုယ်တိုင်ယုံကြည်မှုပေးထားသည့် root မလိုသော / user namespace သုံး deployment များအတွက် ဖြစ်သည် (ဥပမာ Node ၏ extra-CA-certs ယန္တရားမှတစ်ဆင့်)။ |
| `SKIP_ANTIGRAVITY_DNS` | _(မသတ်မှတ်ထား)_ | `src/mitm/dns/provision.ts` | Antigravity proxy hostname များအတွက် `/etc/hosts` DNS entry များ ပြင်ဆင်ပေးခြင်းကို လုံးဝကျော်ရန် `true` ဟု သတ်မှတ်ပါ — sudo/root အသုံးမပြုနိုင်သော container များအတွက် ဖြစ်သည်။ |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(မသတ်မှတ်ထား)_ | `src/mitm/dns/dnsConfig.ts` | DNS entry များ ထည့်သွင်း/ဖယ်ရှားသည့်အခါ hosts file သို့ ရေးသားခြင်းကို ကျော်ရန် `1` ဟု သတ်မှတ်ပါ — sandbox လုပ်ထားသော သို့မဟုတ် read-only test environment များအတွက် ဖြစ်သည်။ |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Test/CI အတွက်သာ အကာအကွယ်ဖြစ်သည်။ လက်မှတ်ယုံကြည်မှု install/uninstall လုပ်ဆောင်ချက်ကို no-op ဖြစ်စေရန် `1` ဟု သတ်မှတ်ပါ၊ ထို့ကြောင့် suite သည် OS trust store ကို မည်သည့်အခါမျှ ပြောင်းလဲမည်မဟုတ်ပါ။ test setup နှင့် CI workflow များက အလိုအလျောက် သတ်မှတ်ပေးသည်။ |
| `CHANGELOG_BASE_REF` | _(အလိုအလျောက်)_ | `scripts/check/check-changelog-integrity.mjs` | anti CHANGELOG-eat gate အတွက် တိကျစွာ သတ်မှတ်ထားသော base ref ဖြစ်သည် (ပုံသေအားဖြင့် CI ရှိ PR base branch သို့မဟုတ် အမြင့်ဆုံး `release/v*` ကို အသုံးပြုသည်)။ |
| `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | နောက်ကွယ်ရှိ အခမဲ့ proxy pool အလိုအလျောက် sync scheduler ကို ဖွင့်ရန် `true` ဟု သတ်မှတ်ပါ။ ကိုယ်တိုင်ရွေးချယ်ဖွင့်ရပြီး ပုံသေအားဖြင့် ပိတ်ထားသည်။ |
| `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | မီလီစက္ကန့်ဖြင့် သတ်မှတ်သော အလိုအလျောက် sync interval (ပုံသေ 30 မိနစ်)။ |
| `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | 1proxy အခမဲ့ proxy source ကို ဖွင့်ပါ။ ပိတ်ရန် `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` | sync တစ်ကြိမ်လျှင် 1proxy မှ ရယူမည့် proxy အများဆုံးအရေအတွက်။ |
| `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | 1proxy ထည့်သွင်းမှုများအတွက် အနည်းဆုံး အရည်အသွေးရမှတ် သတ်မှတ်ချက်။ |
| `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Proxifly အခမဲ့ proxy ရင်းမြစ်ကို ဖွင့်ပါ။ ပိတ်ရန် `false` ဟု သတ်မှတ်ပါ။ |
| `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Proxifly တစ်ကြိမ်ချိန်ကိုက်တိုင်း ရယူမည့် proxy အရေအတွက်။ |
| `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 အခမဲ့ proxy ရင်းမြစ်ကို ဖွင့်ပါ။ ကိုယ်တိုင်ရွေးချယ်ဖွင့်မှသာ အသုံးပြုနိုင်သည်။ |
| `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | IPLocate proxy စာရင်း၏ အခြေခံ URL ကို အစားထိုးသတ်မှတ်ခြင်း။ |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Webshare proxy pool ရင်းမြစ်ကို ဖွင့်ပါ။ ပိတ်ရန် `false` ဟု သတ်မှတ်ပါ၊ ထို့အပြင် `FREE_PROXY_WEBSHARE_API_KEY` ကိုလည်း သတ်မှတ်ထားရန် လိုအပ်သည်။ |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(မရှိ)_ | `src/lib/freeProxyProviders/webshare.ts` | Webshare အကောင့် API token (`Authorization: Token `)။ မဖြစ်မနေလိုအပ်ပြီး ၎င်းမရှိပါက provider သည် ပိတ်ထားမည်ဖြစ်သည်။ |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Webshare proxy စာရင်း API URL ကို အစားထိုးသတ်မှတ်ခြင်း။ |
| `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Webshare တစ်ကြိမ်ချိန်ကိုက်တိုင်း ထည့်သွင်းမည့် proxy အများဆုံးအရေအတွက်။ |
| `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Proxy Pool တက်ဘ်ရှိ 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 ဖြန့်ချိမှု modal တွင် ကြိုတင်ဖြည့်သွင်းထားသော မူလပရောဂျက်အမည်။ |
| `TAILSCALE_BIN` | _(အလိုအလျောက်ရှာဖွေ)_ | `src/lib/tailscaleTunnel.ts` | `tailscale` binary သို့ တိကျသော လမ်းကြောင်း။ |
| `TAILSCALED_BIN` | _(အလိုအလျောက်ရှာဖွေ)_ | `src/lib/tailscaleTunnel.ts` | `tailscaled` daemon binary သို့ တိကျသော လမ်းကြောင်း။ |
| `TAILSCALE_AUTHKEY` | _(သတ်မှတ်မထား)_ | `src/lib/tailscaleTunnel.ts` | အသုံးပြုသူ အပြန်အလှန်ဆောင်ရွက်မှု မလိုသော / headless `tailscale up` အတွက် ကြိုတင်မျှဝေထားသည့် Tailscale auth key (`--auth-key=` မှတစ်ဆင့် ပေးပို့သည်)။ မသတ်မှတ်ထားပါက login သည် အသုံးပြုသူ အပြန်အလှန်ဆောင်ရွက်ရသော browser auth URL ကို ပြန်လည်အသုံးပြုသည်။ |
| `NGROK_AUTHTOKEN` | _(သတ်မှတ်မထား)_ | `src/lib/ngrokTunnel.ts` | အပြင်ဘက်သို့ ချိတ်ဆက်သော ngrok tunnel များကို စစ်မှန်ကြောင်း အတည်ပြုသည်။ |
| `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | ကိုယ်တိုင်/အချိန်ဇယားအလိုက် backup ရှင်းလင်းမှုတွင် ထိန်းသိမ်းထားမည့် SQLite backup ဖိုင် အများဆုံးအရေအတွက်။ Migration snapshot များကို အကြောင်းအရာအလိုက် လိပ်စာသတ်မှတ်ထားပြီး တူညီသော DB အခြေအနေအတွက် ပြန်လည်အသုံးပြုသည်။ တစ်ပြိုင်နက် migration လုပ်ဆောင်သည့် ကာလအတွင်း ၎င်းတို့ကို မရှင်းလင်းပါ။ Settings → Database backup retention မှ သိမ်းဆည်းထားသော တန်ဖိုးကို အစားထိုးသတ်မှတ်သည်။ |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | ကိုယ်တိုင်/အချိန်ဇယားအလိုက် backup ရှင်းလင်းမှုတွင် ထိန်းသိမ်းထားမည့် အများဆုံးသက်တမ်း (ရက်)။ `0` သည် သက်တမ်းအခြေပြု ရှင်းလင်းမှုကို ပိတ်ထားသည်။ တစ်ပြိုင်နက် migration လုပ်ဆောင်သည့် ကာလအတွင်း migration snapshot များကို မရှင်းလင်းပါ။ Settings → Database backup retention မှ သိမ်းဆည်းထားသော တန်ဖိုးကို အစားထိုးသတ်မှတ်သည်။ |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | `backup-schedule.json` ကို လုပ်ဆောင်သည့် server-side job ၏ tick ကြားကာလ (ms)။ ၁ မိနစ် cron အနည်းဆုံးအချိန်ပိုင်းခြားမှုထက် များစွာလျော့နည်းနေရမည်။ `5000` အောက်တန်ဖိုးများ သို့မဟုတ် parse မလုပ်နိုင်သော တန်ဖိုးများသည် `30000` ကို ပြန်လည်အသုံးပြုသည်။ |
| `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | entrypoint ခွင့်ပြုချက်စစ်ဆေးမှုအတွက် container runtime အညွှန်း။ မည်သည့် Podman topology အတွက်မဆို `podman` ဟု သတ်မှတ်ပါ။ container သည် engine ကို local တွင် အသုံးပြုနေခြင်းလား သို့မဟုတ် Podman Machine မှတစ်ဆင့် ချိတ်ဆက်အသုံးပြုနေခြင်းလား မဆုံးဖြတ်နိုင်သောကြောင့် သတိပေးချက်သည် topology နှင့် မသက်ဆိုင်ဘဲ `contrib/podman/README.md` ကို ညွှန်းထားသည်။ |
| `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Quota-share သုံးစွဲမှု store backend: `sqlite` (မူလသတ်မှတ်ချက်) သို့မဟုတ် `redis`။ |
| `QUOTA_STORE_REDIS_URL` | _(မသတ်မှတ်ထား)_ | `src/lib/quota/storeFactory.ts` | `QUOTA_STORE_DRIVER=redis` ဖြစ်သည့်အခါ အသုံးပြုသော Redis ချိတ်ဆက်မှု string (ဥပမာ `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 ထားသည့်အခါ (#4540) auto-combo အမှတ်ပေးမှုတွင် အရင်းအမြစ်ကုန်ဆုံးနေသော provider (`credits_exhausted`/`rate_limited`) အပေါ် အသုံးချသည့် score မြှောက်ဖော်ကိန်း (0..1)။ |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | GC (`gcQuotaConsumption`) မလုပ်မီ `quota_consumption` bucket များကို ထိန်းသိမ်းထားမည့်ကာလ (ရက်)။ |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | ရွေးချယ်ဖွင့်နိုင်သည် (မူလသတ်မှတ်ချက် OFF)။ အမှတ်မပေးမီ quota နည်းသော candidate များကို ဖယ်ရှားသည့် auto-routing hard quota cutoff ကို ဖွင့်ပေးသည်။ |
| `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | ရွေးချယ်ဖွင့်နိုင်သည် (မူလသတ်မှတ်ချက် OFF)။ `auto/:` filter နှင့် ကိုက်ညီသော ချိတ်ဆက်ထားသည့် candidate မရှိသည့်အခါ pool အလွတ်ကို ပြန်ပေးမည့်အစား အပြည့်အစုံ (စစ်ထုတ်မထားသော) pool သို့ fallback ပြုလုပ်သည့် မူလအပြုအမူကို ပြန်လည်အသုံးပြုသည်။ မူလသတ်မှတ်ချက် OFF ကြောင့် `:free` သည် "အခမဲ့အဆင့်သာ" ဟု အဓိပ္ပာယ်ရသည်။ |
| `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | `auto/*:chaos` broadcast variant အတွက် panel အရွယ်အစား အများဆုံးကန့်သတ်ချက် (1–10 အတွင်း ကန့်သတ်ထားသည်) — request တစ်ခုသည် အများဆုံး ဤအရေအတွက်အထိ provider မတူညီသော model များထံ ဖြန့်ပို့သည်။ |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(အင်ဂျင်၏ မူလသတ်မှတ်ချက်)_ | `open-sse/services/autoCombo/virtualFactory.ts` | chaos broadcast handler သို့ ပေးပို့မည့် အနည်းဆုံး panel size ချိန်ညှိမှု၊ မသတ်မှတ်ထားပါက အင်ဂျင်၏ မူလသတ်မှတ်ချက်ကို ဆက်လက်အသုံးပြုမည်။ |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(အင်ဂျင်၏ မူလသတ်မှတ်ချက်)_ | `open-sse/services/autoCombo/virtualFactory.ts` | chaos panel fan-out တစ်ခုလုံးအတွက် အပြီးသတ် အချိန်ကန့်သတ်ချက် (ms)၊ မသတ်မှတ်ထားပါက အင်ဂျင်၏ မူလသတ်မှတ်ချက်ကို ဆက်လက်အသုံးပြုမည်။ |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | grok-web ၏ အပတ်စဉ် quota ကို ရယူရန် အသုံးပြုသည့် Grok CLI `auth.json` ၏ လမ်းကြောင်း၊ စမ်းသပ်မှုများ သို့မဟုတ် ပုံမှန်မဟုတ်သော CLI တပ်ဆင်မှုအတွက် အစားထိုးသတ်မှတ်နိုင်သည်။ |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(မသတ်မှတ်ထား)_ | `src/mitm/manager.ts` | AgentBridge upstream TLS ချိတ်ဆက်မှုများအတွက် ယုံကြည်စိတ်ချရသော အပို CA လက်မှတ် (PEM)။ |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Traffic Inspector ring buffer တွင် ထိန်းသိမ်းထားမည့် ဖမ်းယူထားသော request အများဆုံးအရေအတွက်။ |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | ဖြတ်တောက်ခြင်းမပြုမီ ဖမ်းယူထားသော request/response body ၏ အများဆုံးအရွယ်အစား (KB)။ |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Traffic Inspector HTTP proxy အတွက် local port။ |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | စနစ်စတင်ချိန်တွင် inspector HTTP proxy ကို အလိုအလျောက် စတင်ရန်။ |
| `INSPECTOR_LLM_HOSTS_EXTRA` | _(မသတ်မှတ်ထား)_ | `src/lib/inspector/captureState.ts` | ဖမ်းယူမှုအတွက် LLM endpoint များအဖြစ် သတ်မှတ်မည့် အပို hostname များ (ကော်မာဖြင့် ပိုင်းခြားထားသည်)။ |
| `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | ဖမ်းယူထားသော traffic အတွင်းရှိ လျှို့ဝှက်အချက်အလက်များ (auth header များ / API key များ) ကို ဖုံးကွယ်ရန်။ |
| `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | system-proxy guard က OS proxy ဆက်တင်များကို အလိုအလျောက် မူလအတိုင်း ပြန်မထားမီ ကြာချိန် မိနစ်။ |
| `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(အလိုအလျောက်)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | inspector သို့ internal capture ingest ပြုလုပ်ခြင်းကို အထောက်အထားစိစစ်ပေးသည့် token။ |
| `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Playground compare mode တွင် ဘေးချင်းယှဉ်ပြသနိုင်သည့် column အများဆုံးအရေအတွက်။ |
| `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(မသတ်မှတ်ထား)_ | `src/app/(dashboard)/dashboard/playground/` | Playground ၏ 'improve prompt' လုပ်ဆောင်ချက်အတွက် ပုံသေ model (`unset` ဖြစ်နေပါက လက်ရှိအသုံးပြုနေသော model ကို အစားထိုးအသုံးပြုသည်)။ |
| `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | bifrost sidecar proxy အတွက် ပင်မ kill switch။ `0` ဟု သတ်မှတ်ထားပါက route သည် `X-Bifrost-Killswitch` header နှင့်အတူ 503 ကို ပြန်ပေးပြီး operator ကို TS path သို့ ပြန်လွှဲပေးသည်။ ပြန်လည် deploy မလုပ်ဘဲ sidecar ကို ပိတ်ရန် အသုံးပြုပါ (tier-1 router ဖြစ်စဉ်၊ key လဲလှယ်ခြင်း)။ |
| `BIFROST_BASE_URL` | _(မသတ်မှတ်ထား)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | သတ်မှတ်ထားပါက Bifrost sidecar proxy route သည် `/v1/chat/completions` traffic ကို TS relay handler အစား ဤ Go gateway သို့ ပေးပို့သည်။ မသတ်မှတ်ထားပါက → fallback ပါသော 503။ နောက်ဆုံးရှိ slash ကို ဖယ်ရှားသည်။ |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | OmniRoute က Bifrost sidecar ၏ lifecycle ကို စီမံသည့်အခါ ကြီးကြပ်ထားသော Bifrost embedded service ချိတ်ဆက်အသုံးပြုမည့် port (`127.0.0.1:`)။ ပုံသေတန်ဖိုးမှာ `8080` ဖြစ်သည်။ |
| `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | ကြီးကြပ်ထားသော LLMLingua compression service ချိတ်ဆက်အသုံးပြုမည့် port (`127.0.0.1:`)။ ပုံသေတန်ဖိုးမှာ `20135` ဖြစ်သည်။ |
| `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | local LLMLingua HTTP compression microservice daemon အတွက် အခြေခံ URL။ ပုံသေတန်ဖိုးမှာ `http://127.0.0.1:20135` ဖြစ်သည်။ |
| `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | ကြီးကြပ်ထားသော LLMLingua sidecar က load လုပ်သည့် Hugging Face model id (child process env သို့ ပေးပို့သည်)။ |
| `BIFROST_API_KEY` | _(မသတ်မှတ်ထား)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Bifrost gateway အတွက် API key (`Authorization: Bearer ...` အဖြစ် ပေးပို့သည်)။ မသတ်မှတ်ထားပါက request တွင် မှန်ကန်သော OmniRoute API key ပါရှိရန် route က မျှော်လင့်သည်။ ဤ key သည် gateway ဘက်ခြမ်း authentication အတွက်သာ ဖြစ်သည်။ |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | `true` ဖြစ်သည့်အခါ Bifrost sidecar route သည် TS streaming executor ကို အသုံးပြုမည့်အစား gateway မှတစ်ဆင့် SSE ဖြင့် response များကို stream ပြန်ပို့သည်။ Gateway မှတစ်ဆင့် streaming မလုပ်သော JSON response များကို အတင်းအကျပ် အသုံးပြုရန် `0` ဟု သတ်မှတ်ပါ။ |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Bifrost gateway သို့ proxy လုပ်ရာတွင် request တစ်ခုချင်းအလိုက် timeout (ms)။ Timeout ဖြစ်ပါက route သည် `X-Bifrost-Fallback` header မှတစ်ဆင့် TS relay path ကို ပြန်ပေးသည်။ |
| `OMNIROUTE_BIFROST_KEY` | _(မသတ်မှတ်ထား)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | `BIFROST_API_KEY` အတွက် alias (`OMNIROUTE_*` မှတစ်ဆင့် env ကို ဖတ်သည့် script များက အသုံးပြုသည်)။ နှစ်ခုစလုံး သတ်မှတ်ထားပါက `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 ကို configure မလုပ်ထားသည့်အခါ မူလတန်ဖိုး); `auto` သည် `BIFROST_BASE_URL` သတ်မှတ်ထားပြီး `BIFROST_ENABLED` ≠ `0` ဖြစ်ပါက Bifrost ကို ရွေးချယ်ကာ sidecar သို့ ဆက်သွယ်၍မရပါက TS သို့ အလိုအလျောက် fallback လုပ်သည်; `bifrost` သည် Bifrost ကို အတင်းအကျပ် အသုံးပြုသည် (တင်းကျပ်သောမုဒ်၊ fallback မရှိ)။ Auth/rate-limit/injection-guard/allowlist တို့သည် Next route တွင် အမြဲ ဦးစွာ run သည်။ Response များတွင် `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` အတွက် လက်ခံသည့် alias (`ts \| bifrost \| auto` တန်ဖိုးများ အတူတူဖြစ်သည်)။ နှစ်ခုစလုံး သတ်မှတ်ထားပါက `OMNIROUTE_RELAY_BACKEND` ကို ဦးစားပေးသည်။ |
| `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | `auto` မုဒ်တွင် Bifrost sidecar hop မအောင်မြင်ပြီးနောက် relay က sidecar ကို ပြန်လည်ကြိုးစားမည့်အချိန်မတိုင်မီ cooldown (ms)။ Cooldown ကာလအတွင်း TS path သို့ တိုက်ရိုက် route လုပ်ပြီးနောက် ထပ်မံစမ်းသပ်သည်။ `0` သည် ပိတ်ထားသည်။ `OMNIROUTE_RELAY_BACKEND=auto` ဖြစ်သည့်အခါတွင်သာ သက်ရောက်သည်။ |
| `OMNIROUTE_TLS_CERT` | _(မသတ်မှတ်ထား)_ | `bin/cli/commands/serve.mjs` | `omniroute serve` ကို HTTPS မှတစ်ဆင့် ဝန်ဆောင်မှုပေးရန် PEM TLS certificate သို့ path (`--tls-cert` နှင့် ညီမျှသည်)။ `OMNIROUTE_TLS_KEY` နှင့် တွဲဖက်သတ်မှတ်ရမည်; ထို့နောက် standalone server သည် တူညီသော listener တွင် TLS ကို terminate လုပ်သည် (`wss://` သည် ပြောင်းလဲမှုမရှိဘဲ အလုပ်လုပ်သည်)။ မသတ်မှတ်ထားပါက → ရိုးရိုး HTTP။ Cert/key တစ်ခုတည်းသာ ပေးထားခြင်း သို့မဟုတ် ဖတ်၍မရသော path ပေးထားခြင်းသည် သတိပေးချက်ကို log လုပ်ပြီး HTTP အဖြစ် ဆက်ရှိနေသည်။ |
| `OMNIROUTE_TLS_KEY` | _(မသတ်မှတ်ထား)_ | `bin/cli/commands/serve.mjs` | `omniroute serve` HTTPS အတွက် PEM TLS private key သို့ path (`--tls-key` နှင့် ညီမျှသည်)။ `OMNIROUTE_TLS_CERT` နှင့် တွဲဖက်သတ်မှတ်ရမည်။ `OMNIROUTE_TLS_CERT` ကို ကြည့်ပါ။ |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | `/api/local/*` route များအတွက် master switch။ မသတ်မှတ်ထားပါက သို့မဟုတ် `0` ဖြစ်ပါက `/api/local/*` route အားလုံးသည် production တွင် 503 ပြန်ပေးသည်။ Redis launcher နှင့် အလားတူ 1-click local service starter များကို ဖွင့်ရန် non-loopback deployment များတွင် `1` ဖြစ်ရမည်။ `isLocalOnlyPath()` route-guard classification (`src/server/authz/routeGuard.ts` ရှိ `LOCAL_ONLY_API_PREFIXES`) နှင့် အတူ အလွှာနှစ်ထပ် ကာကွယ်မှုဖြစ်သည်။ |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(မသတ်မှတ်ထား)_ | `src/lib/security/localEndpoints.ts` | Loopback ပေါ်တွင် မရှိသော `/api/local/*` caller များအတွက် Bearer token (ဥပမာ desktop app)။ သတ်မှတ်ထားပါက non-loopback IP များမှ request များသည် `Authorization: Bearer ` ကို ထည့်သွင်းရမည်။ Non-loopback deployment များတွင် `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` ဖြစ်ပါက လိုအပ်သည်။ |
| `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | 1-click Redis launcher (`omniroute redis up`) အတွက် container အမည်။ CLI နှင့် `RedisLauncherPanel` GUI နှစ်ခုလုံးက အသုံးပြုသည်။ |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | 1-click Redis launcher အတွက် host port။ Host က 6379 ကို အသုံးပြုပြီးဖြစ်ပါက တိုးမြှင့်ပါ။ Container ၏ internal port သည် 6379 အဖြစ် ဆက်ရှိနေမည်။ |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | 1-click Redis launcher က publish လုပ်သည့် host interface။ Launcher သည် password မပါဘဲ Redis ကို စတင်သောကြောင့် `0.0.0.0` သို့ bind လုပ်ခြင်းက သင့် LAN ပေါ်ရှိ host အားလုံးကို authentication မလိုသော Redis အသုံးပြုခွင့်ပေးလိုက်မည် — instance တွင် password ကို ကိုယ်တိုင် သတ်မှတ်ထားမှသာ ဤအကန့်အသတ်ကို ချဲ့ထွင်ပါ။ |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose က Redis sidecar ကို publish လုပ်သည့် host interface (#9286)။ Compose Redis သည် `requirepass` မပါဘဲ run ပြီး app container များက compose network (`redis:6379`) မှတစ်ဆင့် ၎င်းကို အသုံးပြုကြသည် — publish လုပ်ထားသော port သည် host-side tooling အတွက်သာ ဖြစ်သည်။ `0.0.0.0` သည် authentication မလိုသော Redis ကို LAN တစ်ခုလုံးသို့ ဖွင့်ပေးသည်။ |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | Compose Redis sidecar အတွက် host port။ |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | docker-compose က app ၏ ကိုယ်ပိုင် dashboard/API/live-WS port များကို publish လုပ်သည့် host interface (#12568)။ `.env.example` ၏ default အဖြစ် `REQUIRE_API_KEY=false` ပါဝင်လာသဖြင့် `0.0.0.0` သည် anonymous `/v1` LLM proxy ကို LAN/WAN တစ်ခုလုံးသို့ ဖွင့်ပေးသည် — `REQUIRE_API_KEY=true` ဖြစ်မှ သို့မဟုတ် ရှေ့ဘက်ရှိ reverse proxy က ၎င်း၏ ကိုယ်ပိုင် authentication ကို မဖြစ်မနေ စစ်ဆေးမှသာ အကန့်အသတ်ကို ချဲ့ထွင်ပါ။ |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose က Qdrant memory sidecar ကို publish လုပ်သည့် host interface (#12578)။ LAN သို့ ဖွင့်ပေးခြင်းနှင့်ပတ်သက်သော အကြောင်းပြချက်သည် `REDIS_BIND_HOST` နှင့် အတူတူပင် ဖြစ်သည်။ |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | docker-compose က Bifrost router sidecar ကို publish လုပ်သည့် host interface (#12578)။ LAN သို့ ဖွင့်ပေးခြင်းနှင့်ပတ်သက်သော အကြောင်းပြချက်သည် `REDIS_BIND_HOST` နှင့် အတူတူပင် ဖြစ်သည်။ |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | OmniRoute Redis key တိုင်းတွင် အသုံးပြုသည့် namespace prefix (rate limiter၊ auth cache၊ quota store၊ warmup circuit breaker)။ Redis instance ကို အခြား app များနှင့် မျှဝေအသုံးပြုသည့်အခါ key များ တိုက်ဆိုင်ခြင်းကို ကာကွယ်ပေးသည် (#11042)။ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(မသတ်မှတ်ထား — mechanism ပိတ်ထားသည်)_ | `src/lib/api/internalServiceAuth.ts` | Identity ကို ထိန်းသိမ်းထားသည့် internal REST hop များအတွက် shared secret (#9260)။ အခြား local OmniRoute route များကို ခေါ်သည့် OmniRoute component များက မူလ caller ၏ identity ကို ထိန်းသိမ်းထားနိုင်ရန် ၎င်းကို `x-omniroute-internal-service-token` အဖြစ် ပို့သည်။ `timingSafeEqual` ဖြင့် နှိုင်းယှဉ်သည်။ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(မသတ်မှတ်ထား)_ | `src/lib/api/internalServiceAuth.ts` | အတွင်းပိုင်းဝန်ဆောင်မှု တိုကင်၏ လျှို့ဝှက်ဖိုင် မူကွဲ- ချုံ့ထားသော အကြောင်းအရာသည် တိုကင်ဖြစ်သည့် ဖိုင်တစ်ခု၏ လမ်းကြောင်း။ inline var ကို မသတ်မှတ်ထားမှသာ အသုံးပြုစစ်ဆေးသည်။ |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | dashboard ရှိ ပံ့ပိုးသူများစာရင်းကို OpenRouter ၏ အပတ်စဉ် အဆင့်သတ်မှတ်ချက် စာရင်းအင်းများဖြင့် ပိုမိုပြည့်စုံစေသည် (#9324)။ ပုံသေအားဖြင့် ဖွင့်ထားသည်။ နောက်ခံ fetch လုပ်ဆောင်မှုတစ်ခုလုံးကို ကျော်ရန် `false` ဟု သတ်မှတ်ပါ (ပိတ်ဆို့မှုမရှိ၊ မည်သည့်အခါမျှ ပြင်းထန်သော အမှားမဖြစ်ပါ)။ |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | OpenRouter ပံ့ပိုးသူစာရင်းအင်း snapshot အတွက် cache TTL ကို မီလီစက္ကန့်ဖြင့် သတ်မှတ်သည်။ |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | 1-click Redis launcher က အသုံးပြုသည့် Redis image။ လိုအပ်သလို `redis:8-alpine` သို့မဟုတ် သီးသန့် registry mirror တစ်ခုဖြင့် အစားထိုးသတ်မှတ်နိုင်သည်။ |
| `QDRANT_HOST` | `qdrant` | _(ရွေးချယ်ဖွင့်နိုင်သော cluster profile)_ | `--profile memory` အသက်ဝင်နေချိန်ရှိ Qdrant sidecar ၏ hostname။ ပုံသေတန်ဖိုးသည် ကွန်ရက်အတွင်းရှိ qdrant ဝန်ဆောင်မှုအမည်ကို ညွှန်ပြသည်။ ပြင်ပ deployment အတွက် အစားထိုးသတ်မှတ်ပါ။ ကုဒ် (`src/lib/memory/vectorStore.ts:108`) ထဲတွင် `qdrantEnabled` သည် `true` ဖြစ်သည့်အခါမှသာ အသုံးပြုသည်။ |
| `QDRANT_PORT` | `6333` | _(ရွေးချယ်ဖွင့်နိုင်သော cluster profile)_ | Qdrant sidecar ၏ REST port။ |
| `QDRANT_GRPC_PORT` | `6334` | _(ရွေးချယ်ဖွင့်နိုင်သော cluster profile)_ | Qdrant sidecar ၏ gRPC port။ streaming လုပ်ဆောင်ချက်များအတွက် REST ထက် gRPC ကို ဦးစားပေးသော client library များက အသုံးပြုသည်။ |
| `QDRANT_API_KEY` | _(မသတ်မှတ်ထား)_ | _(ရွေးချယ်ဖွင့်နိုင်သော cluster profile)_ | Qdrant Cloud သို့မဟုတ် စစ်မှန်ကြောင်းအတည်ပြုမှုပါသော on-prem instance အတွက် ရွေးချယ်နိုင်သည့် API key။ အလွတ်ဖြစ်လျှင် → `api-key` header ကို မပို့ပါ။ |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(ရွေးချယ်ဖွင့်နိုင်သော cluster profile)_ | OmniRoute ၏ စကားဝိုင်းမှတ်ဉာဏ် embedding များအတွက် collection အမည်။ ပထမဆုံး run တွင် `QDRANT_VECTOR_SIZE` အတိုင်းအတာများဖြင့် ဖန်တီးသည်။ |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(ရွေးချယ်ဖွင့်နိုင်သော cluster profile)_ | Qdrant collection metadata တွင် မှတ်တမ်းတင်ထားသော ပုံသေ embedding model အမည်။ အမှန်တကယ် embedding များကို OmniRoute ဆက်တင်များရှိ `embeddingModel` field က ညွှန်ပြထားသည့် ပံ့ပိုးသူက ထုတ်လုပ်သည်။ |
| `QDRANT_VECTOR_SIZE` | `1536` | _(ရွေးချယ်အသုံးပြုနိုင်သော cluster profile)_ | Embedding vector အတိုင်းအတာ။ သင် embedding ပြုလုပ်ရာတွင် အသုံးပြုသည့် model နှင့် ကိုက်ညီရမည် (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768)။ |
| `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(ရွေးချယ်အသုံးပြုနိုင်သော cluster profile)_ | HNSW index တည်ဆောက်ချိန် တိကျမှု။ တန်ဖိုးပိုမြင့်လေ = တည်ဆောက်မှု ပိုနှေးလေ၊ ရှာဖွေမှု ပိုမြန်လေ ဖြစ်သည်။ |
| `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | အော်ပရေတာမှ ပြင်ဆင်သတ်မှတ်နိုင်သော account rotation အတွက် ပင်မခလုတ်။ `false` ဖြစ်သည့်အခါ အောက်ပါ `OMNIROUTE_ROTATE_*` class များအနက် မည်သည့် class ကမျှ account fallback ကို မစတင်စေပါ (ပင်မခလုတ်ပိတ်ထားသည့် အခြေအနေသည် မူလအတိုင်း ဖွင့်ထားသော 429/500/502 class များကိုလည်း ပိတ်ဆို့သည်)။ ကြီးကြပ်ထိန်းချုပ်သည့် front-end (ဥပမာ VibeProxy desktop app) တစ်ခုအား ၎င်း၏ကိုယ်ပိုင် rotation စည်းမျဉ်းများကို backend ၏ account-fallback engine သို့ ထင်ဟပ်အသုံးချနိုင်စေသည်။ |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Upstream မှ reset အချိန်အတွက် တိကျသောအချက်ပြမှု မပေးသည့်အခါ rate limit ထိထားသော account တွင် အသုံးချမည့် cooldown (စက္ကန့်)။ `0` = ပုံသေ override အစား engine ၏ မူလ cooldown ကို အသုံးပြုသည်။ |
| `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Front-end ၏ "reset အချိန်မရှိဘဲ rate-limited အဖြစ် tag မတပ်ပါနှင့်" ဟူသော ဦးစားပေးသတ်မှတ်ချက်ကို ထင်ဟပ်ထားခြင်း။ |
| `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | `429` error များအတွက် status တစ်ခုချင်းအလိုက် fallback ဖွင့်ထားမှု။ `false` ဖြစ်သည့်အခါ (`OMNIROUTE_ROTATION_ENABLED=true` ဖြစ်နေသော်လည်း) `429` သည် account rotation ကို မစတင်စေတော့ဘဲ client ထံသို့ ပြန်ပို့မည်။ |
| `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Account ကို rotate မလုပ်မီ `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` အတွင်း လိုအပ်သည့် `429` error အရေအတွက်။ `1` (မူလတန်ဖိုး) သည် ယခင်အပြုအမူကို ထိန်းသိမ်းလျက် ချက်ချင်း rotate လုပ်သည်။ |
| `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | `OMNIROUTE_ROTATE_429_THRESHOLD` ပြည့်မီရန် `429` error များကို ရေတွက်သည့် ရွေ့လျားအချိန်ကာလ (စက္ကန့်)။ |
| `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | `5xx` server error များအတွက် status တစ်ခုချင်းအလိုက် fallback ဖွင့်ထားမှု (`502` တွင် ၎င်း၏ကိုယ်ပိုင် class ရှိသောကြောင့် မပါဝင်ပါ)။ `false` ဖြစ်သည့်အခါ ဤ error များသည် account rotation ကို မစတင်စေတော့ပါ။ |
| `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Account ကို rotate မလုပ်မီ `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` အတွင်း လိုအပ်သည့် `5xx` error အရေအတွက်။ `1` (မူလတန်ဖိုး) သည် ချက်ချင်း rotate လုပ်သည်။ |
| `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` (မမှန်ကန်သော gateway) အမှားများအတွက် status အလိုက် fallback ဖွင့်ပေးခြင်း။ `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` | ကိုယ်တိုင်ဖွင့်ရန်လိုသည် (မူလအားဖြင့် ပိတ်ထားသည်)- `true` ဖြစ်သည့်အခါ သာမန် `400` (မမှန်ကန်သော တောင်းဆိုမှု) တစ်ခုသည်လည်း အကောင့်လှည့်ပြောင်းမှုကို ဖြစ်ပေါ်စေသည်။ ဤလုပ်ဆောင်ချက်သည် ထပ်ပေါင်းဖြည့်စွက်ခြင်းသာဖြစ်သည် — ဤ flag နှင့် မသက်ဆိုင်ဘဲ rate-limit/quota စာသားပါရှိသည့် `400` တစ်ခုကို ရရှိလျှင် fallback ပြုလုပ်သည့် engine ၏ လက်ရှိအပြုအမူကို မည်သည့်အခါမျှ တားဆီးမည်မဟုတ်ပါ။ |
| `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 ဖြင့် မောင်းနှင်သည့် နွေးထွေးစတင်မှုဖြစ်ပြီး ၅ နာရီ rate-limit အချိန်ကာလကို ပထမဆုံး အမှန်တကယ်တောင်းဆိုမှုဖြင့် မဟုတ်ဘဲ အချိန်ဇယားသတ်မှတ်ထားသော ရိုးရှင်းသည့် တောင်းဆိုမှုတစ်ခုဖြင့် ဖွင့်ပေးသည် (#8848)။ `OMNIROUTE_WARMUP_ENABLED` သည် အမှန်တန်ဖိုးမဟုတ်ပါက **သို့မဟုတ်** ချိတ်ဆက်မှုကို `settings.claudeWarmup.connections` တွင် အမှတ်အသားမပြုထားပါက အချိန်ဇယားစနစ်သည် ပိတ်ထားမည်ဖြစ်သည်။ ချိတ်ဆက်မှုစာရင်း ဗလာဖြစ်နေပါက env var ကို ဖွင့်ထားသော်လည်း မည်သည့်ချိတ်ဆက်မှုကိုမျှ နွေးထွေးစတင်ပေးမည်မဟုတ်ပါ။
| ကိန်းရှင် | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------------------ | --------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_WARMUP_ENABLED` | _(မသတ်မှတ်ထား → ပိတ်)_ | `src/lib/warmupScheduler.ts` | warmup scheduler အတွက် ပင်မခလုတ်။ `1`/`true`/`yes`/`on` ကို လက်ခံသည် (စာလုံးအကြီးအသေး မခွဲခြားဘဲ ရှေ့နောက် whitespace များကို ဖြတ်တောက်သည်)။ အခြားတန်ဖိုးတစ်ခုခု သို့မဟုတ် မသတ်မှတ်ထားခြင်းက scheduler ကို ပိတ်ထားစေသည်။ |
| `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | warmup tick အတွက် အကွက်ငါးခုပါ cron expression ဖြစ်ပြီး host နာရီကို မစဉ်းစားဘဲ `America/Los_Angeles` (Anthropic ၏ reset timezone) ဖြင့် အကဲဖြတ်သည်။ |
| `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | tick တစ်ကြိမ်လျှင် ပြိုင်တူ warmup လုပ်မည့် connection အရေအတွက်။ `1`-`10` အတွင်း ကန့်သတ်ထားပြီး ကိန်းဂဏန်းမဟုတ်သော တန်ဖိုးဖြစ်ပါက `3` ကို ပြန်သုံးသည်။ |
| `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | warmup request အတွက် အသုံးပြုသော model။ မူလ model ကို သင့် plan တွင် မရနိုင်မှသာ ပြောင်းလဲသတ်မှတ်ပါ။ window ကို ဖွင့်နိုင်သေးသည့် ဈေးအသက်သာဆုံး model ကို ရွေးချယ်ပါ။ |
### Browser-Login VNC Session များနှင့် Data-Dir Alias
အပြန်အလှန်တုံ့ပြန်နိုင်သော browser-login credential ဖမ်းယူမှု (`/api/vnc-session`) အတွက် အသုံးပြုသည့် containerized Chromium+VNC နှင့် အဟောင်း `DATA_DIR` alias တို့ဖြစ်သည်။ အားလုံးသည် မဖြစ်မနေမဟုတ်ပါ — VNC မူလတန်ဖိုးများသည် တွဲဖက်ပါဝင်သော `omniroute-vnc-chromium:local` image ကို ရည်ညွှန်းပြီး custom container image၊ port များ သို့မဟုတ် lifecycle ချိန်ညှိမှုအတွက်သာ ပြောင်းလဲသတ်မှတ်ရသည်။
| ကိန်းရှင် | မူလတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Chromium+VNC login container အတွက် Docker image tag။ `docker/vnc-browser/chromium` ကို build လုပ်ပါ သို့မဟုတ် ၎င်းကို custom image တစ်ခုသို့ ညွှန်ပါ။ |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | VNC container ကို စတင်ရန် အသုံးပြုသော container runtime binary (ဥပမာ `podman` ဟု သတ်မှတ်ပါ)။ |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | container အတွင်း ဖွင့်ထားသော VNC/noVNC port။ |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | container အတွင်းရှိ Chrome DevTools Protocol port။ |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | container အတွင်းရှိ Chromium profile directory လမ်းကြောင်း။ |
| `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | သိမ်းဆည်းထားသော browser-login profile များကို ထားရှိသည့် host directory။ |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 မိနစ်) | `src/lib/vncSession/manifest.ts` | လှုပ်ရှားမှုမရှိသော VNC session တစ်ခုကို ရှင်းလင်းမဖယ်ရှားမီ စောင့်ဆိုင်းမည့် idle timeout (ms)။ |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 မိနစ်) | `src/lib/vncSession/manifest.ts` | VNC session တစ်ခု၏ သက်တမ်းအတွက် အများဆုံး အတိအကျကန့်သတ်ချက် (ms)။ |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | တစ်ပြိုင်နက် အသုံးပြုနိုင်သော VNC session အများဆုံးအရေအတွက်။ |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | containerized browser သည် CDP-ready ဖြစ်လာသည်အထိ စောင့်ဆိုင်းမည့် timeout (ms)။ |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | login ပြီးစီးပြီးနောက် ဖမ်းယူထားသော session/cookie များကို စုဆောင်းရန် timeout (ms)။ |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | containerized Chromium သို့ ပေးပို့သည့် အပို command-line flag များ။ |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | မူလ bridge အစား VNC login container ချိတ်ဆက်မည့် သီးသန့် Docker network (#12571) ဖြစ်ပြီး sibling container များက ၎င်း၏ CDP bridge port ကို မရောက်ရှိနိုင်စေရန် ဖြစ်သည်။ |
| `VIBEPROXY_DATA_DIR` | _(မသတ်မှတ်ထား)_ | `open-sse/services/notionThreadSessions.ts` | `DATA_DIR` အတွက် **အဟောင်း alias** ဖြစ်ပြီး `DATA_DIR` နှင့် `OMNIROUTE_DATA_DIR` နှစ်ခုစလုံး မသတ်မှတ်ထားမှသာ စစ်ဆေးသည်။ Notion web-thread session cache (`/notion-web-thread-sessions.json`) ၏ တည်နေရာကို သတ်မှတ်ပေးသည်။ |
---
## 26. စမ်းသပ်မှုနှင့် E2E Harness
`scripts/dev/run-next-playwright.mjs`, `scripts/dev/smoke-electron-packaged.mjs`,
`scripts/dev/run-ecosystem-tests.mjs` နှင့် `scripts/build/uninstall.mjs` တို့က အသုံးပြုသည်။ Production deployment များတွင် အောက်ပါ value အားလုံးကို မသတ်မှတ်ဘဲ ထားပါ။
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| -------------------------------------- | -------------------------------------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | Playwright runner အတွက် E2E bootstrap mode (`auth`, `fresh`, `reuse`)။ |
| `OMNIROUTE_E2E_PASSWORD` | `INITIAL_PASSWORD` ကို အရန်အဖြစ် အသုံးပြုသည် | `scripts/dev/run-next-playwright.mjs` | Playwright environment ထဲသို့ ထည့်သွင်းပေးသည့် admin password။ |
| `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Playwright run များအတွင်း local healthcheck polling ကို ပိတ်သည်။ |
| `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | စမ်းသပ်မှုများအတွင်း OAuth token healthcheck loop ကို ပိတ်သည်။ |
| `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(မသတ်မှတ်ထား)_ | `src/lib/tokenHealthCheck.ts` | ကြိုတင်လုပ်ဆောင်သော token-refresh sweep မှ ဖယ်ထုတ်ထားသည့် ကော်မာဖြင့်ခြားထားသော provider များ (ဥပမာ `codex,openai`)။ Healthcheck ကို လုံးဝပိတ်ခြင်းအစား ပစ်မှတ်ထားသော အခြားရွေးချယ်မှုဖြစ်ပြီး short-TTL provider များက ဆက်လက် refresh လုပ်နေချိန်တွင် cascade provider များသည် တုံ့ပြန်မှုအခြေပြုသာ ဖြစ်နေမည်။ |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Playwright stdout ထဲရှိ healthcheck ဆိုင်ရာ မလိုအပ်သော output များကို ဖျောက်ထားသည်။ |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Playwright မစတင်မီ Next.js production build ကို ကျော်သွားသည် (CI ပိုမိုကောင်းမွန်အောင် ပြုလုပ်မှု)။ |
| `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | OmniRoute uninstall hook ကို ကျော်သွားသည် (`node_modules` ကို မပျက်မစီး ထိန်းသိမ်းရန် CI က အသုံးပြုသည်)။ |
| `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | ecosystem/protocol စမ်းသပ်မှုများကို မလုပ်ဆောင်မီ server ကောင်းမွန်စွာ အလုပ်လုပ်လာရန် စောင့်ဆိုင်းချိန် (ms)။ |
| `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | Packaged app က ဝန်ဆောင်မှုပေးမည်ဟု Electron smoke harness က မျှော်လင့်ထားသည့် URL။ |
| `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Smoke harness က လက်လျှော့ခြင်းမပြုမီ စုစုပေါင်း timeout (ms)။ |
| `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | စာမျက်နှာ load ပြီးနောက် တည်ငြိမ်ရန် စောင့်ဆိုင်းသည့် အချိန်ကာလ (ms)။ |
| `ELECTRON_SMOKE_APP_EXECUTABLE` | _(အလိုအလျောက်)_ | `scripts/dev/smoke-electron-packaged.mjs` | Packaged Electron executable သို့ တိကျစွာသတ်မှတ်ထားသည့် path။ |
| `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | Electron smoke run အတွက် data directory။ |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | လုပ်ဆောင်မှုပြီးဆုံးပြီးနောက် smoke data directory ကို ဆက်လက်ထိန်းသိမ်းထားရန် `1` ဟု သတ်မှတ်ပါ။ |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | လုပ်ဆောင်နေစဉ် Electron logs များကို stdout သို့ stream လုပ်ရန် `1` ဟု သတ်မှတ်ပါ။ |
| `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: တူညီသော data dir ဖြင့် ပြန်လည်စတင်ပြီး ဒုတိယအကြိမ်စတင်မှုတွင် မူရင်း SQLite driver ကို ရွေးချယ်ကြောင်း အတည်ပြုပါ။ |
| `CLI_DEVIN_BIN` | _(PATH ရှာဖွေမှု)_ | `open-sse/executors/devin-cli.ts` | Devin CLI binary path ကို အစားထိုးသတ်မှတ်ပါ။ |
### Docs ဘာသာပြန်လုပ်ငန်းစဉ်
`scripts/i18n/run-translation.mjs` (`npm run i18n:run` command) က အသုံးပြုသည်။
variable ငါးခုစလုံးကို မူလအတိုင်း မသတ်မှတ်ထားပါ — docs translator ကို
လုပ်ဆောင်နိုင်သင့်သော စက်များတွင်သာ ၎င်းတို့ကို `.env` ထဲ၌ သတ်မှတ်ပါ။
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ----------------------------------- | --------------- | ---------------------------------- | -------------------------------------------------------------------------------- |
| `OMNIROUTE_TRANSLATION_API_URL` | _(မသတ်မှတ်ထား)_ | `scripts/i18n/run-translation.mjs` | ဘာသာပြန် backend အတွက် OpenAI-compatible base URL။ |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(မသတ်မှတ်ထား)_ | `scripts/i18n/run-translation.mjs` | ဘာသာပြန် backend အတွက် Bearer token (မည်သည့်အခါမျှ log မတင်ပါ)။ |
| `OMNIROUTE_TRANSLATION_MODEL` | _(မသတ်မှတ်ထား)_ | `scripts/i18n/run-translation.mjs` | Model id၊ ဥပမာ `gpt-4o-mini` သို့မဟုတ် `cx/gpt-5.4-mini`။ |
| `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | request တစ်ခုချင်းစီအတွက် timeout ကို milliseconds ဖြင့် သတ်မှတ်သည်။ |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | file / locale အများအပြားအတွက် လုပ်ဆောင်သည့်အခါ အပြိုင်ဘာသာပြန် request အရေအတွက်။ |
---
## 27. Radar Feed (ကိုယ်တိုင် Host ပြုလုပ်ခြင်း)
RADAR_ENABLED feature flag ဖြင့် ထိန်းချုပ်ထားသော စိတ်ကြိုက် add-on ဖြစ်သည် (မူလအားဖြင့် ပိတ်ထားသည် — env var မဟုတ်ဘဲ Settings/DB မှတစ်ဆင့် အဖွင့်အပိတ်ပြုလုပ်သည့် feature flag ဖြစ်သည်၊
[docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off) ကို ကြည့်ပါ)။
အောက်ပါ ပထမ variable လေးခုသည် ကိုယ်တိုင် host ပြုလုပ်ထားသော သို့မဟုတ် fork ပြုလုပ်ထားသော feed နှင့်
supporter-key လုပ်ငန်းစဉ်များအတွက် စိတ်ကြိုက် override များဖြစ်သည်။ ပဉ္စမမြောက် `RADAR_ADMIN_URL` သည် ပိုင်ရှင်၏
သီးသန့် operations panel သို့ ချိတ်ဆက်ရန် မူလတန်ဖိုးမရှိသော သီးခြား link ဖြစ်သည်။ Module ဆိုင်ရာ စာရွက်စာတမ်းအပြည့်အစုံနှင့် ၎င်း၏
[အစမှအဆုံး activation နှင့် လမ်းညွှန်ပါ setup အစီအစဉ်](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup) အတွက် [docs/frameworks/RADAR.md](../frameworks/RADAR.md) ကို ကြည့်ပါ။
ယေဘုယျ Home/Changelog ကြေညာချက်ဖတ်ရှုစနစ်ကို environment
variable ဖြင့် configure မလုပ်ထားသည့်အပြင် RADAR_ENABLED feature flag အပေါ်လည်း မမှီခိုပါ။ ၎င်းသည်
`src/shared/utils/releaseNotes.ts` တွင် ကြေညာထားသော public repository ၏
`news.json` URL ကို GET ဖြင့်သာ ဖတ်ရှုသည်၊ ပယ်ဖျက်ထားသည့် ID များကို browser local storage တွင် ဆက်လက်သိမ်းဆည်းထားသည်။
| Variable | မူလတန်ဖိုး | Source File | ဖော်ပြချက် |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | သီးခြားစီ လက်မှတ်ထိုးထားသော catalog၊ referrals၊ supporter-offers နှင့် Intel feed များအားလုံး အသုံးပြုသည့် အခြေခံ URL။ ကိုယ်တိုင် host ပြုလုပ်ထားသော သို့မဟုတ် fork ပြုလုပ်ထားသော service သို့ ညွှန်ရန် override ပြုလုပ်ပါ။ |
| `RADAR_FEED_PUBKEY` | _(သတ်မှတ်ချိတ်ဆွဲထားသော မူလ key)_ | `src/lib/radar/pinnedKeys.ts` | စိတ်ကြိုက် feed မှ feed signature များကို အတည်ပြုရန် အသုံးပြုသည့် Ed25519 public key (base64-DER SPKI သို့မဟုတ် PEM)။ |
| `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | "ကျွန်ုပ်သည် contributor ဖြစ်သည်" dashboard button က ဖွင့်ပေးမည့် URL (GitHub OAuth supporter-key claim လုပ်ငန်းစဉ်)။ |
| `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | "Project ကို ပံ့ပိုးပါ" dashboard button က ဖွင့်ပေးမည့် URL (ငွေပေးချေမှု/plans စာမျက်နှာ)။ |
| `RADAR_ADMIN_URL` | _(မသတ်မှတ်ထား)_ | `src/lib/radar/links.ts` | ပိုင်ရှင်သာ အသုံးပြုနိုင်သော သီးသန့် operations-panel link။ HTTP loopback SSH forward မှလွဲ၍ HTTPS လိုအပ်သည်၊ မသတ်မှတ်ထားသော သို့မဟုတ် မမှန်ကန်သော တန်ဖိုးများသည် navigation item ကို မဖန်တီးပါ။ |
---
## စစ်ဆေးချက်: ဖယ်ရှားထားသော / အသုံးမပြုတော့သော Variable များ
အောက်ပါ variable များသည် ယခင် `.env.example` version များတွင် ပါဝင်ခဲ့သော်လည်း လက်ရှိ codebase အတွင်း **runtime reference မရှိပါ**။ ၎င်းတို့ကို ဖယ်ရှားပြီးဖြစ်သည်။
| ပြောင်းလဲကိန်း | အကြောင်းရင်း |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `STORAGE_DRIVER=sqlite` | မည်သည့် source file ကမျှ ဖတ်ယူအသုံးမပြုပါ။ SQLite သည် တစ်ခုတည်းသော ပံ့ပိုးထားသည့် driver ဖြစ်သောကြောင့် ရွေးချယ်ရန် မလိုအပ်ပါ။ |
| `INSTANCE_NAME=omniroute` | docs/env template အဟောင်းများတွင် ပါရှိသော်လည်း runtime တွင် အသုံးမပြုပါ။ အနာဂတ် multi-instance feature တစ်ခုတွင် ပြန်လည်ပါဝင်လာနိုင်သည်။ |
| `SQLITE_MAX_SIZE_MB=2048` | source code တွင် ရည်ညွှန်းထားခြင်း မရှိပါ။ Database အရွယ်အစားကို တမင်ကန့်သတ်ထားခြင်း မရှိပါ။ |
| `SQLITE_CLEAN_LEGACY_FILES=true` | source code တွင် ရည်ညွှန်းထားခြင်း မရှိပါ။ Legacy cleanup ကို ဖယ်ရှားခဲ့ပြီးဖြစ်နိုင်သည်။ |
| `CLI_ROO_BIN` | `src/shared/services/cliRuntime.ts` တွင် မှတ်ပုံတင်ထားခြင်း မရှိပါ။ |
| `CLI_KIMI_CODING_BIN` | `src/shared/services/cliRuntime.ts` တွင် မှတ်ပုံတင်ထားခြင်း မရှိပါ (Kimi Coding သည် CLI binary မဟုတ်ဘဲ OAuth ကို အသုံးပြုသည်)။ |
| `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | source code ၏ မည်သည့်နေရာတွင်မျှ ရည်ညွှန်းထားခြင်း မရှိပါ။ |
| `CEREBRAS_API_KEY` / `COHERE_API_KEY` / `FIREWORKS_API_KEY` / `GROQ_API_KEY` / `MISTRAL_API_KEY` / `NEBIUS_API_KEY` / `PERPLEXITY_API_KEY` / `TOGETHER_API_KEY` / `XAI_API_KEY` | v3.8.0 တွင် ဖယ်ရှားခဲ့သည်။ runtime သည် ဤ env vars များကို မဖတ်တော့ပါ — credentials များကို Dashboard / `data/provider-credentials.json` / encrypted DB မှ ရယူသည်။ |
| `CURSOR_PROTOBUF_DEBUG` | v3.8.0 တွင် ဖယ်ရှားခဲ့သည်။ Cursor executor သည် `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` ကို အသုံးပြုသည် (§22 ကို ကြည့်ပါ)။ |
| `CLI_COMPAT_KIRO` | v3.8.0 တွင် ဖယ်ရှားခဲ့သည်။ Kiro သည် `CLI_COMPAT_OMITTED_PROVIDER_IDS` ထဲတွင် ပါဝင်သည် — ၎င်း၏ toggle သည် မည်သည့်အကျိုးသက်ရောက်မှုမျှ မရှိပါ။ |
| `QIANFAN_API_KEY` | v3.8.0 တွင် အခြားအသုံးမပြုသော provider API key stub များနှင့်အတူ ဖယ်ရှားခဲ့သည်။ |
### မူလတန်ဖိုး ပြင်ဆင်ချက်များ
| ပြောင်းလဲကိန်း | `.env.example` တန်ဖိုးအဟောင်း | Code ၏ အမှန်တကယ် မူလတန်ဖိုး | ပြင်ဆင်ချက် |
| ------------------------- | ----------------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
| `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ အထင်မှားစေသော တန်ဖိုးကို ဖယ်ရှားခဲ့ပြီး `7` ကို မူလတန်ဖိုးအဖြစ် မှတ်တမ်းတင်ထားသည် |
| `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ အထင်မှားစေသော တန်ဖိုးကို ဖယ်ရှားခဲ့ပြီး `7` ကို မူလတန်ဖိုးအဖြစ် မှတ်တမ်းတင်ထားသည် |
### OpenCode config ပြန်လည်ထုတ်လုပ်ခြင်း (ad-hoc tooling)
လက်ရှိလည်ပတ်နေသော OmniRoute instance မှ ရယူထားသည့် တိကျသော `limit.context` နှင့်
`limit.output` တန်ဖိုးများဖြင့် `opencode.json` ကို ပြန်လည်ထုတ်လုပ်ရန်
`scripts/ad-hoc/regen-opencode-config.ts` က အသုံးပြုသည်။ ပုံမှန်လည်ပတ်မှုအတွက် ဤအရာများထဲမှ မည်သည့်အရာကိုမျှ မလိုအပ်ပါ — ဤ script သည်
developer tooling အတွက်သာ ဖြစ်သည်။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------ | ------------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | `/v1/models` အတွက် query ပြုလုပ်မည့် OmniRoute instance ၏ အခြေခံ URL။ |
| `OMNIROUTE_KEY` | _(မသတ်မှတ်ထား)_ | `scripts/ad-hoc/regen-opencode-config.ts` | OmniRoute `/v1/models` endpoint တွင် authentication ပြုလုပ်ရန် API key။ မသတ်မှတ်ထားပါက `OPENCODE_API_KEY` ကို အစားထိုးအသုံးပြုသည်။ |
| `OPENCODE_API_KEY` | _(မသတ်မှတ်ထား)_ | `scripts/ad-hoc/regen-opencode-config.ts` | ပြန်လည်ထုတ်လုပ်ထားသော `opencode.json` ထဲသို့ ရေးသားမည့် OpenCode ပုံစံ API key (`sk-...`)။ မသတ်မှတ်ထားပါက `OMNIROUTE_KEY` ကို အစားထိုးအသုံးပြုသည်။ |
### Compression အော့ဖ်လိုင်းအကဲဖြတ် harness (ad-hoc ကိရိယာ)
အော့ဖ်လိုင်း compression အကဲဖြတ် CLI ဖြစ်သော `scripts/compression-eval/index.ts` က အသုံးပြုသည်။
ပုံမှန်လည်ပတ်မှုအတွက် မလိုအပ်ပါ — developer ကိရိယာအတွက်သာ ဖြစ်သည်။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ---------------------------- | ------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (အလွတ်) | `scripts/compression-eval/index.ts` | အော့ဖ်လိုင်း compression-eval CLI က စမ်းသပ်အသုံးပြုသည့် provider အတွက် operator က ပေးထားသော JSON အထောက်အထားများ (`JSON.parse` ဖြင့် parse လုပ်သည်)။ dry run ပြုလုပ်ရန် မသတ်မှတ်ဘဲထားပါ။ |
### VNC Browser Session များ
Browser-automation provider များအတွက် Docker အခြေပြု headless Chromium session များကို configure လုပ်ရန် `src/lib/vncSession/manifest.ts` က အသုံးပြုသည်။ အားလုံးမှာ ရွေးချယ်နိုင်သည် — ပုံသေတန်ဖိုးများကို အောက်တွင် ဖော်ပြထားသည်။
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ရင်းမြစ်ဖိုင် | ဖော်ပြချက် |
| ------------------------------------- | ------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | VNC container များကို စတင်ရန် အသုံးပြုသည့် Docker binary ၏ လမ်းကြောင်း။ |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | VNC Chromium container အတွက် Docker image။ |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(ထည့်သွင်းပါရှိသော flag များ)_ | `src/lib/vncSession/manifest.ts` | Container အတွင်းရှိ browser ထံ ပေးပို့မည့် အပို Chromium CLI argument များ။ |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | Container အတွင်းရှိ VNC port။ |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Container အတွင်းရှိ Chrome DevTools Protocol port။ |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Container အတွင်းရှိ profile directory။ |
| `OMNIROUTE_VNC_PROFILE_DIR` | _(မသတ်မှတ်ထား)_ | `src/lib/vncSession/manifest.ts` | အမြဲတမ်းသိမ်းဆည်းမည့် browser profile များအတွက် host-side directory။ |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | VNC session တစ်ခုကို သိမ်းဆည်းသိမ်းဆည်းရှင်းလင်းခြင်းမပြုမီ အလုပ်မရှိချိန် timeout (ms)။ |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | အများဆုံး session ကြာချိန် (ms)။ |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | တစ်ပြိုင်နက်တည်း လုပ်ဆောင်နိုင်သော VNC session အရေအတွက် အများဆုံး။ |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Browser အသင့်ဖြစ်မှု timeout (ms)။ |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | သိမ်းဆည်းခြင်း/ရှင်းလင်းခြင်း timeout (ms)။ |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | ပုံသေ bridge အစား container ချိတ်ဆက်မည့် သီးသန့် Docker network (#12571)။ |
| `VIBEPROXY_DATA_DIR` | _(မသတ်မှတ်ထား)_ | `open-sse/services/notionThreadSessions.ts` | Notion thread session များကို အမြဲတမ်းသိမ်းဆည်းရန် directory။ |
### Internal service authentication
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ဖော်ပြချက် |
| --------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | Management-plane service-to-service authentication အတွက် inline token။ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | Internal service token ပါဝင်သည့် ဖိုင်၏ လမ်းကြောင်း (container များတွင် ပိုမိုသင့်လျော်ပြီး inline ကိန်းရှင်ထက် ဦးစားပေးသည်)။ |
### OpenRouter provider စာရင်းအင်းများ
| ကိန်းရှင် | ပုံသေတန်ဖိုး | ဖော်ပြချက် |
| ----------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | Catalog အချက်အလက်ဖြည့်စွက်ရန် provider တစ်ခုချင်းစီ၏ OpenRouter စာရင်းအင်းများကို ရယူခြင်းအား ကျော်ရန် `false` ဟု သတ်မှတ်ပါ။ |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | ရယူထားသော OpenRouter provider စာရင်းအင်းများအတွက် cache TTL (ms)။ |
### ထည့်သွင်းထားသော Redis binding
| ကိန်းရှင် | မူလတန်ဖိုး | ဖော်ပြချက် |
| --------------------------- | ----------- | --------------------------------------------------------------------------------------------- |
| `REDIS_BIND_HOST` | `127.0.0.1` | ထည့်သွင်းထားသော Redis ဝန်ဆောင်မှုအတွက် ချိတ်ဆက်လက်ခံမည့် လိပ်စာ။ |
| `REDIS_PORT` | `6379` | ထည့်သွင်းထားသော Redis ဝန်ဆောင်မှုအတွက် ပေါ့တ်။ |
| `OMNIROUTE_REDIS_BIND_HOST` | – | ထည့်သွင်းထားသော Redis ၏ ချိတ်ဆက်လက်ခံမည့်လိပ်စာအတွက် OmniRoute နယ်ပယ်သတ်မှတ် အစားထိုးတန်ဖိုး။ |
---
## 24. Release v3.8.50 တွင် ထပ်မံထည့်သွင်းထားသည့်အရာများ
ယခင် environment-contract snapshot ပြီးနောက် ဤဆက်တင်များကို စတင်ထည့်သွင်းခဲ့သည်။
| Variable | မူလသတ်မှတ်ချက် | Source File | ဖော်ပြချက် |
| ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | ပြန်လည်ကြိုးစားနိုင်သော `503` ကို မပေးမီ အရင်းအမြစ်များစွာအသုံးပြုသည့် chat admission slot တစ်ခုအတွက် စောင့်ဆိုင်းရမည့် အများဆုံးကြာချိန်။ တိုတောင်းပြီး အကန့်အသတ်ရှိသော စောင့်ဆိုင်းမှုသည် agent များ အစုလိုက်ဝင်လာခြင်းကို ချက်ချင်း `503` ပြန်ပေးမည့်အစား အစဉ်လိုက်ဆောင်ရွက်စေသည်။ `0` သည် ချက်ချင်းငြင်းပယ်သည့် အပြုအမူကို ပြန်လည်အသက်သွင်းသည်။ |
| `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Admission စောင့်ဆိုင်းမှုအတွက် queued-bytes ဘတ်ဂျက်။ စောင့်ဆိုင်းမှုကြောင့် heap ပိုမိုကြီးထွားမလာစေရန် process တစ်ခုလုံးတွင် ရပ်ဆိုင်းသိုလှောင်ထားသော body byte စုစုပေါင်းကို ကန့်သတ်သည် (#4380)။ ဘတ်ဂျက်ကျော်လွန်သော စောင့်ဆိုင်းမှုများသည် ပြန်လည်ကြိုးစားနိုင်သည့် `503` ကို ချက်ချင်းရရှိသည်။ |
| `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | #10110 မှစ၍ အသုံးမဝင်တော့သည့် no-op အဖြစ် သတ်မှတ်ထားသည်။ Session တစ်ခုချင်းစီအလိုက် admission lane များကို ဖယ်ရှားပြီး process တစ်ခုလုံးအတွက် ဘတ်ဂျက်တစ်ခုတည်းဖြင့် အစားထိုးခဲ့သည်။ Configuration compatibility အတွက် လက်ခံထားသော်လည်း လျစ်လျူရှုသည်။ |
| `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | #10110 မှစ၍ အသုံးမဝင်တော့သည့် no-op အဖြစ် သတ်မှတ်ထားသည်။ Session တစ်ခုချင်းစီအလိုက် admission lane များကို ဖယ်ရှားပြီး process တစ်ခုလုံးအတွက် ဘတ်ဂျက်တစ်ခုတည်းဖြင့် အစားထိုးခဲ့သည်။ Configuration compatibility အတွက် လက်ခံထားသော်လည်း လျစ်လျူရှုသည်။ |
| `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (ပိတ်ထားသည်) | `open-sse/services/admission/runtime.ts` | ပြောင်းလဲလိုက်လျောညီထွေဖြစ်သော runtime virtual admission lane များ (#9654)။ Tenant တစ်ခုချင်းစီအတွက် adaptive gate (system 2) ၏ အဓိကခလုတ်ဖြစ်သည်။ အထက်ပါ အသုံးမပြုတော့သော connection တစ်ခုချင်းစီအလိုက် lane variable များ (TTL_MS / MAX_SESSIONS၊ #10110 မှစ၍ no-op ဖြစ်သည်) နှင့် ကွဲပြားသည်။ အမည်တူ Dashboard feature flag လည်းရှိသည်။ env var သည် dashboard override ထက် ဦးစားပေးပြီး ပြန်လည်စတင်ရန် လိုအပ်သည်။ |
| `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | တန်းစီထားသော run ကို မစတင်မီ run-now call တစ်ခုက လက်ရှိလုပ်ဆောင်နေသော job ကို မည်မျှကြာကြာ စောင့်မည်ကို ကန့်သတ်သည်။ |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | ဖွင့်ထားသည် | `open-sse/services/adobeFireflySession.ts` | Account အလိုက် သီးခြားဖြစ်သော Chrome CDP session များမှတစ်ဆင့် IMS နှင့် browser-risk state ကို လတ်ဆတ်နေစေသည်။ ပိတ်ရန် `0` သတ်မှတ်ပါ။ |
| `ADOBE_FIREFLY_SESSION_DISK` | ဖွင့်ထားသည် | `open-sse/services/adobeFireflySession.ts` | ပြုပြင်ထားသော Adobe session များကို `DATA_DIR` အောက်တွင် အမြဲတမ်းသိမ်းဆည်းသည်။ Memory-only state အတွက် `0` သတ်မှတ်ပါ။ |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Adobe Firefly generate submission များအကြား အနည်းဆုံးခြားနားချိန်။ |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | အောင်မြင်သော Adobe submission သုံးခုမြောက်တိုင်းပြီးနောက် ထပ်ဆောင်းအနားပေးချိန်။ |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | Debug အတွက်သာဖြစ်သော true-headless mode။ Adobe colligo သည် ၎င်းမှရရှိလာသော risk session ကို ပုံမှန်အားဖြင့် ငြင်းပယ်သည်။ |
| `CHROME_PATH` | အလိုအလျောက်ရှာဖွေသည် | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | Platform ၏ အလိုအလျောက်ရှာဖွေမှု မလုံလောက်သည့်အခါ browser ဖြင့်မောင်းနှင်သော executor များအသုံးပြုရန် ရွေးချယ်နိုင်သော Chrome executable absolute path။ |
| `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 နှင့် တိုက်ဆိုင်စစ်ဆေးသည့် shared secret။ Webhook path အတွက် မဖြစ်မနေလိုအပ်သည်။ မသတ်မှတ်ထားပါက webhook ပေးပို့မှုများကို 503 ဖြင့် ငြင်းပယ်သည်။ |
| `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Telegram chat ပြန်ကြားချက်များအတွက် အသုံးပြုသည့် model။ |
| `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Proxy သို့မဟုတ် ကိုယ်တိုင် host လုပ်ထားသော Bot API server များအတွက် Bot API အခြေခံ URL override။ |
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | အထွက် Bot API call များအတွက် မီလီစက္ကန့်ဖြင့် သတ်မှတ်သော timeout။ |
| `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (ဖွင့်ထားသည်) | `scripts/build/optionalPackStaging.mjs` | Electron standalone tree အတွက် ရွေးချယ်နိုင်သော ML/browser pack များကို staging ပြုလုပ်စဉ် `.tar.gz` tarball များ ထုတ်လုပ်ခြင်းကို ကျော်ရန် `0` သတ်မှတ်ပါ။ Pack directory များနှင့် `optional-packs.index.json` ကို ဆက်လက်ထုတ်လုပ်မည်ဖြစ်သည်။ Artifact upload အရွယ်အစားကို လျှော့ချရန် desktop release workflow က အသုံးပြုသည်။ |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | xAI subscription image route များကို မှတ်ပုံတင်နိုင်စေသည်။ API-key image path ကို မပြောင်းလဲဘဲ ထားနိုင်ရန် မူလအားဖြင့် ပိတ်ထားသည်။ |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | `429` response တွင် အသုံးပြုနိုင်သော `Retry-After` အချက်အလက် မပါရှိသည့်အခါ key တစ်ခုချင်းစီအတွက် မီလီစက္ကန့်ဖြင့် သတ်မှတ်သော cooldown။ |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | ဖွင့်ထားသည် | `open-sse/services/estimatorCalibration.ts` | Memory အတွင်း estimator calibration ကို မှတ်တမ်းတင်ခြင်းနှင့် အသုံးချခြင်းတို့ကို ပိတ်ရန် `off`, `0`, သို့မဟုတ် `false` ဟု သတ်မှတ်ပါ။ |
| `NEXT_MANUAL_SIG_HANDLE` | _(အတွင်းပိုင်း)_ | `scripts/dev/standalone-server-ws.mjs` | အတွင်းပိုင်း standalone-server signal-handler override။ ပုံမှန်အားဖြင့် operator များက configuration ပြုလုပ်မည့်အစား launcher က သတ်မှတ်ပြီးနောက် ရှင်းလင်းသည်။ |
### ChatGPT Web (Codex)
Headless browser နှင့် အထွက် tool 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 သည် port `9223` ရှိ sidecar ကို အသုံးပြုသည်။ |
| `CDP_PROXY_TOKEN` | _(မသတ်မှတ်ထား)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | သတ်မှတ်ထားပါက CDP proxy sidecar သို့ ပေးပို့သော တောင်းဆိုမှုတိုင်းသည် ဤတန်ဖိုးကို `X-Omni-Cdp-Token` header တွင် ထည့်သွင်းပေးပို့ရမည် (#13679)။ တန်ဖိုးမရှိပါက proxy သည် စစ်မှန်ကြောင်းအတည်ပြုခြင်းမရှိဘဲ ဆက်လက်လွှဲပို့မည်ဖြစ်ပြီး ထိုအခြေအနေတွင် Compose ကွန်ရက် `chatgpt-web-codex-net` ၏ ကွန်ရက်သီးခြားခွဲထားမှုကသာ ကာကွယ်ပေးသည်။ `openssl rand -hex 32` ဖြင့် ဖန်တီးပါ။ |
| `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/chatgpt-web-codex.ts` | စက်တွင်း Codex tool လည်ပတ်မှုအဆင့်များအတွက် ကမ္ဘာလုံးဆိုင်ရာ OpenAI tunnel ID။ |
| `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(မသတ်မှတ်ထား)_ | `open-sse/executors/chatgpt-web-codex.ts` | ကမ္ဘာလုံးဆိုင်ရာ tunnel runtime key၊ log များတွင် မည်သည့်အခါမျှ မဖော်ပြရ။ |
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | MCP bridge အတွက် အသစ်ဖန်တီးထားသော ChatGPT custom connector ၏ အမည်အတိအကျ။ |
| `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | browser၊ broker နှင့် tunnel အခြေအနေတို့အတွက် သီးသန့် directory။ |
| `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 သို့ ရွေးချယ်နိုင်သော absolute path။ |
| `CODEX_CHATGPT_WEB_BUN` | _(အလိုအလျောက်ရှာဖွေ)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Bun runtime binary သို့ ရွေးချယ်နိုင်သော absolute path။ |
| `CODEX_WEB_GPT_BUN` | _(မသတ်မှတ်ထား)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | `CODEX_CHATGPT_WEB_BUN` အတွက် အဟောင်းစနစ်သုံး အရန်တန်ဖိုး၊ setup အသစ်များတွင် စံသတ်မှတ်ထားသော အမည်ကို အသုံးပြုသည်။ |
---
## OmniConductor Bridge
OmniConductor hub လုပ်ဆောင်ချက်များကို local A2A TaskManager (`src/lib/conductor/`) သို့ ပုံတူကူးပေးသည့် သက်တမ်းရှည် SSE consumer ဖြစ်သည်။ အသုံးပြုရန် ရွေးချယ်ဖွင့်ရမည် — `CONDUCTOR_HUB_URL` သတ်မှတ်ထားမှသာ bridge စတင်သည်။ Server-side အတွက်သာဖြစ်သည်- hub token သည် browser သို့ လုံးဝမရောက်ရှိစေရပါ။
| Variable | Default | Source File | Description |
| ------------------------------ | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `CONDUCTOR_HUB_URL` | _(ဗလာ)_ | `src/lib/conductor/boot.ts` | OmniConductor hub ၏ အခြေခံ URL (ဥပမာ `http://127.0.0.1:7910`)။ မသတ်မှတ်ထားလျှင် = bridge ကို ပိတ်ထားသည်။ |
| `CONDUCTOR_HUB_TOKEN` | _(ဗလာ)_ | `src/lib/conductor/boot.ts` | SSE feed အတွက် hub အထောက်အထား — hub ပေါ်တွင် `spokesperson` အမျိုးအစား peer တစ်ခု ထုတ်ပေးပါ (`POST /v1/peers`, admin)။ |
| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(ဗလာ)_ | `src/lib/conductor/hubProxy.ts` | အဝင် A2A→hub လုပ်ဆောင်ချက်လွှဲအပ်ခြင်းအတွက် အထောက်အထား (`POST /v1/tasks`)၊ မသတ်မှတ်ထားလျှင် `CONDUCTOR_HUB_TOKEN` ကို အစားထိုးအသုံးပြုသည်။ |
| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | dashboard chat proxy (`/api/conductor/ask`) နောက်ကွယ်ရှိ spokesperson (Faro) service ၏ အခြေခံ URL။ |
### Quota ကို ထည့်သွင်းစဉ်းစားသော အချိန်ဇယားချမှတ်ခြင်း
တောင်းဆိုချက်မပို့မီ token budget စစ်ဆေးမှုများအတွက် `open-sse/services/combo.ts` နှင့် `src/lib/quota/quotaScheduler.ts` တို့က အသုံးပြုသည်။ အသုံးပြုရန် ရွေးချယ်ဖွင့်ရမည် — မသတ်မှတ်ထားပါက မူလ routing အပြုအမူသည် မပြောင်းလဲပါ။
| Variable | Default | Source File | Description |
| ---------------------------------- | --------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | `1` ဖြစ်သောအခါ ဖြန့်ဝေမပို့မီ window တစ်ခုချင်းစီအလိုက် token budget (`rateLimitOverrides.tpm`, table `provider_quota_state`) ဖြင့် ခန့်မှန်းထားသော တောင်းဆိုချက်ကုန်ကျစရိတ်ကို မဖြည့်ဆည်းနိုင်သည့် connection များကို ကျော်သွားသည်။ budget သတ်မှတ်မထားပါက fail-open ပြုလုပ်သည်။ |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(ဖွင့်ထားသည်)_ | `open-sse/services/estimatorCalibration.ts` | context-guard token estimator (#14931) ၏ feedback calibration- (provider, model, tools ပါဝင်မှု) တစ်ခုချင်းစီအလိုက် `usage.prompt_tokens` / ခန့်မှန်းချက်၏ EMA ကို 0.15–2.0 အတွင်း ကန့်သတ်ထားပြီး memory အတွင်း၌သာ သိမ်းဆည်းသည်။ `off`, `0` သို့မဟုတ် `false` သည် မှတ်တမ်းတင်ခြင်းနှင့် အသုံးချခြင်းကို ပိတ်သည်။ |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | `xai-oauth` (`xao`) နှင့် `grok-cli` image route များကို မှတ်ပုံတင်သည်။ အမည်တူ dashboard feature flag ဖြစ်ပြီး DB override ရှိပါက ဤတန်ဖိုးထက် ဦးစားပေးသည်။ |