# 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) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [sr](../../../sr/docs/reference/ENVIRONMENT.md) · 🇸🇪 [sv](../../../sv/docs/reference/ENVIRONMENT.md) · 🇰🇪 [sw](../../../sw/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ta](../../../ta/docs/reference/ENVIRONMENT.md) · 🇮🇳 [te](../../../te/docs/reference/ENVIRONMENT.md) · 🇹🇭 [th](../../../th/docs/reference/ENVIRONMENT.md) · 🇹🇷 [tr](../../../tr/docs/reference/ENVIRONMENT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/ENVIRONMENT.md) · 🇺🇿 [uz](../../../uz/docs/reference/ENVIRONMENT.md) · 🇻🇳 [vi](../../../vi/docs/reference/ENVIRONMENT.md) · 🇳🇬 [yo](../../../yo/docs/reference/ENVIRONMENT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/ENVIRONMENT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/ENVIRONMENT.md)
---
> OmniRoute کے ذریعے شناخت کیے جانے والے ہر ماحولیاتی متغیر کا مکمل حوالہ۔
> فوری آغاز کے ٹیمپلیٹ کے لیے، [`.env.example`](../../.env.example) دیکھیں۔
> [!IMPORTANT]
> یہاں دستاویزی شکل میں درج ہر متغیر `.env.example` میں بھی موجود ہونا چاہیے، اور
> `.env.example` کا ہر متغیر یہاں بھی موجود ہونا چاہیے۔ `npm run check:env-doc-sync`
> اس شرط کو commit کے وقت اور CI میں نافذ کرتا ہے۔ کسی متغیر کو دانستہ طور پر شامل نہ کرنے کے لیے، اسے
> `scripts/check/check-env-doc-sync.mjs` کے اندر موجود allowlist میں شامل کریں۔
---
## فہرستِ مضامین
- [1. مطلوبہ راز](#1-required-secrets)
- [2. اسٹوریج اور ڈیٹابیس](#2-storage--database)
- [3. نیٹ ورک اور پورٹس](#3-network--ports)
- [4. سیکیورٹی اور توثیق](#4-security--authentication)
- [5. ان پٹ کی صفائی اور PII کا تحفظ](#5-input-sanitization--pii-protection)
- [6. ٹول اور روٹنگ کی پالیسیاں](#6-tool--routing-policies)
- [7. URLs اور کلاؤڈ مطابقت پذیری](#7-urls--cloud-sync)
- [8. آؤٹ باؤنڈ پراکسی](#8-outbound-proxy)
- [9. CLI ٹول انضمام](#9-cli-tool-integration)
- [10. اندرونی ایجنٹ اور MCP انضمامات](#10-internal-agent--mcp-integrations)
- [11. OAuth فراہم کنندہ کی اسناد](#11-oauth-provider-credentials)
- [12. فراہم کنندہ کے User-Agent اوور رائیڈز](#12-provider-user-agent-overrides)
- [13. CLI فنگر پرنٹ مطابقت](#13-cli-fingerprint-compatibility)
- [14. API کلید فراہم کنندگان](#14-api-key-providers)
- [15. ٹائم آؤٹ کی ترتیبات](#15-timeout-settings)
- [16. لاگنگ](#16-logging)
- [17. میموری کی بہتری](#17-memory-optimization)
- [18. قیمتوں کی مطابقت پذیری](#18-pricing-sync)
- [19. ماڈل کی مطابقت پذیری (Dev)](#19-model-sync-dev)
- [20. فراہم کنندہ کے لیے مخصوص ترتیبات](#20-provider-specific-settings)
- [21. پراکسی کی صحت](#21-proxy-health)
- [22. ڈیبگنگ](#22-debugging)
- [23. GitHub انضمام](#23-github-integration)
- [24. اسکلز سینڈ باکس (v3.8.0+)](#24-skills-sandbox-v380)
- [27. ریڈار فیڈ (سیلف ہوسٹنگ)](#27-radar-feed-self-hosting)
- [تعیناتی کے منظرنامے](#deployment-scenarios)
- [آڈٹ: حذف شدہ / غیر فعال متغیرات](#audit-removed--dead-variables)
---
## 1. مطلوبہ راز
پہلی بار چلانے سے پہلے انہیں **لازماً** سیٹ کرنا ہوگا۔ ان کے بغیر، ایپلیکیشن یا تو شروع ہونے سے انکار کر دے گی یا غیر محفوظ ڈیفالٹس کے ساتھ کام کرے گی۔
| متغیر | درکار | طے شدہ قدر | ماخذ فائل | تفصیل |
| ---------------------------- | --------------------- | -------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `JWT_SECRET` | **ہاں** | _(کوئی نہیں)_ | `src/lib/auth` | ڈیش بورڈ کے تمام سیشن کوکیز (JWT) پر دستخط کرتا اور ان کی توثیق کرتا ہے۔ `openssl rand -base64 48` کے ذریعے بنائیں۔ |
| `API_KEY_SECRET` | **ہاں** | _(کوئی نہیں)_ | `src/lib/db/apiKeys.ts` | SQLite میں محفوظ API کلید کی اقدار کے لیے AES انکرپشن کلید۔ `openssl rand -hex 32` کے ذریعے بنائیں۔ |
| `INITIAL_PASSWORD` | **ہاں** | `CHANGEME` | بوٹ اسٹریپ اسکرپٹ | ڈیش بورڈ کے ابتدائی ایڈمن پاس ورڈ کو مقرر کرتا ہے (`.env.example` کی طے شدہ قدر سے مطابقت رکھتا ہے — اسے جان بوجھ کر واضح طور پر غیر محفوظ رکھا گیا ہے تاکہ تبدیلی لازمی ہو)۔ **پہلے استعمال سے قبل اسے تبدیل کریں۔** لاگ اِن کے بعد Dashboard → Settings → Security کے ذریعے تبدیل کریں۔ |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **ہاں** (پروڈکشن میں) | _(مقرر نہیں)_ | `src/app/api/internal/codex-responses-ws/route.ts` | اندرونی Codex Responses WebSocket برج کے لیے مشترکہ راز۔ Electron/browser WS ریلے اور OmniRoute کے درمیان برج درخواستوں کی توثیق کرتا ہے۔ ⚠️ **پروڈکشن میں درکار ہے — جب یہ مقرر نہ ہو تو تمام WS برج درخواستیں مسترد کر دی جاتی ہیں۔** `openssl rand -base64 32` کے ذریعے بنائیں۔ |
| `OMNIROUTE_SW_BUILD_ID` | نہیں | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | PWA شیل (#11779) کے لیے واضح service-worker کیش ختم کرنے والی id؛ ریزولیوشن سلسلے میں سب سے پہلے۔ |
| `SOURCE_VERSION` | نہیں | _(مقرر نہیں)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | سلسلے میں دوسرے نمبر پر — PaaS بلڈرز (مثلاً Heroku طرز کے) اسے تعینات کردہ commit کے طور پر مقرر کرتے ہیں۔ |
| `NEXT_PUBLIC_SW_BUILD_ID` | نہیں | _(اخذ شدہ)_ | `src/shared/components/PwaRegister.tsx` | بلڈ کے وقت دستیاب عوامی قدر، جسے کلائنٹ `/sw.js?v=…` رجسٹر کرنے کے لیے استعمال کرتا ہے؛ پہلے مذکورہ دونوں اقدار، اور پھر git SHA سے اخذ کی جاتی ہے۔ |
| `OMNIROUTE_PEER_STAMP_TOKEN` | نہیں (خودکار) | _(ہر بوٹ پر خودکار)_ | `src/server/authz/policies/management.ts` | ہر پراسیس کے لیے راز، جو ثابت کرتا ہے کہ قابلِ اعتماد peer-IP اسٹیمپ OmniRoute کے اپنے HTTP سرور (`scripts/dev/peer-stamp.mjs`) سے آیا ہے۔ authz مڈل ویئر درخواست کے مقامی ہونے پر (LOCAL_ONLY روٹس کی loopback/LAN گیٹنگ) صرف اسی وقت اعتماد کرتا ہے جب اسٹیمپ میں یہ ٹوکن موجود ہو۔ ہر بوٹ پر خودکار طور پر بنایا جاتا ہے — اسے غیر مقرر رہنے دیں؛ اسے صرف ان multi-process سیٹ اپس کے لیے مقرر کریں جنہیں اسٹیمپ مشترک رکھنا ضروری ہو۔ |
### بنانے کے احکامات
```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 تمام مستقل ڈیٹا کے لیے **SQLite** (`better-sqlite3` کے ذریعے) استعمال کرتا ہے۔ یہ متغیرات ڈیٹا کے مقام، انکرپشن، اور لائف سائیکل کو کنٹرول کرتے ہیں۔
| متغیر | طے شدہ قدر | سورس فائل | وضاحت |
| ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | SQLite DB، بیک اپس، اور ڈیٹا فائلوں کی بنیادی ڈائریکٹری۔ Docker والیومز یا حسبِ ضرورت راستوں کے لیے اسے اوور رائیڈ کریں۔ |
| `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(غیر متعین)_ | `src/lib/dataPaths.ts` | ٹیسٹ/eval کے DATA_DIR حفاظتی بندوبست (#10428) سے بچ نکلنے کا راستہ۔ ایسے ٹیسٹس اور Node eval/print پروبز (`-e`/`--eval`/`-p`/`--print`، بشمول `--eval=`/`--print=` صورتیں) جن میں `DATA_DIR` موجود نہ ہو، ایک عارضی قابلِ ترک ڈائریکٹری کی طرف بھیج دیے جاتے ہیں تاکہ وہ آپریٹر کا اصل ڈیٹابیس نہ کھول سکیں؛ اصل ڈائریکٹری کو دوبارہ استعمال کرنے کے لیے اسے `1` پر سیٹ کریں۔ |
| `OMNIROUTE_BUILD_SHA` | _(غیر متعین)_ | `src/lib/monitoring/buildSha.ts` | چلتے ہوئے آرٹیفیکٹ کا Git SHA۔ اسے `npm run build:release` کے ذریعے درج کیا جاتا ہے؛ ایسے کنٹینرز میں داخل کیا جا سکتا ہے جن کے ساتھ `dist/BUILD_SHA` سینٹینل شامل نہیں ہوتا۔ یہ `/api/monitoring/health` پر `system.buildSha` کے طور پر ظاہر ہوتا ہے۔ |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | وہ ref جس کے مقابلے میں پیک-آرٹیفیکٹ پروویننس گیٹ بلڈ SHA کی جانچ کرتا ہے (#10427)۔ |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(غیر متعین)_ | `scripts/build/buildProvenance.ts` | ایسے بلڈ کی پیکنگ کی اجازت دینے کے لیے اسے `1` پر سیٹ کریں جس کا SHA ریلیز لائن پر موجود نہیں، تاکہ گیٹ کو ناکام کرنے کے بجائے اسے دانستہ کینری کے طور پر ریکارڈ کیا جائے (#10427)۔ |
| `OMNIROUTE_SMOKE_API_KEY` | _(غیر متعین)_ | `scripts/ops/deploy-canary.mjs` | کینری ڈپلائمنٹ اسموک پروب کے لیے API کلید، جو `/v1/chat/completions` پر `Authorization: Bearer` کے طور پر بھیجی جاتی ہے۔ یہ صرف ڈپلائمنٹ اسکرپٹ (#10429) استعمال کرتا ہے، سرور کبھی نہیں۔ اس کا آپٹ اِن CLI اسموک ہارنس کے `OMNIROUTE_SMOKE_*` متغیرات (`RUN_CLI_SMOKE=1`، `tests/integration/upstream-cli-smoke.int.test.ts` میں `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS`) سے کوئی تعلق نہیں — [CLI انٹیگریشنز → حقیقی اسموک سویپ](../guides/CLI-INTEGRATIONS.md) دیکھیں۔ |
| `OMNIROUTE_BUILDING` | _(غیر متعین)_ | `src/lib/buildPhase.ts` | بلڈ مرحلے کا سگنل (#10060): اسے `scripts/build/build-next-isolated.mjs` کے ذریعے `1` پر سیٹ کیا جاتا ہے اور ہر شروع کیے گئے بلڈ ورکر کو وراثت میں ملتا ہے، تاکہ DB تہہ مقامی better-sqlite3 ایڈ آن لوڈ کرنے کے بجائے ایک غیر عملی اسٹب واپس کرے (کیونکہ یہ ایڈ آن اخراج کے وقت ورکر کو ختم کر دیتا ہے)۔ چلتے ہوئے سرور کے لیے اسے کبھی سیٹ نہیں کیا جاتا۔ |
| `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | غیر معمولی وینڈر کردہ ٹریز کے لیے اختیاری مقامی انحصارات کی پری بلڈ جانچ چھوڑنے کی خاطر اسے `1` پر سیٹ کریں۔ اس سے کسی گمشدہ انحصار کو قابلِ بلڈ نہیں بنایا جا سکتا؛ اسے صرف تب استعمال کریں جب مقامی انحصارات کسی بیرونی ذریعے سے فراہم کیے گئے ہوں۔ |
| `OMNIROUTE_DATA_DIR` | _(غیر متعین)_ | `open-sse/executors/promptql/threadSticky.ts` | `DATA_DIR` کا **متبادل عرف**، جسے صرف اس وقت چیک کیا جاتا ہے جب `DATA_DIR` غیر متعین ہو۔ اسے PromptQL ایگزیکیوٹر کے آن ڈسک تھریڈ-اسٹکی سیشن کیش (`
/promptql-thread-sessions.json`) کا مقام معلوم کرنے کے لیے استعمال کیا جاتا ہے؛ اگر دونوں میں سے کوئی متغیر سیٹ نہ ہو تو کیش صرف میموری میں رہتا ہے (دوبارہ شروع ہونے کے بعد برقرار نہیں رہتا)۔ |
| `OMNIROUTE_PLUGINS_DIR` | _(غیر متعین)_ | `src/lib/plugins/scanner.ts` | وہ ڈائریکٹری جسے **رن ٹائم پلگ اِن اسکینر** پڑھتا ہے — اور وہ بنیادی مقام جہاں پلگ اِن مینیجر انسٹال کرتا ہے — یوں ہوم سے اخذ شدہ طے شدہ قدر کو اوور رائیڈ کیا جاتا ہے (#11827)۔ صرف اسکین کا راستہ منتقل کرنے کے لیے HOME کو تبدیل کرنے کے بجائے، Docker/K8s میں اسے بائنڈ ماؤنٹ شدہ پلگ اِن ٹری کی طرف متوجہ کریں (HOME ہوم سے متعلق دیگر تمام رویوں کو بھی کنٹرول کرتا ہے)۔ غیر متعین = `~/.omniroute/plugins`، یا جب پراسیس کسی ہوم کو بالکل ایکسپورٹ نہ کرے تو `/tmp/.omniroute/plugins` — یہ متغیر اسی خاموش عدم دریافت کو ختم کرتا ہے۔ حل شدہ ڈائریکٹری کو اسٹارٹ اپ کے وقت کامیاب ہونے والے اِن پٹ کے ساتھ `scanner.dir_resolved` کے طور پر ایک بار لاگ کیا جاتا ہے۔ صرف سرور سائیڈ: CLI کمانڈ پلگ اِنز اپنا الگ `OMNIROUTE_PLUGIN_PATH` برقرار رکھتے ہیں (سیکشن 9)۔ |
| `STORAGE_ENCRYPTION_KEY` | _(خالی = غیر فعال)_ | `src/lib/db/encryption.ts` | محفوظ حالت میں مکمل SQLite ڈیٹابیس کی خفیہ کاری کے لیے AES کلید۔ اسے `openssl rand -hex 32` کے ذریعے بنائیں۔ |
| `STORAGE_ENCRYPTION_KEY_VERSION` | `v1` | `scripts/build/bootstrap-env.mjs`, `electron/main.js` | خفیہ کاری کی کلید کا ورژن لیبل۔ پرانے بیک اپس کی رمز کشائی کی معاونت کے لیے کلید کی تبدیلی کرتے وقت اس میں اضافہ کریں۔ |
| `DISABLE_SQLITE_AUTO_BACKUP` | `false` | `src/lib/db/backup.ts` | `true` ہونے پر معمول کے/تحریر سے پہلے بنائے جانے والے SQLite فائل بیک اپس کو چھوڑ دیتا ہے (models.dev قیمت محفوظ کرنا/صاف کرنا، ترتیبات میں تحریریں)۔ دستی اور بحالی سے پہلے کے بیک اپس پھر بھی چلتے ہیں۔ یہ مائیگریشن رنر کے لازمی پائیدار حفاظتی اسنیپ شاٹ یا موجودہ مستقل DB کے لیے بڑے پیمانے کی مائیگریشن کے حفاظتی انتظام کو **غیر فعال نہیں** کرتا۔ غیر دستی بیک اپس زیادہ سے زیادہ ہر 60 منٹ میں ایک بار بنائے جاتے ہیں۔ ڈیش بورڈ کی **ترتیبات → اسٹوریج** معمول کے خودکار بیک اپ کو آزادانہ طور پر غیر فعال کر سکتی ہے۔ |
| `OMNIROUTE_CRYPT_KEY` | _(غیر متعین)_ | `src/lib/db/encryption.ts` | `STORAGE_ENCRYPTION_KEY` کا **قدیم متبادل نام**۔ بنیادی متغیر موجود نہ ہونے پر اسے متبادل کے طور پر قبول کیا جاتا ہے۔ |
| `OMNIROUTE_API_KEY_BASE64` | _(غیر متعین)_ | `src/lib/db/encryption.ts` | **قدیم متبادل نام** (Base64 میں انکوڈ شدہ شکل) جسے متبادل کے طور پر قبول کیا جاتا ہے۔ استعمال سے پہلے خودکار طور پر ڈی کوڈ کیا جاتا ہے۔ |
| `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(غیر متعین)_ | `src/lib/db/core.ts` | وقفہ وار SQLite صحت جانچ کا وقفہ (ms) تبدیل کریں۔ غیر متعین ہونے پر، طے شدہ اقدار `NODE_ENV` سے اخذ کی جاتی ہیں۔ |
| `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(ہٹا دیا گیا)_ | `src/lib/db/walMaintenance.ts` | **ہٹا دیا گیا۔** وقفہ وار فعال `wal_checkpoint(TRUNCATE)` مشترکہ wal-index میپنگ کو ناموزوں بنا سکتا ہے اور SIGBUS (#13973) کے ساتھ پراسیس کریش کر سکتا ہے، اس لیے شیڈیولر اب موجود نہیں ہے۔ یہ متغیر غیر مؤثر ہے: مثبت قدر پر فرسودگی کی ایک مرتبہ وارننگ لاگ ہوتی ہے، جبکہ `0` یا غیر متعین ہونے پر خاموش رہتا ہے۔ WAL کی دیکھ بھال PASSIVE چیک پوائنٹس (ذیل میں) کے ذریعے اور اختتامی چیک پوائنٹ کے ذریعے تراش کر کی جاتی ہے۔ |
| `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 منٹ) | `src/lib/db/walMaintenance.ts` | کثرت سے ہونے والے `wal_checkpoint(PASSIVE)` کا وقفہ (ms) تبدیل کریں۔ زیر التوا WAL فریمز کو چھوٹا رکھتا ہے تاکہ چیک پوائنٹس تیز رہیں اور اختتامی تراش کے درمیان WAL فائل محدود رہے۔ `0` اسے غیر فعال کر دیتا ہے۔ |
| `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | جب کوئی PASSIVE ٹِک WAL فائل کو اس حجم سے بڑا پائے تو `wal_checkpoint(RESTART)` چلائیں، تاکہ میپ شدہ wal-index کو دوبارہ لکھے بغیر WAL نئے سرے سے شروع ہو۔ فعال truncate-mode چیک پوائنٹس ہٹا دیے گئے تھے (`OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` والی قطار دیکھیں)۔ |
| `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | اسے `1`/`true`/`yes`/`on` پر سیٹ کریں تاکہ وسائل کا شدید دباؤ `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` تک برقرار رہنے کے بعد پراسیس بند ہو جائے، جس سے کوئی نگران (systemd `Restart=always`، Docker ری اسٹارٹ پالیسی) مسلسل 503 جوابات دینے کے بجائے ایک صاف پراسیس دوبارہ شروع کر سکے۔ |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 منٹ) | `open-sse/utils/resourcePressure.ts` | خودکار ری اسٹارٹ کے لیے پراسیس بند ہونے سے پہلے شدید دباؤ جتنی دیر برقرار رہنا ضروری ہے۔ |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(خودکار شناخت)_ | `src/lib/db/adapters/sqljsAdapter.ts` | `sql.js` WASM فال بیک اڈاپٹر استعمال کرتے وقت `sql-wasm.wasm` کا واضح راستہ (مطلق یا cwd کے لحاظ سے نسبتی)۔ غیر متعین ہونے پر پیکیج کے انحصارات اور ممکنہ لے آؤٹس کے ذریعے خودکار طور پر شناخت کیا جاتا ہے۔ |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | حذف کیے جانے سے پہلے، خودکار صفائی کے عمل کے ذریعے کسی اختتامی (مکمل/ناکام/منسوخ/میعاد ختم) Batch API جاب کے چیک پوائنٹس، حوالہ شدہ ان پٹ/آؤٹ پٹ/خرابی کی فائلوں اور قطار کو برقرار رکھنے کے دنوں کی تعداد۔ یہ صرف `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` فعال کیے جانے کے بعد مؤثر ہوتا ہے؛ یہ OpenAI کی اپنی Batch API آؤٹ پٹ برقرار رکھنے کی مدت سے مماثل ہے۔ یہ آپریٹر کے ذریعے چلائے جانے والے `DELETE /api/v1/batches/delete-completed` روٹ کو متاثر نہیں کرتا، جو ڈیزائن کے مطابق غیر مشروط رہتا ہے (عمر کا کوئی فلٹر نہیں)۔ |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | `true` ہونے پر، خودکار صفائی کے عمل کو `OMNIROUTE_BATCH_RETENTION_DAYS` سے زیادہ پرانی اختتامی Batch API جابز (اور ان کے چیک پوائنٹس) حذف کرنے اور ان اپ لوڈ شدہ فائلوں کا BLOB مواد صاف کرنے دیں جن کا اپنا `expires_at` گزر چکا ہو۔ طے شدہ طور پر غیر فعال: ہر موجودہ تنصیب یہ ڈیٹا پہلے کی طرح اس وقت تک برقرار رکھتی ہے جب تک کوئی آپریٹر اسے فعال نہ کرے۔ یہ ڈیش بورڈ سے قابلِ تدوین فیچر فلیگ بھی ہے — `docs/reference/FEATURE_FLAGS.md` → رن ٹائم دیکھیں۔ |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | آغاز کے وقت DB کی صحت کی جانچ کو مکمل طور پر چھوڑنے کے لیے اسے `1` پر سیٹ کریں۔ مختصر دورانیے کے کاموں اور انٹیگریشن ٹیسٹس کے لیے مفید ہے۔ |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | DB کی صحت کی جانچ کا لوپ لازماً فعال کرنے کے لیے اسے `1` پر سیٹ کریں، حتیٰ کہ جب اسے عام طور پر چھوڑ دیا جاتا ہو (مثلاً مختصر دورانیے کے کاموں میں)۔ |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | `npm install` کے دوران مقامی رن ٹائم وارم اپ چھوڑنے کے لیے اسے `1` پر سیٹ کریں۔ ایسے CI/ہیڈلیس انسٹالز میں مفید ہے جہاں sqlite پہلے ہی بلڈ ہو چکا ہو۔ |
| `OMNIROUTE_MIGRATIONS_DIR` | _(خودکار شناخت)_ | `src/lib/db/migrationRunner.ts` | اس ڈائریکٹری کو اوور رائیڈ کریں جسے مائیگریشن رنر اسکین کرتا ہے۔ حسبِ ضرورت بلڈز میں بنڈل شدہ مائیگریشنز فراہم کرتے وقت مفید ہے۔ |
| `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(سیٹ نہیں)_ | `src/lib/db/migrationRunner/extraDirs.ts` | اضافی مائیگریشن ڈائریکٹریاں، پلیٹ فارم پاتھ ڈیلیمیٹر سے الگ کردہ `namespace=dir` اندراجات کی صورت میں (مثلاً `ee=/opt/app/enterprise/db/migrations`)۔ وہاں ملنے والی فائلیں `-` کے طور پر ریکارڈ کی جاتی ہیں، لہٰذا اپنی مائیگریشنز فراہم کرنے والی ڈسٹری بیوشن کبھی بھی اپ اسٹریم عددی سلاٹس سے متصادم نہیں ہوتی۔ ناقص اندراج، نامعتبر نیم اسپیس، یا غائب ڈائریکٹری کی صورت میں اسکیما کو خاموشی سے چھوڑنے کے بجائے آغاز پر خرابی ظاہر ہوتی ہے۔ |
| `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | بڑی تعداد میں زیرِ التوا مائیگریشنز کی حفاظتی حد (#3416)۔ اگر کسی موجودہ DB پر اس تعداد سے زیادہ مائیگریشنز زیرِ التوا ہوں تو آغاز منسوخ ہو جاتا ہے (یہ صاف ہو چکی ٹریکنگ ٹیبل سے تحفظ دیتا ہے)۔ پرانا بیک اپ بحال کرنے کے لیے اسے بڑھائیں؛ جانچ غیر فعال کرنے کے لیے `0` پر سیٹ کریں۔ |
| `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | `check:install-upgrade` ریلیز گیٹ کے لیے ورکنگ ڈائریکٹری۔ اسے تقریباً 12 GB درکار ہیں (دو ~3 GB انسٹال ٹریز اور ٹاربال)، اس لیے اسے چھوٹے tmpfs پر نہیں چلنا چاہیے — خود میزبانی والے رنر پر `/tmp` ایک 12 GB RAM بیکڈ tmpfs ہے اور گیٹ نے اسے مکمل بھر دیا، جس سے پیکیج ادھورا رہ گیا۔ |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(کوڈ میں طے شدہ)_ | `src/lib/spend/batchWriter.ts` | بیچ شدہ اخراجات/لاگت رائٹر کے لیے فلش وقفہ (ms)۔ کم اقدار رائٹس کے یکجا ہونے کو کم کرتی ہیں؛ زیادہ اقدار DB تنازع کو کم کرتی ہیں۔ |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(کوڈ میں طے شدہ)_ | `src/lib/spend/batchWriter.ts` | جبری فلش سے پہلے بفر شدہ اخراجات کے اندراجات کی زیادہ سے زیادہ تعداد۔ زیادہ QPS والی تعیناتیوں پر اسے بڑھائیں؛ جب محدود میموری زیادہ اہم ہو تو اسے کم کریں۔ |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(سیٹ نہیں)_ | `open-sse/utils/proxyFetch.ts` | Vercel ریلے پاتھ پر `[ProxyFetch]` ڈیبگ لاگز خارج کرنے کے لیے اسے `"true"` پر سیٹ کریں۔ روٹنگ کے اشارے افشا ہونے سے بچانے کے لیے یہ بطور ڈیفالٹ بند ہے۔ |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | تفصیلی `[ProxyEgress]` پراسیس لاگ لائن میں کلائنٹ/ایگریس IPs اور اکاؤنٹ کا سابقہ شامل کرنے کے لیے اسے `"true"` یا `"1"` پر سیٹ کریں۔ بطور ڈیفالٹ اسے بند رکھا گیا ہے تاکہ پراسیس لاگ IPs یا اکاؤنٹ کا سابقہ افشا نہ کرے۔ |
| `OMNIROUTE_DEBUG` | _(سیٹ نہیں)_ | `bin/cli/commands/quota.mjs` | CLI کوٹا کمانڈز سے ہر درخواست کی ٹائمنگ تشخیصی معلومات (`[omniroute] GET completed in Nms`) stderr پر پرنٹ کرنے کے لیے اسے `1` پر سیٹ کریں۔ |
| `OMNIROUTE_HEALTHCHECK_PATH` | _(خودکار)_ | `scripts/dev/healthcheck.mjs` | کنٹینر کی صحت کی جانچ کے ذریعے پروب کیا جانے والا واضح پاتھ۔ سیٹ نہ ہونے کی صورت میں پروب اسے `OMNIROUTE_BASE_PATH` سے اخذ کرتا ہے؛ اسے سیٹ کرنے سے گہرے مانیٹرنگ اینڈ پوائنٹ کا استعمال دوبارہ فعال ہو جاتا ہے۔ |
| `OMNIROUTE_DEBUG_COMPLETION` | _(سیٹ نہیں)_ | `bin/cli/commands/completion.mjs` | CLI شیل کمپلیشن کیش پاتھز (پڑھنا/ریفریش کرنا/لکھنا) سے `[omniroute completion]` تشخیصی معلومات خارج کرنے کے لیے اسے کسی بھی غیر خالی قدر پر سیٹ کریں۔ بطور ڈیفالٹ بند — یہ کیشز خاموشی سے ناکام ہوتے ہیں تاکہ غائب یا خراب کیش کبھی بھی ٹیب کمپلیشن کو متاثر نہ کرے۔ |
| `BATCH_RETRY_DURATION_MS` | `86400000` (24 گھنٹے) | `open-sse/services/batchProcessor.ts` | انفرادی بیچ آئٹمز کے لیے دوبارہ کوشش کی زیادہ سے زیادہ مدت (ms)۔ اس مدت سے تجاوز کرنے والے آئٹمز کو ناکام نشان زد کیا جاتا ہے۔ |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | بیچ آئٹم کی دوبارہ کوششوں پر ایکسپونینشل بیک آف کے لیے بنیادی تاخیر (ms)۔ |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | بیچ آئٹم کی دوبارہ کوششوں کے درمیان ایکسپونینشل بیک آف کی زیادہ سے زیادہ حد (ms)۔ |
| `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | بیک وقت پراسیس کیے جانے والے بیچز کی زیادہ سے زیادہ تعداد۔ تھروپُٹ بڑھانے کے لیے اسے بڑھائیں؛ شرح کی حد سے متعلق مسائل کی یلغار سے بچنے کے لیے اسے کم رکھیں۔ |
> [!IMPORTANT]
> کسی موجودہ مستقل ڈیٹابیس کو تبدیل کرنے سے پہلے، مائیگریشن رنر `DATA_DIR/db_backups/` کے تحت ایک مکمل،
> مواد کے پتے پر مبنی اسنیپ شاٹ شائع کرتا ہے۔ اشاعت کے لیے ایسا فائل سسٹم درکار ہے
> جو ایک ہی فائل سسٹم پر، اوور رائٹ کیے بغیر ہارڈ لنکس کے ساتھ پائیدار فائل سنک کی معاونت کرتا ہو۔ POSIX ہوسٹس پر
> ڈائریکٹری سنک بھی درکار ہے؛ Windows پر، Node ڈائریکٹری ہینڈلز مسترد کر سکتا ہے، اس لیے OmniRoute
> شائع شدہ فائل کو فلش کرتا ہے اور ڈائریکٹری اندراج کے سنک کو بہترین ممکنہ کوشش سمجھتا ہے۔
> اگر ماؤنٹ کردہ `DATA_DIR` یہ ضمانتیں فراہم نہیں کر سکتا، تو مائیگریشن لاگو کرنے سے پہلے
> اسٹارٹ اپ محفوظ طریقے سے ناکام ہو جاتا ہے۔ `DATA_DIR` کو ایسے والیوم پر منتقل کریں جس میں یہ بنیادی سہولیات موجود ہوں؛ مائیگریشن کی حفاظت کو نظرانداز کرنے کے لیے
> `DISABLE_SQLITE_AUTO_BACKUP` استعمال نہ کریں۔
### منظرنامے
| منظرنامہ | کنفیگریشن |
| -------------------------- | -------------------------------------------------------------------------------------- |
| **مقامی ڈیولپمنٹ** | تمام ڈیفالٹس برقرار رکھیں۔ ڈیٹابیس `~/.omniroute/omniroute.db` پر موجود ہوتا ہے۔ |
| **Docker** | `DATA_DIR=/data` + `/data` پر ایک والیوم ماؤنٹ کریں۔ |
| **محفوظ حالت میں انکرپٹڈ** | `STORAGE_ENCRYPTION_KEY` سیٹ کریں + کلید کے بیک اپ ضرور رکھیں! اسے کھونا = ڈیٹا کھونا۔ |
| **CI/ٹیسٹنگ** | `DATA_DIR=/tmp/omniroute-test` — عارضی، انکرپشن کی ضرورت نہیں۔ |
---
## 3. نیٹ ورک اور پورٹس
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PORT` | `20128` | `src/lib/runtime/ports.ts` | Dashboard UI اور API اینڈ پوائنٹس دونوں کے لیے بنیادی پورٹ (سنگل پورٹ موڈ)۔ |
| `OMNIROUTE_BASE_PATH` | _(خالی = روٹ)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | ریورس پراکسی کے پیچھے OmniRoute فراہم کرنے کے لیے URL ذیلی راستہ (Next.js کا `basePath` سیٹ کرتا ہے؛ تصدیقی ری ڈائریکٹس basePath سے آگاہ ہوتے ہیں)۔ مثلاً `/omniroute`۔ Docker میں قدر `docker build` کے دوران شامل کی جاتی ہے (`ARG OMNIROUTE_BASE_PATH`)؛ پہلے سے تیار شدہ روٹ امیجز Next.js کے شروع ہونے سے پہلے کنٹینر کے آغاز پر ایک مرتبہ مختلف رن ٹائم قدر لاگو کر سکتی ہیں۔ `NEXT_PUBLIC_BASE_URL` کو اسی ذیلی راستے سمیت عوامی اوریجن پر سیٹ کریں۔ |
| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(خالی = روٹ)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | `OMNIROUTE_BASE_PATH` کا براؤزر کو نظر آنے والا عکس، جسے بلڈ کے وقت اِن لائن کیا جاتا ہے تاکہ ڈیش بورڈ اینڈ پوائنٹ ڈسپلے `https://host/v1` کے بجائے `https://host/omniroute/v1` دکھائے۔ سیٹ نہ ہونے پر `OMNIROUTE_BASE_PATH` استعمال کرتا ہے۔ تبدیل کرنے کے بعد دوبارہ بلڈ کریں (Next کا `basePath` بلڈ ٹائم پر متعین ہوتا ہے)۔ |
| `DASHBOARD_ALLOW_EMBED` | _(غیر سیٹ = کبھی فریم نہیں کیا جا سکتا)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | HTML صفحات کو iframe میں ایمبیڈ کرنے کے لیے اختیاری اجازت۔ غیر سیٹ ہونے پر ہر روٹ `frame-ancestors 'none'` + `X-Frame-Options: DENY` کے ساتھ فراہم ہوتا ہے۔ اسے `vscode` پر سیٹ کریں تاکہ صفحات (ڈیش بورڈ، لاگ اِن، دستاویزات، لینڈنگ) `frame-ancestors 'self' vscode-webview:` کے ساتھ اور `X-Frame-Options` کے بغیر فراہم ہوں، تاکہ VS Code Simple Browser انہیں رینڈر کر سکے (OmniCopilot کا `dashboardOpen: "editor"` موڈ)۔ API سطح (`/api`، `/v1`، `/v1beta`، `/a2a`، `/healthz`، روٹ لیول عرفیات) دونوں صورتوں میں سخت ہیڈرز برقرار رکھتی ہے۔ صرف `vscode` تسلیم کیا جاتا ہے — `1`/`true` اسے فعال نہیں کرتے۔ بلڈ ٹائم: تبدیل کرنے کے بعد دوبارہ بلڈ کریں (امیجز کے لیے `docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode`؛ پہلے سے تیار شدہ انسٹالیشن پر اسے سیٹ کرنے کا کوئی اثر نہیں ہوتا)۔ |
| `API_PORT` | _(غیر سیٹ)_ | `src/lib/runtime/ports.ts` | سیٹ ہونے پر `/v1/*` پراکسی API کو اس علیحدہ پورٹ پر فراہم کرتا ہے۔ |
| `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | API پورٹ کے لیے بائنڈ ایڈریس۔ |
| `DASHBOARD_PORT` | _(غیر سیٹ)_ | `src/lib/runtime/ports.ts` | سیٹ ہونے پر Dashboard UI کو اس علیحدہ پورٹ پر فراہم کرتا ہے۔ |
| `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(غیر فعال)_ | `src/sse/utils/backpressure.ts` | بیک وقت زیرِ عمل چیٹ کنکشنز کی تعداد محدود کرتا ہے؛ حد سے زیادہ درخواستوں کو `Retry-After` کے ساتھ `503` ملتا ہے۔ مثبت صحیح عدد حفاظتی حد فعال کرتا ہے؛ غیر سیٹ/`0` اسے غیر فعال کرتا ہے۔ |
| `OMNIROUTE_INSTANCE_ID` | _(غیر سیٹ)_ | `src/shared/resilience/peerRouting.ts` | OmniRoute انسٹینسز کو زنجیر کی صورت میں منسلک کرتے وقت اس گیٹ وے کی مستقل، منفرد ID۔ آنے والے پیئر لوپ کی جانچ فعال کرتی ہے۔ اجازت یافتہ حروف: حروفِ تہجی، اعداد، `.`, `_`, `:`, اور `-`؛ زیادہ سے زیادہ 64 حروف۔ |
| `OMNIROUTE_PEER_URLS` | _(غیر سیٹ شدہ)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | کاما سے جدا کردہ OmniRoute بنیادی URLs جو `X-OmniRoute-Peer-Trace` وصول کر سکتے ہیں۔ صرف واضح طور پر اجازت یافتہ فہرست میں شامل upstream URLs ہی peer metadata وصول کرتے ہیں؛ دیگر تمام providers میں کوئی تبدیلی نہیں کی جاتی۔ |
| `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | زنجیربند درخواست پر پہلے سے ملاحظہ کردہ OmniRoute instances کی زیادہ سے زیادہ قابلِ قبول تعداد (`1`-`32`)۔ دہرائے گئے instances یا ختم شدہ بجٹ کی صورت میں HTTP `508 Loop Detected` لوٹایا جاتا ہے۔ |
| `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | Docker پروڈکشن موڈ میں Dashboard کے لیے host-side پر شائع کردہ پورٹ۔ |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Docker پروڈکشن موڈ میں API کے لیے host-side پر شائع کردہ پورٹ۔ |
| `OMNIROUTE_PORT` | _(غیر سیٹ شدہ)_ | `src/lib/runtime/ports.ts` | Electron یا دیگر wrappers کے اندر چلتے وقت `PORT` پر ترجیح حاصل کرتا ہے۔ |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | ریئل ٹائم WebSocket لائیو مانیٹرنگ سرور کے لیے پورٹ۔ |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | لائیو WebSocket سرور کے لیے bind address۔ LAN پر ظاہر کرنے کے لیے اسے `0.0.0.0` پر سیٹ کریں (`LIVE_WS_ALLOWED_ORIGINS` بھی configure کریں)۔ |
| `LIVE_WS_ALLOWED_ORIGINS` | _(غیر سیٹ شدہ)_ | `src/server/ws/liveServer.ts` | وہ کاما سے جدا کردہ اضافی origins جنہیں لائیو WebSocket کھولنے کی اجازت ہے۔ Loopback dashboard origins کی پہلے ہی بطور ڈیفالٹ اجازت ہے۔ |
| `LIVE_WS_ALLOWED_HOSTS` | _(غیر سیٹ شدہ)_ | `src/server/ws/liveServerAllowList.ts` | لائیو WebSocket origins کے لیے اجازت یافتہ، کاما سے جدا کردہ اضافی hostnames۔ `LIVE_WS_ALLOWED_ORIGINS` (مکمل origin URLs) کے برعکس، یہ صرف host والے حصے سے مماثلت کرتا ہے — LAN/Tailscale سیٹ اپس کے لیے مفید۔ |
| `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(غیر سیٹ شدہ)_ | `src/hooks/useLiveDashboard.ts` | لائیو dashboard WebSocket کے لیے عوامی URL (browser-side)۔ WS سرور کے آگے reverse proxy یا Cloudflare Tunnel استعمال کرتے وقت اسے سیٹ کریں (مثلاً `wss://ws.my-ai.com/live-ws`)؛ browser، `ws://hostname:20132` کے بجائے وہاں connect کرتا ہے۔ pathname کا حصہ WebSocket upgrade path کے طور پر بھی استعمال ہوتا ہے (ڈیفالٹ: `/live-ws`)۔ |
| `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` اور `scripts/start-ws-server.mjs` | ریئل ٹائم WebSocket سرور کو غیر فعال کرنے کے لیے `0` یا `false` پر سیٹ کریں (بطور ڈیفالٹ فعال اور loopback-bound)۔ یہ CI/harness toggle علیحدہ لائیو WebSocket helper script کو غیر فعال کرتا ہے۔ |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | فی (token، IP) relay شرح کی حد، درخواستیں/منٹ۔ In-memory، فی instance۔ `0` یا منفی قدر IP-dimension gate کو غیر فعال کر دیتی ہے (فی token DB حد پھر بھی لاگو رہتی ہے)۔ |
| `NODE_ENV` | `production` | Next.js کور | لاگنگ کی تفصیل، کیشنگ، خرابی کی تفصیلات کے اظہار، اور Next.js کی آپٹیمائزیشنز کو کنٹرول کرتا ہے۔ |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — کوڈ میں طے شدہ) | `package.json` / Next.js 16 | `npm run dev` اور `npm run build` کے لیے Turbopack ڈیفالٹ بنڈلر ہے (بینچ مارک کے مطابق بلڈز 2-3× تیز ہیں)۔ Windows پر، مقامی بائنڈنگ / بنڈلر مطابقت کی عدم موافقت پیش آنے پر، **یا محدود RAM والی مشینوں پر** webpack پر واپس جانے کے لیے اسے `0` پر سیٹ کریں — اس Next.js ورژن سلسلے (16.2.x) میں Turbopack کے پروڈکشن بلڈز کے بارے میں upstream سطح پر معلوم ہے کہ بڑے ماڈیول گرافس پر ان کا میموری استعمال webpack کے مقابلے میں کہیں زیادہ عروج تک پہنچتا ہے (Next 16.3 کی Turbopack میموری-ایوکشن درستی ابھی مستحکم نہیں ہے)؛ webpack فال بیک کا زیادہ سے زیادہ میموری استعمال خاصا کم رہتا ہے۔ #6409 دیکھیں۔ |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(غیر سیٹ شدہ)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | آغاز پر SQLite کی سالمیت کی صحت جانچ کو چھوڑنے کے لیے اسے `1` پر سیٹ کریں۔ بڑے ڈیٹابیسز پر تیز آغاز کے لیے مفید ہے۔ |
| `NOTIFY_SOCKET` | _(غیر سیٹ شدہ)_ | systemd (sd_notify پروٹوکول) | جب پراسیس sd_notify انضمام والے سروس یونٹ کے تحت چلتا ہے تو systemd اسے سیٹ کرتا ہے؛ OmniRoute، READY/WATCHDOG اطلاعات بھیجنے کے لیے، اسے پڑھتا ہے (`OMNIROUTE_DISABLE_SD_NOTIFY` دیکھیں)۔ صارف اسے کبھی سیٹ نہ کرے۔ |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(غیر سیٹ شدہ)_ | `scripts/dev/systemd-notify.mjs` | systemd یونٹ کے تحت چلنے کی صورت میں بھی systemd sd_notify (Type=notify / WatchdogSec=) کو غیر فعال کرنے کے لیے اسے `1` پر سیٹ کریں۔ systemd سے باہر نوٹیفائر ہر صورت میں کوئی کارروائی نہیں کرتا۔ |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | پس منظر میں چلنے والے اسناد کی صحت جانچ کے شیڈیولر کا وقفہ (ms)۔ کم از کم: 10000 (10s)۔ |
| `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | کیش شدہ اسناد کی صحت کی حالت کے لیے TTL (ms)۔ |
| `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | فراہم کنندہ کنکشنز کی پس منظر میں متواتر جانچ غیر فعال کرنے کے لیے اسے `1` یا `true` پر سیٹ کریں۔ تلاش فراہم کنندگان (`src/lib/providers/validation/searchProviders.ts` میں SEARCH_VALIDATOR_CONFIGS، مثلاً `tavily-search`) کو ہمیشہ اس جائزے سے خارج رکھا جاتا ہے — ان کی "توثیق" حقیقی، بل شدہ upstream استفسار ہے، اس لیے ٹائمر پر کبھی ان کی صحت جانچ نہیں کی جاتی (#9970)۔ |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Next.js کے dev/start سرور کے لیے بائنڈ ایڈریس۔ سیٹ ہونے پر ڈیفالٹ `0.0.0.0` کی جگہ لیتا ہے۔ |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Next.js لانچ کرتے وقت Playwright رنر کے زیرِ استعمال بائنڈ ایڈریس۔ مکمل طور پر الگ تھلگ ٹیسٹس کے لیے ڈیفالٹ `127.0.0.1` ہے۔ **اسے `omniroute serve` کے لیے استعمال نہ کریں** — اس کے بجائے `OMNIROUTE_SERVER_HOST` استعمال کریں (POSIX شیلز خودکار طور پر `HOSTNAME` کو مشین کے نام پر سیٹ کرتے ہیں؛ `.env` اسے اوور رائیڈ نہیں کر سکتی)۔ |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | `omniroute serve` کے لیے بائنڈ ایڈریس۔ POSIX شیل کے `HOSTNAME` متغیر سے تصادم سے بچاتا ہے (جسے bash/zsh ہمیشہ مشین کے نام پر سیٹ کرتے ہیں)۔ غیر سیٹ شدہ ہونے پر `0.0.0.0` استعمال کرتا ہے۔ (#6194) |
### پورٹ کے طریقے
```
┌─────────────────────────── واحد پورٹ (طے شدہ) ──────────────────────────┐
│ PORT=20128 │
│ → ڈیش بورڈ: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── علیحدہ پورٹس ────────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → ڈیش بورڈ: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ استعمال: ڈیش بورڈ کو localhost تک محدود رکھتے ہوئے API کو LAN پر دستیاب کریں۔ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker پروڈکشن ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → docker-compose.prod.yml میں کنٹینر پورٹس کو ہوسٹ پورٹس سے میپ کرتا ہے۔ │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 4. سیکیورٹی اور توثیق
| متغیر | ڈیفالٹ | ماخذ فائل | وضاحت |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | مشین کی منفرد شناخت بنانے کے لیے ہارڈویئر شناخت کنندگان کے ساتھ ملایا جانے والا سالٹ۔ الگ تھلگ رکھنے کے لیے ہر تعیناتی پر اسے تبدیل کریں۔ |
| `OMNIROUTE_CLI_SALT` | _(سیٹ نہیں = ہر تنصیب کے لیے بے ترتیب سالٹ، جو `/cli-token-salt.json` میں محفوظ رہتا ہے)_ | `src/lib/machineToken.ts` | مقامی CLI توثیقی ٹوکن اخذ کرنے کے لیے HMAC سالٹ۔ یہ قدر سیٹ کرنے سے مشین پر موجود تمام CLI ٹوکن تبدیل ہو جاتے ہیں اور اسے ہمیشہ محفوظ شدہ سالٹ پر ترجیح دی جاتی ہے۔ `docs/security/CLI_TOKEN.md` دیکھیں۔ |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | سیشن کوکیز پر `Secure` فلیگ سیٹ کرتا ہے۔ HTTPS کے پیچھے چلانے کی صورت میں یہ **لازماً `true` ہونا چاہیے**۔ |
| `REQUIRE_API_KEY` | `false` | API مڈل ویئر | جب `true` ہو تو تمام `/v1/*` پراکسی درخواستوں میں ایک درست API کلید شامل ہونا ضروری ہے۔ **یہ فلیگ `GET /v1/models` کو محدود نہیں کرتا**، جو اس کے بجائے ڈیش بورڈ لاگ اِن کی ترتیب (`requireAuthForModels`) کی پیروی کرتا ہے — لہٰذا `/v1/models` سے ملنے والے `401` کا یہ مطلب **نہیں** کہ انفرنس محفوظ ہے۔ `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695) دیکھیں۔ |
| `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | ڈیش بورڈ UI میں API کلید کی مکمل اقدار ظاہر کرنے کی اجازت دیتا ہے۔ اسے ڈیش بورڈ فیچر فلیگز سے ترتیب دیا جا سکتا ہے؛ مشترکہ انسٹینسز پر یہ سیکیورٹی کا خطرہ ہے۔ |
| `NO_LOG_API_KEY_IDS` | _(خالی)_ | `src/lib/compliance/index.ts` | کوما سے علیحدہ کردہ API کلید IDs جن کے لیے درخواستوں کی لاگنگ نظرانداز کی جاتی ہے (GDPR کی تعمیل)۔ |
| `DEFAULT_RATE_LIMIT_PER_DAY` | _(سیٹ نہیں = لامحدود)_ | `src/shared/utils/apiKeyPolicy.ts` | ان API کلیدوں پر لاگو ہونے والا متبادل یومیہ درخواست بجٹ جن کا `rate_limits` کالم null ہو۔ سیٹ نہ ہونے یا خالی ہونے پر: کوئی ضمنی حد نہیں (#2289، #11017)۔ `0` بھی اسی کے مساوی ہے (لامحدود)۔ مثبت صحیح عدد N، N/دن، 5N/ہفتہ، 20N/مہینہ فعال کرتا ہے۔ خراب وضع والی غیر خالی اقدار کے لیے سابقہ 1000/دن، 5000/ہفتہ، 20000/مہینہ کی ونڈوز استعمال ہوتی ہیں۔ |
| `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | درخواست کی باڈی کا زیادہ سے زیادہ مجاز سائز۔ اس حد سے تجاوز کرنے والے پے لوڈز مسترد کر دیے جاتے ہیں۔ |
| `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | اس حد کے برابر یا اس سے بڑی حقیقی درخواست باڈیز، JSON پارسنگ سے پہلے ایٹمی، عمل-مقامی، بھاری داخلہ لیز حاصل کرتی ہیں (BYTE راستہ، بشمول `POST /v1/responses`)۔ ساختی طور پر بھاری درخواستوں جیسا ہی [#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` | چیٹ روٹ کی سخت حد، جو محدود وصولی کے دوران پڑھے گئے بائٹس پر نافذ ہوتی ہے، بشمول ان درخواستوں کے جن میں `Content-Length` موجود نہ ہو، غلط ہو، یا گمراہ کن ہو؛ حد سے تجاوز پر `413` موصول ہوتا ہے۔ |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(غیر متعین — درخواستوں کی تعداد کی کوئی حد نہیں)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** درخواستوں کی تعداد پر مبنی یہ پرانی حد اب صرف اسی وقت لاگو ہوتی ہے جب اسے واضح طور پر مقرر کیا جائے۔ اسے غیر متعین چھوڑنے پر (جو ڈیفالٹ ہے)، بھاری چیٹ کی منظوری اس کے بجائے `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` کے ذریعے محدود ہوتی ہے — یہ بائٹس کا خودکار طور پر اخذ کردہ بجٹ ہے، جس کا حجم **ایک پراسیس** (ایک V8 ہیپ) میں پراسیس کی حقیقی میموری حد کی بنیاد پر مقرر ہوتا ہے۔ تقریباً 750k ٹوکن والی دو متجاوز `/v1/responses` درخواستیں تقریباً 12 Gi ہیپس کو ختم کر دیتی ہیں (#7849) — یہ **میموری بجٹ** سے متعلق تنبیہ ہے، پروڈکٹ کی 2 کی کوئی سخت زیادہ سے زیادہ حد نہیں۔ ایک صحت مند پراسیس (جس کی ہیپ شیڈ تناسب سے نیچے ہو) `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` کے ذریعے مزید بیک وقت طویل `/v1/responses` کو منظور کر سکتا ہے۔ درجنوں طویل SSE کلائنٹس (40–50) کا انحصار ہیپ + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110 پر ہے، نہ کہ ”زیادہ سے زیادہ 2“ پر۔ ”ہوسٹ استعمال کرنے“ کے لیے اسے بغیر سوچے سمجھے بڑھانا #7849 کو دوبارہ متعارف کر دیتا ہے۔ **N آزاد `DATA_DIR`s** کے ساتھ **ہیپس** کو بڑھائیں (#11024)؛ ایک SQLite فائل پر کبھی بھی `replicas>1` استعمال نہ کریں۔ |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(خودکار طور پر اخذ کردہ)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** خودکار طور پر اخذ کردہ وصولی بائٹ بجٹ کے لیے اووررائیڈ (زیادہ محدود V8/cgroup میموری حد کا 25%، جسے 8x عارضی افزائش سے تقسیم کیا جاتا ہے)۔ اخذ کردہ اور واضح اقدار 8 MiB–2 GiB کی حدود میں مقید ہوتی ہیں۔ مؤثر بجٹ سے بڑا باڈی فوراً `413 body_exceeds_budget` کے ساتھ ناکام ہو جاتا ہے؛ انفرادی طور پر قابلِ خدمت باڈیز کے درمیان مسابقت کی صورت میں قابلِ تجدید کوشش `503` برقرار رہتا ہے۔ بیک وقت 40–50 طویل SSE کلائنٹس کا انحصار اس بجٹ + ہیپ پر ہے، یہ کوئی سخت ”زیادہ سے زیادہ 2“ حد نہیں۔ ٹیوننگ سے پہلے `/api/monitoring/health` پر `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` پڑھیں۔ |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | BYTE اور STRUCTURE بھاری منظوری کے لیے ہیپ دباؤ کا شیڈ تناسب (`heapUsed / heap_size_limit`) (#10183، #10268، #10437)۔ `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` سے آگے کی بیک وقت بھاری درخواست صرف اسی وقت قابلِ تجدید کوشش `503` کے ساتھ خارج کی جاتی ہے جب ہیپ بھی اس تناسب پر یا اس سے اوپر ہو؛ صحت مند ہیپ پر اسے اس کے بجائے صحت مند ہیڈ روم کے ذریعے منظور کیا جاتا ہے۔ |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (ڈیفالٹ `1`) | `src/shared/middleware/chatBodyAdmission.ts` | **دونوں** STRUCTURE اور BYTE (`admitChatRequest`، بشمول ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES` باڈیز) پر صحت مند ہیپ کے تیز راستے (#10437) کے لیے محدود اضافی گنجائش۔ اس حد کے بغیر، ہر مصروف مگر صحت مند ہیپ والی درخواست بغیر کسی بالائی حد کے منظوری سے گزر جاتی تھی۔ جب صحت مند ہیپ کے راستے سے اتنی بیک وقت لیزز فعال ہو جائیں تو مزید مصروف درخواستیں اسی محدود انتظار/اخراج کے راستے پر چلی جاتی ہیں جو حقیقی ہیپ دباؤ کے تحت استعمال ہوتا ہے۔ `0` بائی پاس کو مکمل طور پر غیر فعال کر دیتا ہے۔ |
| `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | پیغامات کی وہ تعداد جو چیٹ درخواست کو بھاری قرار دیتی ہے، خواہ اس کی باڈی بائٹ حد سے کم ہی کیوں نہ ہو۔ |
| `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | ٹولز کی وہ تعداد جو چیٹ درخواست کو بھاری قرار دیتی ہے، خواہ اس کی باڈی بائٹ حد سے کم ہی کیوں نہ ہو۔ |
| `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | اسٹرنگ سائز پر مبنی محتاط ٹوکن تخمینہ جو درخواست کو بھاری قرار دیتا ہے؛ یہ منظوری کی لاگت کا نمائندہ پیمانہ ہے، فراہم کنندہ کی بلنگ ٹوکنائزیشن نہیں۔ |
| `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (غیر فعال) | `src/shared/middleware/chatBodyAdmission.ts` | چیٹ ہسٹری کی اختیاری، واضح طور پر فعال کی جانے والی حد۔ ڈیفالٹ طور پر غیر فعال: پیغامات کی تعداد تعیناتی کی پالیسی ہے، درخواست کی کوئی آفاقی خصوصیت نہیں، اور یہاں حد لگانے سے گفتگوئیں ٹرمینل `413` کے ساتھ اس سے پہلے مسترد ہو جاتی ہیں کہ کمپریشن پائپ لائن انہیں قابلِ خدمت بنا سکے۔ ہیپ کی افزائش `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` اور ہیپ دباؤ کے اخراج کے ذریعے محدود ہوتی ہے۔ میموری کی پابندی والی ان تعیناتیوں پر مثبت قدر مقرر کریں جنہیں سخت بالائی حد درکار ہو؛ اس کے بعد حد سے تجاوز پر ساخت یافتہ، کمپیکشن درکار `413` موصول ہوتا ہے۔ |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | کسی غیر اسٹریمنگ بالائی ماخذ کے جواب کے لیے سخت حد، جو مکمل طور پر میموری میں بفر کیا جاتا ہے۔ اس حد سے تجاوز پر بالائی ماخذ کا ریڈر منسوخ کر دیا جاتا ہے اور درخواست تیزی سے ناکام ہو جاتی ہے، بجائے اس کے کہ ہیپ ختم ہونے تک لامحدود اسٹرنگ بڑھتی رہے۔ |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | اپ اسٹریم رسپانس ہیڈرز سے فارورڈ کیے جانے والے وائر بائٹس کی زیادہ سے زیادہ تعداد۔ بجٹ سے تجاوز ہونے پر، عام ریورس پراکسی ہیڈر کی حدود میں رہنے کے لیے کم ترجیح والے ہیڈرز (مثلاً حسبِ ضرورت `x-codex-*`، `x-oai-request-id`) حذف کر دیے جاتے ہیں۔ زیادہ اپ اسٹریم میٹا ڈیٹا فارورڈ کرنے کے لیے اسے زیادہ قدر پر سیٹ کریں، تاہم اس سے رسپانس ہیڈر کا سائز بڑھے گا۔ |
| `CORS_ORIGIN` | _(سیٹ نہیں)_ | `src/server/cors/origins.ts` | واحد اوریجن کے لیے سابقہ CORS اجازت فہرست۔ نئی تنصیبات کے لیے `CORS_ALLOWED_ORIGINS` کو ترجیح دیں۔ CORS صرف کراس اوریجن براؤزر API کلائنٹس کے لیے ہے؛ توثیق شدہ ڈیش بورڈ رائٹس اس کے بجائے اسی اوریجن کی درخواستوں کے ساتھ سیشن سے منسلک CSRF تحفظ استعمال کرتی ہیں۔ |
| `CORS_ALLOWED_ORIGINS` | _(سیٹ نہیں)_ | `src/server/cors/origins.ts` | کاما سے جدا کردہ CORS اجازت فہرست۔ وائلڈ کارڈ اس وقت تک نہیں بھیجا جاتا جب تک `CORS_ALLOW_ALL=true` واضح طور پر کنفیگر نہ کیا گیا ہو۔ |
| `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | کسی بھی براؤزر `Origin` کو واپس بھیجنے کے لیے صرف ڈیولپمنٹ میں استعمال ہونے والا ہنگامی راستہ۔ اسے مشترکہ یا پروڈکشن تنصیبات پر فعال نہ کریں۔ |
| `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuard.ts` | نجی/لوپ بیک/لنک لوکل IP رینجز کو ہدف بنانے والی پرووائیڈر کالز بلاک کریں۔ اسے صرف الگ تھلگ ٹیسٹ ماحول میں غیر فعال کریں۔ |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuard.ts` | نجی/مقامی نیٹ ورکس (localhost، 192.168.x.x، 10.x.x.x وغیرہ) کی طرف اشارہ کرنے والے پرووائیڈر URLs کی اجازت دیں۔ **خود میزبانی کیے گئے پرووائیڈرز کے لیے لازمی ہے** (LM Studio، Ollama، vLLM، Llamafile، Triton، SearXNG)۔ `false` ہونے پر، ڈیش بورڈ مقامی URLs کی توثیق مسترد کر دیتا ہے۔ |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuard.ts` | مقامی/نجی ایڈریسز (127.0.0.1، localhost، LAN، نجی رینجز) پر پرووائیڈرز شامل کرنے/ان کی توثیق کرنے کی اجازت دیں — اس کا دائرۂ کار پرووائیڈر کی توثیق کے راستے تک محدود ہے۔ **ڈیفالٹ `true`** (مقامی ترجیح)؛ صرف عوامی ایڈریسز کی سخت پابندی نافذ کرنے کے لیے اسے `false` پر سیٹ کریں۔ کلاؤڈ میٹا ڈیٹا اینڈ پوائنٹس (169.254.169.254، metadata.google.internal) ہر صورت میں بلاک رہتے ہیں۔ (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | `/v1/audio/*` روٹس (ٹرانسکرپشنز، اسپیچ، ترجمے) کو localhost سے باہر میزبانی کیے گئے OpenAI سے مطابقت رکھنے والے پرووائیڈر نوڈ کے استعمال کی اجازت دیں۔ بطور ڈیفالٹ بند ہے — آڈیو کو کسی ریموٹ ہوسٹ کی طرف روٹ کرنے سے ایگریس شناخت بدل جاتی ہے اور اس کے لیے آپریٹر کا واضح فیصلہ ضروری ہے۔ لوپ بیک/نجی نوڈز (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` (اور میموری انجن کے لوپ بیک ری رینک مرحلے) کو localhost سے باہر میزبانی کیے گئے OpenAI سے مطابقت رکھنے والے پرووائیڈر نوڈ کے استعمال کی اجازت دیں — مثلاً TEI، Infinity، vLLM وغیرہ چلانے والا LAN باکس یا Tailscale پیئر۔ بطور ڈیفالٹ بند ہے — کسی ریموٹ ہوسٹ کی طرف روٹنگ سے ایگریس شناخت بدل جاتی ہے اور اس کے لیے آپریٹر کا واضح فیصلہ ضروری ہے۔ لوپ بیک نوڈز (localhost، 127.0.0.1، 172.16-31.x) ہمیشہ مجاز اور غیر متاثر رہتے ہیں۔ ریموٹ نوڈز کو پرووائیڈر آؤٹ باؤنڈ URL پالیسی (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`) پر بھی پورا اترنا چاہیے؛ کلاؤڈ میٹا ڈیٹا ہوسٹس کی طرف کبھی روٹنگ نہیں کی جاتی۔ |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | OIDC فعال ہونے پر، پاس ورڈ لاگ اِن غیر فعال کریں تاکہ صارفین صرف OIDC سنگل سائن آن کے ذریعے توثیق کر سکیں۔ سادہ عرف `OIDC_DISABLE_PASSWORD_LOGIN` بھی قبول کیا جاتا ہے؛ اسی کلید کا ڈیش بورڈ فیچر فلیگ ترجیح رکھتا ہے۔ (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` کا سادہ عرف (#10889)۔ |
### مضبوط سکیورٹی کی چیک لسٹ
```bash
# پروڈکشن سکیورٹی کی کم از کم ضروریات:
AUTH_COOKIE_SECURE=true # HTTPS درکار ہے
REQUIRE_API_KEY=true # تمام پراکسی کالز کی توثیق کریں
ALLOW_API_KEY_REVEAL=false # UI میں کلیدیں کبھی ظاہر نہ کریں
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # 5 MB کی حد
```
---
## 5. ان پٹ کی صفائی اور PII کا تحفظ
OmniRoute دو سطحی دفاع فراہم کرتا ہے: درخواست کی جانب انجیکشن اسکیننگ اور جواب کی جانب PII کا اخراج۔
> **⚠️ حدود:** یہ حفاظتی اقدامات _بہترین ممکنہ کوشش پر مبنی تخمینی_ شناخت ہیں، کوئی مکمل پرامپٹ انجیکشن فائر وال یا PII DLP نظام نہیں۔ یہ غلط مثبت نتائج (بے ضرر کردار/RPG پرامپٹس کو نشان زد کرنا) اور غلط منفی نتائج (leetspeak، وقفہ کاری، غیر انگریزی پیٹرنز) پیدا کر سکتے ہیں۔ تعمیل کے لیے صرف یہ کافی نہیں ہیں۔ ان پر انحصار کرنے سے پہلے موڈز کو اپنی ضروریات کے مطابق ترتیب دیں اور اپنی ٹریفک کے مقابل ان کی جانچ کریں۔
### درخواست کی جانب: پرامپٹ انجیکشن گارڈ
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| --------------------------------- | ------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | آنے والے پیغامات میں پرامپٹ انجیکشن پیٹرنز کی اسکیننگ فعال کریں۔ |
| `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | انجیکشن پالیسی: `warn` = صرف لاگ کریں، `block` = درخواست کو 400 کے ساتھ مسترد کریں۔ سابقہ `redact` انجیکشن متن کو **نہیں** ہٹاتا؛ درخواست کے PII کو دوبارہ لکھنے کے لیے `PII_REDACTION_ENABLED` استعمال کریں۔ |
| `INJECTION_GUARD_MODE` | _(غیر مقرر)_ | `src/middleware/promptInjectionGuard.ts` | `INPUT_SANITIZER_MODE` کا سابقہ متبادل نام — رویہ یکساں ہے۔ |
| `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | کم از کم شدت جسے `MODE=block` مسترد کرتا ہے: `high` (طے شدہ)، `medium`، یا `low`۔ حد کم کیے بغیر درمیانی پیٹرنز صرف مشاہدے کے لیے ہوتے ہیں۔ |
| `INJECTION_GUARD_BLOCK_THRESHOLD` | _(غیر مقرر)_ | `src/shared/utils/injectionSeverity.ts` | `INPUT_SANITIZER_BLOCK_THRESHOLD` کا سابقہ متبادل نام — رویہ یکساں ہے۔ |
| `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | جب `true` ہو تو آنے والی درخواستوں میں PII کو مخفی کریں (انجیکشن موڈ سے آزاد)۔ |
| `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | درخواست/جواب کے پے لوڈز سے معروف API-key / خفیہ ٹوکن پیٹرنز مخفی کریں۔ اختیاری؛ `PII_REDACTION_ENABLED` کے طرز پر کام کرتا ہے۔ |
### جواب کی جانب: PII سینیٹائزر
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| -------------------------------- | ---------- | ------------------------- | ----------------------------------------------------------------------------------- |
| `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | کلائنٹ کو واپس بھیجنے سے پہلے LLM جوابات میں افشا شدہ PII اسکین کریں۔ |
| `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = PII کو مخفی کریں، `warn` = صرف لاگ کریں، `block` = پورا جواب حذف کر دیں۔ |
### VS Code ٹوکنائزڈ روٹ سیاق و سباق سینیٹائزر
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| ----------------------------------- | ---------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | `/v1/vscode/[token]/*` درخواستوں سے ضمنی فعال ایڈیٹر سیاق و سباق (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) ہٹاتا ہے اور واضح طور پر منسلک حساس فائلوں کے مواد کو مخفی کرتا ہے۔ بطور طے شدہ محفوظ؛ غیر فعال کرنے کے لیے `0` مقرر کریں۔ |
### منظرنامے
| منظرنامہ | ترتیب |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ادارے کی تعمیل** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (انجیکشن بلاک کرنا + درخواست/جواب کے PII کو مخفی کرنا؛ موڈز آزاد ہیں) |
| **صرف نگرانی** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — لاگ کرتا ہے مگر کبھی بلاک نہیں کرتا |
| **ذاتی استعمال** | سب کو غیر فعال رہنے دیں — کوئی اضافی بوجھ نہیں |
---
## 6. ٹول اور روٹنگ پالیسیاں
| متغیر | ڈیفالٹ | ماخذ فائل | تفصیل |
| ----------------------------------------------------------- | ---------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | LLM ٹول/فنکشن کالنگ تک رسائی کو کنٹرول کرتا ہے۔ `allowlist` = صرف فہرست میں شامل ٹولز، `denylist` = فہرست میں شامل ٹولز کے علاوہ سبھی، `disabled` = کوئی پابندی نہیں۔ |
| `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | پے لوڈ میں ردوبدل کے قواعد والی JSON فائل کا راستہ (ہر ماڈل/پروٹوکول کے لحاظ سے اپ اسٹریم تبدیلیاں)۔ |
| `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | پے لوڈ قواعد کی فائل کو ہاٹ ری لوڈ کرنے کا وقفہ (ms)۔ کم از کم `1000`۔ |
| `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | اختیاری فعال کاری: Claude Code کلائنٹس سے آنے والے بغیر سابقے کے `claude-*` ماڈل IDs کو فراہم کنندہ کے سابقے کا تقاضا کرنے کے بجائے Claude Code OAuth اکاؤنٹ کے ذریعے روٹ کریں۔ واضح فراہم کنندہ سابقوں کو اب بھی ترجیح حاصل ہے۔ Claude فراہم کنندہ کے صفحے پر ڈیش بورڈ ٹوگل کے ذریعے بھی قابلِ ترتیب ہے۔ |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | راؤنڈ رابن کومبوز کے لیے فی ماڈل ہم وقتی حد (#9100)۔ راؤنڈ رابن کومبو سیمفور پر فی ماڈل 3 ہم وقت درخواستوں کی مستقل حد تھی، جسے تبدیل کرنے کا کوئی طریقہ نہیں تھا، لہٰذا زیادہ ہم وقتی ٹریفک اس حد کے پیچھے سلسلہ وار ہو جاتی تھی۔ `>= 1` کے لیے توثیق کی جاتی ہے، اور `<= 32` تک محدود کیا جاتا ہے۔ |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | ایک خطرناک اختیاری ترتیب جو براہِ راست واحد ماڈل کی درخواستوں کے لیے OmniRoute کی مقامی کانٹیکسٹ ونڈو / زیادہ سے زیادہ ان پٹ ٹوکن کی جانچ کو چھوڑ دیتی ہے۔ اپ اسٹریم فراہم کنندگان اب بھی اپنی حقیقی حدود نافذ کرتے ہیں؛ پرامپٹ کمپریشن اور ماڈل کی اپنی آؤٹ پٹ ٹوکن حد فعال رہتی ہے۔ مؤثر ترجیح یہ ہے: Feature Flags DB اوور رائڈ > ماحولیاتی متغیر > ڈیفالٹ؛ ری اسٹارٹ درکار نہیں۔ |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(غیر متعین)_ | `open-sse/services/selfHostedEntry.ts` | اِن لائن YAML `providers:` دستاویز (RIC-738، D4)۔ مقرر ہونے پر (`strategy:` بلاک کے ساتھ یا اس کے بغیر)، `/v1/chat/completions` کلاؤڈ پائپ لائن کے بجائے خود میزبانی شدہ متحد OpenAI-مطابق انٹری کی طرف موڑ دیا جاتا ہے۔ غیر متعین (ڈیفالٹ): روٹ براہِ راست موجودہ کلاؤڈ پائپ لائن تک جاری رہتا ہے۔ `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md` دیکھیں۔ |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(غیر متعین)_ | `open-sse/services/selfHostedEntry.ts` | اس YAML فائل کا راستہ جس میں `OMNIROUTE_SELF_HOSTED_PROVIDERS` جیسی ہی `providers:` دستاویز موجود ہو، ان تعیناتیوں کے لیے جو اِن لائن ماحولیاتی متغیر کے مقابلے میں فائل کو ترجیح دیتی ہیں۔ ان میں سے کوئی بھی خود میزبانی شدہ انٹری کو فعال کر دیتا ہے۔ |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(غیر متعین — کھلا روٹ)_ | `open-sse/services/selfHostedEntry.ts` | متحد خود میزبانی شدہ انٹری کے لیے اختیاری مشترکہ API کلید (D5 اسکیفولڈ، فی کلید کوٹا سسٹم کے لیے مختص)۔ مقرر ہونے پر، درخواستوں میں `Authorization: Bearer ` شامل ہونا ضروری ہے۔ غیر متعین: روٹ کھلا رہتا ہے، جو موجودہ خود میزبانی شدہ مقامی فراہم کنندہ پیٹرن (لوپ بیک/قابلِ اعتماد نیٹ ورک تعیناتی) سے مطابقت رکھتا ہے۔ |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(غیر متعین)_ | `open-sse/services/routingStrategies.ts` | تعینیت پسند روٹنگ انجن (M2/RIC-740، D3) کے لیے اِن لائن YAML `strategy:` دستاویز — بلیک لسٹ/وائٹ لسٹ، کول ڈاؤن بریکر، لاگت کی ترجیح، تاخیر سے آگاہ روٹنگ، فال بیک چین۔ فی کلید کی بنیاد پر `OMNIROUTE_SELF_HOSTED_PROVIDERS` کے اندر موجود اِن لائن `strategy:` بلاک کو اوور رائڈ کرتی ہے۔ `docs/routing/DETERMINISTIC_ROUTING.md` دیکھیں۔ |
| `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(غیر متعین)_ | `open-sse/services/routingStrategies.ts` | اس YAML فائل کا راستہ جس میں `OMNIROUTE_SELF_HOSTED_STRATEGY` جیسی ہی `strategy:` دستاویز موجود ہو، ان تعیناتیوں کے لیے جو اِن لائن ماحولیاتی متغیر کے مقابلے میں فائل کو ترجیح دیتی ہیں۔ |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(غیر سیٹ شدہ)_ | `open-sse/services/conversationTracker.ts` | گفتگو کی سرگزشت جمع کرنا روکنے کے لیے اسے `1` پر سیٹ کریں۔ `resolveConversationId()`، SQLite کو پڑھنے یا پیغامات کی سرگزشت پارس کرنے سے پہلے، ایک ایسا نتیجہ واپس کرتا ہے جسے ٹریک نہیں کیا جاتا، اور کلائنٹ کی فراہم کردہ سیشن IDs بھی اس میں شامل ہیں۔ روٹنگ سیشن کی ہینڈلنگ میں کوئی تبدیلی نہیں ہوتی اور موجودہ ریکارڈز حذف نہیں کیے جاتے۔ یہ ان تنصیبات کے لیے ہے جو ڈیش بورڈ کا گفتگو کا منظر استعمال نہیں کرتیں اور چاہتی ہیں کہ ٹرن ٹیبل مزید بڑھنا بند ہو جائے۔ |
---
## 7. URLs اور کلاؤڈ سنک
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| ---------------------------------------- | ----------------------------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | اندرونی سنک جابز کے ذریعے `/api/sync/cloud` کو کال کرنے کے لیے سرور سائیڈ URL۔ ایپ کو عوامی طور پر پراکسی کیے جانے کی صورت میں بھی اسے لوپ بیک/کنٹینر URL ہی رکھیں۔ |
| `CLOUD_URL` | _(خالی)_ | `src/lib/cloudSync.ts` | کلاؤڈ ریلے اینڈ پوائنٹ URL (پریمیم خصوصیت)۔ |
| `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | کلاؤڈ سنک درخواستوں کے لیے HTTP ٹائم آؤٹ۔ |
| `OMNIROUTE_BUILD_PROFILE` | `full` | Webpack بلڈ کنفیگ | بلڈ ٹائم پروفائل (خصوصی اختیارات والے ماڈیولز کو بنڈل سے مادی طور پر خارج کرنے کے لیے اسے `minimal` پر سیٹ کریں)۔ |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ اسٹینڈ الون آؤٹ پٹ_ | `scripts/build/colocate-standalone.mjs` | پوسٹ بلڈ کولوکیشن مرحلے میں استعمال ہونے والی اسٹینڈ الون آؤٹ پٹ ڈائریکٹری کے لیے بلڈ ٹائم اوور رائیڈ۔ یہ رن ٹائم سیٹنگ نہیں ہے۔ |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(خالی)_ | `src/lib/cloudSync.ts` | کلاؤڈ سنک جوابات کے HMAC-SHA256 دستخط کی تصدیق کے لیے استعمال ہونے والا مشترکہ سیکرٹ۔ |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | کلاؤڈ سنک اینڈ پوائنٹ کو مقامی اسناد اوور رائٹ کرنے کی اجازت دینے کے لیے اسے `true` پر سیٹ کریں۔ طے شدہ قدر `false` ہے۔ |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | جب کوئی مقامی سیکرٹ کنفیگر نہ ہو تو بغیر دستخط والے کلاؤڈ سنک جواب کو مسترد کرنے کے لیے اسے `true` پر سیٹ کریں (#13679)۔ موجود دستخط کی ہمیشہ تصدیق کی جاتی ہے — اور جب `OMNIROUTE_CLOUD_SYNC_SECRET` سیٹ نہ ہو تو اسے ہمیشہ مسترد کیا جاتا ہے — خواہ اس فلیگ کی قدر کچھ بھی ہو۔ v3.9 میں طے شدہ طرزِ عمل نفاذ میں تبدیل ہو جاتا ہے۔ |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | صارف کی تصدیق کے بغیر v3.8.5 کے ایک مرحلہ پر مبنی "سب کچھ درآمد کریں" طرزِ عمل پر واپس جانے کے لیے اسے `true` پر سیٹ کریں۔ |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth، ڈیش بورڈ، سنک | OAuth `redirect_uri`، ڈیش بورڈ لنکس، اور تیار کردہ عوامی URLs کے لیے عوامی URL۔ جب OAuth کال بیکس یا تیار کردہ براؤزر لنکس کو ایک مستحکم ریورس پراکسی ہوسٹ استعمال کرنا ہو تو اسے مستحکم عوامی URL پر سیٹ کریں۔ |
| `NEXT_PUBLIC_CLOUD_URL` | _(خالی)_ | کلائنٹ سائیڈ | `CLOUD_URL` کا کلائنٹ سائیڈ عکس۔ |
| `NEXT_PUBLIC_APP_URL` | _(غیر متعین)_ | `src/shared/services/cloudSyncScheduler.ts` | `NEXT_PUBLIC_BASE_URL` کے لیے میراثی متبادل۔ |
| `NEXT_PUBLIC_PORT` | _(غیر متعین — `PORT` پر واپس آتا ہے)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | جب کوئی origin معلوم نہ ہو (SSR/ٹیسٹس) تو دکھائے جانے والے URLs کے لیے کلائنٹ سائیڈ متبادل پورٹ؛ اسے `PORT` سے پہلے پڑھا جاتا ہے۔ |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(غیر متعین)_ | عوامی origin حل کنندہ، تصاویر کے URLs | عوامی URL بنانے اور غیر ڈیش بورڈ براؤزر origin کی توثیق کے لیے استعمال ہونے والا، براؤزر کو نظر آنے والا سب سے زیادہ ترجیحی OmniRoute origin۔ اسے اس وقت سیٹ کریں جب OpenWebUI یا کوئی اور relay اندرونی URL کے ذریعے OmniRoute تک پہنچتا ہو، لیکن صارف کے براؤزر کو تیار کردہ میڈیا LAN، tunnel، یا عوامی origin سے حاصل کرنا ضروری ہو۔ `/v1` **شامل نہ کریں**۔ |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(غیر متعین)_ | `open-sse/config/providerPluginManifestUrl.ts` | sidecar کلائنٹس کو مشتہر کیا جانے والا مطلق provider plugin manifest URL۔ غیر متعین ہونے پر، OmniRoute درخواست کے origin یا HOST/PORT سے `/api/v1/provider-plugin-manifest` اخذ کرتا ہے۔ |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | درخواست کا origin موجود نہ ہونے پر HOST/PORT سے provider plugin manifest URL اخذ کرتے وقت استعمال ہونے والا پروٹوکول۔ جب کوئی واضح `OMNIROUTE_PROVIDER_MANIFEST_URL` سیٹ نہ ہو تو TLS ختم کرنے والے عوامی proxy کے پیچھے اسے `https` پر سیٹ کریں۔ |
| `OMNIROUTE_TRUST_PROXY` | _(غیر متعین)_ | `src/server/origin/publicOrigin.ts` | آگے بھیجے گئے عوامی origin headers کے لیے اختیاری اعتماد کا موڈ۔ غیر متعین = سیکیورٹی فیصلوں کے لیے `Forwarded` / `X-Forwarded-*` پر اعتماد نہ کریں۔ `true` / `loopback` صرف token-stamped loopback proxy سے آگے بھیجے گئے host/proto پر اعتماد کرتا ہے۔ `private` / `lan` نجی LAN proxy peers پر بھی اعتماد کرتا ہے۔ پروڈکشن میں واضح `NEXT_PUBLIC_BASE_URL` کو ترجیح دیں۔ |
| `KIE_CALLBACK_URL` | _(غیر متعین)_ | `open-sse/utils/kieTask.ts` | غیر ہم وقتی kie.ai jobs کے لیے عوامی callback URL۔ `OMNIROUTE_KIE_CALLBACK_URL` اور `OMNIROUTE_PUBLIC_URL` سے پہلے سب سے زیادہ ترجیحی override۔ |
| `OMNIROUTE_KIE_CALLBACK_URL` | _(غیر متعین)_ | `open-sse/utils/kieTask.ts` | `KIE_CALLBACK_URL` کا متبادل املا۔ بنیادی متغیر غیر متعین ہونے پر اسے متبادل کے طور پر استعمال کیا جاتا ہے۔ |
| `OMNIROUTE_PUBLIC_URL` | _(غیر متعین)_ | `open-sse/utils/kieTask.ts` | غیر ہم وقتی callback URLs بنانے کے لیے استعمال ہونے والا عوامی origin۔ kie.ai callbacks کے لیے سب سے کم ترجیحی متبادل؛ دیگر relays کے لیے عمومی عوامی URL کے طور پر بھی استعمال ہوتا ہے۔ |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | Usage صفحے کے زیر استعمال CrofAI quota lookup endpoint۔ relays / test fixtures کے لیے override کریں۔ |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Usage صفحے کے زیر استعمال، API key سے توثیق شدہ باضابطہ OpenCode Go usage endpoint۔ relays / test fixtures کے لیے override کریں۔ |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | کلائنٹ کی جانب سے نہ بھیجے جانے پر opencode-go/zen upstream درخواستوں کے لیے OpenCode CLI شناختی headers (User-Agent، x-opencode-client/project، درخواست/session UUIDs) تیار کریں، تاکہ 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` override سیٹ نہ ہو تو استعمال ہونے والا ڈیفالٹ User-Agent۔ صرف opencode executors پر لاگو ہوتا ہے۔ بغیر key والی ایسی درخواست جسے upstream روکتا ہو، اس میں `opencode/= 1.17>` نہ رکھنے والی ترتیب شدہ قدر کو مسترد کرنے کے بجائے اس ڈیفالٹ سے بدل دیا جاتا ہے۔ |
| `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | جب `OPENCODE_SYNTHESIZE_CLI_HEADERS` فعال ہو تو تشکیل کردہ `x-opencode-client` ہیڈر کی قدر۔ |
| `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | جب `OPENCODE_SYNTHESIZE_CLI_HEADERS` فعال ہو تو تشکیل کردہ `x-opencode-project` ہیڈر کی قدر۔ |
| `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(غیر متعین)_ | `open-sse/executors/opencodeFreeTierContract.ts` | کلید کے بغیر OpenCode درخواستوں کی باڈی (اسٹریمنگ فلیگ اور ٹولز کی فہرست) میں ردوبدل روکنے کے لیے اسے `off` پر سیٹ کریں۔ ہیڈرز پھر بھی لاگو کیے جاتے ہیں۔ اسے ہر درخواست پر پڑھا جاتا ہے، لہٰذا تبدیلی فوری طور پر مؤثر ہو جاتی ہے۔ |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(غیر متعین)_ | `open-sse/executors/opencodeFreeTierContract.ts` | جب اس ماڈل کے لیے ابھی تک کچھ مشاہدہ نہ کیا گیا ہو تو ایسی کلید کے بغیر OpenCode درخواست میں ظاہر کرنے کے لیے کاما سے جدا کردہ ٹول نام، جس میں کوئی ٹول موجود نہ ہو۔ خالی ہونے کی صورت میں ایک واحد پلیس ہولڈر استعمال کیا جاتا ہے جسے ماڈل کو کال نہ کرنے کی ہدایت دی جاتی ہے۔ زیادہ سے زیادہ 32 اندراجات، `[A-Za-z_][A-Za-z0-9_-]{0,63}`؛ غلط اندراجات نظر انداز کیے جاتے ہیں۔ |
| `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | کوٹا اسکریپنگ کے لیے استعمال ہونے والا Ollama Cloud ترتیبات URL۔ ریلے / ٹیسٹ فکسچرز کے لیے اسے اوور رائیڈ کریں۔ |
| `OLLAMA_USAGE_COOKIE` | _(غیر متعین)_ | `open-sse/services/usage.ts` | ترتیبات کے صفحے سے کوٹا اسکریپنگ کے لیے استعمال ہونے والی Ollama Cloud `__Secure-session` کوکی۔ حساس؛ متعدد اکاؤنٹس کنفیگر ہونے پر فی کنکشن Dashboard فیلڈ کو ترجیح دیں۔ |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(غیر متعین)_ | `open-sse/services/usage.ts` | Ollama Cloud `__Secure-session` کوکی کا متبادل env var۔ حساس؛ متعدد اکاؤنٹس کنفیگر ہونے پر فی کنکشن Dashboard فیلڈ کو ترجیح دیں۔ |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(غیر متعین)_ | `open-sse/services/usage.ts` | Ollama Cloud `__Secure-session` کوکی کا متبادل env var جو مختصر عرفیات سے پہلے استعمال ہوتا ہے۔ حساس؛ متعدد اکاؤنٹس کنفیگر ہونے پر فی کنکشن Dashboard فیلڈ کو ترجیح دیں۔ |
| `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | CodeWhisperer (AWS Kiro) کے استعمال کی حدود کا اینڈ پوائنٹ۔ ریلے / ٹیسٹ فکسچرز کے لیے اسے اوور رائیڈ کریں۔ |
> [!IMPORTANT]
> ریورس پراکسی (nginx، Caddy) کے پیچھے تعیناتی کرتے وقت، اگر OAuth کال بیکس یا بنائے گئے عوامی لنکس کے لیے وہی ہوسٹ نیم استعمال کرنا ضروری ہو تو `NEXT_PUBLIC_BASE_URL` کو اپنے مستحکم عوامی URL (مثلاً `https://omniroute.example.com`) پر سیٹ کریں۔ اس کے بغیر OAuth کال بیکس ناکام ہو سکتے ہیں کیونکہ redirect_uri مماثل نہیں ہوگا، اور بنائے گئے عوامی لنکس اندرونی کنٹینر اوریجن کی طرف اشارہ کر سکتے ہیں۔
>
> سرور سے سرور جابز کے لیے `BASE_URL` کو اندرونی لوپ بیک/کنٹینر URL ہی رکھیں۔ اسناد رکھنے والی اندرونی سیلف فیچز کے لیے براؤزر `Origin` یا عوامی ہوسٹ نیم استعمال نہ کریں۔
>
> توثیق شدہ Dashboard رائٹس کے لیے جامد عوامی بیس URL درکار نہیں: Dashboard سیشن سے منسلک CSRF ٹوکن کے ساتھ اسی اوریجن کی غیر محفوظ درخواستیں بھیجتا ہے۔ OmniRoute غیر Dashboard براؤزر انٹیگریشنز کے لیے عوامی اوریجن کی توثیق کو اب بھی مرکزی بناتا ہے: واضح عوامی URL env vars پر پہلے اعتماد کیا جاتا ہے؛ خام `Forwarded` / `X-Forwarded-*` ہیڈرز کو اس وقت تک نظر انداز کیا جاتا ہے جب تک `OMNIROUTE_TRUST_PROXY` فعال نہ ہو اور فوری پراکسی پیئر کو ٹوکن کے ذریعے قابل اعتماد نشان زد نہ کیا گیا ہو۔ اسی اوریجن کی Dashboard درخواستیں درست کرنے کے لیے CORS ترتیبات استعمال نہ کریں؛ CORS صرف مختلف اوریجن والے براؤزر کلائنٹس کے لیے ہے۔
---
## 8. آؤٹ باؤنڈ پراکسی
اخراجی کنٹرول، جغرافیائی روٹنگ، یا IP چھپانے کے لیے اپ اسٹریم LLM فراہم کنندہ کی کالز کو HTTP یا SOCKS5 پراکسی کے ذریعے روٹ کریں۔
| متغیر | ڈیفالٹ | ماخذ فائل | وضاحت |
| ---------------------------------------- | ------------ | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | اپ اسٹریم کالز کے لیے SOCKS5 پراکسی ایجنٹ فعال کریں۔ `false` کے ساتھ اس سے دست بردار ہوں۔ |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | کلائنٹ سائیڈ | SOCKS5 کی دستیابی سے متعلق کلائنٹ سائیڈ آگاہی۔ |
| `PROXY_SKIP_RECENTLY_FAILED` | `false` | `src/shared/utils/featureFlags.ts` | اختیاری فیچر فلیگ (دیکھیے [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)؛ ڈیش بورڈ DB کا اوور رائیڈ ترجیح پاتا ہے)۔ پراکسی پولز اور فی اکاؤنٹ روٹیشن ایسے رکن کو دوبارہ پیش کرنا روک دیتے ہیں جو ابھی ناکام ہوا ہو (مسترد شدہ TCP پروب، یا اس کے ذریعے 429)؛ یہ پابندی ایسی مدت کے لیے ہوتی ہے جو ہر بار ناکامی دہرائے جانے پر دوگنی ہوتی ہے، ایک مقررہ حد تک۔ `true` (یا `1`، `yes`) اسے فعال کرتا ہے۔ |
| `HTTP_PROXY` | _(غیر سیٹ)_ | Node.js معیار | اپ اسٹریم کالز کے لیے HTTP پراکسی۔ |
| `HTTPS_PROXY` | _(غیر سیٹ)_ | Node.js معیار | اپ اسٹریم کالز کے لیے HTTPS پراکسی۔ |
| `ALL_PROXY` | _(غیر سیٹ)_ | Node.js معیار | ہمہ گیر پراکسی (`socks5://` کی معاونت کرتی ہے)۔ |
| `OMNIROUTE_PROXY_ECHO_URL` | _(غیر سیٹ)_ | `src/lib/proxyEchoTarget.ts` | پراکسی اخراجی پروبز کے زیر استعمال echo-IP ہدف کو ایک واحد URL پر مقرر کرتا ہے۔ غیر سیٹ ہونے پر، پروب پہلے `api64.ipify.org` اور پھر `api4.ipify.org` آزماتا ہے تاکہ صرف IPv4 والی ٹنلز کو غیر فعال رپورٹ نہ کیا جائے (#9694)۔ |
| `NO_PROXY` | _(غیر سیٹ)_ | Node.js معیار | پراکسی کو بائی پاس کرنے کے لیے کاما سے جدا کردہ میزبان نام/IPs۔ |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | ہر کیش شدہ HTTP/SOCKS پراکسی ڈسپیچر کے لیے بیک وقت ساکٹس کی زیادہ سے زیادہ تعداد۔ Codex `/v1/responses` جیسی طویل عرصے تک قائم رہنے والی SSE اسٹریمز کو اس وقت ایک سے زیادہ کنکشن درکار ہوتے ہیں جب متعدد درخواستیں ایک ہی اکاؤنٹ سطح کی پراکسی استعمال کرتی ہوں۔ `256` سے زیادہ اقدار کو اسی حد تک محدود کر دیا جاتا ہے۔ |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | SOCKS5 ہینڈ شیک (کنیکٹ) کا ٹائم آؤٹ، ms میں۔ جب کسی واحد رہائشی گیٹ وے میزبان پر بہت زیادہ بیک وقت درخواستیں آ رہی ہوں (مثلاً بیک وقت 100 درخواستیں)، تو اسے بڑھائیں — پراکسی قابل رسائی ہونے کے باوجود، بھرے ہوئے پول میں حقیقی ہینڈ شیک 10s سے زیادہ وقت لے سکتا ہے، جو بصورت دیگر غلط `[Proxy Fast-Fail] Proxy unreachable` کے طور پر ظاہر ہوتا ہے۔ زیادہ سے زیادہ حد `120000` ہے۔ |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | جب `false` ہو (ڈیفالٹ)، تو ایسی درخواست جس کی تفویض کردہ پراکسی resolve نہ ہو سکے، براہ راست کنکشن پر واپس جانے کے بجائے **مسترد کر دی جاتی ہے (fail-closed)** — یہ حقیقی IP کے افشا کو روکتا ہے۔ سابقہ DIRECT fallback بحال کرنے کے لیے اسے `true` پر سیٹ کریں۔ |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | wreq-js استعمال کرتے ہوئے TLS فنگرپرنٹ کی نقالی کریں (Chrome 124 کی نقل کرتا ہے)۔ JA3/JA4 بلاکنگ کا توڑ کرتا ہے۔ |
| `TLS_FINGERPRINT_PROVIDERS` | _(سیٹ نہیں)_ | `open-sse/utils/proxyFetch.ts` | نئی پراکسی شدہ TLS روٹنگ (`open-sse/utils/proxyFetch.ts`) کے لیے کوما سے جدا کردہ فراہم کنندگان کی اجازت فہرست۔ سیٹ نہ ہونے پر براہِ راست TLS اپنا سابقہ طرزِ عمل برقرار رکھتا ہے؛ صرف یہ فراہم کنندگان Chrome-124 فنگرپرنٹ برج کے ذریعے روٹ ہوتے ہیں۔ |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Claude Turnstile کے Playwright براؤزر سیاق کو HTTPS سرٹیفکیٹ کی خرابیوں کو نظر انداز کرنے کی اجازت دیں۔ |
### منظرنامے
| منظرنامہ | تشکیل |
| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **SSH ٹنل کے ذریعے SOCKS5** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` |
| **کارپوریٹ HTTP پراکسی** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` |
| **فنگرپرنٹنگ کی روک تھام** | `ENABLE_TLS_FINGERPRINT=true` — اس کے لیے `wreq-js` درکار ہے (شامل ہے) |
| **اخراج پر قابو / براہِ راست رسائی نہیں** | `PROXY_FAIL_OPEN=false` (طے شدہ) رہنے دیں۔ پراکسی دستیاب نہ ہونے پر درخواستیں براہِ راست راستے سے خارج ہونے کے بجائے مکمل طور پر ناکام ہو جاتی ہیں۔ |
| **سابقہ / ڈیولپمنٹ — براہِ راست فال بیک کی اجازت** | `PROXY_FAIL_OPEN=true`۔ سختی سے پہلے کا طرزِ عمل بحال کرتا ہے: پراکسی ریزولیوشن ناکام ہونے پر براہِ راست کنکشن استعمال کیا جاتا ہے۔ |
> **نوٹ (NVIDIA توثیق بائی پاس — #3226):** NVIDIA کا API کلید کی توثیق کا اینڈ پوائنٹ
> عالمی پراکسی/TLS-پیچ شدہ fetch کے ذریعے روٹ کیے جانے پر رک جاتا ہے (undici ڈسپیچر → 504)۔
> `src/lib/providers/validation.ts::directHttpsRequest()` جان بوجھ کر اس ایک توثیقی کال کے لیے
> `safeOutboundFetch({ bypassProxyPatch: true })` استعمال کرتے ہوئے پراکسی پیچ کو بائی پاس کرتا ہے۔
> یہ ایک دستاویزی، محدود دائرۂ کار والی استثنا ہے — یہ چیٹ/استعمال کے اخراج کو **متاثر نہیں** کرتی۔
> بائی پاس کا دائرۂ کار `tests/unit/proxy-bypass-scope-guard-3226.test.ts` کے ذریعے محدود کیا گیا ہے۔
---
## 9. CLI ٹول انٹیگریشن
یہ کنٹرول کرتا ہے کہ OmniRoute کس طرح CLI سائڈ کارز (Claude Code، Codex وغیرہ) کو دریافت اور لانچ کرتا ہے۔
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| --------------------------------- | -------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = سسٹم PATH میں تلاش کریں؛ `manual` = صرف واضح طور پر متعین کردہ راستے استعمال کریں۔ |
| `CLI_EXTRA_PATHS` | _(مقرر نہیں)_ | `src/shared/services/cliRuntime.ts` | CLI بائنری کی دریافت کے لیے اضافی PATH اندراجات (کولن سے علیحدہ کردہ)۔ |
| `CLI_CONFIG_HOME` | _(مقرر نہیں)_ | `src/shared/services/cliRuntime.ts` | CLI کنفیگز (`~/.claude`، `~/.codex`) پڑھنے کے لیے ہوم ڈائریکٹری کو اوور رائیڈ کریں۔ یہ مطلق اور پروسیس کی ہوم ڈائریکٹری کے اندر ہونی چاہیے — **یا**، کنٹینر میں، bind-mounted راستہ ہونا چاہیے (`/host-home` اسی طرح کام کرتا ہے)۔ کوئی بھی دوسری قدر واپس ہوم ڈائریکٹری استعمال کرے گی۔ |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | OmniRoute کو CLI کنفیگ فائلیں لکھنے کی اجازت دیں (ٹوکن ریفریش، سیشن ڈیٹا)۔ ہر CLI کنفیگ رائٹ کو واضح "لکھنے کی سہولت غیر فعال ہے" خرابی کے ساتھ ناکام بنانے کے لیے اسے `false` پر سیٹ کریں۔ |
| `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | Claude CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | Codex CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | Droid CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | OpenClaw CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_CURSOR_BIN` | `agent`، پھر `cursor` | `src/shared/services/cliRuntime.ts` | Cursor agent بائنری کا حسبِ ضرورت راستہ۔ اس کے بغیر، شناخت پہلے `agent` آزماتی ہے اور ناکامی پر `cursor` استعمال کرتی ہے۔ |
| `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | Cline CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | 5dive CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | 5dive کی سسٹم اسٹیٹ ڈائریکٹری (root کی ملکیت والے توثیقی پروفائلز)؛ 5dive کی اپنی STATE_DIR طے شدہ قدر کی عکاسی کرتی ہے۔ |
| `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | Continue CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | Qoder CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | Qwen Code CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | Aider CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | Goose CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Google Gemini CLI بائنری کا حسبِ ضرورت راستہ — صرف سرور سائیڈ شناخت/صحت کی جانچ کے لیے؛ `omniroute run gemini` سسٹم PATH سے `gemini` بائنری تلاش کرتا ہے۔ |
| `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | Kilo Code CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | OpenCode CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | Hermes بائنری کا حسبِ ضرورت راستہ۔ دونوں کیٹلاگ اندراجات (`hermes` اور `hermes-agent`) کے لیے مشترک ہے۔ |
| `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | ForgeCode CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | jcode CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | DeepSeek TUI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | CodeWhale CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | Smelt CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | Pi (pi-coding-agent) بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | Crush CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | Oh My Pi (`omp`) ایجنٹ بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | Letta CLI بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | Prime Agent (Prime Intellect) بائنری کا حسبِ ضرورت راستہ۔ |
| `CLI_WINDSURF_BIN` | _(کوئی نہیں)_ | `src/shared/services/cliRuntime.ts` | Windsurf بائنری کا حسبِ ضرورت راستہ۔ Windsurf کے ساتھ **کوئی ڈیفالٹ کمانڈ نہیں آتی** — اسے سیٹ کیے جانے تک بائنری کی شناخت غیر فعال رہتی ہے۔ |
| `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | Devin CLI بائنری (v3.8.0) کا حسبِ ضرورت راستہ۔ Windsurf/Devin ایگزیکیوٹر استعمال کرتا ہے۔ |
| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | Devin Desktop کا `ide_version`۔ اوور رائیڈز کو `x.y.z` فارمیٹ استعمال کرنا چاہیے؛ غلط اقدار کی صورت میں تصدیق شدہ ڈیفالٹ استعمال ہوتا ہے۔ |
| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | بنڈل شدہ Codeium/language-server کا `extension_version`، جو Desktop کے `ide_version` سے الگ ہے۔ اوور رائیڈز کو `x.y.z` استعمال کرنا چاہیے؛ غلط اقدار کی صورت میں بنڈل شدہ ڈیفالٹ استعمال ہوتا ہے۔ |
| `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | صرف ایجنٹک برج کے لیے Devin CLI اوور رائیڈ۔ ایگزیکیوٹر صرف مقامی ACP stdio اپ اسٹریم قبول کرتا ہے۔ |
| `DEVIN_AGENTIC_HOME` | _(درکار)_ | `open-sse/executors/devin-cli-agentic.ts` | ایجنٹک Devin ذیلی عمل کے لیے مطلق اور علیحدہ ہوم؛ قابلِ قبول برج راستے `/home/bridge` اور ٹاسک کے مقامی `.sandbox` راستے ہیں (Windows پر، `C:\...\.sandbox\...`)۔ |
| `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | برج کی جانب سے چائلڈ کو ختم کرنے اور واضح ٹائم آؤٹ واپس کرنے سے پہلے ایک Devin ACP ٹرن کا زیادہ سے زیادہ دورانیہ۔ |
| `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | علیحدہ برج کے لیے مرکزی Claude Code ماڈل عرف۔ لائیو ہارنس مثال کو موجودہ Devin اکاؤنٹ کی جانب سے لوٹائے گئے ماڈل سے بدل دیتا ہے۔ |
| `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | جب Claude Code اپنے Sonnet ڈیفالٹ کی درخواست کرتا ہے تو استعمال ہونے والا علیحدہ برج عرف۔ |
| `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | جب Claude Code اپنے Opus ڈیفالٹ کی درخواست کرتا ہے تو استعمال ہونے والا علیحدہ برج عرف۔ |
| `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | جب Claude Code اپنے Haiku ڈیفالٹ کی درخواست کرتا ہے تو استعمال ہونے والا علیحدہ برج عرف۔ |
| `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | Claude Code کے ذیلی ایجنٹس کے لیے استعمال ہونے والا علیحدہ برج عرف۔ |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Devin CLI کوٹے (`GetUserStatus`) کے لیے استعمال ہونے والے Codeium سیٹ مینجمنٹ API کا اختیاری اوور رائیڈ۔ |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | مقامی `auggie` فراہم کنندہ کے زیرِ استعمال Augment (Auggie) CLI بائنری کے لیے مطلق پاتھ کا اوور رائیڈ۔ متبادل طور پر پہلے `CLI_AUGGIE_BIN`، پھر PATH میں تلاش استعمال ہوتی ہے۔ |
| `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Augment (Auggie) CLI بائنری پاتھ کے لیے عرفی اوور رائیڈ (`AUGGIE_BIN` کے بعد چیک کیا جاتا ہے)۔ |
| `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | مقامی `zcode` فراہم کنندہ کے stdio کلائنٹ کے لیے استعمال ہونے والی بائنری۔ متبادل طور پر PATH میں موجود `zcode` استعمال ہوتا ہے۔ |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | `cliTools` کے ذریعے لانچ کرتے وقت `zcode` بائنری کو دیے جانے والے اضافی آرگیومنٹس کی JSON ارے (≤16 اسٹرنگز)۔ |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | ZCode ایپ سرور ذیلی عمل کے لیے ورکنگ ڈائریکٹری۔ |
| `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | ایپ سرور کو بھیجی جانے والی فراہم کنندہ ID کے لیے اوور رائیڈ۔ |
| `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | ZCode ایپ سرور رن ٹائم کی روٹ (جہاں بنڈل شدہ `node` اور `zcode-server.cjs` موجود ہوتے ہیں)۔ |
| `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | ZCode ایپ سرور کو ہوسٹ کرنے کے لیے استعمال ہونے والا Node ایگزیکیوٹیبل۔ |
| `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | ZCode سرور کو ہوسٹ کرنے کے لیے استعمال ہونے والی ایپ سرور انٹری اسکرپٹ۔ |
| `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | وہ اسٹارٹ اپ ٹائم آؤٹ (ms) جس کے بعد ZCode ایپ سرور کا لانچ ناکام تصور کیا جاتا ہے۔ |
| `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | ZCode ایپ سرور کال کے لیے فی درخواست RPC ٹائم آؤٹ (ms)۔ |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | ZCode کی ایک باری کا زیادہ سے زیادہ دورانیہ (ms)، جس کے بعد سپروائزر اسے ٹائم آؤٹ کر دیتا ہے۔ |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | ZCode کی باری مکمل ہونے کی جانچ کے لیے پولنگ وقفہ (ms)۔ |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Hermes Agent کی ہوم ڈائریکٹری جہاں OmniRoute، Hermes CLI کنفیگ کو پڑھتا اور لکھتا ہے۔ یہ اس ماحولیاتی متغیر سے مطابقت رکھتی ہے جسے Hermes PowerShell انسٹالر Windows پر سیٹ کرتا ہے (`%LOCALAPPDATA%\hermes`)۔ |
### CLI پروفائل کی خودکار ہم وقت سازی
یہ فیچر فلیگز اختیاری ہیں اور بطور ڈیفالٹ بند ہوتے ہیں۔ انہیں
CLI Code ڈیش بورڈ سے بھی فعال یا غیر فعال کیا جا سکتا ہے۔
| متغیر | ڈیفالٹ | سورس فائل | تفصیل |
| ------------------------------------- | ------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | فراہم کنندہ کے ماڈل کی ہم وقت سازی کے بعد، لائیو کیٹلاگ سے `~/.codex/*.config.toml` پروفائل فائلوں کو خودکار طور پر دوبارہ لکھتا ہے۔ `CLI_ALLOW_CONFIG_WRITES` درکار ہے؛ فعال/ڈیفالٹ Codex کنفیگ، تصدیق، Codex-lb ترتیبات یا فراہم کنندہ کے انتخاب کو کبھی تبدیل نہیں کرتا۔ |
| `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | فراہم کنندہ کے ماڈل کی ہم وقت سازی کے بعد، لائیو کیٹلاگ سے `~/.claude/profiles//settings.json` Claude Code پروفائل فائلوں کو خودکار طور پر دوبارہ لکھتا ہے۔ `CLI_ALLOW_CONFIG_WRITES` درکار ہے؛ فعال/ڈیفالٹ Claude کنفیگ، تصدیق یا فراہم کنندہ کے انتخاب کو کبھی تبدیل نہیں کرتا۔ |
### Docker کی مثال
```bash
# ہوسٹ بائنریز کو کنٹینر میں ماؤنٹ کریں اور OmniRoute کو بتائیں کہ وہ کہاں موجود ہیں:
CLI_EXTRA_PATHS=/host-cli/bin
CLI_CONFIG_HOME=/host-home
CLI_ALLOW_CONFIG_WRITES=true
CLI_CLAUDE_BIN=/host-cli/bin/claude
```
`CLI_CONFIG_HOME` صرف اسی وقت مؤثر ہوتا ہے جب path کو حقیقتاً host سے bind-mount کیا گیا ہو — اسے `~/.codex:/host-home/.codex:rw` جیسے mounts کے ساتھ استعمال کریں (`docker-compose.yml` میں `host` profile دیکھیں)۔ ایسا path جو نہ container user کے home کے اندر ہو اور نہ ہی bind mount ہو، نظر انداز کر دیا جاتا ہے، کیونکہ وہاں لکھی گئی چیز container دوبارہ بنائے جانے پر ضائع ہو جائے گی۔
Image، `USER node` کے طور پر چلتی ہے، اس لیے mount نہ کیا گیا `/root` ایک درست override **نہیں** ہے۔
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| ---------------------------------------- | ---------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(خودکار)_ | `src/shared/utils/containerEnv.ts` | container detection کو فعال (`1`/`true`) یا غیر فعال (`0`/`false`) کرنے پر مجبور کریں۔ یہ صرف ان runtimes پر درکار ہے جنہیں auto-detection شناخت نہیں کر پاتی۔ |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | CLI-tool کی config کو بہرحال کسی unmounted container path میں لکھنے کی اجازت دیں۔ اس کا CLI مساوی `--allow-container-write` ہے۔ |
### CLI Binary (`omniroute`) کے معاون متغیرات
یہ متغیرات `omniroute` CLI binary کے اپنے رویے کو حسبِ ضرورت ترتیب دیتے ہیں (اوپر دی گئی sidecar detection کو نہیں)۔
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| ---------------------------- | ------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_LANG` | _(system)_ | `bin/cli/i18n.mjs` | CLI output کی زبان متعین کریں۔ BCP-47 locale (مثلاً `en`، `pt-BR`)۔ یہ system locale env vars (LC_ALL، LC_MESSAGES) پر فوقیت رکھتا ہے۔ |
| `OMNIROUTE_SHOW_LOG` | _(غیر متعین)_ | `bin/cli/runtime/processSupervisor.mjs` | supervised mode میں 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 میں خودکار طور پر بنایا جاتا ہے۔ |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | CLI → server requests کے لیے فی کوشش HTTP timeout (ms)۔ |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | timeout warning دکھانے سے پہلے CLI جتنا زیادہ سے زیادہ وقت (ms) server health endpoint کا انتظار کرتا ہے۔ سست cold starts (مثلاً Windows) کے لیے مفید ہے۔ اسے `--ready-timeout` کے ذریعے بھی سیٹ کیا جا سکتا ہے۔ |
| `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | CLI commands کے دوران retry/backoff diagnostics کو stderr پر دکھانے کے لیے اسے `1` پر سیٹ کریں۔ |
| `OMNIROUTE_PLUGIN_PATH` | _(غیر متعین)_ | `bin/cli/plugins.mjs` | CLI plugin discovery کے لیے حسبِ ضرورت directory (`omniroute-cmd-*` packages)۔ غیر متعین ہونے پر طے شدہ قدر `~/.omniroute/plugins/` ہے۔ صرف CLI کے لیے — یہ کبھی server-side plugin scanner تک نہیں پہنچتا، جس کی سمت `OMNIROUTE_PLUGINS_DIR` (سیکشن 2) سے متعین ہوتی ہے۔ |
---
## 10. داخلی ایجنٹ اور MCP انضمامات
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_BASE_URL` | خودکار شناخت | `open-sse/mcp-server/server.ts` | MCP/A2A ٹولز کے OmniRoute تک پہنچنے کے لیے واضح URL۔ localhost کی خودکار شناخت کو اوور رائیڈ کرتا ہے۔ |
| `OMNIROUTE_API_KEY` | _(غیر متعین)_ | MCP/A2A ماڈیولز | داخلی MCP ٹول اور A2A اسکل کالز کے لیے API کلید۔ |
| `OMNIROUTE_API_KEY_ID` | _(غیر متعین)_ | `open-sse/mcp-server/audit.ts` | MCP آڈٹ لاگ انتساب کے لیے کلید کی ID۔ |
| `ROUTER_API_KEY` | _(غیر متعین)_ | میراثی | `OMNIROUTE_API_KEY` کا میراثی عرف۔ |
| `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | روزانہ کی صفائی کے کسی قطار کو حذف کرنے سے پہلے مقامی ڈیٹا بیس میں رکھے جانے والے A2A ٹاسک کی تاریخ کے دن۔ غیر متعین، غیر عددی، یا `<= 0` ہونے پر `30` استعمال کیا جاتا ہے۔ |
| `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | A2A میموری ہٹس کی مشاہدہ پذیری کی خصوصیت کے لیے کِل سوئچ۔ کسی ٹاسک کے لیے میموری بازیافت کی تلاش کو مکمل طور پر چھوڑنے کے لیے اسے `0` پر سیٹ کریں؛ کوئی بھی دوسری قدر (بشمول غیر متعین) اسے فعال رکھتی ہے۔ |
| `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | آف لائن/مقامی Issue Agent کے ریکارڈ شدہ ٹرائیج اینڈ پوائنٹ کو فعال کرتا ہے۔ اسے غیر فعال ہی رہنے دیں، الا یہ کہ مقامی ریکارڈ شدہ ٹرائیج ورک فلوز واضح طور پر چلائے جا رہے ہوں۔ |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(غیر متعین)_ | `src/lib/issueAgent/execution.ts` | Issue Agent کے ایک ریکارڈ شدہ ٹرائیج رن کے لیے ٹائم آؤٹ (ms)۔ اسے داخلی زیادہ سے زیادہ حد تک محدود کیا جاتا ہے؛ غیر متعین یا غلط ہونے پر پہلے سے شامل طے شدہ قدر استعمال ہوتی ہے۔ |
| `OMNIROUTE_CONTEXT` | _(فعال سیاق)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | `omniroute` کمانڈز کے لیے CLI ریموٹ موڈ کا سیاق/پروفائل؛ مقامی سیاق اسٹور میں فعال سیاق کو اوور رائیڈ کرتا ہے۔ `--context ` کے مساوی۔ |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | CLI سیاق کی اسناد کے لیے اختیاری `keytar` OS-keychain بیک اینڈ کو غیر فعال کریں۔ فعال ہونے پر اسناد `config.json` موڈ `0600` میں رہتی ہیں اور CLI ایک بار متبادل استعمال کرنے کی تنبیہ جاری کرتا ہے؛ یہ دانستہ ہیڈلیس/کنٹینر آپریشن کے لیے ہے۔ |
| `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | MCP ٹول کالز پر اسکوپ پر مبنی رسائی کنٹرول نافذ کریں۔ |
| `OMNIROUTE_MCP_SCOPES` | _(تمام)_ | `open-sse/mcp-server/server.ts` | کاما سے علیحدہ کردہ اسکوپس: `admin`، `combos`، `health`، `models`، `routing`، `budget`، `metrics`، `pricing`، `memory`، `skills`۔ |
| `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | مینی فیسٹ کو سیریلائز کرنے سے پہلے MCP ٹول کی تفصیلات کو کمپریس کریں۔ فعال کرنے والی قدریں: `1`، `true`، `on`۔ |
| `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | کمپریشن الگورتھم/پروفائل۔ غیر فعال کرنے والی قدریں: `0`، `false`، `off`۔ |
| `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | MCP سرور کی داخلی انتظامی ریڈز (صحت، لچک، کومبوز، کوٹا، استعمال) کے لیے منسوخی کی مہلت (ms)۔ |
| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | ایسے MCP ہاپس کے لیے منسوخی کی مہلت (ms) جو کسی فراہم کنندہ کا انتظار کرتے ہیں (`route_request`، `web_search`، `web_fetch`)۔ |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | میموری میں کیش کیے گئے مقامی کارپس انڈیکس انسٹینسز کی زیادہ سے زیادہ تعداد (LRU، ہر انڈیکس شدہ روٹ ڈائریکٹری کے لیے ایک)۔ کم از کم `1` تک محدود۔ |
| `MODEL_SYNC_INTERVAL_HOURS` | `24` | `src/shared/services/modelSyncScheduler.ts` | ماڈل کیٹلاگ کی ہم وقت سازی کا وقفہ، گھنٹوں میں۔ |
| `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | فراہم کنندہ کی شرح کی حد اور کوٹا پولنگ کا وقفہ۔ |
| `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | بلک ہم وقت سازی میں مسلسل OAuth کوٹا فیچز کے درمیان وقفہ (ms)؛ اپ اسٹریم پر اچانک بوجھ سے بچنے کے لیے OAuth کنکشنز ایک وقت میں ایک فیچ کیے جاتے ہیں۔ `0` اس سے دست بردار ہوتا ہے (بیک وقت)۔ |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | فی درخواست پری فلائٹ/مانیٹر پاتھ پر مسلسل اپ اسٹریم کوٹا فیچز کے درمیان کم از کم وقفہ (ms)؛ یہ بیک وقت نیٹ ورک کالز میں فاصلہ رکھتا ہے تاکہ ایک IP پر موجود بہت سے اکاؤنٹس اپ اسٹریم پر اچانک بوجھ نہ ڈالیں۔ Codex (`/wham/usage`)، DeepSeek، Bailian (دونوں فیچ مقامات)، OpenCode، اور Crof کوٹا فیچرز میں مربوط ہے (#6009، #6911)۔ عمومی `usage.ts::getUsageForProvider` ڈسپیچ پاتھ (github/glm/minimax/nanogpt/xai/etc.) ابھی شامل نہیں ہے — اسے الگ سے ٹریک کیا جا رہا ہے۔ کیش ہٹس غیر متاثر ہیں۔ `0` غیر فعال کرتا ہے؛ `0..5000` تک محدود۔ |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | حقیقی استعمال کے واقعے کے بعد فراہم کنندہ کی حدود ریفریش کرنے سے پہلے تاخیر (ms)، تاکہ اپ اسٹریم کوٹا API کو استعمال درج کرنے کا وقت مل سکے۔ |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | خودکار شناخت | `open-sse/services/adobeFireflyBrowserLogin.ts` | انٹرایکٹو Adobe Firefly سائن اِن اور آف اسکرین تجدید کے لیے استعمال ہونے والی سسٹم Chrome یا Edge ایگزیکیوٹیبل کی مطلق پاتھ۔ |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | فعال | `open-sse/services/adobeFireflySession.ts` | اکاؤنٹ کے دائرۂ کار والی Chrome CDP سیشنز کے ذریعے IMS اور براؤزر رسک اسٹیٹ کو تازہ رکھتا ہے۔ براؤزر تجدید غیر فعال کرنے کے لیے `0` سیٹ کریں۔ |
| `ADOBE_FIREFLY_SESSION_DISK` | فعال | `open-sse/services/adobeFireflySession.ts` | پراسیس دوبارہ شروع ہونے کے باوجود مرمت شدہ Adobe سیشنز کو `DATA_DIR` کے تحت برقرار رکھتا ہے۔ سیشنز کو صرف میموری تک محدود رکھنے کے لیے `0` سیٹ کریں۔ |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Adobe Firefly جنریٹ سبمشنز کے درمیان کم از کم وقفہ، ملی سیکنڈز میں؛ `0` وقفہ غیر فعال کرتا ہے۔ |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | ہر تیسری کامیاب Adobe سبمشن کے بعد اضافی خاموش دورانیہ، ملی سیکنڈز میں۔ |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | عارضی Adobe 408 جوابات کے بعد بنیادی بیک آف، ملی سیکنڈز میں؛ زیادہ سے زیادہ پانچ کوششوں میں سبمٹ وقفے کے ساتھ مل کر استعمال ہوتا ہے۔ |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | تمام پس منظر سروسز (ہم وقت سازی، قیمت بندی، ماڈل ریفریش) غیر فعال کریں۔ CI/ٹیسٹ کے لیے مفید۔ |
| `OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS` | _(غیر سیٹ شدہ)_ | `src/lib/config/runtimeSettings.ts` | خودکار ٹیسٹ کی شناخت کے دوران پس منظر ٹاسکس کو لازماً فعال کریں۔ ٹیسٹ ہیورسٹک کو اوور رائیڈ کرنے کے لیے `1` سیٹ کریں۔ |
| `OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS` | `600000` | `src/lib/jobs/budgetResetJob.ts` | بجٹ ری سیٹ جانچ کی تکرار (ms)۔ کم از کم حد `10000`۔ |
| `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | پیشگی کنکشن کول ڈاؤن بحالی کا وقفہ (ms): ان کنکشنز کی دوبارہ توثیق کرتا ہے جن کا عارضی `rate_limited_until` گزر چکا ہو، درخواست کے ہاٹ پاتھ سے ہٹ کر۔ کم از کم `5000`۔ |
| `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | پیشگی کنکشن کول ڈاؤن بحالی شیڈیولر کو غیر فعال کریں (`getProviderCredentials` میں سست بحالی اب بھی لاگو ہوتی ہے)۔ |
| `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | ریزننگ کیش کی صفائی کا وقفہ (ms)۔ کم از کم `60000`۔ |
| `OMNIROUTE_REASONING_MIN_BUDGET` | _غیر متعین_ (غیر فعال) | `open-sse/services/reasoningTokenBuffer.ts` | تھنکنگ ماڈل کے آؤٹ پٹ بجٹس کے لیے اختیاری کم از کم حد: `[256, floor)` میں موجود کالر کے `max_tokens` کو کم از کم حد تک بڑھایا جاتا ہے (ماڈل کی آؤٹ پٹ حد کے تابع)۔ غیر متعین = کلائنٹ کے بجٹس کبھی نہیں بڑھائے جاتے (#9507)۔ |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | کال لاگ ایکسپورٹ جاب کے لیے Cron ایکسپریشن (UTC)، جو ہر فعال لاگ ایکسپورٹ منزل کو خالی کرتی ہے۔ |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | کنفیگ ہاٹ ری لوڈ کے لیے پولنگ وقفہ (ms)۔ `1000` سے کم قدر مسترد کر دی جاتی ہے۔ |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(فعال)_ | `src/lib/db/apiKeys.ts` | Redis پر مبنی API کلید کی تصدیقی کیش کو بائی پاس کرنے کے لیے `1` مقرر کریں (DB ریڈز کو لازم کرتا ہے)۔ |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | سخت دستخطی جانچ کے بغیر صارف کے زیر انتظام RTK پروجیکٹ فلٹر قواعد پر اعتماد کریں۔ |
| `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | جب `lite.maxToolLength` غیر متعین ہو تو Lite کی پیشگی ٹول نتیجہ تراشنے کے لیے حروف کی حد۔ رینج 256–1000000۔ ڈیش بورڈ کی ترتیب کو اس env پر ترجیح حاصل ہے۔ |
| `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | بیک وقت چلنے والے سنکرونس RTK/Caveman ورکرز کی زیادہ سے زیادہ تعداد؛ اضافی جابز FIFO ترتیب میں انتظار کرتی ہیں۔ |
| `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | ہر جاب کا ٹائم آؤٹ ملی سیکنڈز میں۔ ٹائم آؤٹ ہونے والے ورکرز ختم کر دیے جاتے ہیں اور درخواست بغیر تبدیلی کے فیل اوپن ہوتی ہے۔ |
| `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | کسی غیر استعمال شدہ کمپریشن ورکر کو ختم کرنے سے پہلے اس کی غیر فعال مدت، ملی سیکنڈز میں۔ |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | T02 اسٹیکڈ پائپ لائن کے فی انجن سرکٹ بریکر کا ماسٹر سوئچ۔ **اختیاری (بطور ڈیفالٹ بند)** — فعال ہونے پر، جو انجن مختلف درخواستوں میں بار بار استثنا پھینکتا ہے اسے کول ڈاؤن کے لیے چھوڑ دیا جاتا ہے (فیل اوپن)؛ بند = بائٹ بہ بائٹ یکساں پرانا طرزِ عمل۔ |
| `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | کسی انجن کا بریکر کھلنے سے پہلے مختلف درخواستوں میں مسلسل ناکامیوں کی تعداد۔ |
| `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | ملی سیکنڈز کی وہ مدت جس میں ایک کھلا ہوا انجن ہاف اوپن پروب سے پہلے چھوڑا رہتا ہے۔ |
| `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | T08/H8 CCR بازیافت فیڈبیک ریمپ: محفوظ کردہ بلاک کی ہر سابقہ بازیافت اس کے مؤثر `minChars` کو خطی انداز میں بڑھاتی ہے (بار بار بازیافت ہونے والا مواد کم کمپریس ہوتا ہے؛ `>=3` بازیافتیں = کبھی کمپریس نہیں ہوتا)۔ `1` ریمپ کو غیر فعال کرتا ہے (صرف حد پر بائنری اسکیپ)۔ |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | CCR پائیدار بلاک اسٹور (#9061)۔ اِن میموری اسٹور کو SQLite سے تقویت دیتا ہے تاکہ کوئی بلاک LRU اخراج، TTL، ری اسٹارٹ، یا کسی دوسری انسٹینس پر پہنچنے والی بازیافت کے باوجود برقرار رہے۔ بلاکس کو صرف میموری میں رکھنے کے لیے `false` مقرر کریں۔ 512KB سے بڑے بلاکس اور کلاؤڈ رن ٹائمز ہر صورت صرف میموری تک محدود رہتے ہیں۔ |
| `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | T08/H5 استعمال سے مشاہدہ شدہ پریفکس فریز کا ماسٹر سوئچ۔ **اختیاری (بطور ڈیفالٹ بند)** — فعال ہونے پر، حد سے `>=` مرتبہ مشاہدہ کیے گئے سسٹم پرامپٹ کو ایک مستحکم، کیش کے قابل پریفکس سمجھا جاتا ہے اور اسے ان فراہم کنندگان کے لیے بھی کمپریشن سے محفوظ رکھا جاتا ہے جنہیں جامد کیش ہیورسٹک شناخت نہیں کرتا (فریز صرف _محفوظ_ کرتا ہے، کبھی تبدیل نہیں کرتا)۔ |
| `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | کسی سسٹم پرامپٹ کو منجمد مستحکم پریفکس سمجھے جانے سے پہلے اس کے مشاہدات کی تعداد۔ |
| `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | ابتدائی سیٹ اپ کے بعد بوٹسٹریپ اسکرپٹ اسے `true` مقرر کرتا ہے۔ سیٹ اپ وزرڈ کی مرئیت کو کنٹرول کرتا ہے۔ |
| `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | ہنگامی راستہ: ریکویسٹ باڈی کو Antigravity پروجیکٹ فیلڈ اوور رائیڈ کرنے کی اجازت دیں۔ |
| `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Google One AI کریڈٹس پالیسی: `off` کبھی کریڈٹس شامل نہیں کرتا، `retry` اہل کوٹا 429 کے بعد ایک مرتبہ شامل کرتا ہے، اور `always` پہلی درخواست پر شامل کرتا ہے۔ |
| `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | جب اپ اسٹریم حقیقی دستخطوں کو مسترد کرے تو Antigravity ریکویسٹ ٹرانسلیٹر کو اپنی سخت CLI ریکویسٹ-سگنیچر توثیق چھوڑنے کی اجازت دیں (ڈیبگ/قدیم-CLI موڈ)۔ غیر صفر قدر بائی پاس فعال کرتی ہے۔ |
| `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | خودکار طور پر شناخت شدہ مقامی لاگ اِن کی درآمد کے لیے Antigravity CLI (agy) ٹوکن فائل کا پاتھ اوور رائیڈ کریں۔ |
### OAuth CLI برج (اندرونی)
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ------------------- | ------------ | ------------------------------- | ----------------------------------------- |
| `OMNIROUTE_SERVER` | خودکار شناخت | `src/lib/oauth/config/index.ts` | CLI↔OmniRoute توثیقی برج کے لیے سرور URL۔ |
| `OMNIROUTE_TOKEN` | _(غیر مقرر)_ | `src/lib/oauth/config/index.ts` | CLI برج کے لیے توثیقی ٹوکن۔ |
| `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | CLI برج سیشنز کے لیے صارف ID۔ |
| `SERVER_URL` | _(غیر مقرر)_ | `src/lib/oauth/config/index.ts` | `OMNIROUTE_SERVER` کا سابقہ عرف۔ |
| `CLI_TOKEN` | _(غیر مقرر)_ | `src/lib/oauth/config/index.ts` | `OMNIROUTE_TOKEN` کا سابقہ عرف۔ |
| `CLI_USER_ID` | _(غیر مقرر)_ | `src/lib/oauth/config/index.ts` | `OMNIROUTE_USER_ID` کا سابقہ عرف۔ |
---
## 11. OAuth فراہم کنندہ کی اسناد
**لوکل ہوسٹ ڈیولپمنٹ** کے لیے بلٹ ان اسناد۔ ریموٹ تعیناتیوں کے لیے، ہر فراہم کنندہ کے ڈیولپر کنسول پر اپنی اسناد رجسٹر کریں۔
| متغیر | فراہم کنندہ | نوٹس |
| :------------------------------------------ | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | پبلک کلائنٹ — کسی راز کی ضرورت نہیں۔ |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | ری ڈائریکٹ URI کو اوور رائیڈ کریں۔ ڈیفالٹ: `https://platform.claude.com/oauth/code/callback` |
| `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | پبلک کلائنٹ۔ |
| `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | مماثل `_SECRET` کی ضرورت ہے۔ |
| `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — |
| `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | پبلک کلائنٹ۔ |
| `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | پبلک Muse CLI ڈیوائس فلو کلائنٹ ID کے لیے اختیاری اوور رائیڈ۔ بلٹ ان پبلک کلائنٹ استعمال کرنے کے لیے اسے غیر سیٹ چھوڑ دیں۔ |
| `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | مماثل `_SECRET` کی ضرورت ہے۔ |
| `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — |
| `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | پبلک کلائنٹ۔ |
| `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | GitHub Enterprise Copilot کی OAuth کلائنٹ ID کے لیے اختیاری اوور رائیڈ۔ غیر سیٹ ہونے پر `GITHUB_OAUTH_CLIENT_ID` کے پبلک ڈیفالٹ پر واپس آ جاتا ہے۔ |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | GitHub Copilot کلائنٹ انٹیگریشن ID کے لیے اختیاری اوور رائیڈ جو `Copilot-Integration-Id` اور `Editor-Plugin-Version` ہیڈرز میں بھیجی جاتی ہے۔ ڈیفالٹ `copilot-developer-cli` ہے۔ |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | API کلید فال بیک جو `open-sse/executors/devin-cli.ts` کے ذریعے استعمال ہوتا ہے جب فی کنکشن کوئی اسناد دستیاب نہ ہو۔ اختیاری۔ |
| `CLI_DEVIN_BIN` | Devin CLI (v3.8) | Devin CLI بائنری (`devin`) کا کسٹم پاتھ۔ `open-sse/executors/devin-cli.ts` کے ذریعے حل کیا جاتا ہے۔ |
| `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | GitLab Duo کے لیے OAuth کلائنٹ ID۔ `https://gitlab.com/-/profile/applications` پر ایک ایپ رجسٹر کریں جس میں ری ڈائریکٹ URI `/callback` اور سکوپس `api, read_user, openid, profile, email` ہوں۔ `GITLAB_OAUTH_CLIENT_ID` پر واپس آ جاتا ہے۔ |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | GitLab Duo کے لیے OAuth کلائنٹ سیکرٹ۔ اختیاری — PKCE فلو کو سیکرٹ کی ضرورت نہیں ہوتی۔ `GITLAB_OAUTH_CLIENT_SECRET` پر واپس آ جاتا ہے۔ |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | GitLab بیس URL کو اوور رائیڈ کریں (سیلف ہوسٹڈ GitLab)۔ ڈیفالٹ `https://gitlab.com` ہے۔ `GITLAB_BASE_URL` پر واپس آ جاتا ہے۔ |
| `GITLAB_BASE_URL` | GitLab Duo (v3.8) | `GITLAB_DUO_BASE_URL` کے لیے پرانا فال بیک۔ استعمال ہوتا ہے جب `_DUO_` ویریئنٹ غیر سیٹ ہو۔ |
| `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | `src/lib/oauth/constants/oauth.ts` کے ذریعے استعمال ہونے والے `GITLAB_DUO_OAUTH_CLIENT_ID` کے لیے پرانا فال بیک۔ |
| `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | `src/lib/oauth/constants/oauth.ts` کے ذریعے استعمال ہونے والے `GITLAB_DUO_OAUTH_CLIENT_SECRET` کے لیے پرانا فال بیک۔ |
| `QODER_OAUTH_CLIENT_SECRET` | Qoder | — |
| `QODER_OAUTH_AUTHORIZE_URL` | Qoder | Qoder OAuth کو فعال کرنے کے لیے سیٹ کریں۔ |
| `QODER_OAUTH_TOKEN_URL` | Qoder | — |
| `QODER_OAUTH_USERINFO_URL` | Qoder | — |
| `QODER_OAUTH_CLIENT_ID` | Qoder | — |
| `QODER_PERSONAL_ACCESS_TOKEN` | Qoder | براہ راست API کلید فال بیک (OAuth کو بائی پاس کرتا ہے)۔ |
| `QODER_CLI_WORKSPACE` | Qoder | Qoder CLI کے لیے ورک اسپیس ID۔ |
| `OMNIROUTE_QODER_WORKSPACE` | Qoder | `QODER_CLI_WORKSPACE` کا عرفی نام۔ |
| `QODER_CLI_CONFIG_DIR` | Qoder | Qoder CLI کنفگ ڈائریکٹری کو اوور رائیڈ کریں (علیحدہ PAT سیشن، براؤزر لاگ ان کو خراب کرنے سے بچتا ہے)۔ |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | فرنٹ اینڈ `tk` ٹوکن جو `/api/chat` پر `validated` کے طور پر بھیجا جائے۔ ضروری ہے جب Blackbox ٹوکن میچنگ کو نافذ کرتا ہو؛ بصورت دیگر OmniRoute ایک بے ترتیب UUID پر فال بیک کرتا ہے۔ مسئلہ #2252 دیکھیں۔ |
| `VISION_BRIDGE_BASE_URL` | Vision Bridge guardrail | غیر-Anthropic ویژن-برج کالز کے لیے OpenAI-مطابق بیس URL۔ پہلے سے طے شدہ طور پر پرانے OpenAI URL env یا api.openai.com پر سیٹ ہوتا ہے۔ OmniRoute کے `/v1` سیلف-لوپ یا کسی بھی OpenAI-مطابق اینڈ پوائنٹ (Gemini OpenAI-compat، OpenRouter) کی طرف اشارہ کریں۔ مسئلہ #2232۔ جب URL OmniRoute کا اپنا `/v1` ہو، تو ڈسکرائب سب-ریکویسٹ `x-omniroute-admission-bypass: internal` بھیجتا ہے اور حل شدہ سیلف-لوپ کریڈینشل (لوکل موڈ میں `sk_omniroute` سینٹینل، یا `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) کے ساتھ تصدیق کرتا ہے تاکہ `REQUIRE_API_KEY=true` تعیناتیاں کام کریں۔ |
| `VISION_BRIDGE_API_KEY` | Vision Bridge guardrail | اوپر دیے گئے URL کے لیے API کلید۔ غیر-Anthropic ویژن-برج کالز کے لیے فی-پرووائیڈر OpenAI / Google env vars کو اوور رائیڈ کرتا ہے۔ Anthropic ماڈلز اپنا مخصوص Anthropic کلید کا راستہ برقرار رکھتے ہیں۔ مسئلہ #2232۔ |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge guardrail | کتنی دیر تک "کوئی قابل استعمال امیدوار نہیں" روٹنگ کا نتیجہ کیش کیا جاتا ہے، ملی سیکنڈز میں (پہلے سے طے شدہ `30000`)۔ غلط یا منفی اقدار پہلے سے طے شدہ پر واپس آ جاتی ہیں؛ `0` منفی کیش کو غیر فعال کرتا ہے۔ ماخذ: `src/lib/guardrails/visionBridgeRouter.ts`۔ |
> [!WARNING]
>
> 1. Google Cloud Console → Credentials پر جائیں
> 2. ایک OAuth 2.0 کلائنٹ ID بنائیں (قسم: "ویب ایپلیکیشن")
> 3. اپنے سرور URL کو مجاز ری ڈائریکٹ URI کے طور پر شامل کریں
> 4. `.env` میں کریڈینشل کی اقدار کو تبدیل کریں۔
---
## 12. فراہم کنندہ User-Agent اوور رائیڈز
ہر upstream فراہم کنندہ کو بھیجے جانے والے `User-Agent` ہیڈر کو اوور رائیڈ کریں۔ اسے executor base class رن ٹائم پر متحرک طور پر حل کرتی ہے:
```
process.env[`${PROVIDER_ID}_USER_AGENT`]
```
> **ماخذ:** `open-sse/executors/base.ts` → `buildHeaders()`
| متغیر | ڈیفالٹ قدر | کب اپ ڈیٹ کریں |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.258 (external, cli)` | جب Anthropic نیا CLI ورژن جاری کرے |
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | دونوں Anthropic جانے والے راستوں (مقامی OAuth اور CLIProxyAPI) پر فریقِ ثالث harness کے ٹول نام بعینہٖ Anthropic کو فارورڈ کرنے کے لیے اسے `1`/`true` پر سیٹ کریں۔ ڈیفالٹ طور پر executor غیر Claude-Code ٹول ناموں کو قطعی انداز میں عرف دیتا ہے (جہاں Claude Code کی canonical mapping موجود ہو، وہاں وہ، بصورتِ دیگر PascalCase) اور جواب میں `_toolNameMap` کے ذریعے انہیں واپس اصل ناموں میں تبدیل کرتا ہے، تاکہ snake_case ٹولز والے harnesses کو fingerprint شدہ فریقِ ثالث کلائنٹس سمجھ کر مسترد نہ کیا جائے۔ صرف debugging کے لیے۔ |
| `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | جب OpenAI، Codex CLI کو اپ ڈیٹ کرے |
| `CODEX_CLIENT_VERSION` | `0.155.0` | مکمل UA اسٹرنگ سے الگ Codex کلائنٹ ورژن کو اوور رائیڈ کریں |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.258` | مشتہر کردہ Claude Code ورژن کو `CLAUDE_USER_AGENT` سے الگ اوور رائیڈ کریں۔ Anthropic کچھ ماڈلز تک رسائی کو اس قدر کی بنیاد پر محدود کرتا ہے (#12417)۔ |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.81-6` | مشتہر کردہ Copilot CLI ورژن کو `GITHUB_USER_AGENT` سے الگ اوور رائیڈ کریں |
| `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | جب GitHub Copilot Chat اپ ڈیٹ ہو |
| `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | جب Antigravity IDE اپ ڈیٹ ہو |
| `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | جب Kiro IDE اپ ڈیٹ ہو |
| `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | Kiro social device-code کے `clientId` (عوامی ID) کو اوور رائیڈ کریں |
| `KIRO_VERIFY_FULL_CRC` | `false` | اختیاری: Kiro event stream پر مکمل فی فریم message CRC validation فعال کریں (خراب شدہ streams کی debugging کے لیے) |
| `QODER_USER_AGENT` | `Qoder-Cli` | جب Qoder CLI اپ ڈیٹ ہو |
| `CURSOR_USER_AGENT` | `Cursor/3.3` | جب Cursor اپ ڈیٹ ہو |
> [!TIP]
> آپ `{PROVIDER_ID}_USER_AGENT` پیٹرن استعمال کرکے **کسی بھی** فراہم کنندہ کے لیے User-Agent اوور رائیڈز شامل کر سکتے ہیں۔ executor متحرک طور پر env var کا نام بناتا ہے۔
---
## 13. CLI فنگرپرنٹ مطابقت
فعال ہونے پر، OmniRoute، HTTP ہیڈرز اور JSON باڈی فیلڈز کو سرکاری CLI ٹولز کے عین دستخط سے مماثل بنانے کے لیے دوبارہ ترتیب دیتا ہے۔ اس طرح آپ کا پراکسی IP برقرار رکھتے ہوئے اکاؤنٹ پر نشان لگنے کا خطرہ کم ہو جاتا ہے۔
**ماخذ:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts`
### فی فراہم کنندہ
| متغیر | فعالیت | اثر |
| ------------------------ | ------ | ------------------------------------------------- |
| `CLI_COMPAT_CODEX` | `=1` | Codex CLI کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_CLAUDE` | `=1` | Claude Code کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_GITHUB` | `=1` | GitHub Copilot کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_ANTIGRAVITY` | `=1` | Antigravity کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_CURSOR` | `=1` | Cursor کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_KIMI_CODING` | `=1` | Kimi Coding کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_KILOCODE` | `=1` | Kilo Code کی درخواست کے دستخط کی نقل کرتا ہے |
| `CLI_COMPAT_CLINE` | `=1` | Cline کی درخواست کے دستخط کی نقل کرتا ہے |
### عمومی
| متغیر | فعالیت | اثر |
| ---------------- | ------ | ---------------------------------------------------------------- |
| `CLI_COMPAT_ALL` | `=1` | **تمام** فراہم کنندگان کے لیے فنگرپرنٹ مطابقت بیک وقت فعال کریں۔ |
### Kimi Coding CLI شناخت کی اوور رائیڈز
| متغیر | ڈیفالٹ | ماخذ فائل | وضاحت |
| ----------------------- | -------------------- | ---------------------------------------- | ------------------------------------------------------------------------------- |
| `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | OAuth/API کالز کے دوران بھیجے جانے والے Kimi CLI ورژن کو اوور رائیڈ کریں۔ |
| `KIMI_CODING_DEVICE_ID` | _(محفوظ شدہ ڈیفالٹ)_ | `src/lib/oauth/providers/kimi-coding.ts` | کلائنٹ ہیڈرز میں استعمال ہونے والی محفوظ شدہ Kimi ڈیوائس ID کو اوور رائیڈ کریں۔ |
> [!NOTE]
> یہ خصوصیت User-Agent اوور رائیڈز (§12) کے ساتھ مل کر کام کرتی ہے۔ فنگرپرنٹ سسٹم ہیڈرز اور باڈی فیلڈز کی ترتیب سنبھالتا ہے، جبکہ User-Agent اوور رائیڈز مخصوص UA اسٹرنگ کو سنبھالتی ہیں۔ دونوں کو آزادانہ طور پر فعال کیا جا سکتا ہے۔
---
## 14. API کلید فراہم کنندگان
براہِ راست توثیق استعمال کرنے والے فراہم کنندگان کی API کلیدیں۔ **ترجیحی سیٹ اپ:** Dashboard → Providers → Add API Key۔
Docker یا ہیڈ لیس تعیناتیوں کے لیے ماحولیاتی متغیرات کے ذریعے سیٹ کرنا ایک متبادل طریقہ ہے۔
تسلیم شدہ پیٹرن: `{PROVIDER_ID}_API_KEY`
| متغیر | فراہم کنندہ |
| ------------------ | ------------------------------------------------- |
| `DEEPSEEK_API_KEY` | DeepSeek |
| `NVIDIA_API_KEY` | NVIDIA NIM |
| `JINA_AI_API_KEY` | Jina AI (Foundation API + Reader فال بیک) |
| `JINA_API_KEY` | Jina AI (`JINA_AI_API_KEY` کا عرف) |
| `GEMINI_API_KEY` | Gemini (Google AI Studio) ایمبیڈنگز + چیٹ فال بیک |
| `GOOGLE_API_KEY` | Gemini (`GEMINI_API_KEY` کا عرف) |
> [!NOTE]
> Groq، xAI، Mistral، Perplexity، Together AI، Fireworks، Cerebras، Cohere، Nebius، اور Qianfan کے لیے جامد `${PROVIDER}_API_KEY` اندراجات v3.8.0 میں ہٹا دیے گئے تھے، کیونکہ رن ٹائم اب انہیں نہیں پڑھتا — یہ فراہم کنندگان مکمل طور پر Dashboard / `data/provider-credentials.json` / انکرپٹڈ DB پر انحصار کرتے ہیں۔ منتقلی کے طریقے کے لیے اس دستاویز کے آخر میں موجود _آڈٹ: ہٹائے گئے / غیر فعال متغیرات_ کا سیکشن دیکھیں۔
> [!TIP]
> Dashboard کے ذریعے سیٹ کی گئی کلیدیں SQLite میں انکرپٹڈ حالت میں محفوظ ہوتی ہیں اور ماحولیاتی متغیرات پر ترجیح رکھتی ہیں۔
>
> **Jina:** جب dashboard میں `jina-ai` (یا مشترکہ `jina-reader`) کنکشن موجود ہو تو `jina-ai/…` ایمبیڈنگز، ری رینک، کلاسیفائی، سیگمنٹ، اور `jina-search` کسی کلسٹر env کلید کو بل **نہیں** کرتے — `getProviderCredentials` پہلے دستیاب قدر پُر کرتا ہے۔ `JINA_AI_API_KEY` / `JINA_API_KEY` صرف اس وقت استعمال ہوتے ہیں جب dashboard کی کوئی قابلِ استعمال کلید موجود نہ ہو۔ کال لاگز env فال بیک کو `connection_id=env:JINA_AI_API_KEY` کے طور پر منسوب کرتے ہیں۔ Reader کارڈ (`jina-reader`, `r.jina.ai`) کبھی بھی `/v1/embeddings` یا `/v1/rerank` فراہم نہیں کرتا۔
>
> **Gemini:** `gemini/gemini-embedding-2` (عرف `google/gemini-embedding-2`) پہلے dashboard کا `gemini` کنکشن استعمال کرتا ہے۔ `GEMINI_API_KEY` / `GOOGLE_API_KEY` صرف اس وقت استعمال ہوتے ہیں جب dashboard کی کوئی قابلِ استعمال کلید موجود نہ ہو۔ کال لاگز env فال بیک کو `connection_id=env:GEMINI_API_KEY` کے طور پر منسوب کرتے ہیں۔ مقامی ملٹی موڈل ٹریفک `:embedContent` / `:batchEmbedContents` کے لیے `x-goog-api-key` استعمال کرتی ہے — OpenAI کے N عدد `input` آئٹمز سے 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)
│ ├── FETCH_CONNECT_TIMEOUT_MS (خود مختار، طے شدہ: 30000)
│ └── FETCH_KEEPALIVE_TIMEOUT_MS (خود مختار، طے شدہ: 4000)
├─→ STREAM_IDLE_TIMEOUT_MS (REQUEST_TIMEOUT_MS سے اخذ ہوتا ہے، طے شدہ: 600000)
├─→ STREAM_ACTIVE_TIMEOUT_MS (خود مختار، طے شدہ: 1260000؛ 0 اسے غیر فعال کرتا ہے)
├─→ STREAM_READINESS_TIMEOUT_MS (REQUEST_TIMEOUT_MS سے اخذ ہوتا ہے، طے شدہ: 80000)
├─→ STREAM_READINESS_MAX_TIMEOUT_MS (انطباقی تیاری کی توسیعات کو محدود کرتا ہے، طے شدہ: 180000)
└─→ API_BRIDGE_PROXY_TIMEOUT_MS (REQUEST_TIMEOUT_MS سے اخذ ہوتا ہے، طے شدہ: 30000)
├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (ماخوذ، طے شدہ: 300000)
├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (طے شدہ: 60000)
├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (طے شدہ: 5000)
└── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (طے شدہ: 0 = غیر فعال)
```
| متغیر | ڈیفالٹ | وضاحت |
| ----------------------------------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REQUEST_TIMEOUT_MS` | _(غیر مقرر)_ | عالمی شارٹ کٹ — `FETCH_TIMEOUT_MS` اور `STREAM_IDLE_TIMEOUT_MS`، دونوں کے ڈیفالٹس کو اوور رائیڈ کرتا ہے۔ |
| `FETCH_TIMEOUT_MS` | `600000` | اَپ اسٹریم فراہم کنندہ کی کالز کے لیے HTTP درخواست کا کُل ٹائم آؤٹ۔ |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | منسوخ کرنے سے پہلے خام اَپ اسٹریم بائٹس کے درمیان خاموشی کی زیادہ سے زیادہ مدت۔ توسیعی سوچ والے ماڈلز شاذونادر ہی >90s توقف کرتے ہیں۔ |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | فعال SSE اسٹریم کی زیادہ سے زیادہ کُل مدتِ حیات؛ اَپ اسٹریم بائٹس پر کبھی ری سیٹ نہیں ہوتی اور `REQUEST_TIMEOUT_MS` سے آزاد ہے۔ رجسٹری میں فی ماڈل سب سے بڑی `timeoutMs` (1200000، Codex) کے علاوہ 60000 کے مارجن سے اخذ کی گئی ہے، تاکہ مکمل بجٹ تک چلنے کی اجازت رکھنے والا ماڈل جواب کے درمیان کبھی بند نہ کیا جائے۔ غیر فعال کرنے کے لیے `0` مقرر کریں۔ |
| `OMNIROUTE_SSE_COMMENTS` | _(غیر فعال)_ | آیا OmniRoute کو SSE کی `:` تبصرہ سطریں خارج کرنے کی اجازت ہے (مثلاً `: keepalive` ہارٹ بیٹ اور `x-omniroute-*` میٹا ڈیٹا ٹریلرز)۔ بطور ڈیفالٹ غیر فعال ہے (#10524)، کیونکہ OpenAI سے مطابقت رکھنے والے سخت کلائنٹس ہر SSE سطر پر JSON.parse کرتے ہیں اور `:` تبصروں پر کریش ہو جاتے ہیں؛ `data:` ہارٹ بیٹس متاثر نہیں ہوتے۔ دوبارہ فعال ہونے کے لیے `on`/`true`/`1`/`yes` مقرر کریں۔ `open-sse/utils/sseHeartbeat.ts` کے ذریعے استعمال ہوتا ہے۔ |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | پہلا غیر ping SSE ایونٹ موصول کرنے کی مدت۔ مقرر ہونے پر `REQUEST_TIMEOUT_MS` سے قدر وراثت میں لیتا ہے۔ |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | بڑی، ٹول پر زیادہ انحصار رکھنے والی، یا زیادہ استدلال والی اسٹریمنگ درخواستوں کے لیے پہلے ایونٹ کی موافق پذیر تیاری ونڈو کی زیادہ سے زیادہ مدت۔ |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | `/goal` ہیورسٹک کے لیے کِل سوئچ۔ کھوج کو مکمل طور پر غیر فعال کرنے کے لیے `false`/`0`/`off` مقرر کریں — درخواست کے باڈی/ہیڈرز کی وجہ سے تیاری کے ٹائم آؤٹس اور اسٹریم ریکوری کبھی نہیں بڑھائے جاتے، جس سے کلائنٹ کے زیرِ کنٹرول ٹائم آؤٹ ایمپلیفیکیشن کم ہوتی ہے۔ |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | شناخت شدہ `/goal` ایجنٹ رنز یا `x-omniroute-agent-goal` کے ذریعے جبراً چلائی گئی درخواستوں کے لیے پہلے ایونٹ کی تیاری ونڈو کی زیادہ سے زیادہ مدت۔ |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | شناخت شدہ `/goal` ایجنٹ رنز کے لیے ابتدائی اسٹریم ریکوری خودکار طور پر فعال کریں۔ ہدف سے مخصوص آپٹ اِن کو غیر فعال کرنے کے لیے `false`/`0`/`off` مقرر کریں۔ یہ آپریٹر کے ڈیفالٹ کے اوپر صرف ریکوری شامل کر سکتا ہے — یہ واضح `STREAM_RECOVERY_ENABLED`/DB ترتیبات کے آپٹ آؤٹ کو کبھی اوور رائیڈ نہیں کرتا۔ |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | غیر معیاری `codex.*` SSE ایونٹس (مثلاً `codex.rate_limits`) ہٹا دیں، جو OpenAI SDK کے `responses.stream()` کو 502 کے ساتھ خراب کرتے ہیں۔ بطور ڈیفالٹ فعال ہے (#11014)۔ انہیں آگے بھیجنے کے لیے `0`/`false`/`no`/`off` مقرر کریں۔ |
| `OMNIROUTE_CODEX_APPSERVER_WS` | _(غیر مقرر)_ | آپٹ اِن Codex app-server ٹرانسپورٹ۔ مقامی `codex app-server` سائڈکار کا WebSocket اینڈ پوائنٹ (`ws://`/`wss://`)۔ ٹوکن کے ساتھ مقرر ہونے پر، Codex درخواستوں کو HTTP Responses API کی بجائے JSON-RPC پر سائڈکار تک روٹ کیا جاتا ہے۔ فی کنکشن `providerSpecificData.codexAppServerUrl` کے ذریعے بھی مقرر کیا جا سکتا ہے۔ `open-sse/executors/codex/appServerConfig.ts` کے ذریعے استعمال ہوتا ہے۔ |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(غیر مقرر)_ | app-server کو پیش کیا جانے والا اِن لائن صلاحیتی/bearer ٹوکن۔ فی کنکشن اوور رائیڈ: `providerSpecificData.codexAppServerToken`۔ |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(غیر مقرر)_ | app-server صلاحیتی ٹوکن رکھنے والی فائل کا راستہ (`codex app-server --ws-token-file` سے)۔ `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` غیر مقرر ہونے پر استعمال ہوتا ہے۔ فی کنکشن اوور رائیڈ: `providerSpecificData.codexAppServerTokenFile`۔ |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | وہ ورکنگ ڈائریکٹری جس میں app-server ٹرن چلتا ہے۔ فی کنکشن اوور رائیڈ: `providerSpecificData.codexAppServerCwd`۔ |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(غیر مقرر)_ | app-server ٹرن کو دی جانے والی منظوری کی پالیسی (مثلاً `never`، `on-request`)۔ فی کنکشن اوور رائیڈ: `providerSpecificData.codexAppServerApprovalPolicy`۔ |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(غیر مقرر)_ | app-server ٹرن کو دی جانے والی سینڈ باکس پالیسی (مثلاً `read-only`، `workspace-write`، `danger-full-access`)۔ غیر مقرر ہونے پر ایگزیکیوٹر بطور ڈیفالٹ `workspace-write` استعمال کرتا ہے (زیادہ محفوظ؛ پہلے `danger-full-access`)۔ فی کنکشن اوور رائیڈ: `providerSpecificData.codexAppServerSandbox`۔ |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | app-server کے اپنے منظوری کے پرامپٹس (ہوسٹ پر کمانڈ/فائل/اجازت کا نفاذ) خودکار طور پر منظور کریں۔ بطور ڈیفالٹ بند ہے — پرامپٹس خودکار طور پر مسترد کیے جاتے ہیں؛ harness ٹول کالز متاثر نہیں ہوتیں (وہ الگ `item/tool/call` پاس تھرو کے ذریعے جاتی ہیں)۔ `true`/`1`/`yes` قبول کرتا ہے۔ فی کنکشن اوور رائیڈ: `providerSpecificData.codexAppServerAutoApprove`۔ |
| `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | جوابی ہیڈرز موصول کرنے کی مدت۔ |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30s) | ہر براہِ راست، بغیر پراکسی کوشش کے لیے جواب شروع ہونے کے زیادہ سے زیادہ انتظار کا وقت (ms)۔ ٹائم آؤٹ ہونے پر نئے socket کے ذریعے ایک بار دوبارہ کوشش کی جاتی ہے؛ حد کو غیر فعال کرنے اور سابقہ طرزِ عمل برقرار رکھنے کے لیے `0` مقرر کریں۔ |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | اوپر بیان کردہ pooled-attempt کے جواب شروع ہونے کے ٹائم آؤٹ کے بعد نئے socket سے RETRY کوشش کے لیے بالائی حد (ms) (#13703)۔ اس کا اطلاق صرف اس وقت ہوتا ہے جب caller پہلے ہی اپنا deadline signal منسلک کر چکا ہو (resolved connection/model/provider/`FETCH_TIMEOUT_MS` cascade)؛ وہ signal اصل حد ہے اور مطلوبہ راستے میں پہلے فعال ہوتا ہے، لہٰذا یہ ایک یکساں بالائی حد کے بجائے ایک فراخ حفاظتی حد ہے — اس کے بغیر retry بھی pooled کوشش جیسی مختصر `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` مدت دوبارہ استعمال کرتی تھی، جس کی وجہ سے درست طور پر کام کرنے والے مگر سست TTFB والے reasoning models کو 504 مل جاتا تھا۔ اسے کبھی بھی اوپر دی گئی یکساں کم از کم حد سے نیچے رکھنے کی اجازت نہیں؛ جب caller کوئی deadline signal فراہم نہ کرے تو retry یکساں کم از کم حد کو برقرار رکھتی ہے۔ |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | مکمل response body موصول ہونے کا وقت۔ |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | TCP connection قائم کرنے کا ٹائم آؤٹ۔ |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | keep-alive socket کے غیر فعال رہنے کا ٹائم آؤٹ۔ |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | TLS fingerprint proxy (wreq-js) کا ٹائم آؤٹ۔ |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | بالخصوص wreq-js TLS-fingerprint transport کی body کے پہلے byte تک پہنچنے کے وقت کو محدود کرتا ہے؛ صرف `TLS_CLIENT_TIMEOUT_MS` رکی ہوئی body کا پتا نہیں لگا سکتا کیونکہ headers آتے ہی یہ resolve ہو جاتا ہے (#12656)۔ ٹائم آؤٹ ہونے پر wreq reader منسوخ ہو جاتا ہے اور direct/proxy dispatcher استعمال کیا جاتا ہے؛ `0` watchdog کو غیر فعال کر دیتا ہے۔ |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | صرف OpenCode executor کے لیے، اور صرف اس وقت جب `OPENCODE_RESPONSES_STALL_ROTATION` feature flag فعال ہو (بطور ڈیفالٹ غیر فعال): headers کے بعد streamed Responses جواب کی body کے پہلے byte کے انتظار کو محدود کرتا ہے (#13484)۔ Responses stream کا آغاز `response.created` سے ہوتا ہے، اس لیے اس مدت سے زیادہ خاموشی stall سمجھی جاتی ہے: account کو cooldown پر ڈال دیا جاتا ہے اور request ایک بار اگلے account پر منتقل ہوتی ہے؛ دوسری بار stall ہونے پر فوراً ناکامی ہوتی ہے۔ flag فعال ہونے کے باوجود `0` guard کو غیر فعال کر دیتا ہے۔ |
| `OPENCODE_PARK_AND_RESUME` | `false` | صرف OpenCode executor کے لیے: بار بار عارضی 429s (یا نیا pool-strain marker) آنے کے بعد request کو heartbeat کے ساتھ موقوف کریں، پھر پوری fleet کو بیک وقت استعمال کرنے کے بجائے زیادہ سے زیادہ 3 مسلسل accounts پر مشتمل ایک محدود مرحلہ دوبارہ چلائیں (#13924)۔ بطور ڈیفالٹ غیر فعال: ہر 429 پہلے کی طرح request کو عین اگلے account پر منتقل کرتا ہے۔ |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(غیر مقرر)_ | صرف OpenCode executor کے لیے: موقوف کرنے سے پہلے پڑھے جانے والے pool-strain marker کا path تبدیل کریں (`{since, reason, ttl_s}`، ڈیفالٹ `/tmp/opencode-pool-strain.json`، #13924)۔ نیا marker دوبارہ گنتی کیے بغیر request کو موقوف کرتا ہے؛ marker موجود نہ ہو یا پرانا ہو تو burst counter استعمال کیا جاتا ہے۔ |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | `/v1` bridge requests کے لیے proxy hop کا ٹائم آؤٹ۔ |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Firecrawl web-fetch executor کو self-hosted instance کی جانب بھیجیں (cloud سے باہر API key اختیاری ہے)۔ |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Firecrawl web-fetch executor کے لیے فی request ٹائم آؤٹ۔ |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | bridge کے لیے server request کا مجموعی ٹائم آؤٹ۔ |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | bridge کے ذریعے response headers بھیجنے کا وقت۔ |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | bridge کے keep-alive کے غیر فعال رہنے کا ٹائم آؤٹ۔ |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | خام socket کا ٹائم آؤٹ (0 = غیر فعال)۔ |
| `SHUTDOWN_TIMEOUT_MS` | `30000` | جبری اخراج سے پہلے SIGTERM/SIGINT پر مہلت۔ |
| `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | `FETCH_TIMEOUT_MS` غیر مقرر ہونے پر `src/shared/utils/fetchTimeout.ts` کے ذریعے استعمال ہونے والی fallback قدر۔ |
| `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | `src/shared/network/safeOutboundFetch.ts` میں `validationRead` اور `modelsProbe` presets کے لیے ٹائم آؤٹ (ms)۔ سست endpoints (Cerebras، Cloudflare AI، Groq) کے لیے اسے بڑھائیں تاکہ dashboard میں active/error کے درمیان بار بار تبدیلی روکی جا سکے۔ غیر درست (<1000) یا غیر عددی اقدار کے لیے 8000ms استعمال کیا جاتا ہے۔ |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | `open-sse/utils/proxyFetch.ts` میں relay کے لیے مخصوص fetch timeout (#9158)۔ معلق relay کو client/agent timeout (~30s) سے پہلے ناکام ہونا چاہیے تاکہ callers کو عمومی upstream timeout کے بجائے relay کے لیے مخصوص ناکامی نظر آئے۔ اسے `29000` تک محدود رکھا گیا ہے تاکہ یہ ہمیشہ پہلے متحرک ہو۔ |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | `open-sse/utils/proxyFetch.ts` میں direct/relay/proxy کے ایک بار retry کرنے والے paths کے لیے مشترکہ retry backoff (#9158)۔ `0` = فوراً دوبارہ کوشش کریں۔ |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | مقامی wreq-js request timeout (`claudeTlsClient.ts`)۔ |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | مقامی timeout کے علاوہ شامل کردہ قطعی JS hard-deadline grace۔ |
| `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` (بند) | caller کے system message کے آخر میں "آپ کے پاس پہلے سے موجود ویب سرچ ہے۔ سرچ کے نتائج استعمال کرتے ہوئے سوالات کے براہِ راست جواب دیں۔" شامل کرتا ہے (`perplexity-web/protocol.ts`)۔ بطور ڈیفالٹ بند ہے — Perplexity بہرحال سرچ کرتا ہے، اور یہ جملہ coding clients کے جوابات میں meta-commentary کے طور پر ظاہر ہو جاتا ہے۔ بحال کرنے کے لیے `1`/`true`/`yes`/`on` مقرر کریں۔ |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | مقامی wreq-js request timeout (`grokTlsClient.ts`)۔ |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | مقامی timeout کے علاوہ شامل کردہ قطعی JS hard-deadline grace۔ |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | مقامی wreq-js request timeout (`notionTlsClient.ts`)؛ طویل generations کے لیے `notion-web` اسے ہر request پر بڑھا کر `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 کا path (`open-sse/services/obscura.ts`)؛ مقرر نہ ہونے کی صورت میں system PATH سے خودکار طور پر دریافت کیا جاتا ہے۔ |
| `OBSCURA_CDP_ENDPOINT` | _(غیر مقرر)_ | نیا process شروع کرنے کے بجائے پہلے سے چلنے والے 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 request کے لیے browser پر مبنی path منتخب کرتا ہے (`browserBackedChat.ts`)؛ فعال کرنے کے لیے `1` مقرر کریں۔ |
| `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Kimi Web (بین الاقوامی kimi.ai Connect-RPC) executor کا بنیادی URL (`kimi-web.ts`)؛ صرف mirror/proxy endpoints کے لیے override کریں۔ |
| `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 کا path (`adobeFireflyBrowserLogin.ts`)؛ ہر OS کے لحاظ سے ہونے والی خودکار دریافت کو override کرتا ہے۔ |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ standalone output_ | post-build colocation مرحلے میں استعمال ہونے والی standalone output directory کے لیے build-time override (`scripts/build/colocate-standalone.mjs`)؛ build tooling کے لیے ہے، runtime کے لیے نہیں۔ |
Combo target کی کوششیں حل شدہ upstream request timeout (`FETCH_TIMEOUT_MS`، یا
`REQUEST_TIMEOUT_MS` جب وہ fetch default فراہم کرے) وراثت میں لیتی ہیں۔ combo،
combo defaults، یا provider override میں `targetTimeoutMs` صرف اس صورت میں مقرر کریں جب combo fallback کو تیز کرنا مقصود ہو؛ موجودہ upstream timeout سے زیادہ values کو
upstream timeout تک محدود کر دیا جاتا ہے۔
`comboTimeoutMs` failover targets کے مجموعے پر لاگو ہونے والا، پورے combo کے لیے الگ wall-clock budget ہے۔
لامحدود iteration برقرار رکھنے کے لیے اسے غیر مقرر رہنے دیں یا `0` مقرر کریں (`comboPredicates.ts`
میں 10 منٹ کا hardcoded hang-stop پھر بھی لاگو ہوتا ہے)۔ مثبت value combo کے لیے اس
حفاظتی حد کی جگہ لے لیتی ہے۔ `comboTimeoutMs` کو `targetTimeoutMs` سے زیادہ رکھیں تاکہ
پہلا target سست ہونے کے بعد بھی failover کے لیے وقت باقی رہے۔
### سرکٹ بریکر کی حدیں
Provider کی سطح پر circuit breaker کی ترتیب۔ Defaults ان scaled values کی عکاسی کرتے ہیں جو v3.6 سے 500+ connections کے لیے استعمال ہو رہی ہیں۔
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| ------------------------------------------------------------- | ---------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | بریکر کے ٹرپ ہونے سے پہلے OAuth فراہم کنندگان کے لیے مسلسل ناکامیوں کی حد۔ |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | OAuth فراہم کنندہ کے بریکر کے لیے ری سیٹ دورانیہ (ms)۔ |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD` | `12` | `open-sse/config/constants.ts` | API کلید فراہم کنندگان کے لیے مسلسل ناکامیوں کی حد۔ |
| `OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS` | `30000` | `open-sse/config/constants.ts` | API کلید فراہم کنندہ کے بریکر کے لیے ری سیٹ دورانیہ (ms)۔ |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD` | `2` | `open-sse/config/constants.ts` | مقامی فراہم کنندگان (Ollama، LM Studio، ...) کے لیے مسلسل ناکامیوں کی حد۔ |
| `OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS` | `15000` | `open-sse/config/constants.ts` | مقامی فراہم کنندہ کے بریکر کے لیے ری سیٹ دورانیہ (ms)۔ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: مکمل OAuth فراہم کنندہ کے کول ڈاؤن میں جانے سے پہلے دورانیے کے اندر ناکامیوں کی حد۔ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: OAuth فراہم کنندگان کے لیے متحرک ناکامی-شمار دورانیہ (ms)۔ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: OAuth فراہم کنندہ کی حد پوری ہونے کے بعد کول ڈاؤن (ms)۔ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD` | `5` | `open-sse/config/constants.ts` | اتنی ناکامیوں پر OAuth فراہم کنندہ DEGRADED حالت میں چلا جاتا ہے۔ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER` | `8` | `open-sse/config/constants.ts` | OAuth فراہم کنندہ کے لیے `resetTimeout` میں اضافے کا زیادہ سے زیادہ ضارب۔ |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT` | `2` | `open-sse/config/constants.ts` | اتنے اوپن سائیکلز کے بعد OAuth فراہم کنندہ اضافہ کرتا ہے۔ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD` | `15` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: مکمل API کلید فراہم کنندہ کے کول ڈاؤن میں جانے سے پہلے دورانیے کے اندر ناکامیوں کی حد۔ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS` | `1800000` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: API کلید فراہم کنندگان کے لیے متحرک ناکامی-شمار دورانیہ (ms)۔ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: API کلید فراہم کنندہ کی حد پوری ہونے کے بعد کول ڈاؤن (ms)۔ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD` | `7` | `open-sse/config/constants.ts` | اتنی ناکامیوں پر API کلید فراہم کنندہ DEGRADED حالت میں چلا جاتا ہے۔ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER` | `4` | `open-sse/config/constants.ts` | API کلید فراہم کنندہ کے لیے `resetTimeout` میں اضافے کا زیادہ سے زیادہ ضارب۔ |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT` | `3` | `open-sse/config/constants.ts` | اتنے اوپن سائیکلز کے بعد API کلید فراہم کنندہ اضافہ کرتا ہے۔ |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD` | `2` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: مکمل مقامی فراہم کنندہ کے کول ڈاؤن میں جانے سے پہلے ناکامیوں کی حد۔ |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS` | `300000` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: مقامی فراہم کنندگان کے لیے متحرک ناکامی-شمار دورانیہ (ms)۔ |
| `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | فراہم کنندہ کی سطح کا بریکر: مقامی فراہم کنندہ کی حد پوری ہونے کے بعد کول ڈاؤن (ms)۔ |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | بیک آف کی وہ گہرائی جس پر کانٹیکسٹ کیش پن کے فراہم کنندہ کو مستقل طور پر غیر صحت مند سمجھا جاتا ہے اور فیل اوور کے لیے پن ہٹا دیا جاتا ہے۔ |
| `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | اینٹی فلیپ دورانیہ (ms)، جو کانٹیکسٹ کیش پن ہٹانے سے پہلے مختصر عارضی کول ڈاؤنز کو برداشت کرتا ہے۔ |
### منظرنامے
| منظرنامہ | ترتیب |
| ---------------------------------- | ------------------------------------------------------ |
| **طویل دورانیے کی کوڈ جنریشن** | `REQUEST_TIMEOUT_MS=900000` (15 منٹ) |
| **اسٹریم کی کُل مدت محدود کریں** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 منٹ) |
| **پروڈکشن API کے لیے فوری ناکامی** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` |
| **توسیعی تفکر والے ماڈلز** | `STREAM_IDLE_TIMEOUT_MS=300000` (چنکس کے درمیان 5 منٹ) |
---
## 16. لاگنگ
لاگنگ سسٹم stdout اور روٹیٹ ہونے والی لاگ فائلوں، دونوں میں لکھتا ہے۔ تمام کنفیگریشن `src/lib/logEnv.ts` کے ذریعے پڑھی جاتی ہے۔
| متغیر | ڈیفالٹ | وضاحت |
| ----------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `APP_LOG_LEVEL` | `info` | کم از کم لاگ لیول: `debug`، `info`، `warn`، `error`۔ |
| `APP_LOG_FORMAT` | `text` | آؤٹ پٹ فارمیٹ: `text` (انسان کے لیے قابلِ مطالعہ) یا `json` (منظم)۔ |
| `APP_LOG_TO_FILE` | `true` | stdout کے ساتھ فائل میں بھی لاگز لکھیں۔ |
| `APP_LOG_FILE_PATH` | `logs/application/app.log` | لاگ فائل کا پاتھ (پروجیکٹ روٹ یا `DATA_DIR` کے لحاظ سے نسبتی)۔ |
| `APP_LOG_MAX_FILE_SIZE` | `50M` | روٹیشن سے پہلے فائل کا زیادہ سے زیادہ سائز۔ قابلِ قبول: `50M`، `1G`، `512K`، یا سادہ بائٹس۔ |
| `APP_LOG_RETENTION_DAYS` | `7` | روٹیٹ شدہ ایپلیکیشن لاگ فائلیں رکھنے کے دنوں کی تعداد۔ |
| `APP_LOG_MAX_FILES` | `20` | روٹیٹ شدہ لاگ فائل بیک اپس کی زیادہ سے زیادہ تعداد۔ |
| `CALL_LOG_RETENTION_DAYS` | `7` | ڈیٹابیس میں درخواست/کال لاگ اندراجات رکھنے کے دنوں کی تعداد۔ |
| `CALL_LOG_MAX_ENTRIES` | `10000` | اِن میموری بفر میں کال لاگ اندراجات کی زیادہ سے زیادہ تعداد۔ |
| `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | صفائی سے پہلے `call_logs` SQLite ٹیبل میں قطاروں کی زیادہ سے زیادہ تعداد۔ |
| `ENABLE_REQUEST_LOGS` | _(غیر سیٹ شدہ)_ | ڈیش بورڈ کی سیٹنگ کو اوور رائیڈ کرتے ہوئے تفصیلی درخواست لاگنگ کو لازماً آن یا آف کریں۔ |
| `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (1 گھنٹہ) | اِن میموری صفائی سے پہلے بے تعلق فعال درخواست لاگ اندراجات کی زیادہ سے زیادہ عمر۔ |
| `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | جب `call_log_pipeline_enabled=true` ہو تو پائپ لائن آرٹی فیکٹس میں اسٹریم چنکس محفوظ کریں۔ اختیاری (`true`) — ڈسک بچانے کے لیے ڈیفالٹ طور پر آف ہے۔ |
| `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | جب `call_log_pipeline_enabled=true` ہو تو پائپ لائن کال لاگ آرٹی فیکٹ کا زیادہ سے زیادہ سائز KB میں۔ |
| `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | صفائی سے پہلے `proxy_logs` SQLite ٹیبل میں قطاروں کی زیادہ سے زیادہ تعداد۔ |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `[ProxyEgress]` کنسول لاگز میں کلائنٹ/ایگریس IPs اور اکاؤنٹ سابقے شامل کریں۔ ڈیش بورڈ/ڈیٹابیس کے پراکسی لاگ ریکارڈز مکمل تفصیلات برقرار رکھتے ہیں۔ |
| `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 منٹ) | `src/lib/logRotation.ts` فعال لاگ فائل کے سائز کو کتنی کثرت سے دوبارہ چیک کرتا ہے۔ |
| `CHAT_LOG_TEXT_LIMIT` | `65536` | چیٹ لاگ آرٹی فیکٹس میں برقرار رکھی جانے والی اسٹرنگ کی زیادہ سے زیادہ لمبائی (ڈیفالٹ 64 KB)۔ |
| `CHAT_LOG_ARRAY_TAIL_ITEMS` | `128` | چیٹ لاگ پے لوڈز کو مختصر کرتے وقت آخر سے برقرار رکھے جانے والے ارے آئٹمز کی تعداد۔ |
| `CHAT_LOG_MAX_DEPTH` | `6` | چیٹ لاگ پے لوڈز کو مختصر کرنے سے پہلے نیسٹنگ کی زیادہ سے زیادہ گہرائی۔ |
| `CHAT_LOG_MAX_OBJECT_KEYS` | `80` | چیٹ لاگ پے لوڈز میں برقرار رکھی جانے والی آبجیکٹ کیز کی زیادہ سے زیادہ تعداد (0 = لامحدود)۔ |
| `CHAT_LOG_MAX_BODY_KB` | `1024` | مکمل کلون کے بجائے صرف ایک خلاصے سے تبدیل کیے جانے سے پہلے پوری درخواست/جواب باڈی کا سائز (KB)۔ اگر طویل ایجنٹک گفتگوؤ کے لیے ڈیش بورڈ میں اصل پیغامات کے بجائے پلیس ہولڈر دکھائی دے تو اسے بڑھائیں۔ |
| `CHAT_DEBUG_FILE` | `false` | `true` ہونے پر `serializeArtifactForStorage` سائز پر مبنی اختصار کو نظر انداز کرتا ہے۔ صرف ڈیبگنگ کے لیے۔ |
---
## 17. میموری کی بہتری
| متغیر | ڈیفالٹ | تفصیل |
| ----------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_MEMORY_MB` | _خودکار_ (bare metal)؛ Docker امیج میں **`1024`** | Docker/اسٹینڈ الون V8 heap کی تجویز کردہ حد (MB)۔ سیٹ نہ ہونے پر، اسے متحرک طور پر کیلیبریٹ کیا جاتا ہے (سسٹم RAM کا تقریباً 35%، جسے `[512, 4096]` تک محدود کیا جاتا ہے)؛ `512` صرف اس وقت کم از کم حد ہے جب کل میموری پڑھی نہ جا سکے۔ `run-standalone.mjs` (Docker CMD) پر، ایک **واضح** قدر کو `--max-old-space-size` کے طور پر شامل کیا جاتا ہے اور یہ متصادم NODE_OPTIONS heap فلیگ پر **غالب آتی ہے** (V8 کا آخری فلیگ)۔ `omniroute serve` اب بھی موجودہ NODE_OPTIONS heap کو ترجیح دیتا ہے (#5238)۔ دونوں کو مختلف نمبروں پر سیٹ نہ کریں — پراسیس دونوں اقدار اور غالب آنے والی قدر کے نام کے ساتھ ایک انتباہ لاگ کرتا ہے۔ **آفیشل Docker امیج ہمیشہ `1024` سیٹ کرتی ہے، اس لیے وہاں کیلیبریشن کبھی نہیں چلتی۔** کوڈنگ ایجنٹ کے `/v1/responses` کو `8192`–`12288` کے ساتھ cgroup کی اضافی گنجائش درکار ہے — [Docker گائیڈ — رن ٹائم RAM](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents) دیکھیں۔ |
| `PROMPT_CACHE_MAX_SIZE` | `50` | کیش شدہ سسٹم پرامپٹ اندراجات کی زیادہ سے زیادہ تعداد۔ |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | پرامپٹ کیش کا زیادہ سے زیادہ کل سائز۔ |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 منٹ) | پرامپٹ کیش اندراج کا TTL۔ |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | کیش شدہ temperature=0 جوابات کی زیادہ سے زیادہ تعداد۔ |
| `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | سیمینٹک کیش کا زیادہ سے زیادہ کل سائز۔ |
| `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 منٹ) | سیمینٹک کیش اندراج کا TTL۔ |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | لوکل کارپس روٹس کی تعداد جو بیک وقت ایک فعال اِن میموری انڈیکس برقرار رکھتے ہیں (`src/lib/localCorpus/configured.ts`)۔ LRU: حد پر پہنچنے کے بعد سب سے کم حالیہ استعمال ہونے والے روٹ کا انڈیکس خارج کر دیا جاتا ہے اور اس کی اگلی کوئری پر دوبارہ بنایا جاتا ہے۔ اسے کم از کم `1` تک محدود کیا جاتا ہے؛ غیر عددی قدر کی صورت میں ڈیفالٹ استعمال ہوتا ہے۔ |
| `STREAM_HISTORY_MAX` | `50` | Dashboard کے لائیو ویو بفر میں حالیہ اسٹریم ایونٹس کی زیادہ سے زیادہ تعداد۔ |
| `CONTEXT_LENGTH_DEFAULT` | `128000` | واضح کنفیگ کے بغیر ماڈلز کے لیے عالمی فال بیک زیادہ سے زیادہ کانٹیکسٹ لمبائی۔ |
| `USAGE_TOKEN_BUFFER` | `100` | استعمال کے کوٹے ٹریک کرتے وقت محفوظ رکھی جانے والی اضافی ٹوکن گنجائش۔ |
### کمپریشن
| متغیر | ڈیفالٹ | تفصیل |
| ------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | سیٹ نہیں | `.rtk/trust.json` ہیش کے بغیر پروجیکٹ کی `.rtk/filters.json` پر اعتماد کریں۔ اسے صرف کنٹرول شدہ مقامی ڈیولپمنٹ میں استعمال کریں۔ |
### میموری انجن (پلان 21)
### میموری، اسکلز، اور ٹوکن ریفریش کی ایونٹ لوپ لاگت (#10349)
OmniRoute ایک **واحد Node پراسیس** ہے۔ میموری اخذ کرنا/بازیافت کرنا، اسکلز انجیکشن، اور پرووائیڈر ٹوکن ریفریش، `GET /healthz` اور ڈیش بورڈ کے **اسی ایونٹ لوپ** پر چلتے ہیں۔ یہ ورکر تھریڈ نہیں ہیں۔
| کام | کوڈ | ڈیفالٹ | آپریٹر کا کنٹرول |
| ------------------------- | ---------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| میموری اخذ کرنا / بازیافت | `src/lib/memory/` | ڈیش بورڈ **memoryEnabled** (ڈیفالٹ طور پر فعال) | **Settings → Memory** کو بند کریں۔ سیٹنگز میں فیچر غیر فعال کرنے کے علاوہ کوئی علیحدہ env کِل سوئچ موجود نہیں ہے۔ |
| اسکلز انجیکشن | `src/lib/skills/injection.ts` | ڈیش بورڈ **skillsEnabled** (ڈیفالٹ طور پر فعال) | **Settings → Memory/Skills** (`skillsEnabled`) کو بند کریں۔ ذیل کے سینڈ باکس کنٹرولز صرف اس وقت عمل درآمد کو محدود کرتے ہیں جب انجیکشن پہلے ہی فعال ہو۔ |
| ٹوکن ریفریش | `src/sse/services/tokenRefresh.ts` | منسلک OAuth/web فراہم کنندگان کے لیے فعال | فراہم کنندہ منقطع کریں یا ٹوکنز کو مؤثر رہنے دیں؛ فی الحال کوئی `TOKEN_REFRESH=0` env موجود نہیں ہے۔ |
اگر کسی غیر مصروف مشین پر `/healthz` سست ہو تو پہلے میموری + اسکلز غیر فعال کریں، پھر کیٹلاگ/کمپریشن لوڈ چیک کریں (#10303، #9685)۔ یہ فیچرز `await` پوائنٹس پر کنٹرول چھوڑتے ہیں، لیکن پھر بھی واحد تھریڈ کے لیے مقابلہ کرتے ہیں۔
مستقل میموری ذیلی نظام (`src/lib/memory/`) کے لیے ایمبیڈنگ لیئر، ویکٹر اسٹور اور ری رینکنگ کے کنٹرولز۔
| متغیر | ڈیفالٹ | تفصیل |
| ------------------------------------ | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 منٹ) | ان میموری ایمبیڈنگ کیش کے لیے TTL (فی ماخذ/ماڈل/dim سگنیچر)۔ |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | ایمبیڈنگ کیش میں رکھی جانے والی LRU اندراجات کی زیادہ سے زیادہ تعداد۔ |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | اختیاری `@huggingface/transformers` مقامی MiniLM پائپ لائن (~23 MB int8، ~400 MB RAM) کے لیے HF ریپو id۔ |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | جامد potion/Model2Vec لُک اپ ٹیبل ایمبیڈر کے لیے HF ریپو id۔ اسے ضرورت پڑنے پر کیش ڈائریکٹری میں ڈاؤن لوڈ کیا جاتا ہے۔ |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | جامد potion ماڈل فائلوں کو کیش کرنے کے لیے استعمال ہونے والی ڈائریکٹری۔ سیٹ نہ ہونے پر ڈیفالٹ طور پر `DATA_DIR` کے تحت ہوتی ہے۔ |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | `staticPotion.ts` کے زیر استعمال Hugging Face Hub کے بنیادی URL کو اوور رائیڈ کریں (مثلاً ایئر گیپڈ سیٹ اپس کے لیے مرر اینڈ پوائنٹ)۔ |
| `MEMORY_VEC_TOP_K` | `20` | `src/lib/memory/vectorStore.ts` کے اندر `sqlite-vec` بروٹ فورس ویکٹر تلاش کے زیر استعمال ڈیفالٹ top-K۔ |
| `MEMORY_RRF_K` | `60` | ہائبرڈ FTS5 + ویکٹر بازیافت کے لیے Reciprocal Rank Fusion مستقل `k` (`sqlite-vec` نسخہ)۔ |
| `VECTOR_STORE_DISABLE_VEC` | `false` | `getVectorStore()` (`src/lib/memory/vectorStore.ts`) میں ٹیسٹ/تشخیصی سیَم: `true` ہونے پر ویکٹر اسٹور کو لازماً `null` کر دیتا ہے (`sqlite-vec` کے بغیر cloud/WASM ماحول کی نقل کرتا ہے)، جس سے میموری بازیافت گھٹ کر FTS5 کلیدی لفظ تلاش تک محدود ہو جاتی ہے۔ پروڈکشن میں اسے سیٹ نہ کریں۔ |
| `NOTION_API_KEY` | _(سیٹ نہیں)_ | Notion بیک اینڈ کے لیے API کلید (`genericBackend.ts` کے معروف بیک اینڈ پری سیٹ کے زیر استعمال)۔ |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Notion API کے لیے بنیادی URL (سیلف ہوسٹڈ Notion متبادلات کے لیے اوور رائیڈ کیا جا سکتا ہے)۔ |
| `OBSIDIAN_API_KEY` | _(سیٹ نہیں)_ | Obsidian Vault بیک اینڈ کے لیے API کلید (`genericBackend.ts` کے معروف بیک اینڈ پری سیٹ کے زیر استعمال)۔ |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Obsidian Vault API کے لیے بنیادی URL (ریموٹ والٹ کے لیے اوور رائیڈ کیا جا سکتا ہے)۔ |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | TV6 ٹائپڈ میموری زوال کا ماسٹر سوئچ۔ **اختیاری (ڈیفالٹ طور پر بند)** — سویپ زوال پذیر میموریز کو **حذف کرتا ہے**۔ اس کے بند ہونے پر `access_count`/`last_accessed_at` خالص ٹیلی میٹری ہیں اور کبھی کچھ حذف نہیں ہوتا۔ |
| `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | وہ TTL (دنوں میں) جس کے بعد غیر استعمال شدہ `episodic` میموری زوال پذیر ہوتی ہے۔ `0` episodic کو بھی محفوظ بنا دیتا ہے۔ پائیدار اقسام (`factual`/`procedural`/`semantic`) ہمیشہ محفوظ رہتی ہیں۔ زوال کی گھڑی `last_accessed_at` کی بنیاد پر دوبارہ شروع ہوتی ہے۔ |
| `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | کوئی میموری اگر اتنی یا اس سے زیادہ بار (`>=`) انجیکٹ ہو جائے تو قسم سے قطع نظر زوال سے محفوظ ہو جاتی ہے۔ `0` رسائی کی یہ حفاظت غیر فعال کر دیتا ہے۔ |
| `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (غیر فعال) | `src/lib/memory/typedDecay.ts` میں اختیاری متواتر زوال سویپ کا وقفہ (سیکنڈز میں)۔ `0`/سیٹ نہ ہونا = کوئی متواتر سویپ نہیں۔ دوہرا اختیاری عمل: `MEMORY_TYPED_DECAY_ENABLED=true` بھی درکار ہے۔ |
| `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(سیٹ نہیں)_ | کوما سے جدا کردہ فراہم کنندہ ids (حروف کی بزرگی سے غیر حساس) جو `system` پیغام کو **صرف انڈیکس 0 پر** قبول کرتے ہیں (`src/lib/memory/injection.ts`)۔ ان کے لیے متعدد باری والی گفتگو میں کیش محفوظ، صف کے وسط میں میموری شامل کرنا غیر محفوظ ہے، اس لیے میموری کو ضم کر کے یا پہلے لگا کر ابتدائی system پیغام بنایا جاتا ہے۔ ڈیفالٹ طور پر صرف `xiaomi-mimo`/`mimo`؛ اسے سیلف ہوسٹڈ OpenAI سے ہم آہنگ اینڈ پوائنٹس (مثلاً Qwen3.5+/3.6) کے لیے وسعت دیں جن کا چیٹ ٹیمپلیٹ صرف ایک ابتدائی system پیغام کی اسی پابندی کو نافذ کرتا ہے۔ |
### کم RAM والا Docker نمونہ
`128` صرف ڈیش بورڈ کے لیے ہے۔ اس ہیپ پر کوڈنگ ایجنٹس طویل `/v1/responses` کے دوران `FATAL ERROR` دیتے ہیں۔ اس نمونے کو Claude/Codex/Grok گیٹ وے کے طور پر استعمال نہ کریں۔
```bash
OMNIROUTE_MEMORY_MB=128
PROMPT_CACHE_MAX_SIZE=20
PROMPT_CACHE_MAX_BYTES=524288 # 512 KB
SEMANTIC_CACHE_MAX_SIZE=25
SEMANTIC_CACHE_MAX_BYTES=1048576 # 1 MB
STREAM_HISTORY_MAX=10
```
---
## 18. قیمتوں کی ہم وقت سازی
بیرونی ذرائع سے ماڈل کی قیمتوں کے ڈیٹا کی خودکار ہم وقت سازی۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ----------------------- | ------------- | ------------------------ | -------------------------------------------------- |
| `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` میں ماڈل ids کے لیے استعمال ہونے والی سابقے کی شکل۔ `dual` ہر ماڈل کے لیے مختصر عرفی سابقہ اور معیاری فراہم کنندہ سابقہ، دونوں ظاہر کرتا ہے (پسماندہ مطابقت — کیٹلاگ کا حجم تقریباً دوگنا ہو جاتا ہے)؛ `alias` فی ماڈل ایک id جاری کرتا ہے؛ `canonical` صرف مکمل provider-id سابقہ جاری کرتا ہے (جن فراہم کنندگان کا عرف پہلے ہی معیاری id ہے، ان کا واحد اندراج برقرار رہتا ہے)۔ کلائنٹس ہر درخواست کے لیے `?prefix=alias` کے ذریعے اسے اوور رائیڈ کر سکتے ہیں۔ [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix) دیکھیں۔ |
| `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | ہم وقت سازی کا وقفہ سیکنڈز میں۔ |
---
## PromptQL پلے گراؤنڈ فراہم کنندہ (غیر سرکاری/تجرباتی)
prompt.ql.app کے لیے ریورس انجینیئر کردہ GraphQL سیشن برج (`src/shared/constants/providers/web-cookie.ts`)۔ سب اختیاری ہیں — ڈیفالٹس عوامی پلے گراؤنڈ اینڈ پوائنٹس کی طرف اشارہ کرتے ہیں؛ صرف خود میزبانی کردہ/متبادل PromptQL تعیناتی کے لیے انہیں اوور رائیڈ کریں۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | چیٹ/سیشن کی کارروائیوں کے لیے استعمال ہونے والا GraphQL اینڈ پوائنٹ۔ |
| `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | کریڈٹ بیلنس/استعمال معلوم کرنے کے لیے استعمال ہونے والا GraphQL اینڈ پوائنٹ۔ |
| `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | بہترین ممکنہ کوشش کے ساتھ ٹوکن ریفریش کرنے کے لیے استعمال ہونے والا اینڈ پوائنٹ۔ |
| `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | ٹائم آؤٹ ہونے سے پہلے `thread_events` کو پول کرنے کا زیادہ سے زیادہ وقت (ms)۔ |
---
## HyperAgent ویب فراہم کنندہ (غیر سرکاری/تجرباتی)
hyperagent.com کے لیے ریورس انجینئر کردہ سیشن برج (`src/shared/constants/providers/web-cookie.ts`)۔ اختیاری — ڈیفالٹ عوامی بلنگ/استعمال کے اینڈپوائنٹ کی طرف اشارہ کرتا ہے؛ صرف خود میزبانی کردہ/متبادل HyperAgent تعیناتی کے لیے اسے اوور رائیڈ کریں۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ---------------------- | --------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------- |
| `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | بلنگ/استعمال کے کریڈٹ بلاکس حاصل کرنے کے لیے استعمال ہونے والا اینڈپوائنٹ۔ |
---
## Kilo Code استعمال کے کوٹے
Kilo Code فراہم کنندہ کے لیے ذاتی USD بیلنس اور Kilo Pass کے استعمال کی معلومات۔ اختیاری — ڈیفالٹ عوامی Kilo API کی طرف اشارہ کرتا ہے؛ صرف ریلے/ٹیسٹ فکسچر کے لیے اسے اوور رائیڈ کریں۔ توثیق کے لیے کنکشن کا موجودہ OAuth رسائی ٹوکن استعمال ہوتا ہے۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| -------------- | --------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------- |
| `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | ذاتی Kilo Code بیلنس اور Kilo Pass کا استعمال حاصل کرنے کے لیے استعمال ہونے والا بنیادی URL۔ |
---
## Adobe Firefly ویب فراہم کنندہ (غیر سرکاری/تجرباتی)
Adobe Firefly ویب فراہم کنندہ کے لیے براؤزر سے چلنے والی سیشن ریفریش
(`open-sse/services/adobeFireflyBrowserLogin.ts`، `open-sse/services/adobeFireflySession.ts`،
`open-sse/services/adobeFireflyClient.ts`)۔ اختیاری — تمام ڈیفالٹس عام
ڈیسک ٹاپ انسٹالیشن کے لیے موزوں بنائے گئے ہیں۔
> **#9255 میں ہٹا دیا گیا۔** پرانے CDP سے منسلک Chrome رن ٹائم (adobeFireflyChromeRuntime.ts) کو
> Playwright براؤزر لاگ اِن سروس سے تبدیل کر دیا گیا، اور اس کی ترتیبات اب موجود نہیں ہیں۔
> ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART متغیرات، نیز
> ADOBE_FIREFLY_LOGIN_WAIT_MS اور ADOBE_FIREFLY_FORTER_WAIT_MS، کو کوڈ بیس میں کہیں نہیں پڑھا جاتا —
> انہیں سیٹ کرنے کا کوئی اثر نہیں ہوتا۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ------------------------------------ | --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | حقیقی ہیڈلیس Chrome کے لیے `1` پر سیٹ کریں (جنریشن کے لیے معلوم طور پر خراب؛ صرف ڈیبگ کے لیے)۔ |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | پیشگی براؤزر وارم کے لیے آپٹ اِن/آؤٹ۔ `0` پیشگی وارم کو غیر فعال کرتا ہے (بیچ کے درمیان 408 ریکوری پھر بھی لاگو ہوتی ہے)۔ |
| `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Adobe Firefly سیشن کو ڈسک پر محفوظ رکھنے کو غیر فعال کرنے کے لیے `0` پر سیٹ کریں۔ |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(غیر سیٹ شدہ)_ | `open-sse/services/adobeFireflySession.ts` | مسلسل سبمٹس کے درمیان نافذ کردہ کم از کم وقفہ (ms)، جو بلٹ اِن ڈیفالٹ کو اوور رائیڈ کرتا ہے۔ |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(غیر سیٹ شدہ)_ | `open-sse/services/adobeFireflySession.ts` | کامیاب بیچ کے بعد شامل کیا جانے والا اضافی وقفہ (ms)، جو بلٹ اِن ڈیفالٹ کو اوور رائیڈ کرتا ہے۔ |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(غیر سیٹ شدہ)_ | `open-sse/services/adobeFireflyClient.ts` | جنریشن کی درخواست جمع کرانے سے پہلے بنیادی تاخیر (ms)، جو بلٹ اِن ڈیفالٹ کو اوور رائیڈ کرتی ہے۔ |
---
## 19. ماڈل سنک (Dev)
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ----------------------------------- | ------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MODELS_DEV_SYNC_ENABLED` | _(غیر سیٹ شدہ)_ | `src/lib/modelsDevSync.ts` | models.dev قیمتوں کی سنک کے لیے قطعی اوور رائیڈ۔ غیر سیٹ شدہ = Settings > AI (`modelsDevSyncEnabled`) کی پیروی کریں۔ `0`/`false`/`off`/`no` **DB پر فوقیت رکھتا ہے** اور دورانیہ وار سنک اور `getModelsDevPricing()` کے SQL/JSON اسکین، دونوں کو چھوڑ دیتا ہے (جب ڈیش بورڈ اسی ایونٹ لوپ پر جام ہو جائے تو بحالی کے لیے)۔ `1`/`true`/`on`/`yes` سنک کو لازماً فعال کرتا ہے۔ قیمتیں محفوظ/صاف کرنا اب بھی `backupDbFile("pre-write")` کو کال کرتا ہے، جو 60 منٹ کی تھروٹلنگ یا `DISABLE_SQLITE_AUTO_BACKUP` کے تحت کوئی کارروائی نہیں کرتا۔ |
| `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 گھنٹے) | `src/lib/modelsDevSync.ts` | ڈیولپمنٹ کے دوران ماڈل کیٹلاگ سنک کا وقفہ، سیکنڈز میں۔ |
| `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 گھنٹے) | `src/lib/contextWindowResolver.ts` | خودکار تصحیح کرنے والے کانٹیکسٹ ونڈو ریکنسائلر (5004) کا وقفہ (سیکنڈز میں): جب فراہم کنندہ کی جانب سے اعلان کردہ ونڈوز، `/models` کی دریافت کے ذریعے، کیٹلاگ سے مختلف ہوں تو انہیں `auto:discovery` اوور رائیڈز کے طور پر پن کرتا ہے۔ غیر فعال کرنے کے لیے اسے `0` پر سیٹ کریں۔ پہلے سے سنک شدہ ڈیٹا دوبارہ استعمال کرتا ہے (کوئی نئی فیچ نہیں)؛ `manual` اوور رائیڈز کو کبھی اوور رائٹ نہیں کرتا۔ |
---
## 20. فراہم کنندہ سے مخصوص ترتیبات
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24 گھنٹے) | `src/lib/catalog/openrouterCatalog.ts` | OpenRouter ماڈل کیٹلاگ کیش کا TTL۔ |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | `/v1/models` کے جوابات میں نمائش کے لیے موزوں `name` فیلڈز شامل کریں۔ صرف IDs کی توقع رکھنے والے کلائنٹس کے لیے اسے غیر فعال کریں۔ |
| `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 سیکنڈ) | `src/app/api/v1/models/catalogCache.ts` | یکجا شدہ `GET /v1/models` کیٹلاگ کی ازسرِنو تعمیر کے لیے کولڈ پاتھ انتظار کی حد (#12627)۔ ٹائم آؤٹ ہونے پر، اگر آخری درست 200 جواب موجود ہو تو وہ فراہم کیا جاتا ہے۔ |
| `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 دن) | `src/lib/db/models/activeSyncedCatalog.ts` | وہ مدت جس کے بعد کسی کنکشن کی ہم وقت شدہ ماڈل فہرست روٹنگ کے لیے مستند نہیں رہتی اور رجسٹری کے لیے فیل اوپن ہو جاتی ہے (#12849)۔ جن قطاروں پر کبھی ٹائم اسٹیمپ نہ لگا ہو انہیں باسی شمار کیا جاتا ہے۔ |
| `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | NanoBanana امیج جنریشن جابز کے لیے انتظار کی زیادہ سے زیادہ مدت۔ |
| `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | NanoBanana جاب پولنگ کی فریکوئنسی۔ |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Adobe Firefly اپ اسکیل جمع کرانے کی دوبارہ کوشش کے ایکسپونینشل بیک آف کے لیے بنیادی تاخیر۔ |
| `AWS_REGION` | _(غیر سیٹ شدہ)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | AWS Bedrock اینڈ پوائنٹس (Kiro، آڈیو) بنانے کے لیے استعمال ہونے والا خطہ۔ |
| `AWS_DEFAULT_REGION` | _(غیر سیٹ شدہ)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | جب `AWS_REGION` سیٹ نہ ہو تو متبادل قدر۔ |
| `CLOUDFLARE_ACCOUNT_ID` | _(غیر سیٹ شدہ)_ | `open-sse/executors/cloudflare-ai.ts` | Cloudflare Workers AI کے لیے اکاؤنٹ ID۔ |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(غیر سیٹ شدہ)_ | `open-sse/executors/cloudflare-playground.ts` | Cloudflare AI Playground ایگزیکیوٹر کے لیے مکمل ڈیسک ٹاپ Chrome بائنری پاتھ، جو اس وقت استعمال ہوتا ہے جب ہیڈلیس فنگر پرنٹ جانچ Playwright کے بنڈل شدہ Chromium کو بلاک کر دے۔ |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | پراکسی پول Workers ریلے ڈیپلائر کے زیرِ استعمال Cloudflare REST API بیس کو اوور رائیڈ کریں (#4640 / 9router#1360)۔ |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | پراکسی پول "Deploy Relay" موڈل میں تجویز کردہ ڈیفالٹ ورکر پروجیکٹ کا نام۔ |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | پراکسی پول ٹیب سے Cloudflare Workers ریلے آپشن چھپانے کے لیے `false` پر سیٹ کریں۔ |
| `CLOUDFLARED_BIN` | خودکار شناخت | `src/lib/cloudflaredTunnel.ts` | `cloudflared` بائنری کا حسبِ ضرورت پاتھ۔ |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | ٹنل ٹرانسپورٹ پروٹوکول: `http2` (ڈیفالٹ)، `quic`، یا `auto`۔ |
| `CLOUDFLARED_CONFIG` | _(غیر سیٹ شدہ)_ | `src/lib/cloudflaredTunnel.ts` | مقامی طور پر منظم کردہ cloudflared `config.yml` کا پاتھ (`tunnel:`، `credentials-file:`، `ingress:` کے ساتھ)۔ سیٹ ہونے پر OmniRoute عارضی کوئیک ٹنل کے بجائے `tunnel --config run` (نامزد ٹنل) چلاتا ہے۔ |
| `CLOUDFLARED_HOSTNAME` | _(config ingress سے)_ | `src/lib/cloudflaredTunnel.ts` | نامزد ٹنل کے عوامی ہوسٹ نام (مثلاً `ai.example.com`) کے لیے اوور رائیڈ، جسے `publicUrl`/`apiUrl` کے طور پر رپورٹ کیا جاتا ہے۔ غیر سیٹ ہونے پر اسے config کے پہلے `ingress` ہوسٹ نام سے پڑھا جاتا ہے۔ |
| `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | پراکسی پول ریلے ڈیپلائر کے استعمال کردہ Deno Deploy REST API کی بنیاد کو اوور رائیڈ کریں (#4643 / 9router#1437)۔ |
| `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | پراکسی پول کے "Deploy Relay" موڈل میں تجویز کردہ ڈیفالٹ Deno Deploy ایپ کا نام۔ |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Proxy Pool ٹیب سے Deno Deploy ریلے کا آپشن چھپانے کے لیے اسے `false` پر سیٹ کریں۔ |
| `SEARCH_CACHE_TTL_MS` | `300000` (5 منٹ) | `open-sse/services/searchCache.ts` | سرچ API (Perplexity، Brave وغیرہ) کے رسپانس کی کیشنگ کے لیے TTL۔ |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | صرف Claude Code ریلے کے لیے تجرباتی CC-compatible پرووائیڈر UI ظاہر کریں۔ |
| `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | اس ہوسٹ کو اوور رائیڈ کریں جہاں ایمبیڈڈ 9router انسٹینس سنتا ہے۔ |
| `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | اس پورٹ کو اوور رائیڈ کریں جہاں ایمبیڈڈ 9router انسٹینس سنتا ہے۔ |
| `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | ایمبیڈڈ سروس WebSocket پراکسی کے لیے بائنڈ ہوسٹ (بطور ڈیفالٹ صرف لوپ بیک)۔ |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | ایمبیڈڈ سروس WebSocket پراکسی سرور کے لیے پورٹ۔ |
| `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI برج ہوسٹ (لیگیسی انٹیگریشن)۔ |
| `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | CLIProxyAPI برج پورٹ۔ |
| `CLIPROXYAPI_API_KEY` | _(خالی)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | `cliproxyapi_api_key` سیٹنگ موجود نہ ہونے پر ڈیٹا پلین کلید کا فال بیک۔ |
| `CLIPROXYAPI_MANAGEMENT_KEY` | _(خالی)_ | `src/lib/services/cliproxyAccountHealth.ts` | بیرونی طور پر منظم کردہ CLIProxyAPI انسٹینس سے اکاؤنٹ کی صحت پڑھنے کے لیے مینجمنٹ کلید۔ |
| `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | CLIProxyAPI کنفگ ڈائریکٹری۔ |
| `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | وہ ہوسٹ انٹرفیس جس پر docker-compose، `cliproxyapi` سائیڈ کار کو پبلش کرتا ہے (#12578)۔ اس کے ڈیٹا والیوم میں پرووائیڈر کی OAuth/API اسناد ہوتی ہیں اور پِن شدہ امیج میں ماحول پر مبنی ڈیٹا پلین `api-keys` اوور رائیڈ موجود نہیں ہے (صرف ماؤنٹ کردہ `config.yaml`)، لہٰذا `0.0.0.0` اسناد رکھنے والی سروس کو پورے LAN کے لیے قابل رسائی بنا دیتا ہے۔ |
| `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | اس پورٹ کو اوور رائیڈ کریں جہاں ایمبیڈڈ Mux (coder/mux) ایجنٹ آرکیسٹریشن ڈیمون سنتا ہے (ہمیشہ 127.0.0.1)۔ |
| `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | اس پورٹ کو اوور رائیڈ کریں جہاں ایمبیڈڈ open-wa (WhatsApp Web آٹومیشن) ڈیمون سنتا ہے (ہمیشہ 127.0.0.1)۔ |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Dario ایمبیڈڈ سروس کا بائنڈ/کنیکٹ ہوسٹ (بطور ڈیفالٹ صرف لوپ بیک)۔ |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Dario ایمبیڈڈ سروس پورٹ۔ |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Dario ایمبیڈڈ سروس کا بائنڈ/کنیکٹ ہوسٹ (بطور ڈیفالٹ صرف لوپ بیک)۔ |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Dario کی ایمبیڈڈ سروس کا پورٹ۔ |
| `LOCAL_HOSTNAMES` | _(خالی)_ | `open-sse/config/providerRegistry.ts` | کوما سے علیحدہ کیے گئے اضافی ہوسٹ نیمز جنہیں "مقامی" سمجھا جاتا ہے (Docker سروس کے نام وغیرہ)۔ |
`ENABLE_CC_COMPATIBLE_PROVIDER` صرف فریق ثالث کے ان ریلے کے لیے ہے جو خصوصی طور پر Claude Code کلائنٹس کو قبول کرتے ہیں۔
OmniRoute درخواستوں کو دوبارہ لکھتا ہے تاکہ وہ ریلے انہیں قبول کر سکیں۔ اگر آپ صرف
Claude Code CLI استعمال کرنا چاہتے ہیں، یا آپ کو یقین نہیں کہ یہ ریلے کیا ہیں، تو اسے غیر فعال رکھیں اور اس کے بجائے ایک باقاعدہ
Anthropic سے مطابقت رکھنے والا پرووائیڈر شامل کریں۔
---
## 21. پراکسی کی صحت
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ------------------------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | فوری ناکامی کے صحت جانچ کا ٹائم آؤٹ۔ |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | تاخیر کے لحاظ سے بہتر بنائی گئی پول حکمت عملی میں امیدوار پراکسیز کی اوسط تاخیر کا حساب لگانے کے لیے دورانیہ (گھنٹوں میں)۔ |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | صحت جانچ کے نتیجے کی کیش TTL۔ |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | ناکام پراکسی صحت پروبز کے لیے کیش TTL۔ اسے `PROXY_HEALTH_CACHE_TTL_MS` سے کم رکھیں تاکہ زیادہ کنکرنسی کے تحت عارضی پراکسی ٹائم آؤٹس فوری طور پر دوبارہ کوشش کریں، جبکہ واقعی ناکارہ پراکسیز کے لیے فوری ناکامی غیر فعال نہ ہو۔ |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | پس منظر میں چلنے والے پراکسی صحت شیڈیولر کو غیر فعال کرنے کے لیے `false` مقرر کریں، جو وقتاً فوقتاً رجسٹرڈ پراکسیز کی جانچ کرتا ہے۔ |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | پس منظر کے صحت شیڈیولر کے سویپ کا وقفہ ملی سیکنڈز میں (کم از کم `60000`)۔ |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | پسِ منظر میں بحالی کے عمل کا وقفہ، ملی سیکنڈ میں: پہلے غیر صحت مند قرار دیے گئے پراکسیز کو کتنی بار دوبارہ جانچا جائے، تاکہ بحال شدہ پراکسی بغیر ری اسٹارٹ کے دوبارہ روٹیشن میں شامل ہو جائے۔ `60000` سے کم اقدار کی صورت میں ڈیفالٹ قدر استعمال کی جاتی ہے۔ |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | شیڈیولر اور `/api/settings/proxies/auto-test` اینڈ پوائنٹ کے زیرِ استعمال رسائی پذیری کی جانچ کا ہدف۔ عوامی ڈیفالٹ سے بچنے کے لیے اسے کسی اندرونی/سیلف ہوسٹڈ URL پر مقرر کریں۔ |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | فی بیچ ایک ساتھ شروع ہونے والی جانچوں کی تعداد، جسے شیڈیولر اور `/api/settings/proxies/auto-test` اینڈ پوائنٹ مشترکہ طور پر استعمال کرتے ہیں۔ کم از کم 1 اور زیادہ سے زیادہ 50 تک محدود ہے۔ |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | ایک بیچ کے اندر دو جانچوں کے روانہ ہونے کے درمیان تاخیر، ملی سیکنڈ میں۔ اس کے بغیر پورا بیچ ایک ہی وقت میں روانہ ہوتا ہے اور مشترکہ ایگریس IP شرح کی حد والے ہدف کو متحرک کر سکتا ہے۔ وقفہ کاری غیر فعال کرنے کے لیے اسے `0` پر مقرر کریں؛ زیادہ سے زیادہ حد 5000 ہے۔ |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | پراکسی کے تفویض کردہ فراہم کنندہ کے اصل ہوسٹ (`GET /models`، API کلید کے بغیر) کی جانچ روکنے اور اس کے بجائے ہمیشہ `PROXY_HEALTH_TEST_URL` استعمال کرنے کے لیے "false" مقرر کریں۔ |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | جب `false` ہو (ڈیفالٹ)، تو خودکار رسائی پذیری کی جانچیں (شیڈیولر + `/api/settings/proxies/auto-test` کا "سب کی جانچ کریں" بٹن) **صرف پڑھنے کے لیے** ہوتی ہیں اور کبھی بھی پراکسی کا اسٹیٹس نہیں لکھتیں — صرف آپریٹر اسے فعال/غیر فعال مقرر کرتا ہے، تاکہ غیر مستحکم جانچ کسی تفویض شدہ پراکسی کو ناکارہ نہ چھوڑ دے (#6246)۔ سابقہ جانچ-اور-مقرر طرزِ عمل بحال کرنے کے لیے `true` مقرر کریں۔ |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | اختیاری فیچر فلیگ ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) دیکھیں؛ ڈیش بورڈ DB کی اوور رائیڈ کو ترجیح حاصل ہے)۔ `true` (یا `1`، `yes`) خالی 200 یا خالی مواد والا 502 ظاہر کرنے کے بجائے، ترجمہ شدہ اسٹریمنگ کے خالی ٹرنز کو معمول کے کریڈینشل راستے سے دوبارہ آزماتا ہے (`STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` تک دوبارہ کوششیں)۔ |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | اختیاری فیچر فلیگ ([FEATURE_FLAGS.md](./FEATURE_FLAGS.md) دیکھیں؛ ڈیش بورڈ DB کی اوور رائیڈ کو ترجیح حاصل ہے)۔ `true` (یا `1`، `yes`) ڈیش بورڈ میں پراکسی پول کے تحت صرف پڑھنے کے لیے پول ایگریس مشاہدہ دکھاتا ہے (پراکسی لاگ سے گزشتہ 24 گھنٹوں کے منفرد ایگریس IPs، کنکشنز، اور ایک IP کے پیچھے سب سے زیادہ دیکھی گئی تعداد)۔ اسے کبھی بھی روٹنگ کے لیے استعمال نہیں کیا جاتا۔ |
| `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | شیڈیولر کو مسلسل بار بار ناکامیوں کے بعد پراکسیز خودکار طور پر ہٹانے کی اجازت دینے کے لیے `true` سیٹ کریں۔ |
| `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | شیڈیولر کے کسی پراکسی کو خودکار طور پر ہٹانے سے پہلے مسلسل ناکامیوں کی تعداد (جب `PROXY_AUTO_REMOVE=true` ہو)۔ |
| `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | شیڈیولر کو مسلسل بار بار ناکامیوں کے بعد کسی پراکسی کو ہٹانے کے بجائے عارضی طور پر غیر فعال (اسٹیٹس `dead`، کبھی حذف نہیں کی جاتی) کرنے کی اجازت دینے کے لیے `true` سیٹ کریں۔ یہ `PROXY_AUTO_REMOVE` کا غیر تباہ کن متبادل ہے: پراکسی فوری طور پر پول/روٹیشن ریزولیوشن سے خارج ہو جاتی ہے (اسکوپ-پول ریزولیوشن کے زیرِ استعمال فعال اسٹیٹس فلٹر میں یہ پہلے ہی شامل نہیں ہوتی) اور دوبارہ پروبز پاس کرنا شروع کرنے پر خودکار طور پر دوبارہ فعال ہو جاتی ہے۔ یہ `PROXY_AUTO_REMOVE_AFTER` کی حد استعمال کرتی ہے۔ اگر دونوں فلیگز `true` ہوں تو `PROXY_AUTO_REMOVE` کو ترجیح دی جاتی ہے۔ |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | پراکسی تک رسائی کی پیشگی جانچیں ناکام ہونے پر OAuth اور فراہم کنندہ کی توثیق کے فلوز کو پن شدہ پراکسی نظرانداز کرکے براہِ راست منسلک ہونے کی اجازت دیں۔ مؤثر ترجیحی ترتیب یہ ہے: Feature Flags DB اوور رائیڈ > env var > ڈیفالٹ۔ |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 سیکنڈ) | `src/lib/resilience/settings.ts` | ڈیفالٹ **قطار میں انتظار** کا بجٹ: کسی درخواست کو مسترد کیے جانے اور اپ اسٹریم تک کبھی نہ پہنچنے سے پہلے، وہ فراہم کنندہ کے سلاٹ کا کتنی دیر انتظار اور قطار میں کتنی دیر رہ سکتی ہے۔ جاب پر عمل درآمد شروع ہوتے ہی ٹائمر صاف کر دیا جاتا ہے — عمل درآمد کو الگ سے `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` محدود کرتا ہے۔ env صرف ڈیفالٹ مقرر کرتا ہے: محفوظ شدہ `resilienceSettings.requestQueue.maxWaitMs`، اور پھر فی کنکشن `rateLimitOverrides.maxWaitMs`، دونوں کو اس پر ترجیح حاصل ہوتی ہے۔ |
| `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 منٹ) | `open-sse/services/rateLimitManager.ts` | داخل شدہ درخواست کے عمل درآمد میں رہنے کی زیادہ سے زیادہ مدت، جس کے بعد اس کی شرح کی حد کی ریزرویشن ختم ہو جاتی ہے — اسے قطار میں انتظار کے بجٹ سے الگ رکھا گیا ہے تاکہ نان-انکریمنٹل گیٹ ویز پر سست fetch-start کی وجہ سے ٹائم آؤٹ نہ ہو (#12027)۔ |
| `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (غیر فعال) | `open-sse/services/rateLimitManager.ts` | قطار میں داخلے کی حد: جب اتنی درخواستیں پہلے ہی قطار میں ہوں تو 429 `queue_full` کے ساتھ مسترد کریں۔ `0` = لامحدود (ڈیفالٹ)۔ |
| `RATE_LIMIT_AUTO_ENABLE` | _(غیر مقرر)_ | `open-sse/services/rateLimitManager.ts` | محفوظ شدہ Dashboard سیٹنگ سے قطع نظر، شرح کی حد کے خودکار فعال حفاظتی جال کو لازماً آن/آف کریں۔ لازماً آن کرنے کے لیے `true`/`1`/`on`، اور لازماً آف کرنے کے لیے `false`/`0`/`off` قبول کرتا ہے۔ |
| `PROVIDER_COOLDOWN_ENABLED` | _(غیر متعین → بند)_ | `open-sse/services/providerCooldownTracker.ts` | تمام درخواستوں میں فراہم کنندہ/کنکشن کے کول ڈاؤن کو ٹریک کرنے کی اختیاری عالمی سہولت۔ بطور ڈیفالٹ بند ہے (Connection Cooldown / Provider Circuit Breaker کے ساتھ اوورلیپ کرتی ہے)۔ فعال کرنے کے لیے `true`/`1`/`on` قبول کرتی ہے۔ |
| `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | ناکام فراہم کنندہ/کنکشن کو دوبارہ آزمانے سے پہلے کم از کم کول ڈاؤن (ms)۔ مسلسل ناکامیوں کے ساتھ اس میں تیزی سے اضافہ ہوتا ہے۔ صرف اس وقت استعمال ہوتا ہے جب `PROVIDER_COOLDOWN_ENABLED` فعال ہو۔ |
| `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 منٹ) | `open-sse/services/providerCooldownTracker.ts` | ناکام فراہم کنندہ/کنکشن کو ہر صورت دوبارہ آزمانے سے پہلے کول ڈاؤن (ms) کی زیادہ سے زیادہ حد۔ صرف اس وقت استعمال ہوتا ہے جب `PROVIDER_COOLDOWN_ENABLED` فعال ہو۔ |
| `STREAM_RECOVERY_ENABLED` | _(غیر متعین → بند)_ | `src/lib/resilience/settings.ts` (ابتدائی قدر) → `open-sse/services/streamRecovery.ts` (منطق) | **کیا:** اوپر کی جانب سے منقطع شدہ اسٹریمز کی شفاف بازیابی (free-claude-code پورٹ)۔ ابتدائی SSE ونڈو کو `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) تک روکے رکھتی ہے تاکہ _پری کمیٹ_ کٹ آف — یعنی کلائنٹ تک کوئی بائٹ پہنچنے سے پہلے ہونے والا انقطاع — کو دوبارہ کھول کر غیر محسوس طور پر آزمایا جا سکے۔ **کب فعال کریں:** غیر مستحکم/اوپر کی جانب کے ایسے نظام جو اسٹریم کے آغاز پر اکثر 0 بائٹ پر منقطع ہو جاتے ہیں؛ اگر آپ ہر اسٹریم پر پہلے ٹوکن تک کے وقت میں 750 ms تک اضافے کے متحمل نہیں ہو سکتے تو اسے بند رکھیں۔ `true`/`1`/`on` قبول کرتی ہے۔ مستقل محفوظ کردہ Resilience ترتیب کی ابتدائی قدر مقرر کرتی ہے؛ ایک بار Dashboard ترتیب مقرر ہو جائے تو اسے ترجیح حاصل ہوتی ہے۔ |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(غیر متعین → بند)_ | `src/lib/resilience/settings.ts` (ابتدائی قدر) → `open-sse/services/streamRecovery.ts` (منطق) | **کیا:** اسٹریم کے درمیان تسلسل (Fase 4.4) — _پوسٹ کمیٹ_ انقطاع (بائٹس پہلے ہی کلائنٹ تک پہنچ چکی ہوں) کے بعد، جزوی متن کو اسسٹنٹ پری فل کے طور پر استعمال کرتے ہوئے دوبارہ درخواست کرتی اور غائب لاحقے کو جوڑتی ہے۔ صرف سادہ متن والی OpenAI سے مطابقت رکھنے والی اسٹریمز؛ دورانِ عمل ٹول کال کی صورت میں کبھی فعال نہیں ہوتی۔ **کب فعال کریں:** طویل جنریشنز جو جواب کے درمیان منقطع ہو جاتی ہیں اور آپ بازیافت شدہ بقیہ حصے کو ٹوکن بہ ٹوکن کے بجائے ایک ساتھ موصول کرنے پر رضامند ہوں۔ `STREAM_RECOVERY_ENABLED` سے آزاد ہے (خطرے کا مختلف پروفائل)۔ `true`/`1`/`on` قبول کرتی ہے۔ |
| `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(غیر متعین → بند)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | فعال اسٹریم کے مفید آؤٹ پٹ کی نگرانی کی اختیاری سہولت۔ ایسی اسٹریمز کا پتہ لگاتی ہے جو چنکس بھیجتی رہتی ہیں مگر اسسٹنٹ آؤٹ پٹ کی ترتیب شدہ شرح سے کم رہتی ہیں؛ ہارٹ بیٹس، استعمال کے واقعات، خالی ڈیلٹاز، اور ٹول/استدلال کے مراحل کو غلطی سے پیش رفت نہیں سمجھا جاتا۔ غیر فعالیت اور قطعی ڈیڈ لائن ٹائم آؤٹس سے الگ ہے۔ |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | تھرو پٹ کی جانچ سے پہلے رعایتی مدت، جس کی حد 0–600000 ms ہے۔ |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | مفید آؤٹ پٹ کی متحرک ونڈو، جس کی حد 1000–600000 ms ہے؛ منسوخی سے پہلے ایک مکمل ونڈو درکار ہے۔ |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | UTF-8 اسسٹنٹ آؤٹ پٹ کی کم از کم بائٹ شرح (قدامت پسند ٹوکن پراکسی)، جس کی حد 1–1000000 ہے۔ |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | قابل پیمائش سمجھے جانے والے غیر صفر مفید آؤٹ پٹ نمونے کی کم از کم مقدار، جس کی حد 1–1000000 بائٹس ہے۔ |
| `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | آغاز کے وقت فراہم کنندہ کے ٹوکن ہیلتھ چیکس کے درمیان تدریجی وقفہ (ms)۔ |
| `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | فراہم کنندہ ٹوکن صحت جانچوں کے درمیان `HEALTHCHECK_STAGGER_MS` کے علاوہ شامل کیا جانے والا کم از کم بے ترتیب وقفہ (ms)، تاکہ اچانک بوجھ سے بچا جا سکے (مسئلہ #1220)۔ |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | فراہم کنندہ ٹوکن صحت جانچوں کے درمیان `HEALTHCHECK_STAGGER_MS` کے علاوہ شامل کیا جانے والا زیادہ سے زیادہ بے ترتیب وقفہ (ms)، تاکہ اچانک بوجھ سے بچا جا سکے (مسئلہ #1220)۔ |
| `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | آغاز پر ٹوکن صحت جانچ کے جامع عمل کے لیے بیک وقت جانچ کے بیچ کا حجم؛ بڑی قدریں زیادہ کنکشنز کو متوازی طور پر جانچتی ہیں، جبکہ چھوٹی قدریں اچانک بوجھ کم کرتی ہیں (مسئلہ #7875، #7719 کی رجعت)۔ |
| `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | کلائنٹ کو خرابی واپس کرنے سے پہلے ماڈل تک محدود کول ڈاؤن جوابات پر خودکار دوبارہ کوششوں کی تعداد۔ |
| `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | کول ڈاؤن دوبارہ کوششوں کے درمیان زیادہ سے زیادہ پسپائی وقفہ (سیکنڈز)۔ بالائی ماخذ کے `Retry-After` سے قطع نظر اسے اس قدر تک محدود رکھا جاتا ہے۔ |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | Headroom ٹوکن بچانے والے پراکسی کا URL۔ ڈیش بورڈ لائف سائیکل (`api/headroom/*`) بطور ڈیفالٹ لوپ بیک پر مقامی `headroom-ai` CLI چلاتا ہے؛ اسے صرف کسی بیرونی Docker سائیڈ کار پراکسی کی طرف اشارہ کرنے کے لیے اوور رائیڈ کریں۔ |
### اسٹریم بحالی کی ٹیوننگ کے مستقلات
بحالی کے ہولڈ بیک رویے کو
`open-sse/config/constants.ts` (`STREAM_RECOVERY`) میں ہارڈ کوڈ شدہ مستقلات کے ذریعے ٹیون کیا جاتا ہے، جنہیں حوالہ کے لیے یہاں دکھایا گیا ہے —
انہیں تبدیل کرنے کے لیے env var کے بجائے کوڈ میں ترمیم درکار ہے:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — ابتدائی SSE ونڈو کو کتنی دیر تک روکے رکھا جاتا ہے
تاکہ کلائنٹ کو کوئی بائٹ سپرد کیے جانے سے پہلے ابتدائی انقطاع پر دوبارہ کوشش کی جا سکے۔
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — روکی گئی ونڈو کی سخت حد؛ ٹائمر سے قطع نظر،
اتنے بائٹس جمع ہوتے ہی سپرد کر دیں (flush + passthrough)۔
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — ہولڈ بیک کے ابھی غیر سپرد شدہ ہونے کے دوران بالائی ماخذ
اسٹریم کو شفاف انداز میں زیادہ سے زیادہ کتنی بار دوبارہ کھولا جا سکتا ہے۔
> **فی فراہم کنندہ سلائیڈنگ ونڈو شرح حد (کوئی env var نہیں):** FCC سے پورٹ کردہ
> فی فراہم کنندہ سلائیڈنگ ونڈو شرح حد کا _fallback_ کوڈ میں موجود ہے
> (`open-sse/services/providerDefaultRateLimit.ts`، جسے
> `open-sse/services/rateLimitManager.ts` کے ذریعے منسلک کیا گیا ہے) لیکن یہ **خالی ڈیفالٹ میپ**
> کے ساتھ فراہم کیا جاتا ہے اور فی الحال اس کے لیے **کوئی آپریٹر env var نہیں** — اسے صرف ٹیسٹ ہُک /
> کوڈ میں ترمیم کے ذریعے فعال کیا جاتا ہے۔ اسے دانستہ طور پر اوپر دیے گئے جدول میں شامل نہیں کیا گیا۔ فی-`(token, IP)`
> ریلے محدود کنندہ جس کے لیے واقعی ایک کنٹرول موجود ہے، `RELAY_IP_PER_MINUTE` (§3 نیٹ ورک اور پورٹس) ہے۔
---
## 22. ڈیبگنگ
> [!CAUTION]
> یہ متغیرات **تفصیلی آؤٹ پٹ** پیدا کرتے ہیں اور حساس ڈیٹا افشا کر سکتے ہیں۔ **انہیں پروڈکشن میں کبھی فعال نہ کریں۔**
| متغیر | ڈیفالٹ | سورس فائل | تفصیل |
| ------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CURSOR_DEBUG` | _(سیٹ نہیں)_ | `open-sse/executors/cursor.ts` | تفصیلی Cursor executor لاگز (ڈی کوڈ شدہ SSE چنکس وغیرہ) فعال کرنے کے لیے `1` سیٹ کریں۔ |
| `CURSOR_STREAM_DEBUG` | _(سیٹ نہیں)_ | `open-sse/executors/cursor.ts` | `CURSOR_DEBUG` کا پسماندہ موافق عرف۔ |
| `CURSOR_DUMP_FILE` | _(سیٹ نہیں)_ | `open-sse/executors/cursor.ts` | اختیاری فائل پاتھ جو `CURSOR_DEBUG=1` ہونے پر خام ڈی کوڈ شدہ Cursor چنکس وصول کرتا ہے۔ |
| `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Cursor executor کے لیے اسٹریم کے غیر فعال رہنے کی ٹائم آؤٹ مدت (ms)۔ |
| `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | composer kv_after_text سافٹ ٹرمینیٹر کے بعد، جب بائٹس بفر میں باقی ہوں، رعایتی وقفہ (ms) — اس سے آخر میں آنے والی exec_mcp ٹول کال کو اپنا فریم مکمل کرنے کا وقت ملتا ہے۔ |
| `CURSOR_TOOL_DIRECTIVE` | فعال (`!== "0"`) | `open-sse/executors/cursor.ts` | ٹول-کمیٹ ہدایت جو composer-2.5 سے قابلِ اعتماد طور پر ٹول کالز جاری کرواتی ہے۔ غیر فعال کرنے کے لیے `0` سیٹ کریں۔ |
| `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(سیٹ نہیں)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | آپریٹر کی متعین کردہ سسٹم پرامپٹ عبارت، جو ترجمے کے بعد سسٹم پیغام کے ساتھ شامل کی جاتی ہے (بعد از ترجمہ انجیکشن) اور codex/Responses اور `/v1/messages` پاتھس تک پہنچتی ہے۔ اسے اس ہدایت کے سابقے کے طور پر بھی استعمال کیا جاتا ہے جو بازگشت شدہ سسٹم تمہیدی بلاکس سے ہٹایا جاتا ہے۔ غیر فعال رکھنے کے لیے اسے سیٹ نہ کریں۔ |
| `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (بند) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | openai→claude اسٹریم کے آغاز سے بازگشت شدہ سسٹم-پرامپٹ تمہیدی بلاکس ہٹانے کے لیے `1` سیٹ کریں۔ یہ بطور ڈیفالٹ بند ہے — ہیورسٹکس انگریزی نثر کے مطابق بنائے گئے ہیں اور رسپانس پے لوڈ تبدیل کرتے ہیں، اس لیے اگر کوئی جواب جائز طور پر ایسے حصے سے شروع ہو تو وہ حصہ ضائع ہو جائے گا۔ |
| `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | ریموٹ `image_url` وژن ان پٹ کے لیے فی تصویر حاصل کرنے کی ٹائم آؤٹ مدت (ms)۔ |
| `CURSOR_STATE_DB_PATH` | _(تلاش شدہ)_ | `open-sse/utils/cursorVersionDetector.ts` | IDE ورژن کا پتہ لگانے کے لیے استعمال ہونے والی Cursor IDE اسٹیٹ DB تلاش کو اوور رائیڈ کریں۔ |
| `CURSOR_AGENT_CLI_VERSION` | _(پتہ لگائیں / مقرر کریں)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Agent Run پر `x-cursor-client-version: cli-…` کے لیے Agent CLI بلڈ id (`YYYY.MM.DD-`)۔ |
| `CURSOR_AGENT_BIN` | _(سیٹ نہیں)_ | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | تصویر بنانے کے لیے استعمال ہونے والی Cursor Agent بائنری کا پاتھ۔ سیٹ نہ ہونے پر، ہینڈلر پہلے `providerSpecificData.agentBin` اور پھر PATH استعمال کرتا ہے۔ |
| `CURSOR_IMG_TIMEOUT_MS` | `210000` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Cursor Agent تصویری جابز کے لیے فی تصویر وال کلاک مدت (ms)۔ |
| `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Cursor تصویری جابز کے لیے مشترکہ سیٹ کی کنکرنسی حد۔ |
| `CURSOR_IMG_MODEL` | درخواست / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | تصویری جابز کے لیے Cursor CLI `--model` کو اوور رائیڈ کریں۔ |
| `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | UC (uncensored.com) تصویر سازی کے نتیجے کی پولنگ کا وقفہ (ms)۔ |
| `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | UC تصویر سازی کے نتیجے کی پولنگ کی وال کلاک مدت (ms)۔ |
| `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | UC (uncensored.com) ویڈیو سازی کے نتیجے کی پولنگ کا وقفہ (ms)۔ |
| `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | UC ویڈیو سازی کے نتیجے کی پولنگ کی وال کلاک مدت (ms)۔ |
| `CURSOR_DATA_DIR` | _(تلاش شدہ)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Cursor Agent CLI ڈیٹا ڈائریکٹری (`…/versions/`) کو اوور رائیڈ کریں؛ یہی متغیر آفیشل agent بھی استعمال کرتا ہے۔ |
| `CURSOR_TOKEN` | _(سیٹ نہیں)_ | `scripts/ad-hoc/cursor-tap.cjs` | ڈویلپر ٹولنگ کے ذریعے استعمال ہونے والا براہِ راست Cursor bearer ٹوکن۔ |
| `OMNIROUTE_LOG_REQUEST_SHAPE` | غیر فعال (`"1"` کے ذریعے اختیاری فعالیت) | `src/app/api/v1/chat/completions/route.ts` | `"1"` سیٹ ہونے پر بڑے چیٹ پے لوڈز کے لیے content-type/length مارکرز لاگ کریں۔ لاگ کے شور کو کم کرنے کے لیے بطور ڈیفالٹ بند ہے۔ |
| `DEBUG_RESPONSES_SSE_TO_JSON` | _(سیٹ نہیں)_ | `open-sse/handlers/responseTranslator.ts` | Responses API کی SSE→JSON ترجمے کی تفصیلات لاگ کرنے کے لیے `true` سیٹ کریں۔ |
| `DEBUG_CLAUDE_NONSTREAM` | _(سیٹ نہیں)_ | `open-sse/handlers/responseTranslator.ts` | Claude رسپانس ترجمہ پاتھ میں خالی textContent چنکس ظاہر کرنے کے لیے `true` سیٹ کریں (صرف ڈیبگنگ کے لیے)۔ |
| `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(سیٹ نہیں)_ | E2E ٹیسٹ ہارنس | E2E ٹیسٹ موڈ (نرم تصدیق، ٹیسٹ ہکس) فعال کرنے کے لیے `true` سیٹ کریں۔ |
---
## 23. GitHub انضمام
صارفین کو Dashboard سے براہِ راست مسائل رپورٹ کرنے کی اجازت دیں۔
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| --------------------- | -------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GITHUB_ISSUES_REPO` | _(متعین نہیں)_ | `src/app/api/v1/issues/report/route.ts` | `owner/repo` فارمیٹ میں ریپوزٹری۔ |
| `GITHUB_ISSUES_TOKEN` | _(متعین نہیں)_ | `src/app/api/v1/issues/report/route.ts` | `issues:write` دائرۂ کار کے ساتھ GitHub Personal Access Token۔ |
| `GITHUB_TOKEN` | _(متعین نہیں)_ | مسئلے کی درجہ بندی / کلاؤڈ ایجنٹ معاونین | عمومی GitHub رسائی ٹوکن جو `GITHUB_ISSUES_TOKEN` کے متبادل کے طور پر استعمال ہوتا ہے اور `src/lib/cloudAgent/*` میں کلاؤڈ ایجنٹ معاونین استعمال کرتے ہیں۔ |
---
## تعیناتی کے منظرنامے
ریلے بیک اینڈ SRE رہنمائی (ts/bifrost/auto رویہ، 9router بمقابلہ CLIProxyAPI کی جگہ کا تعین، اور ہائی تھرو پٹ فال بیک حکمت عملی) کے لیے، [ریلے بیک اینڈ حکمت عملی](/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
```
### Air-Gapped / CI
```bash
JWT_SECRET=test-jwt-secret-for-ci
API_KEY_SECRET=test-api-key-secret-for-ci
INITIAL_PASSWORD=testpass
NODE_ENV=production
OMNIROUTE_DISABLE_BACKGROUND_SERVICES=true
APP_LOG_TO_FILE=false
```
### ریورس پراکسی (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 سینڈ باکس (v3.8.0+)
وہ حدود اور حفاظتی ترتیبات جو Skills فریم ورک (`src/lib/skills/`) کے ذریعے صارف کی وضاحت کردہ خودکاریاں سینڈ باکس ماحول میں چلانے پر لاگو ہوتی ہیں۔
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| --------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 سیکنڈ) | `src/lib/skills/builtins.ts` | سینڈ باکس شدہ اسکل کوڈ کے ہر نفاذ کے لیے حقیقی وقت کی مہلت۔ یہ قطعی حد ہے؛ اس سے زیادہ چلنے والی ہر چیز ختم کر دی جاتی ہے۔ |
| `SKILLS_EXECUTION_TIMEOUT_MS` | _(`SKILLS_SANDBOX_TIMEOUT_MS` کو متبادل طور پر استعمال کرتا ہے)_ | `src/lib/skills/` | اعلیٰ سطحی اسکل آرکیسٹریشن کی مہلت۔ متعدد مراحل والے ورک فلو کی اجازت دینے کے لیے اسے `SKILLS_SANDBOX_TIMEOUT_MS` سے زیادہ رکھیں۔ |
| `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | بائٹس کی زیادہ سے زیادہ تعداد جو کوئی اسکل کسی ایک سینڈ باکس شدہ فائل سے پڑھ سکتا ہے۔ |
| `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | کسی اسکل کے اندر کسی ایک HTTP جواب سے محفوظ کیے جانے والے بائٹس کی زیادہ سے زیادہ تعداد۔ |
| `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | سینڈ باکس نفاذ سے واپس آنے والے stdout/stderr حروف کی قطعی حد۔ |
| `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | سینڈ باکس کے اندر سے بیرونی نیٹ ورک کی اجازت دینے کے لیے `1`/`true` مقرر کریں۔ حفاظت کے لیے طے شدہ طور پر **الگ تھلگ** رہتا ہے۔ |
| `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(خالی)_ | `src/lib/skills/builtins.ts` | سینڈ باکس نفاذ کے لیے اجازت یافتہ کنٹینر امیجز کی کوما سے جدا فہرست۔ خالی ہونے کا مطلب صرف پہلے سے موجود طے شدہ امیج ہے۔ |
| `SKILLS_SANDBOX_DOCKER_IMAGE` | _(پہلے سے موجود طے شدہ قدر)_ | `src/lib/skills/` | Docker پر مبنی سینڈ باکس بناتے وقت استعمال ہونے والی کنٹینر امیج۔ حسبِ ضرورت محفوظ کردہ بنیادی امیج مقرر کرنے کے لیے اسے تبدیل کریں۔ |
| `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | اسکل سینڈ باکسنگ کے لیے کنٹینر رن ٹائم: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`۔ `auto` میزبان OS کے مطابق بہترین نصب شدہ رن ٹائم منتخب کرتا ہے (macOS پر Apple Container/OrbStack، Windows پر WSL Container، Linux پر Podman)، اور عدم دستیابی کی صورت میں Docker استعمال کرتا ہے۔ |
> [!CAUTION]
> `SKILLS_SANDBOX_NETWORK_ENABLED=true` فعال کرنے سے کسی بھی اسکل کوڈ کے لیے بیرونی رسائی کا راستہ کھل جاتا ہے۔ مشترکہ تعیناتیوں میں اسے `OUTBOUND_SSRF_GUARD_ENABLED=true` اور سخت `CORS_ORIGIN`/پراکسی پالیسی کے ساتھ استعمال کریں۔
---
## 25. فراہم کنندہ کوٹاز، ٹنلز، بیک اپس اور متفرق رن ٹائم
فراہم کنندہ کوٹا اینڈ پوائنٹس، نیٹ ورک ٹنلز (Tailscale، Ngrok، MITM ڈیبگ پراکسی)، 1Proxy ایگریس پول، ڈیٹابیس بیک اپس اور executor لیئر یا اسکرپٹس کے حوالے سے چھوٹی فی فیچر اوور رائیڈز۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | ریٹ لمیٹر بیک اینڈ کے لیے Redis کنکشن اسٹرنگ۔ |
| `ALIBABA_CODING_PLAN_HOST` | _(پروڈکشن ہوسٹ)_ | `open-sse/services/bailianQuotaFetcher.ts` | Alibaba Bailian کوڈنگ پلان کوٹاز حاصل کرنے کے لیے استعمال ہونے والے ہوسٹ کو اوور رائیڈ کریں۔ |
| `ALIBABA_CODING_PLAN_QUOTA_URL` | ہوسٹ سے اخذ کردہ | `open-sse/services/bailianQuotaFetcher.ts` | Alibaba Bailian کے لیے مکمل کوٹا URL اوور رائیڈ۔ |
| `QWEN_CLOUD_COOKIE` | _(غیر سیٹ شدہ)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Qwen Cloud / Model Studio ذاتی Token Plan کوٹا گیٹ وے کے لیے کنسول سیشن کوکی (inference API کلید اسے پڑھ نہیں سکتی)۔ home.qwencloud.com › Billing › Subscription (F12 › Network) پر `cs-data.qwencloud.com` کو کی گئی کسی بھی `api.json` کال سے مکمل `Cookie` درخواست ہیڈر نقل کریں—اس میں `login_qwencloud_ticket` شامل ہوتا ہے۔ یہ حساس اور سیشن تک محدود ہے؛ فی کنکشن `qwenCloudCookie` Dashboard فیلڈ کو ترجیح دیں۔ |
| `QWEN_CLOUD_SEC_TOKEN` | _(غیر سیٹ شدہ)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Token Plan کنسول گیٹ وے کے لیے دستی `sec_token` اوور رائیڈ۔ حساس؛ سیٹ نہ ہونے پر fetcher کوکی استعمال کرتے ہوئے dashboard HTML سے اسے اخذ کرتا ہے۔ |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | ذاتی Token Plan کوٹا fetcher کے لیے گیٹ وے ہوسٹ اوور رائیڈ (مثلاً Model Studio کنسول کے لیے `bailian-singapore-cs.alibabacloud.com`)۔ |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | لاگ ان شدہ HTML سے `sec_token` اخذ کرنے کے لیے استعمال ہونے والا Dashboard URL۔ |
| `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Alibaba Model Studio کے فری ٹیئر وژن/میڈیا کوٹا کو حاصل کرنے کے لیے کنسول فرنٹ اینڈ پاتھ اوور رائیڈ۔ |
| `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Alibaba Model Studio کے مفت درجے کے ملٹی موڈل کوٹے کو حاصل کرنے کے لیے کنسول فرنٹ اینڈ پاتھ کا اوور رائیڈ۔ |
| `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Alibaba Model Studio کے مفت درجے کے آڈیو کوٹے کو حاصل کرنے کے لیے کنسول فرنٹ اینڈ پاتھ کا اوور رائیڈ۔ |
| `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(غیر متعین)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | پہلے سے شامل Alibaba مفت درجے کے ٹیکسٹ ماڈلز کی اجازت یافتہ فہرست کو اوور رائیڈ کرنے والی مقامی JSON فائل کا اختیاری پاتھ۔ دستیاب نہ ہونے پر پہلے `$DATA_DIR/alibaba-free-tier-allowlist.json`، پھر `config/alibaba-free-tier-allowlist.json` استعمال کیا جاتا ہے۔ |
| `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | پرامپٹ بجٹ کا حساب لگاتے وقت تکمیلی آؤٹ پٹ کے لیے محفوظ رکھے گئے ٹوکنز۔ |
| `CONTEXT_KEEP_LATEST_IMAGES` | `2` | `open-sse/services/contextManager.ts` | کانٹیکسٹ ونڈو میں فٹ کرنے کے لیے پرانی تصاویر کو ہٹاتے وقت کتنی تازہ ترین اِن لائن تصاویر برقرار رکھی جائیں (#8560)۔ |
| `MODEL_ALIAS_COMPAT_ENABLED` | فعال | `open-sse/services/model.ts` | پرانے کلائنٹس کے زیرِ استعمال لیگیسی ماڈل عرفی نام کی مطابقتی تہہ کو فعال یا غیر فعال کریں۔ |
| `OMNIROUTE_EMERGENCY_FALLBACK` | فعال | `open-sse/services/emergencyFallback.ts` | بجٹ ختم ہونے کی صورت میں ناکام درخواستوں کو مفت `nvidia`/`openai/gpt-oss-120b` ماڈل کی طرف دوبارہ بھیجنے والے ہنگامی فال بیک کو غیر فعال کرنے کے لیے `false` (یا `0`) مقرر کریں۔ مؤثر ترجیحی ترتیب یہ ہے: Feature Flags DB اوور رائیڈ > env var > ڈیفالٹ؛ اگر یہ دستیاب نہ ہو تو سروس براہِ راست env کی قدر استعمال کرتی ہے۔ |
| `COMMAND_CODE_CALLBACK_PORT` | _(غیر متعین)_ | `src/app/api/providers/command-code/auth/shared.ts` | Command Code CLI معاون سے OAuth طرز کے کال بیکس کے لیے استعمال ہونے والی مقامی پورٹ۔ |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Command Code اپ اسٹریم کو `x-command-code-version` ہیڈر کے طور پر بھیجی جانے والی قدر۔ CLI ورژن بڑھانے کے لیے اسے اوور رائیڈ کریں۔ |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | اسمارٹ فون کوٹا حاصل کرنے والی ٹیلی میٹری کے زیرِ استعمال Command Code استعمال/کوٹا اپ اسٹریم کا بنیادی URL۔ خود میزبانی شدہ/متبادل Command Code API کے لیے اسے اوور رائیڈ کریں۔ |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | MITM ڈیبگ پراکسی کے لیے مقامی بائنڈ پورٹ۔ |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | اپ اسٹریم TLS توثیق غیر فعال کرنے کے لیے `1` مقرر کریں (صرف ڈیولپمنٹ کے لیے)۔ |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | پراکسی کردہ کنکشنز کے لیے غیر فعال ساکٹ ٹائم آؤٹ (ms)؛ اس مدت سے زیادہ غیر فعال رہنے والے ساکٹس کو ختم کر دیا جاتا ہے تاکہ نصف کھلی ٹنلز کے اخراج سے بچا جا سکے۔ |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | وہ پورٹ جس پر Antigravity MITM برج سنتا ہے۔ |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | روٹر اینڈ پوائنٹ جس کی طرف برج Antigravity ٹریفک فارورڈ کرتا ہے۔ |
| `CERT_DIR` | `~/.omniroute/mitm` | `bin/antigravity-bridge.mjs` | برج کے TLS لسنر کے لیے `server.key`/`server.crt` رکھنے والی ڈائریکٹری؛ اگر ان میں سے کوئی بھی موجود نہ ہو تو برج بند ہو جاتا ہے۔ |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | روٹنگ فیصلوں کے لاگ کی تفصیل: `0` لاگز کو خاموش کرتا ہے، جبکہ زیادہ قدریں مزید بائی پاس/روٹ فیصلے لاگ کرتی ہیں۔ |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | روٹ-CA + فی میزبان لیف سرٹیفکیٹ ماڈل (#6684) اختیار کرنے کے لیے `true` مقرر کریں۔ نئی تنصیبات کو یہ خودکار طور پر ملتا ہے؛ پہلے سے قابلِ اعتماد پرانا لیف رکھنے والی تنصیبات، رضاکارانہ طور پر اختیار کیے جانے تک، پرانا فکسڈ-SAN سرٹیفکیٹ برقرار رکھتی ہیں۔ |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | شروع کیے گئے پراکسی پروسیس کے لیے MITM مینیجر کی جانب سے مقرر کیا جاتا ہے (`root-ca` \| `legacy`) — یہ سرٹیفکیٹ مائیگریشن کے فیصلے کی عکاسی کرتا ہے؛ اسے دستی طور پر مقرر کرنا مقصود نہیں۔ |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | MITM سرٹیفکیٹ ٹرسٹ کمانڈز سے ابتدائی `sudo` ہٹانے کے لیے `1` (truthy) مقرر کریں — روٹ کے بغیر / صارف نیم اسپیس والی تعیناتیوں کے لیے، جہاں آپریٹر دستی طور پر CA پر اعتماد کرتا ہے (مثلاً Node کے اضافی-CA-سرٹیفکیٹس میکانزم کے ذریعے)۔ |
| `SKIP_ANTIGRAVITY_DNS` | _(مقرر نہیں)_ | `src/mitm/dns/provision.ts` | Antigravity پراکسی ہوسٹ نیمز کے لیے `/etc/hosts` DNS اندراجات کی فراہمی کو مکمل طور پر چھوڑنے کے لیے `true` مقرر کریں — ایسے کنٹینرز کے لیے جہاں sudo/root دستیاب نہ ہو۔ |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(مقرر نہیں)_ | `src/mitm/dns/dnsConfig.ts` | DNS اندراجات شامل یا حذف کرتے وقت ہوسٹس فائل میں لکھنے کا عمل چھوڑنے کے لیے `1` مقرر کریں — سینڈ باکس شدہ یا صرف پڑھنے والے ٹیسٹ ماحول کے لیے۔ |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | صرف ٹیسٹ/CI کے لیے حفاظتی ترتیب: سرٹیفکیٹ ٹرسٹ کی تنصیب/ان انسٹالیشن کو بے اثر بنانے کے لیے اسے `1` پر سیٹ کریں، تاکہ ٹیسٹ سوٹ کبھی بھی OS ٹرسٹ اسٹور میں تبدیلی نہ کرے۔ اسے ٹیسٹ سیٹ اپ اور CI ورک فلوز خودکار طور پر سیٹ کرتے ہیں۔ |
| `CHANGELOG_BASE_REF` | _(خودکار)_ | `scripts/check/check-changelog-integrity.mjs` | CHANGELOG کے مواد کو حذف ہونے سے روکنے والے گیٹ کے لیے واضح بیس ریف (CI میں بطور ڈیفالٹ PR کی بیس برانچ، یا بلند ترین `release/v*`)۔ |
| `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | پس منظر میں فری پراکسی پول کے خودکار ہم وقت ساز شیڈیولر کو فعال کرنے کے لیے `true` سیٹ کریں۔ یہ اختیاری ہے اور بطور ڈیفالٹ غیر فعال ہے۔ |
| `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | خودکار ہم وقت سازی کا وقفہ ملی سیکنڈز میں (ڈیفالٹ 30 منٹ)۔ |
| `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | 1proxy فری پراکسی ماخذ کو فعال کریں۔ غیر فعال کرنے کے لیے `false` سیٹ کریں۔ |
| `FREE_PROXY_1PROXY_API_URL` | _(oneproxy.ts دیکھیں)_ | `src/lib/freeProxyProviders/oneproxy.ts` | 1proxy API URL کو اوور رائیڈ کریں۔ |
| `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | 1proxy سے ہر ہم وقت سازی میں حاصل کی جانے والی پراکسیز کی زیادہ سے زیادہ تعداد۔ |
| `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | 1proxy درآمدات کے لیے کم از کم معیار اسکور کی حد۔ |
| `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Proxifly فری پراکسی ماخذ کو فعال کریں۔ غیر فعال کرنے کے لیے `false` سیٹ کریں۔ |
| `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | ہر Proxifly ہم وقت سازی میں حاصل کی جانے والی پراکسیز کی تعداد۔ |
| `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | Proxifly کے لیے گمنامی کی سطح کا فلٹر (`elite`، `anonymous`، `transparent`)۔ |
| `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | IPLocate کے مفت پراکسی ماخذ کو فعال کریں۔ صرف آپٹ اِن کے ذریعے۔ |
| `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | IPLocate پراکسی فہرست کے بنیادی URL کو اوور رائیڈ کریں۔ |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Webshare پراکسی پول ماخذ کو فعال کریں۔ غیر فعال کرنے کے لیے `false` پر سیٹ کریں؛ اس کے لیے `FREE_PROXY_WEBSHARE_API_KEY` کا سیٹ ہونا بھی ضروری ہے۔ |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(کوئی نہیں)_ | `src/lib/freeProxyProviders/webshare.ts` | Webshare اکاؤنٹ API ٹوکن (`Authorization: Token `)۔ لازمی ہے — اس کے بغیر فراہم کنندہ غیر فعال رہتا ہے۔ |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Webshare پراکسی فہرست کے API URL کو اوور رائیڈ کریں۔ |
| `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | ہر Webshare سنک میں درآمد کی جانے والی پراکسیز کی زیادہ سے زیادہ تعداد۔ |
| `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | پراکسی پول ٹیب میں Deploy Vercel Relay بٹن دکھائیں/چھپائیں۔ |
| `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Vercel API کے بنیادی URL کو اوور رائیڈ کریں (جانچ کے لیے)۔ |
| `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | Vercel Relay کی تعیناتی کے موڈل میں پہلے سے پُر کیا گیا ڈیفالٹ پروجیکٹ نام۔ |
| `TAILSCALE_BIN` | _(خودکار طور پر شناخت)_ | `src/lib/tailscaleTunnel.ts` | `tailscale` بائنری کا واضح راستہ۔ |
| `TAILSCALED_BIN` | _(خودکار طور پر شناخت)_ | `src/lib/tailscaleTunnel.ts` | `tailscaled` ڈیمون بائنری کا واضح راستہ۔ |
| `TAILSCALE_AUTHKEY` | _(غیر متعین)_ | `src/lib/tailscaleTunnel.ts` | غیر تعاملی / ہیڈلیس `tailscale up` کے لیے پہلے سے اشتراک کردہ Tailscale توثیقی کلید (`--auth-key=` کے ذریعے فراہم کی جاتی ہے)۔ غیر متعین ہونے کی صورت میں، لاگ اِن تعاملی براؤزر توثیقی URL استعمال کرتا ہے۔ |
| `NGROK_AUTHTOKEN` | _(غیر متعین)_ | `src/lib/ngrokTunnel.ts` | باہر جانے والی ngrok ٹنلز کی توثیق کرتا ہے۔ |
| `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | دستی/طے شدہ بیک اَپ صفائی کے دوران محفوظ رکھی جانے والی SQLite بیک اَپ فائلوں کی زیادہ سے زیادہ تعداد۔ مائیگریشن اسنیپ شاٹس مواد کے پتے پر مبنی ہوتے ہیں اور یکساں DB حالت کے لیے دوبارہ استعمال کیے جاتے ہیں؛ ہم وقتی مائیگریشن ونڈو کے اندر ان کی چھانٹی نہیں کی جاتی۔ Settings → Database backup retention میں محفوظ کردہ قدر کو اوور رائیڈ کرتا ہے۔ |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | دستی/طے شدہ بیک اَپ صفائی کے دوران محفوظ رکھی جانے والی زیادہ سے زیادہ مدت (دنوں میں)۔ `0` عمر کی بنیاد پر چھانٹی کو غیر فعال کرتا ہے۔ ہم وقتی مائیگریشن ونڈو کے اندر مائیگریشن اسنیپ شاٹس کی چھانٹی نہیں کی جاتی۔ Settings → Database backup retention میں محفوظ کردہ قدر کو اوور رائیڈ کرتا ہے۔ |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | `backup-schedule.json` چلانے والے سرور سائیڈ جاب کا ٹِک وقفہ (ms)۔ اسے 1 منٹ کی cron گرینولیریٹی سے خاصا کم رہنا چاہیے؛ `5000` سے کم یا ناقابلِ تجزیہ اقدار کی صورت میں `30000` استعمال کیا جاتا ہے۔ |
| `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | انٹری پوائنٹ اجازت کی جانچ کے لیے کنٹینر رن ٹائم کا اشارہ۔ کسی بھی Podman ٹوپولوجی کے لیے اسے `podman` پر سیٹ کریں۔ چونکہ کنٹینر یہ تعین نہیں کر سکتا کہ انجن مقامی ہے یا Podman Machine کے ذریعے قابلِ رسائی ہے، اس لیے انتباہ ٹوپولوجی سے غیر جانب دار رہتا ہے اور `contrib/podman/README.md` کی طرف اشارہ کرتا ہے۔ |
| `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | کوٹا شیئر کے استعمال کے اسٹور کا بیک اینڈ: `sqlite` (ڈیفالٹ) یا `redis`۔ |
| `QUOTA_STORE_REDIS_URL` | _(غیر متعین)_ | `src/lib/quota/storeFactory.ts` | `QUOTA_STORE_DRIVER=redis` ہونے پر استعمال ہونے والی Redis کنکشن اسٹرنگ (مثلاً `redis://localhost:6379`)۔ |
| `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | پول کی سیچوریشن کا تناسب (0..1)؛ اس قدر پر یا اس سے اوپر پول سخت موڈ میں داخل ہو جاتا ہے (ادھار لینے کی اجازت نہیں ہوتی)۔ |
| `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | جب نرم کوٹا پالیسی کسی ہدف کی ترجیح کم کرتی ہے تو اس پر لاگو ہونے والا اسکور ضرب کنندہ (0..1)۔ |
| `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | جب پری فلائٹ کوٹا کٹ آف بند ہو (#4540)، تو خودکار کومبو اسکورنگ میں ختم شدہ فراہم کنندہ (`credits_exhausted`/`rate_limited`) پر لاگو ہونے والا اسکور ضرب کنندہ (0..1)۔ |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | GC (`gcQuotaConsumption`) سے پہلے `quota_consumption` بکیٹس کے لیے برقرار رکھنے کی مدت (دنوں میں)۔ |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | اختیاری (بطور ڈیفالٹ بند): خودکار روٹنگ کے سخت کوٹا کٹ آف کو فعال کرتا ہے، جو اسکورنگ سے پہلے کم کوٹا والے امیدواروں کو خارج کر دیتا ہے۔ |
| `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | اختیاری (بطور ڈیفالٹ بند): جب کوئی `auto/:` فلٹر کسی منسلک امیدوار سے میل نہ کھائے، تو خالی پول واپس کرنے کے بجائے مکمل (غیر فلٹر شدہ) پول پر فال بیک کرنے کا سابقہ طرزِ عمل بحال کرتا ہے۔ بطور ڈیفالٹ بند ہونے کا مطلب ہے کہ `:free` سے مراد "صرف مفت درجہ" ہے۔ |
| `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | `auto/*:chaos` براڈکاسٹ ویریئنٹ کے لیے پینل کے حجم کی بالائی حد (1–10 تک محدود) — ایک درخواست زیادہ سے زیادہ اتنے مختلف فراہم کنندگان کے ماڈلز تک پھیلتی ہے۔ |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(انجن کا ڈیفالٹ)_ | `open-sse/services/autoCombo/virtualFactory.ts` | chaos براڈکاسٹ ہینڈلر کو بھیجی جانے والی کم از کم پینل حجم کی ٹیوننگ؛ غیر متعین رکھنے پر انجن کا ڈیفالٹ برقرار رہتا ہے۔ |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(انجن کا ڈیفالٹ)_ | `open-sse/services/autoCombo/virtualFactory.ts` | پورے chaos پینل فین آؤٹ کے لیے سخت ٹائم آؤٹ (ms)؛ غیر متعین رکھنے پر انجن کا ڈیفالٹ برقرار رہتا ہے۔ |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | grok-web کا ہفتہ وار کوٹا حاصل کرنے کے لیے استعمال ہونے والی Grok CLI کی `auth.json` فائل کا راستہ؛ ٹیسٹس یا غیر معیاری CLI انسٹالیشن کے لیے اسے اوور رائیڈ کریں۔ |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(غیر سیٹ شدہ)_ | `src/mitm/manager.ts` | AgentBridge کے اپ اسٹریم TLS کنکشنز کے لیے قابلِ اعتماد اضافی CA سرٹیفکیٹ (PEM)۔ |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Traffic Inspector کے رِنگ بفر میں محفوظ کیپچر شدہ درخواستوں کی زیادہ سے زیادہ تعداد۔ |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | تراشے جانے سے پہلے کیپچر شدہ درخواست/جواب کی باڈی کا زیادہ سے زیادہ سائز (KB)۔ |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Traffic Inspector کے HTTP پراکسی کے لیے مقامی پورٹ۔ |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | بوٹ پر انسپکٹر HTTP پراکسی خودکار طور پر شروع کریں۔ |
| `INSPECTOR_TLS_INTERCEPT` | `false` | `src/lib/inspector/captureState.ts` | کیپچر شدہ HTTPS ٹریفک کے لیے TLS انٹرسیپشن (MITM) فعال کریں۔ |
| `INSPECTOR_LLM_HOSTS_EXTRA` | _(غیر سیٹ شدہ)_ | `src/lib/inspector/captureState.ts` | اضافی ہوسٹ نام (کوما سے علیحدہ) جنہیں کیپچر کے لیے LLM اینڈ پوائنٹس سمجھا جائے گا۔ |
| `INSPECTOR_MASK_SECRETS` | `true` | `src/mitm/inspector/buffer.ts` | کیپچر شدہ ٹریفک میں راز (تصدیقی ہیڈرز / API کلیدیں) چھپائیں۔ |
| `INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES` | `30` | `src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts` | سسٹم پراکسی گارڈ کے OS پراکسی ترتیبات کو خودکار طور پر واپس تبدیل کرنے سے پہلے کے منٹ۔ |
| `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(خودکار)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | انسپکٹر میں داخلی کیپچر انجیسٹ کی توثیق کرنے والا ٹوکن۔ |
| `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Playground کے موازنہ موڈ میں ساتھ ساتھ دکھائے جانے والے کالمز کی زیادہ سے زیادہ تعداد۔ |
| `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(سیٹ نہیں)_ | `src/app/(dashboard)/dashboard/playground/` | Playground کی 'پرامپٹ بہتر بنائیں' کارروائی کے لیے ڈیفالٹ ماڈل (سیٹ نہ ہونے پر فعال ماڈل استعمال کیا جاتا ہے)۔ |
| `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Bifrost سائڈکار پراکسی کے لیے مرکزی کِل سوئچ۔ `0` پر سیٹ ہونے کی صورت میں، روٹ `X-Bifrost-Killswitch` ہیڈر کے ساتھ 503 لوٹاتا ہے اور آپریٹر کو TS پاتھ پر بھیج دیا جاتا ہے۔ سائڈکار کو دوبارہ تعینات کیے بغیر غیر فعال کرنے کے لیے استعمال کریں (tier-1 راؤٹر واقعہ، کلید کی تبدیلی)۔ |
| `BIFROST_BASE_URL` | _(سیٹ نہیں)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | سیٹ ہونے پر، Bifrost سائڈکار پراکسی روٹ `/v1/chat/completions` ٹریفک کو TS ریلے ہینڈلر کے بجائے اس Go گیٹ وے پر فارورڈ کرتا ہے۔ سیٹ نہ ہو → فال بیک کے ساتھ 503۔ آخر میں موجود سلیش ہٹا دیا جاتا ہے۔ |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | وہ پورٹ جس سے زیرِ نگرانی Bifrost ایمبیڈڈ سروس (`127.0.0.1:`) منسلک ہوتی ہے، جب OmniRoute، Bifrost سائڈکار کے لائف سائیکل کا انتظام کرتا ہے۔ ڈیفالٹ `8080` ہے۔ |
| `BIFROST_API_KEY` | _(سیٹ نہیں)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Bifrost گیٹ وے کے لیے API کلید (`Authorization: Bearer ...` کے طور پر بھیجی جاتی ہے)۔ اگر سیٹ نہ ہو تو روٹ توقع کرتا ہے کہ درخواست میں ایک درست OmniRoute API کلید موجود ہو؛ یہ کلید صرف گیٹ وے کی جانب توثیق کے لیے ہے۔ |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | true ہونے پر، Bifrost سائڈکار روٹ TS اسٹریمنگ ایگزیکیوٹر کے بجائے گیٹ وے کے ذریعے SSE سے جوابات واپس اسٹریم کرتا ہے۔ گیٹ وے کے ذریعے نان اسٹریمنگ JSON جوابات کو لازمی بنانے کے لیے اسے `0` پر سیٹ کریں۔ |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Bifrost گیٹ وے پر پراکسی کرتے وقت فی درخواست ٹائم آؤٹ (ms)۔ ٹائم آؤٹ ہونے پر روٹ `X-Bifrost-Fallback` ہیڈر کے ذریعے TS ریلے پاتھ لوٹاتا ہے۔ |
| `OMNIROUTE_BIFROST_KEY` | _(سیٹ نہیں)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | `BIFROST_API_KEY` کا عرف (ان اسکرپٹس کے ذریعے استعمال ہوتا ہے جو env کو `OMNIROUTE_*` کے ذریعے پڑھتے ہیں)۔ دونوں سیٹ ہونے پر `BIFROST_API_KEY` کو ترجیح حاصل ہوتی ہے۔ |
| `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | `/api/v1/relay/chat/completions` کے لیے ریلے بیک اینڈ: `ts \| bifrost \| auto`۔ `ts` = TypeScript ریلے (جب Bifrost کنفیگر نہ ہو تو ڈیفالٹ)؛ `auto` اس وقت Bifrost منتخب کرتا ہے جب `BIFROST_BASE_URL` سیٹ ہو اور `BIFROST_ENABLED` ≠ `0` ہو، اور سائڈکار تک رسائی نہ ہونے کی صورت میں خودکار TS فال بیک استعمال کرتا ہے؛ `bifrost` لازماً Bifrost استعمال کرتا ہے (سخت، کوئی فال بیک نہیں)۔ توثیق/شرح کی حد/injection-guard/اجازت فہرست ہمیشہ پہلے Next روٹ میں چلتے ہیں۔ جوابات میں `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason` شامل ہوتے ہیں۔ |
| `RELAY_ROUTING_BACKEND` | _(غیر سیٹ شدہ)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | `OMNIROUTE_RELAY_BACKEND` کے لیے قابلِ قبول عرف (وہی `ts \| bifrost \| auto` اقدار)۔ جب دونوں سیٹ ہوں تو `OMNIROUTE_RELAY_BACKEND` کو ترجیح حاصل ہوتی ہے۔ |
| `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | `auto` موڈ میں Bifrost sidecar ہاپ ناکام ہونے کے بعد کول ڈاؤن (ms)، جس کے دوران relay دوبارہ sidecar کی کوشش کرنے سے پہلے براہِ راست TS پاتھ پر روٹ کرتا ہے، پھر دوبارہ جانچتا ہے۔ `0` اسے غیر فعال کر دیتا ہے۔ صرف اس وقت لاگو ہوتا ہے جب `OMNIROUTE_RELAY_BACKEND=auto` ہو۔ |
| `OMNIROUTE_TLS_CERT` | _(غیر سیٹ شدہ)_ | `bin/cli/commands/serve.mjs` | `omniroute serve` کو HTTPS پر پیش کرنے کے لیے PEM TLS سرٹیفکیٹ کا پاتھ (`--tls-cert` کے مساوی)۔ اسے `OMNIROUTE_TLS_KEY` کے ساتھ جوڑنا ضروری ہے؛ اس کے بعد standalone سرور اسی listener پر TLS ختم کرتا ہے (`wss://` بغیر کسی تبدیلی کے کام کرتا ہے)۔ غیر سیٹ شدہ → سادہ HTTP۔ صرف cert/key میں سے ایک فراہم کرنے یا ناقابلِ مطالعہ پاتھ دینے پر تنبیہ لاگ ہوتی ہے اور HTTP برقرار رہتا ہے۔ |
| `OMNIROUTE_TLS_KEY` | _(غیر سیٹ شدہ)_ | `bin/cli/commands/serve.mjs` | `omniroute serve` کے HTTPS کے لیے PEM TLS نجی کلید کا پاتھ (`--tls-key` کے مساوی)۔ اسے `OMNIROUTE_TLS_CERT` کے ساتھ جوڑنا ضروری ہے۔ `OMNIROUTE_TLS_CERT` دیکھیں۔ |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | `/api/local/*` روٹس کے لیے مرکزی سوئچ۔ غیر سیٹ شدہ یا `0` ہونے پر، تمام `/api/local/*` روٹس production میں 503 واپس کرتے ہیں۔ Redis launcher اور اسی نوعیت کے 1-click مقامی سروس starters کو فعال کرنے کے لیے non-loopback deployments میں اسے `1` ہونا ضروری ہے۔ `isLocalOnlyPath()` روٹ گارڈ درجہ بندی (`src/server/authz/routeGuard.ts` میں `LOCAL_ONLY_API_PREFIXES`) کے ساتھ اضافی حفاظتی اقدام۔ |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(غیر سیٹ شدہ)_ | `src/lib/security/localEndpoints.ts` | ایسے `/api/local/*` callers کے لیے Bearer token جو loopback پر نہیں ہیں (مثلاً desktop app)۔ سیٹ ہونے پر، non-loopback IPs سے آنے والی درخواستوں میں `Authorization: Bearer ` ہونا ضروری ہے۔ non-loopback deployments میں `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 کا اندرونی port 6379 ہی رہتا ہے۔ |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | وہ host interface جس پر 1-click Redis launcher شائع ہوتا ہے۔ launcher Redis کو بغیر password کے شروع کرتا ہے، اس لیے `0.0.0.0` سے bind کرنے پر آپ کے LAN کے ہر host کو غیر توثیق شدہ Redis تک رسائی مل جاتی ہے — اسے صرف اسی صورت میں وسیع کریں جب آپ خود instance پر password بھی سیٹ کریں۔ |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | وہ host interface جس پر docker-compose، Redis sidecar شائع کرتا ہے (#9286)۔ compose Redis، `requirepass` کے بغیر چلتا ہے؛ app containers compose network (`redis:6379`) کے ذریعے اس تک پہنچتے ہیں — شائع کردہ port صرف host-side tooling کے لیے موجود ہے۔ `0.0.0.0` پورے LAN پر غیر توثیق شدہ Redis ظاہر کر دیتا ہے۔ |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | compose کے Redis sidecar کے لیے ہوسٹ پورٹ۔ |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | وہ ہوسٹ انٹرفیس جس پر docker-compose ایپ کی اپنی dashboard/API/live-WS پورٹس شائع کرتا ہے (#12568)۔ چونکہ `.env.example` میں `REQUIRE_API_KEY=false` بطور ڈیفالٹ فراہم کیا جاتا ہے، اس لیے `0.0.0.0` گمنام `/v1` LLM پراکسی کو پورے LAN/WAN کے سامنے ظاہر کر دیتا ہے — اسے صرف تب وسیع کریں جب `REQUIRE_API_KEY=true` ہو یا سامنے موجود reverse proxy اپنی توثیق نافذ کرتا ہو۔ |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | وہ ہوسٹ انٹرفیس جس پر docker-compose، Qdrant میموری sidecar شائع کرتا ہے (#12578)۔ LAN کے سامنے ظاہر ہونے سے متعلق وہی منطق لاگو ہوتی ہے جو `REDIS_BIND_HOST` کے لیے ہے۔ |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | وہ ہوسٹ انٹرفیس جس پر docker-compose، Bifrost راؤٹر sidecar شائع کرتا ہے (#12578)۔ LAN کے سامنے ظاہر ہونے سے متعلق وہی منطق لاگو ہوتی ہے جو `REDIS_BIND_HOST` کے لیے ہے۔ |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | ہر OmniRoute Redis کلید (ریٹ لمیٹر، توثیقی کیش، کوٹا اسٹور، وارم اپ سرکٹ بریکر) پر لاگو ہونے والا namespace سابقہ۔ جب Redis انسٹینس دوسری ایپس کے ساتھ مشترک ہو تو یہ کلیدی ٹکراؤ کو روکتا ہے (#11042)۔ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(غیر مقرر — طریقۂ کار غیر فعال)_ | `src/lib/api/internalServiceAuth.ts` | شناخت برقرار رکھنے والی داخلی REST منتقلیوں کے لیے مشترکہ راز (#9260): دوسرے مقامی OmniRoute روٹس کو کال کرنے والے OmniRoute اجزا اسے `x-omniroute-internal-service-token` کے طور پر بھیجتے ہیں تاکہ اصل کالر کی شناخت برقرار رہے۔ `timingSafeEqual` کے ساتھ موازنہ کیا جاتا ہے۔ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(غیر مقرر)_ | `src/lib/api/internalServiceAuth.ts` | داخلی سروس ٹوکن کی secret-file قسم: ایسی فائل کا راستہ جس کا تراشا ہوا متن ٹوکن ہو۔ اس سے صرف اس وقت رجوع کیا جاتا ہے جب inline متغیر غیر مقرر ہو۔ |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | dashboard کی فراہم کنندگان کی فہرست کو OpenRouter کے ہفتہ وار درجہ بندی کے اعداد و شمار سے بہتر بنائیں (#9324)۔ بطور ڈیفالٹ فعال؛ پس منظر کی fetch کو مکمل طور پر چھوڑنے کے لیے `false` مقرر کریں (non-blocking، کبھی مہلک نہیں)۔ |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24 گھنٹے) | `src/lib/catalog/openrouterProviderStats.ts` | OpenRouter فراہم کنندہ-اعداد و شمار کے snapshot کے لیے cache TTL، ملی سیکنڈز میں۔ |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | 1-click Redis لانچر کے ذریعے استعمال ہونے والی Redis image۔ ضرورت کے مطابق اسے `redis:8-alpine` یا کسی نجی registry mirror سے override کریں۔ |
| `QDRANT_HOST` | `qdrant` | _(اختیاری کلسٹر پروفائل)_ | جب `--profile memory` فعال ہو تو Qdrant سائڈکار کا ہوسٹ نیم۔ ڈیفالٹ اِن نیٹ ورک qdrant سروس نام کی طرف اشارہ کرتا ہے؛ بیرونی ڈیپلائمنٹ کے لیے اسے اوور رائیڈ کریں۔ کوڈ میں صرف اس وقت استعمال ہوتا ہے جب `qdrantEnabled` کی قدر `true` ہو (`src/lib/memory/vectorStore.ts:108`)۔ |
| `QDRANT_PORT` | `6333` | _(اختیاری کلسٹر پروفائل)_ | Qdrant سائڈکار کا REST پورٹ۔ |
| `QDRANT_GRPC_PORT` | `6334` | _(اختیاری کلسٹر پروفائل)_ | Qdrant سائڈکار کا gRPC پورٹ۔ وہ کلائنٹ لائبریریاں اسے استعمال کرتی ہیں جو اسٹریمنگ آپریشنز کے لیے REST پر gRPC کو ترجیح دیتی ہیں۔ |
| `QDRANT_API_KEY` | _(غیر متعین)_ | _(اختیاری کلسٹر پروفائل)_ | Qdrant Cloud یا کسی توثیق شدہ آن پریمس انسٹینس کے لیے اختیاری API کلید۔ خالی → کوئی `api-key` ہیڈر نہیں بھیجا جاتا۔ |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(اختیاری کلسٹر پروفائل)_ | OmniRoute کی گفتگو کی میموری ایمبیڈنگز کے لیے کلیکشن کا نام۔ پہلی بار چلانے پر `QDRANT_VECTOR_SIZE` ابعاد کے ساتھ بنایا جاتا ہے۔ |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(اختیاری کلسٹر پروفائل)_ | Qdrant کلیکشن کے میٹا ڈیٹا میں ریکارڈ کیا جانے والا ڈیفالٹ ایمبیڈنگ ماڈل نام۔ اصل ایمبیڈنگز اس پرووائیڈر کے ذریعے تیار کی جاتی ہیں جس کی طرف OmniRoute کی ترتیبات میں `embeddingModel` فیلڈ اشارہ کرتی ہے۔ |
| `QDRANT_VECTOR_SIZE` | `1536` | _(اختیاری کلسٹر پروفائل)_ | ایمبیڈنگ ویکٹر کی بُعدی مقدار۔ یہ اس ماڈل سے مماثل ہونی چاہیے جس سے آپ ایمبیڈ کرتے ہیں (text-embedding-3-small → 1536؛ ada-002 → 1536؛ nomic-embed-text → 768)۔ |
| `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(اختیاری کلسٹر پروفائل)_ | HNSW انڈیکس کی تعمیر کے وقت کی درستگی۔ زیادہ قدر = سست تعمیر، تیز تلاش۔ |
| `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | آپریٹر کی قابلِ ترتیب اکاؤنٹ روٹیشن کے لیے ماسٹر سوئچ۔ جب `false` ہو تو ذیل کی `OMNIROUTE_ROTATE_*` کلاسز میں سے کوئی بھی اکاؤنٹ فال بیک کو متحرک نہیں کرتی (ماسٹر آف حالت ڈیفالٹ طور پر فعال 429/500/502 کلاسز کو بھی بلاک کرتی ہے)۔ یہ کسی نگران فرنٹ اینڈ (مثلاً VibeProxy ڈیسک ٹاپ ایپ) کو اپنے روٹیشن قواعد بیک اینڈ کے اکاؤنٹ فال بیک انجن پر منعکس کرنے دیتا ہے۔ |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | جب اپ اسٹریم ری سیٹ کا کوئی واضح اشارہ نہ دے تو شرح کی حد سے متاثرہ اکاؤنٹ پر لاگو ہونے والا کول ڈاؤن (سیکنڈز)۔ `0` = مقررہ اوور رائیڈ کے بجائے انجن کا ڈیفالٹ کول ڈاؤن استعمال کریں۔ |
| `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | فرنٹ اینڈ کی "ری سیٹ وقت کے بغیر شرح کی حد سے متاثر کے طور پر ٹیگ نہ کریں" ترجیح کا عکس۔ |
| `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | `429` خرابیوں کے لیے فی اسٹیٹس فال بیک فعال کرتا ہے۔ جب `false` ہو (اور `OMNIROUTE_ROTATION_ENABLED=true` ہو)، تو `429` اکاؤنٹ کی روٹیشن کو مزید متحرک نہیں کرتا اور اس کے بجائے کلائنٹ کو واپس بھیج دیا جاتا ہے۔ |
| `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | اکاؤنٹ کی روٹیشن سے پہلے `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` کے اندر درکار `429` خرابیوں کی تعداد۔ `1` (ڈیفالٹ) تاریخی رویے کو برقرار رکھتے ہوئے فوراً روٹیشن کرتا ہے۔ |
| `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | متحرک دورانیہ (سیکنڈز) جس کے دوران `429` خرابیوں کو `OMNIROUTE_ROTATE_429_THRESHOLD` کے لیے شمار کیا جاتا ہے۔ |
| `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | `5xx` سرور خرابیوں (`502` کے علاوہ، جس کی اپنی کلاس ہے) کے لیے فی اسٹیٹس فال بیک فعال کرتا ہے۔ جب `false` ہو، تو یہ خرابیاں اکاؤنٹ کی روٹیشن کو مزید متحرک نہیں کرتیں۔ |
| `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | اکاؤنٹ کی روٹیشن سے پہلے `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` کے اندر درکار `5xx` خرابیوں کی تعداد۔ `1` (ڈیفالٹ) فوراً روٹیشن کرتا ہے۔ |
| `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | متحرک دورانیہ (سیکنڈز) جس کے دوران `5xx` خرابیوں کو `OMNIROUTE_ROTATE_500_THRESHOLD` کے لیے شمار کیا جاتا ہے۔ |
| `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | `502` (خراب گیٹ وے) خرابیوں کے لیے فی اسٹیٹس فال بیک فعال کرتا ہے۔ جب `false` ہو، تو `502` خرابیاں اکاؤنٹ کی روٹیشن کو مزید متحرک نہیں کرتیں۔ |
| `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | اکاؤنٹ کی روٹیشن سے پہلے `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` کے اندر درکار `502` خرابیوں کی تعداد۔ `1` (ڈیفالٹ) فوراً روٹیشن کرتا ہے۔ |
| `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | متحرک دورانیہ (سیکنڈز) جس کے دوران `502` خرابیوں کو `OMNIROUTE_ROTATE_502_THRESHOLD` کے لیے شمار کیا جاتا ہے۔ |
| `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | اختیاری فعال کاری (بطورِ ڈیفالٹ OFF): جب `true` ہو تو ایک سادہ `400` (خراب درخواست) بھی اکاؤنٹ کی تبدیلی کو متحرک کرتا ہے۔ یہ صرف اضافی طرزِ عمل ہے — یہ انجن کے موجودہ طرزِ عمل کو کبھی نہیں روکتا، جس کے تحت شرح کی حد/کوٹے کا متن رکھنے والا `400` اس فلیگ سے قطع نظر پھر بھی اگلے اکاؤنٹ پر منتقل ہو جاتا ہے۔ |
| `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | اکاؤنٹ تبدیل کیے جانے سے پہلے `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` کے اندر درکار `400` خرابیوں کی تعداد (صرف اس وقت دیکھی جاتی ہے جب `OMNIROUTE_ROTATE_ON_400=true` ہو)۔ |
| `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | متحرک دورانیہ (سیکنڈز میں) جس کے دوران `400` خرابیوں کو `OMNIROUTE_ROTATE_400_THRESHOLD` کی حد کے لیے شمار کیا جاتا ہے۔ |
### Claude وارم اَپ شیڈیولر
اختیاری طور پر فعال کردہ Anthropic OAuth کنکشنز کے لیے cron سے چلنے والا وارم اَپ، تاکہ 5 گھنٹے کی شرح کی حد کی ونڈو پہلی حقیقی درخواست کے بجائے ایک معمولی شیڈیول شدہ درخواست کے ذریعے کھولی جائے (#8848)۔ شیڈیولر اس وقت تک بند رہتا ہے جب تک `OMNIROUTE_WARMUP_ENABLED` کی قدر truthy **اور** کنکشن کو `settings.claudeWarmup.connections` میں نشان زد نہ کیا گیا ہو؛ کنکشنز کی خالی فہرست کا مطلب ہے کہ env var فعال ہونے کے باوجود کسی چیز کو وارم اَپ نہیں کیا جائے گا۔
| متغیر | ڈیفالٹ | ماخذ فائل | تفصیل |
| ------------------------------ | --------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_WARMUP_ENABLED` | _(سیٹ نہیں → بند)_ | `src/lib/warmupScheduler.ts` | وارم اَپ شیڈیولر کا مرکزی سوئچ۔ `1`/`true`/`yes`/`on` قبول کرتا ہے (حروف کی صورت سے غیر حساس، اضافی خالی جگہیں حذف کرنے کے بعد)۔ کوئی دوسری قدر، یا قدر سیٹ نہ ہونے کی صورت میں، شیڈیولر بند رہتا ہے۔ |
| `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | وارم اَپ ٹِک کے لیے پانچ فیلڈز پر مشتمل cron ایکسپریشن، جس کی جانچ میزبان کی گھڑی سے قطع نظر `America/Los_Angeles` (Anthropic کا ری سیٹ ٹائم زون) میں کی جاتی ہے۔ |
| `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | ہر ٹِک پر متوازی طور پر وارم اَپ کیے جانے والے کنکشنز کی تعداد۔ اسے `1`-`10` تک محدود کیا جاتا ہے؛ غیر عددی قدر کی صورت میں واپس `3` استعمال ہوتا ہے۔ |
| `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | وارم اَپ درخواست کے لیے استعمال ہونے والا ماڈل۔ اسے صرف تب تبدیل کریں جب ڈیفالٹ آپ کے پلان میں دستیاب نہ ہو؛ ایسا سب سے سستا ماڈل منتخب کریں جو پھر بھی ونڈو کھول سکے۔ |
### براؤزر لاگ اِن VNC سیشنز اور Data-Dir عرف
انٹرایکٹو براؤزر لاگ اِن اسناد حاصل کرنے (`/api/vnc-session`) کے لیے کنٹینرائزڈ Chromium+VNC، نیز ایک سابقہ `DATA_DIR` عرف۔ سب اختیاری ہیں — VNC ڈیفالٹس بنڈل شدہ `omniroute-vnc-chromium:local` امیج کو ہدف بناتے ہیں اور صرف حسبِ ضرورت کنٹینر امیج، پورٹس، یا لائف سائیکل کی ترتیب کے لیے تبدیل کیے جاتے ہیں۔
| متغیر | طے شدہ قدر | ماخذ فائل | وضاحت |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Chromium+VNC لاگ اِن کنٹینر کے لیے Docker امیج ٹیگ۔ `docker/vnc-browser/chromium` کو بلڈ کریں یا اسے کسی حسبِ ضرورت امیج کی طرف متعین کریں۔ |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | VNC کنٹینر لانچ کرنے کے لیے استعمال ہونے والی کنٹینر رَن ٹائم بائنری (مثلاً اسے `podman` پر سیٹ کریں)۔ |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر ظاہر کی گئی VNC/noVNC پورٹ۔ |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر Chrome DevTools Protocol پورٹ۔ |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر Chromium پروفائل ڈائریکٹری کا پاتھ۔ |
| `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | محفوظ رکھے گئے براؤزر لاگ اِن پروفائلز پر مشتمل ہوسٹ ڈائریکٹری۔ |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 منٹ) | `src/lib/vncSession/manifest.ts` | وہ عدم فعالیت ٹائم آؤٹ (ms) جس کے بعد غیر فعال VNC سیشن ختم کر دیا جاتا ہے۔ |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 منٹ) | `src/lib/vncSession/manifest.ts` | ایک VNC سیشن کی مدتِ حیات کی قطعی زیادہ سے زیادہ حد (ms)۔ |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | بیک وقت VNC سیشنز کی زیادہ سے زیادہ تعداد۔ |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | کنٹینرائزڈ براؤزر کے CDP کے لیے تیار ہونے کے انتظار کا ٹائم آؤٹ (ms)۔ |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | لاگ اِن مکمل ہونے کے بعد حاصل شدہ سیشن/کوکیز اکٹھی کرنے کا ٹائم آؤٹ (ms)۔ |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | کنٹینرائزڈ Chromium کو دیے جانے والے اضافی کمانڈ لائن فلیگز۔ |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | طے شدہ برج کے بجائے مخصوص Docker نیٹ ورک، جس میں VNC لاگ اِن کنٹینر شامل ہوتا ہے (#12571)، تاکہ دیگر ساتھی کنٹینرز اس کی CDP برج پورٹ تک رسائی حاصل نہ کر سکیں۔ |
| `VIBEPROXY_DATA_DIR` | _(غیر متعین)_ | `open-sse/services/notionThreadSessions.ts` | `DATA_DIR` کا **متروک عرف**، جسے صرف اس وقت چیک کیا جاتا ہے جب `DATA_DIR` اور `OMNIROUTE_DATA_DIR` دونوں غیر متعین ہوں۔ یہ Notion ویب تھریڈ سیشن کیش (`/notion-web-thread-sessions.json`) کا مقام متعین کرتا ہے۔ |
---
## 26. ٹیسٹ اور E2E ہارنس
`scripts/dev/run-next-playwright.mjs`، `scripts/dev/smoke-electron-packaged.mjs`،
`scripts/dev/run-ecosystem-tests.mjs`، اور `scripts/build/uninstall.mjs` کے ذریعے استعمال ہوتا ہے۔ پروڈکشن تعیناتیوں میں ذیل کی ہر
قدر کو غیر مقرر رہنے دیں۔
| متغیر | ڈیفالٹ | سورس فائل | تفصیل |
| -------------------------------------- | ------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | Playwright رنر کے لیے E2E بوٹسٹریپ موڈ (`auth`، `fresh`، `reuse`)۔ |
| `OMNIROUTE_E2E_PASSWORD` | `INITIAL_PASSWORD` استعمال ہوگا | `scripts/dev/run-next-playwright.mjs` | Playwright ماحول میں داخل کیا جانے والا ایڈمن پاس ورڈ۔ |
| `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Playwright رنز کے دوران مقامی ہیلتھ چیک پول کو غیر فعال کریں۔ |
| `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | ٹیسٹس کے دوران OAuth ٹوکن ہیلتھ چیک لوپ کو غیر فعال کریں۔ |
| `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(غیر مقرر)_ | `src/lib/tokenHealthCheck.ts` | کوما سے علیحدہ کردہ پرووائیڈرز، جنہیں پیشگی ٹوکن ریفریش سویپ سے خارج کیا گیا ہو (مثلاً `codex,openai`)۔ ہیلتھ چیک کو مکمل طور پر غیر فعال کرنے کا ہدفی متبادل — مختصر TTL والے پرووائیڈرز ریفریش ہوتے رہتے ہیں، جبکہ کیسکیڈ پرووائیڈرز صرف ردعمل پر مبنی رہتے ہیں۔ |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Playwright کے معیاری آؤٹ پٹ میں ہیلتھ چیک کے غیر ضروری پیغامات کو خاموش کریں۔ |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Playwright شروع ہونے سے پہلے Next.js پروڈکشن بلڈ کو چھوڑ دیں (CI آپٹیمائزیشن)۔ |
| `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | OmniRoute اَن انسٹال ہُک کو چھوڑ دیں (CI کے ذریعے `node_modules` کو برقرار رکھنے کے لیے استعمال ہوتا ہے)۔ |
| `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | ایکوسسٹم/پروٹوکول ٹیسٹس چلانے سے پہلے سرور کے صحت مند ہونے کے انتظار کا وقت (ms)۔ |
| `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | وہ URL جس پر Electron اسموک ہارنس پیکیج شدہ ایپ کی سروس دستیاب ہونے کی توقع کرتا ہے۔ |
| `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | اسموک ہارنس کے کوشش ترک کرنے سے پہلے کا کُل ٹائم آؤٹ (ms)۔ |
| `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | صفحہ لوڈ ہونے کے بعد استحکام کا وقفہ (ms)۔ |
| `ELECTRON_SMOKE_APP_EXECUTABLE` | _(خودکار)_ | `scripts/dev/smoke-electron-packaged.mjs` | پیکیج شدہ Electron ایگزیکیوٹیبل کا واضح پاتھ۔ |
| `ELECTRON_SMOKE_DATA_DIR` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | Electron اسموک رن کے لیے ڈیٹا ڈائریکٹری۔ |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | عمل مکمل ہونے کے بعد اسموک ڈیٹا ڈائریکٹری محفوظ رکھنے کے لیے `1` مقرر کریں۔ |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | عمل کے دوران Electron لاگز کو stdout پر اسٹریم کرنے کے لیے `1` مقرر کریں۔ |
| `ELECTRON_SMOKE_COLD_RESTART` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | #7592: اسی ڈیٹا ڈائریکٹری کے ساتھ دوبارہ لانچ کریں اور تصدیق کریں کہ دوسرا لانچ مقامی SQLite ڈرائیور منتخب کرتا ہے۔ |
| `CLI_DEVIN_BIN` | _(PATH تلاش)_ | `open-sse/executors/devin-cli.ts` | Devin CLI بائنری پاتھ کو اوور رائیڈ کریں۔ |
### دستاویزات کے ترجمے کی پائپ لائن
`scripts/i18n/run-translation.mjs` (`npm run i18n:run` کمانڈ) کے ذریعے استعمال ہوتی ہے۔
پانچوں ویری ایبلز بطور ڈیفالٹ غیر متعین ہیں — انہیں `.env` میں صرف ان مشینوں پر مقرر کریں
جنہیں دستاویزات کا مترجم چلانے کے قابل ہونا چاہیے۔
| ویری ایبل | ڈیفالٹ | ماخذ فائل | وضاحت |
| ----------------------------------- | ------------- | ---------------------------------- | ------------------------------------------------------------ |
| `OMNIROUTE_TRANSLATION_API_URL` | _(غیر متعین)_ | `scripts/i18n/run-translation.mjs` | ترجمہ بیک اینڈ کے لیے OpenAI سے ہم آہنگ بنیادی URL۔ |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(غیر متعین)_ | `scripts/i18n/run-translation.mjs` | ترجمہ بیک اینڈ کے لیے بیئرر ٹوکن (کبھی لاگ نہیں کیا جاتا)۔ |
| `OMNIROUTE_TRANSLATION_MODEL` | _(غیر متعین)_ | `scripts/i18n/run-translation.mjs` | ماڈل ID، مثلاً `gpt-4o-mini` یا `cx/gpt-5.4-mini`۔ |
| `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | ہر درخواست کے لیے ٹائم آؤٹ، ملی سیکنڈز میں۔ |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | متعدد فائلوں / لوکیلز پر چلتے وقت متوازی ترجمے کی درخواستیں۔ |
---
## 27. ریڈار فیڈ (سیلف ہوسٹنگ)
اختیاری ایڈ آن جس تک رسائی `RADAR_ENABLED` فیچر فلیگ کے ذریعے محدود ہے (بطور ڈیفالٹ بند — یہ فیچر
فلیگ Settings/DB کے ذریعے تبدیل کیا جاتا ہے، نہ کہ کسی env var کے ذریعے؛ دیکھیے
[docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off))۔
ذیل کے پہلے چار متغیرات سیلف ہوسٹڈ یا فورک شدہ فیڈ اور
سپورٹر کلید کے طریقۂ کار کے لیے اختیاری اوور رائیڈز ہیں۔ پانچواں، `RADAR_ADMIN_URL`، مالک کے
نجی آپریشنز پینل کا ایک علیحدہ لنک ہے جس کی کوئی ڈیفالٹ قدر نہیں۔ مکمل
ماڈیول دستاویز اور اس کی
[شروع سے آخر تک فعالیت اور رہنمائی یافتہ سیٹ اپ کی ترتیب](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup) کے لیے [docs/frameworks/RADAR.md](../frameworks/RADAR.md) دیکھیے۔
عمومی Home/Changelog اعلانات ریڈر کسی ماحول
کے متغیر کے ذریعے کنفیگر نہیں کیا جاتا اور `RADAR_ENABLED` فیچر فلیگ پر منحصر نہیں ہے۔ یہ
صرف GET کے ذریعے `src/shared/utils/releaseNotes.ts` میں بیان کردہ عوامی ریپوزٹری کا
`news.json` URL پڑھتا ہے؛ برخاستگی IDs براؤزر کی مقامی اسٹوریج میں برقرار رہتی ہیں۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | علیحدہ دستخط شدہ کیٹلاگ، ریفرلز، سپورٹر آفرز، اور Intel فیڈز کے ذریعے مشترکہ طور پر استعمال ہونے والا بنیادی URL۔ سیلف ہوسٹڈ یا فورک شدہ سروس کی طرف اشارہ کرنے کے لیے اسے اوور رائیڈ کریں۔ |
| `RADAR_FEED_PUBKEY` | _(پن شدہ ڈیفالٹ کلید)_ | `src/lib/radar/pinnedKeys.ts` | حسبِ ضرورت فیڈ سے حاصل ہونے والے فیڈ دستخطوں کی تصدیق کے لیے استعمال ہونے والی Ed25519 عوامی کلید (base64-DER SPKI یا PEM)۔ |
| `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | وہ URL جسے ڈیش بورڈ کا "میں ایک معاون ہوں" بٹن کھولتا ہے (GitHub OAuth سپورٹر کلید کے حصول کا طریقۂ کار)۔ |
| `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | وہ URL جسے ڈیش بورڈ کا "پروجیکٹ کی معاونت کریں" بٹن کھولتا ہے (ادائیگی/منصوبوں کا صفحہ)۔ |
| `RADAR_ADMIN_URL` | _(غیر متعین)_ | `src/lib/radar/links.ts` | صرف مالک کے لیے نجی آپریشنز پینل کا لنک۔ HTTP لوپ بیک SSH فارورڈ کے علاوہ HTTPS درکار ہے؛ غیر متعین یا غلط اقدار کوئی نیویگیشن آئٹم نہیں بناتیں۔ |
---
## آڈٹ: ہٹائے گئے / غیر فعال متغیرات
درج ذیل متغیرات `.env.example` کے پچھلے ورژنز میں موجود تھے، لیکن موجودہ کوڈ بیس میں ان کے **کوئی رن ٹائم حوالہ جات نہیں ہیں**۔ انہیں ہٹا دیا گیا ہے:
| متغیر | وجہ |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `STORAGE_DRIVER=sqlite` | کسی بھی سورس فائل کے ذریعے کبھی نہیں پڑھا جاتا۔ SQLite واحد معاونت یافتہ ڈرائیور ہے — انتخاب کی ضرورت نہیں۔ |
| `INSTANCE_NAME=omniroute` | پرانی دستاویزات/env ٹیمپلیٹس میں موجود ہے، لیکن رن ٹائم پر استعمال نہیں ہوتا۔ ممکن ہے مستقبل کے کسی ملٹی انسٹینس فیچر میں واپس آ جائے۔ |
| `SQLITE_MAX_SIZE_MB=2048` | سورس کوڈ میں اس کا کوئی حوالہ نہیں۔ ڈیٹابیس کے سائز کو مصنوعی طور پر محدود نہیں کیا جاتا۔ |
| `SQLITE_CLEAN_LEGACY_FILES=true` | سورس کوڈ میں اس کا کوئی حوالہ نہیں۔ غالباً لیگیسی صفائی ہٹا دی گئی تھی۔ |
| `CLI_ROO_BIN` | `src/shared/services/cliRuntime.ts` میں رجسٹرڈ نہیں ہے۔ |
| `CLI_KIMI_CODING_BIN` | `src/shared/services/cliRuntime.ts` میں رجسٹرڈ نہیں ہے (Kimi Coding ایک CLI بائنری نہیں بلکہ OAuth استعمال کرتا ہے)۔ |
| `IFLOW_OAUTH_CLIENT_ID` / `IFLOW_OAUTH_CLIENT_SECRET` | سورس کوڈ میں کہیں بھی ان کا حوالہ نہیں ہے۔ |
| `CEREBRAS_API_KEY` / `COHERE_API_KEY` / `FIREWORKS_API_KEY` / `GROQ_API_KEY` / `MISTRAL_API_KEY` / `NEBIUS_API_KEY` / `PERPLEXITY_API_KEY` / `TOGETHER_API_KEY` / `XAI_API_KEY` | v3.8.0 میں ہٹا دیے گئے۔ رن ٹائم اب ان env متغیرات کو نہیں پڑھتا — اسناد Dashboard / `data/provider-credentials.json` / مرموز 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` میں شامل ہے — اس کے ٹوگل کا کوئی اثر نہیں ہوتا۔ |
| `QIANFAN_API_KEY` | v3.8.0 میں دیگر غیر استعمال شدہ فراہم کنندہ API کلید اسٹبس کے ساتھ ہٹا دیا گیا۔ |
### ڈیفالٹ ویلیو کی اصلاحات
| متغیر | پرانی `.env.example` ویلیو | اصل کوڈ ڈیفالٹ | اصلاح |
| ------------------------- | -------------------------- | -------------- | ---------------------------------------------------------------- |
| `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ گمراہ کن ویلیو ہٹا دی گئی؛ `7` کو بطور ڈیفالٹ دستاویز کیا گیا |
| `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ گمراہ کن ویلیو ہٹا دی گئی؛ `7` کو بطور ڈیفالٹ دستاویز کیا گیا |
### OpenCode کنفیگ کی دوبارہ تخلیق (حسبِ ضرورت ٹولنگ)
`opencode.json` کو دوبارہ تخلیق کرنے کے لیے `scripts/ad-hoc/regen-opencode-config.ts` کے ذریعے استعمال کیا جاتا ہے،
جس میں چلتے ہوئے OmniRoute انسٹینس سے حاصل کردہ درست `limit.context` اور `limit.output` ویلیوز شامل ہوتی ہیں۔
ان میں سے کوئی بھی معمول کے آپریشن کے لیے درکار نہیں — یہ اسکرپٹ صرف ڈویلپر ٹولنگ ہے۔
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| ------------------ | ------------------------ | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | `/v1/models` سے استفسار کرنے کے لیے OmniRoute انسٹینس کا بنیادی URL۔ |
| `OMNIROUTE_KEY` | _(غیر متعین)_ | `scripts/ad-hoc/regen-opencode-config.ts` | OmniRoute کے `/v1/models` اینڈ پوائنٹ سے تصدیق کے لیے API کلید۔ غیر متعین ہونے پر `OPENCODE_API_KEY` استعمال ہوتی ہے۔ |
| `OPENCODE_API_KEY` | _(غیر متعین)_ | `scripts/ad-hoc/regen-opencode-config.ts` | OpenCode طرز کی API کلید (`sk-...`) جو دوبارہ تخلیق کردہ `opencode.json` میں لکھی جاتی ہے۔ غیر متعین ہونے پر `OMNIROUTE_KEY` استعمال ہوتی ہے۔ |
### کمپریشن آف لائن ایویلیوایشن ہارنس (ایڈہاک ٹولنگ)
آف لائن کمپریشن ایویلیوایشن CLI، `scripts/compression-eval/index.ts`، کے ذریعے استعمال کیا جاتا ہے۔
معمول کے آپریشن کے لیے درکار نہیں — صرف ڈویلپر ٹولنگ کے لیے ہے۔
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| ---------------------------- | ----------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (خالی) | `scripts/compression-eval/index.ts` | آف لائن compression-eval CLI کے ذریعے استعمال کیے جانے والے فراہم کنندہ کے لیے آپریٹر کی فراہم کردہ JSON اسناد (`JSON.parse` کے ذریعے پارس کی جاتی ہیں)۔ ڈرائی رن کے لیے غیر متعین رہنے دیں۔ |
### VNC براؤزر سیشنز
براؤزر آٹومیشن فراہم کنندگان کے لیے Docker پر مبنی ہیڈلیس Chromium سیشنز کی تشکیل کے واسطے `src/lib/vncSession/manifest.ts` کے ذریعے استعمال کیا جاتا ہے۔ سب اختیاری ہیں — طے شدہ قدریں ذیل میں دکھائی گئی ہیں۔
| متغیر | طے شدہ قدر | ماخذ فائل | تفصیل |
| ------------------------------------- | ------------------------------ | ------------------------------------------- | ---------------------------------------------------------------------------------- |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | VNC کنٹینرز شروع کرنے کے لیے استعمال ہونے والی Docker بائنری کا راستہ۔ |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | VNC Chromium کنٹینر کے لیے Docker امیج۔ |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(بلٹ اِن فلیگز)_ | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر براؤزر کو دیے جانے والے اضافی Chromium CLI آرگومنٹس۔ |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر VNC پورٹ۔ |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر Chrome DevTools Protocol پورٹ۔ |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | کنٹینر کے اندر پروفائل ڈائریکٹری۔ |
| `OMNIROUTE_VNC_PROFILE_DIR` | _(غیر متعین)_ | `src/lib/vncSession/manifest.ts` | مستقل براؤزر پروفائلز کے لیے ہوسٹ کی جانب کی ڈائریکٹری۔ |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | VNC سیشن کو بازیافت کیے جانے سے پہلے بیکار رہنے کی مہلت (ms)۔ |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | سیشن کا زیادہ سے زیادہ دورانیہ (ms)۔ |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | بیک وقت VNC سیشنز کی زیادہ سے زیادہ تعداد۔ |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | براؤزر کے تیار ہونے کی مہلت (ms)۔ |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | بازیافت/صفائی کی مہلت (ms)۔ |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | مخصوص Docker نیٹ ورک جس میں کنٹینر شامل ہوتا ہے (#12571)، جو طے شدہ برج سے الگ ہے۔ |
| `VIBEPROXY_DATA_DIR` | _(غیر متعین)_ | `open-sse/services/notionThreadSessions.ts` | Notion تھریڈ سیشنز کو برقرار رکھنے کے لیے ڈائریکٹری۔ |
### داخلی سروس کی تصدیق
| متغیر | طے شدہ قدر | تفصیل |
| --------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | – | مینجمنٹ پلین میں سروس سے سروس تصدیق کے لیے اِن لائن ٹوکن۔ |
| `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | – | داخلی سروس ٹوکن پر مشتمل فائل کا راستہ (کنٹینرز میں ترجیحی؛ اِن لائن متغیر کو اوور رائیڈ کرتا ہے)۔ |
### OpenRouter فراہم کنندہ کے اعدادوشمار
| متغیر | طے شدہ قدر | تفصیل |
| ----------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | کیٹلاگ کی افزودگی کے لیے OpenRouter کے فی فراہم کنندہ اعدادوشمار حاصل کرنا چھوڑنے کے لیے `false` پر سیٹ کریں۔ |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | حاصل کردہ OpenRouter فراہم کنندہ کے اعدادوشمار کے لیے کیش TTL (ms)۔ |
### ایمبیڈڈ Redis بائنڈنگ
| متغیر | ڈیفالٹ | تفصیل |
| --------------------------- | ----------- | ----------------------------------------------------------------------- |
| `REDIS_BIND_HOST` | `127.0.0.1` | ایمبیڈڈ Redis سروس کے لیے بائنڈ ایڈریس۔ |
| `REDIS_PORT` | `6379` | ایمبیڈڈ Redis سروس کے لیے پورٹ۔ |
| `OMNIROUTE_REDIS_BIND_HOST` | – | ایمبیڈڈ Redis بائنڈ ایڈریس کے لیے OmniRoute کے دائرۂ کار کی اوور رائیڈ۔ |
---
## 24. ریلیز v3.8.50 میں اضافے
یہ ترتیبات سابقہ ماحول-معاہدہ اسنیپ شاٹ کے بعد متعارف کرائی گئی تھیں۔
| متغیر | ڈیفالٹ | ماخذ فائل | وضاحت |
| ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | دوبارہ کوشش کے قابل `503` سے پہلے بھاری چیٹ داخلہ سلاٹ کے لیے زیادہ سے زیادہ انتظار؛ مختصر اور محدود انتظار، فوری `503` کے بجائے ایجنٹس کی اچانک کثرت کو سلسلہ وار بناتا ہے۔ `0` فوری مسترد کیے جانے کو بحال کرتا ہے۔ |
| `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | داخلہ انتظار کے لیے قطار میں موجود بائٹس کا بجٹ: پورے پراسیس میں روکے گئے باڈی بائٹس کی مجموعی مقدار محدود کرتا ہے تاکہ انتظار ہیپ کو نہ بڑھائے (#4380)۔ بجٹ سے زیادہ انتظار کو فوراً دوبارہ کوشش کے قابل `503` موصول ہوتا ہے۔ |
| `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | #10110 کے بعد سے فرسودہ بے اثر اختیار: فی سیشن داخلہ لینز کو ایک واحد پورے پراسیس کے بجٹ کے حق میں ہٹا دیا گیا تھا۔ کنفیگریشن مطابقت کے لیے قبول کیا جاتا ہے؛ نظر انداز ہوتا ہے۔ |
| `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | #10110 کے بعد سے فرسودہ بے اثر اختیار: فی سیشن داخلہ لینز کو ایک واحد پورے پراسیس کے بجٹ کے حق میں ہٹا دیا گیا تھا۔ کنفیگریشن مطابقت کے لیے قبول کیا جاتا ہے؛ نظر انداز ہوتا ہے۔ |
| `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (بند) | `open-sse/services/admission/runtime.ts` | موافق رن ٹائم ورچوئل داخلہ لینز (#9654): فی کرایہ دار موافق گیٹ (سسٹم 2) کا مرکزی سوئچ۔ یہ اوپر دیے گئے فرسودہ فی کنکشن لین متغیرات (TTL_MS / MAX_SESSIONS، #10110 کے بعد سے بے اثر) سے مختلف ہے۔ اسی نام کا ڈیش بورڈ فیچر فلیگ؛ env متغیر کو ڈیش بورڈ اوور رائیڈ پر فوقیت حاصل ہے؛ دوبارہ شروع کرنا ضروری ہے۔ |
| `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | یہ محدود کرتا ہے کہ قطار میں موجود رَن شروع کرنے سے پہلے run-now کال، زیر عمل جاب کے لیے کتنی دیر انتظار کرے گی۔ |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | فعال | `open-sse/services/adobeFireflySession.ts` | اکاؤنٹ کے دائرۂ کار والی Chrome CDP سیشنز کے ذریعے IMS اور براؤزر رسک اسٹیٹ کو تازہ رکھتا ہے؛ غیر فعال کرنے کے لیے `0` سیٹ کریں۔ |
| `ADOBE_FIREFLY_SESSION_DISK` | فعال | `open-sse/services/adobeFireflySession.ts` | مرمت شدہ Adobe سیشنز کو `DATA_DIR` کے تحت محفوظ رکھتا ہے؛ صرف میموری والی حالت کے لیے `0` سیٹ کریں۔ |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | Adobe Firefly کی جنریشن سبمشنز کے درمیان کم از کم وقفہ۔ |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | ہر تیسری کامیاب Adobe سبمشن کے بعد اضافی خاموشی کی مدت۔ |
| `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | صرف ڈیبگ کے لیے حقیقی ہیڈلیس موڈ؛ Adobe colligo عموماً نتیجے میں بننے والے رسک سیشن کو مسترد کر دیتا ہے۔ |
| `CHROME_PATH` | خودکار شناخت | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | اختیاری مطلق Chrome executable، جسے براؤزر سے چلنے والے executors اس وقت استعمال کرتے ہیں جب پلیٹ فارم کی خودکار شناخت ناکافی ہو۔ |
| `TELEGRAM_BOT_TOKEN` | _(سیٹ نہیں)_ | `src/lib/telegram/config.ts` | BotFather ٹوکن جو اِن باؤنڈ webhook کو فعال کرتا اور Mini App کے `initData` پر دستخط کرتا ہے۔ |
| `TELEGRAM_WEBHOOK_SECRET` | _(سیٹ نہیں)_ | `src/lib/telegram/config.ts` | `setWebhook` کے ذریعے رجسٹر کیا گیا مشترکہ راز، جس کی ہر webhook ترسیل پر `X-Telegram-Bot-Api-Secret-Token` ہیڈر کے مقابل تصدیق کی جاتی ہے۔ webhook پاتھ کے لیے ضروری ہے؛ سیٹ نہ ہونے کا مطلب ہے کہ webhook ترسیلات کو 503 کے ساتھ مسترد کر دیا جائے گا۔ |
| `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Telegram چیٹ جوابات کے لیے استعمال ہونے والا ماڈل۔ |
| `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | پراکسیز یا خود میزبانی والے Bot API سرورز کے لیے Bot API کے بنیادی URL کا اوور رائیڈ۔ |
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | آؤٹ باؤنڈ Bot API کالز کے لیے ملی سیکنڈز میں ٹائم آؤٹ۔ |
| `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (فعال) | `scripts/build/optionalPackStaging.mjs` | Electron اسٹینڈ الون ٹری کے لیے اختیاری ML/براؤزر پیکس کو اسٹیج کرتے وقت `.tar.gz` ٹار بالز بنانا چھوڑنے کے لیے `0` سیٹ کریں (پیک ڈائریکٹریز اور `optional-packs.index.json` پھر بھی تیار کیے جاتے ہیں)۔ ڈیسک ٹاپ ریلیز ورک فلو اسے آرٹی فیکٹ اپ لوڈ کا حجم کم کرنے کے لیے استعمال کرتا ہے۔ |
### ChatGPT Web (Codex)
ہیڈلیس براؤزر اور آؤٹ باؤنڈ ٹول ٹنل کے لیے عالمی ڈیفالٹس۔ ڈیش بورڈ میں سیٹ کردہ کنکشن اقدار کو فوقیت حاصل ہے۔
| متغیر | ڈیفالٹ | سورس فائل | وضاحت |
| --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(خودکار شناخت)_ | `open-sse/executors/chatgpt-web-codex.ts` | npm، systemd اور PM2 آپریشن کے لیے Chrome/Chromium کا واضح پاتھ۔ |
| `CHROME_PATH` | _(خودکار شناخت)_ | `open-sse/executors/chatgpt-web-codex.ts` | Chrome/Chromium کے واضح پاتھ کے لیے مشترکہ فال بیک۔ |
| `CHATGPT_WEB_CODEX_CDP_URL` | _(غیر سیٹ شدہ)_ | `open-sse/executors/chatgpt-web-codex.ts` | داخلی CDP اینڈ پوائنٹ؛ Docker پورٹ `9223` پر Sidecar استعمال کرتا ہے۔ |
| `CDP_PROXY_TOKEN` | _(غیر سیٹ شدہ)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | اگر سیٹ ہو، تو CDP-Proxy-Sidecar کو بھیجی جانے والی ہر درخواست کے ہیڈر `X-Omni-Cdp-Token` میں یہ قدر شامل ہونا ضروری ہے (#13679)۔ قدر نہ ہونے کی صورت میں Proxy بغیر تصدیق کے درخواست آگے بھیجتا ہے — تب صرف Compose نیٹ ورک `chatgpt-web-codex-net` کی نیٹ ورک آئسولیشن تحفظ فراہم کرتی ہے۔ `openssl rand -hex 32` سے بنائیں۔ |
| `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(غیر سیٹ شدہ)_ | `open-sse/executors/chatgpt-web-codex.ts` | مقامی Codex ٹول راؤنڈز کے لیے عمومی OpenAI ٹنل ID۔ |
| `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(غیر سیٹ شدہ)_ | `open-sse/executors/chatgpt-web-codex.ts` | عمومی ٹنل Runtime-Key؛ اسے کبھی لاگز میں ظاہر نہ کریں۔ |
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | MCP برج کے لیے نئے بنائے گئے ChatGPT Custom Connector کا عین نام۔ |
| `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | براؤزر، بروکر اور ٹنل کی حالت کے لیے مخصوص ڈائریکٹری۔ |
| `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | `1` ہونے پر ہر چیک پوائنٹ پر براؤزر کی تشخیصی تصاویر محفوظ کی جاتی ہیں۔ |
| `CODEX_CHATGPT_WEB_LAUNCHER` | _(غیر سیٹ شدہ)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | مستقل Launcher-Binary کا اختیاری مطلق پاتھ۔ |
| `CODEX_CHATGPT_WEB_BUN` | _(خودکار شناخت)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Bun-Runtime-Binary کا اختیاری مطلق پاتھ۔ |
| `CODEX_WEB_GPT_BUN` | _(غیر سیٹ شدہ)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | `CODEX_CHATGPT_WEB_BUN` کے لیے لیگیسی فال بیک؛ نئے سیٹ اپس کینونیکل نام استعمال کرتے ہیں۔ |
---
## OmniConductor برج
ایک طویل عرصے تک فعال رہنے والا SSE صارف، جو OmniConductor ہب کے ٹاسکس کو مقامی A2A TaskManager (`src/lib/conductor/`) میں منعکس کرتا ہے۔ اختیاری — برج صرف اس وقت شروع ہوتا ہے جب `CONDUCTOR_HUB_URL` سیٹ ہو۔ صرف سرور سائیڈ: ہب ٹوکن کبھی بھی براؤزر تک نہیں پہنچنا چاہیے۔
| متغیر | ڈیفالٹ | سورس فائل | تفصیل |
| ------------------------------ | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `CONDUCTOR_HUB_URL` | _(خالی)_ | `src/lib/conductor/boot.ts` | OmniConductor ہب کا بنیادی URL (مثلاً `http://127.0.0.1:7910`)۔ سیٹ نہ ہو = برج غیر فعال۔ |
| `CONDUCTOR_HUB_TOKEN` | _(خالی)_ | `src/lib/conductor/boot.ts` | SSE فیڈ کے لیے ہب کی سند — ہب پر `spokesperson` قسم کا peer جاری کریں (`POST /v1/peers`، ایڈمن)۔ |
| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(خالی)_ | `src/lib/conductor/hubProxy.ts` | آنے والی A2A→ہب ٹاسک تفویض (`POST /v1/tasks`) کے لیے سند؛ سیٹ نہ ہونے پر `CONDUCTOR_HUB_TOKEN` استعمال کیا جاتا ہے۔ |
| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | ڈیش بورڈ چیٹ پراکسی (`/api/conductor/ask`) کے پیچھے موجود spokesperson (Faro) سروس کا بنیادی URL۔ |
### کوٹا سے آگاہ شیڈیولنگ
درخواست سے پہلے ٹوکن بجٹ کی جانچ کے لیے `open-sse/services/combo.ts` اور `src/lib/quota/quotaScheduler.ts` کے ذریعے استعمال کیا جاتا ہے۔ اختیاری — سیٹ نہ ہونے پر ڈیفالٹ روٹنگ کا رویہ تبدیل نہیں ہوتا۔
| متغیر | ڈیفالٹ | سورس فائل | تفصیل |
| ------------------------------- | ------ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | `1` ہونے پر، ایسی کنکشنز کو چھوڑ دیں جن کا فی ونڈو ٹوکن بجٹ (`rateLimitOverrides.tpm`، جدول `provider_quota_state`) بھیجنے سے پہلے درخواست کی تخمینی لاگت برداشت نہیں کر سکتا۔ کوئی بجٹ کنفیگر نہ ہونے پر درخواست کو گزرنے دیں۔ |