# 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) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [sr](../../../sr/docs/reference/ENVIRONMENT.md) · 🇸🇪 [sv](../../../sv/docs/reference/ENVIRONMENT.md) · 🇰🇪 [sw](../../../sw/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ta](../../../ta/docs/reference/ENVIRONMENT.md) · 🇮🇳 [te](../../../te/docs/reference/ENVIRONMENT.md) · 🇹🇭 [th](../../../th/docs/reference/ENVIRONMENT.md) · 🇹🇷 [tr](../../../tr/docs/reference/ENVIRONMENT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/ENVIRONMENT.md) · 🇵🇰 [ur](../../../ur/docs/reference/ENVIRONMENT.md) · 🇺🇿 [uz](../../../uz/docs/reference/ENVIRONMENT.md) · 🇻🇳 [vi](../../../vi/docs/reference/ENVIRONMENT.md) · 🇳🇬 [yo](../../../yo/docs/reference/ENVIRONMENT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/ENVIRONMENT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/ENVIRONMENT.md)
---
> התייחסות מלאה לכל משתנה סביבה המוכר על ידי OmniRoute. לתבנית התחלה מהירה, ראה [`.env.example`](../../.env.example).
> [!IMPORTANT]
> כל משתנה שמתועד כאן חייב להופיע גם ב- `.env.example`, וכל משתנה ב- `.env.example` חייב להופיע כאן. `npm run check:env-doc-sync` אוכף את זה על commit וב- CI. כדי להשמיט משתנה בכוונה, הוסף אותו לרשימת ההיתרים בתוך `scripts/check/check-env-doc-sync.mjs`.
---
## תוֹכֶן הָעִניָנִים
- [1. סודות נדרשים](#1-required-secrets)
- [2. אחסון ומסד נתונים](#2-storage--database)
- [3. רשת ויציאות](#3-network--ports)
- [4. אבטחה ואימות](#4-security--authentication)
- [5. חיטוי קלט והגנה PII](#5-input-sanitization--pii-protection)
- [6. מדיניות כלים וניתוב](#6-tool--routing-policies)
- [7. URLs & Cloud Sync](#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. עקיפות ספק משתמש-סוכן](#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. סנכרון מודל (פיתוח)](#19-model-sync-dev)
- [20. הגדרות ספציפיות לספק](#20-provider-specific-settings)
- [21. בריאות פרוקסי](#21-proxy-health)
- [22. איתור באגים](#22-debugging)
- [23. שילוב GitHub](#23-github-integration)
- [24. Skills Sandbox (v3.8.0 +)](#24-skills-sandbox-v380)
- [27. הזנת רדאר (אירוח עצמי)](#27-radar-feed-self-hosting)
- [תרחישי פריסה](#deployment-scenarios)
- [ביקורת: משתנים הוסרו / מתים](#audit-removed--dead-variables)
---
## 1. סודות נדרשים
סודות לא מוגדרים מסומנים** כֵּן** נוצרים אוטומטית בהפעלה הראשונה (`JWT_SECRET`, `API_KEY_SECRET`) ונמשכו ל- `server.env` בספריית הנתונים — הגדירו אותם במפורש כאשר הספרייה הזו היא ארעית. היוצא מן הכלל הוא `OMNIROUTE_WS_BRIDGE_SECRET`: זה לא נמשך ל- `server.env` — את נקודות הכניסה של השרת נותנים ערך חולף לכל אתחול שרק הגשר בתהליך יכול להשתמש, כך שלקוחות גשר חיצוניים צריכים אותו להגדיר במפורש.
| מִשְׁתַנֶה | דָרוּשׁ | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------- | ------------------ | --------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `JWT_SECRET` | **כֵּן** | _(אַף לֹא אֶחָד)_ | `src/lib/auth` | Signs/verifies כל קובצי ההפעלה של לוח המחוונים (JWT). צור עם `openssl rand -base64 48`. |
| `API_KEY_SECRET` | **כֵּן** | _(אַף לֹא אֶחָד)_ | `src/lib/db/apiKeys.ts` | מפתח הצפנה AES עבור ערכי מפתח API במצב מנוחה ב- SQLite. צור עם `openssl rand -hex 32`. |
| `INITIAL_PASSWORD` | לֹא | _(לא מוגדר)_ | `src/lib/auth/managementPassword.ts` | מגדיר את סיסמת לוח המחוונים בעת האתחול בזמן שאף אחת לא נשמרה עדיין; התעלמו מרגע שמירת הסיסמה. התקנות npm והמקור העתק `.env.example` ל- `.env`, אז הם מתחילים עם מציין המיקום הידוע בציבור שלו `CHANGEME`: החלף אותו לפני האתחול הראשון, או הגדר `INITIAL_PASSWORD=` (ריק) ב- `.env` הזה כדי ליצור את הסיסמה באשף ההטמעה בביקור הראשון, כפי שעושה ערך לא מוגדר (ברירת המחדל של תמונת Docker ). שנה סיסמה שמורה ב-Dashboard → Settings → Security, או הפעל `omniroute reset-password` (`node bin/reset-password.mjs` בתשלום מקור) כאשר `DATA_DIR` מוגדר לספריית הנתונים של השרת. |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **כֵּן** (הֲפָקָה) | _(לא מוגדר)_ | `src/app/api/internal/codex-responses-ws/route.ts` | סוד משותף לגשר Codex Responses WebSocket הפנימי. מאמת בקשות לגשר בין ממסר Electron/browser WS ל- OmniRoute. ⚠️**REQUIRED בייצור — כאשר לא מוגדר, כל בקשות WS bridge נדחות.** צור עם `openssl rand -base64 32`. |
| `OMNIROUTE_SW_BUILD_ID` | לֹא | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | מזהה מפורש של ביטול מטמון של Service Worker עבור מעטפת PWA (#11779); ראשון בשרשרת ההחלטות. |
| `SOURCE_VERSION` | לֹא | _(לא מוגדר)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | שני בשרשרת — שנקבע על ידי בוני PaaS (למשל בסגנון Heroku) כמחוייבות הפרוסה. |
| `NEXT_PUBLIC_SW_BUILD_ID` | לֹא | _(נִגזָר)_ | `src/shared/components/PwaRegister.tsx` | ערך ציבורי בזמן בנייה שהלקוח משתמש בו כדי לרשום `/sw.js?v=…`; נגזר מהשניים לעיל, ואז ה-git SHA. |
| `OMNIROUTE_PEER_STAMP_TOKEN` | לא (אוטומטי) | _(אוטומטי לכל אתחול)_ | `src/server/authz/policies/management.ts` | סוד לכל תהליך המוכיח שחותמת ה-IP מהימנה של עמיתים הגיעה משרת HTTP של OmniRoute עצמו (`scripts/dev/peer-stamp.mjs`). תוכנת התווך Authz נותנת אמון בבקשת מקומיות (loopback/LAN gating of LOCAL_ONLY routes) רק כאשר החותמת נושאת את האסימון הזה. נוצר אוטומטית כל אתחול — לא מוגדר; הצמד אותו רק עבור הגדרות מרובות תהליכים שחייבים לשתף את החותמת. |
| `OMNIROUTE_TRUSTED_PROXIES` | לֹא | _(לא מוגדר)_ | `scripts/dev/peer-stamp.mjs` | טווחי IPs או CIDR מופרדים בפסיקים של `X-Forwarded-For` / `X-Real-IP` שלהם, רשימת IP allow/deny עשויה להאמין, בנוסף ל-loopback, כתובות רשת פרטיות וקצוות Cloudflare, אשר תמיד מהימנים. דרוש רק למיופה כוח בכל כתובת ציבורית אחרת; אחרת הכתובת של ה-Proxy עצמו היא מה שהמסנן שופט. מקשי המצערת לכל לקוח (`/api/v1/relay/chat/completions`) של הממסר באותה כתובת לקוח שנפתרה, לעולם לא בכותרות העברה בלבד. |
### פקודות דור
```bash
# Generate all four secrets at once:
echo "JWT_SECRET=$(openssl rand -base64 48)"
echo "API_KEY_SECRET=$(openssl rand -hex 32)"
echo "INITIAL_PASSWORD=$(openssl rand -base64 16)"
echo "OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -base64 32)"
```
> [!CAUTION]
> לעולם אל תעביר קבצי `.env` עם סודות אמיתיים לבקרת גרסאות. ה- `.gitignore` כבר לא כולל `.env`, אבל אמת לפני דחיפה.
---
## 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` | פתח מילוט לשומר DATA_DIR test/eval #10428). בדיקות ובדיקות Node eval/print (`-e`/`--eval`/`-p`/`--print`, כולל צורות `--eval=`/`--print=` ) ללא `DATA_DIR` מנותבים מחדש ל-Dir temp זרוק כך שהם לא יכולים לפתוח את מסד הנתונים האמיתי של המפעיל; הגדר ל- `1` כדי להצטרף חזרה לספרייה האמיתית. |
| `OMNIROUTE_BUILD_SHA` | _(לא מוגדר)_ | `src/lib/monitoring/buildSha.ts` | Git SHA של חפץ הריצה. חותמת על ידי `npm run build:release`; ניתן להזרקה במכולות שנשלחות ללא זקיף `dist/BUILD_SHA`. משטח כמו `system.buildSha` על `/api/monitoring/health`. |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Ref שער המקור של החפץ החבילה בודק את ה-build SHA נגד (#10427). |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(לא מוגדר)_ | `scripts/build/buildProvenance.ts` | הגדר ל- `1` כדי לאפשר אריזה של מבנה שה- SHA שלו אינו על קו השחרור, הקלטתו ככנרית מכוונת במקום להכשל בשער (#10427). |
| `OMNIROUTE_SMOKE_API_KEY` | _(לא מוגדר)_ | `scripts/ops/deploy-canary.mjs` | מפתח API עבור בדיקת העשן לפרוס קנרי, נשלח כ- `Authorization: Bearer` ב- `/v1/chat/completions`. בשימוש רק על ידי סקריפט הפריסה (#10429), לעולם לא על ידי השרת. לא קשור למשתני `OMNIROUTE_SMOKE_*` של רתמת עשן opt-in CLI (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` in `tests/integration/upstream-cli-smoke.int.test.ts`) — see [CLI שילובים → סוויפ עשן אמיתי](../guides/CLI-INTEGRATIONS.md). |
| `OMNIROUTE_BUILDING` | _(לא מוגדר)_ | `src/lib/buildPhase.ts` | אות Build-phase (#10060): מוגדר ל- `1` על-ידי `scripts/build/build-next-isolated.mjs` ועובר בירושה על-ידי כל פועל בנייה שנוצר, כך ששכבת ה- 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` | **כינוי Fallback** עבור `DATA_DIR`, מסומן רק כאשר `DATA_DIR` אינו מוגדר. משמש לאיתור מטמון ההפעלה של מבצע PromptQL בדיסק (`
/promptql-thread-sessions.json`); אם אף VAR אינו מוגדר, המטמון יישאר בזיכרון בלבד (לא נמשך במהלך אתחול מחדש). |
| `OMNIROUTE_PLUGINS_DIR` | _(לא מוגדר)_ | `src/lib/plugins/scanner.ts` | ספר את** סורק תוסף ריצה** קורא — ואת השורש שמנהל הפלאגין מתקין ב- — עוקף את ברירת המחדל הנגזרת מהבית (#11827). כוון אותו לעץ התוסף המותקן ב-bind ב- Docker/K8s במקום להזיז HOME רק כדי להעביר את נתיב הסריקה (HOME שולט גם בכל התנהגות אחרת בבית). בטל את ההגדרה = `~/.omniroute/plugins`, או `/tmp/.omniroute/plugins` כשהתהליך לא מייצא בית בכלל — ה-Ien-discover השקט שמשתנה זה מסיר. הספרייה שנפתרה נרשמת פעם אחת בעת האתחול כ- `scanner.dir_resolved` עם הקלט שניצח. בצד השרת בלבד: תוספים לפקודות CLI שומרים על `OMNIROUTE_PLUGIN_PATH` משלהם (סעיף 9). |
| `STORAGE_ENCRYPTION_KEY` | _( = ריק מושבת)_ | `src/lib/db/encryption.ts` | מפתח AES להצפנת מסד נתונים מלאה SQLite במצב מנוחה. צור עם `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`, מדלג על גיבויי קבצי routine/pre-write SQLite (מחירי models.dev save/clear, כותב ההגדרות). גיבויים ידניים ושחזורים מראש עדיין פועלים. זה כן** לֹא** השבת את תמונת מצב הבטיחות העמידה החובה של רץ ההגירה או מגן הגירה המונית עבור DB מתמשך קיים. גיבויים לא ידניים מצטמצמים לכל היותר פעם ב-60 דקות. לוּחַ מַחווָנִים** הגדרות → Storage** יכול להשבית את הגיבוי האוטומטי השגרתי באופן עצמאי. |
| `OMNIROUTE_SQLITE_SLOW_MS` | _(unset/off)_ | `src/lib/db/adapters/slowDiagnostics.ts` | אלפיות שניות; ערכים מתחת ל-1 או שאינם מספריים נשארים כבויים; מזהיר לכל היותר פעם ב-10 שניות; קו היומן כולל דרייבר, פעולה ו- elapsedMs בלבד. |
| `OMNIROUTE_SQLITE_OPTIMIZE_ENABLED` | `true` | `src/lib/db/sqlitePlannerStats.ts` | תחזוקת סטטיסטיקות של מתכנן רקע, ללא תלות בניקוי שמירה: אישור ניקוי מופעל ראשון (בדרך כלל 30 שניות לאחר ההפעלה, לאחר העברות) מפעיל `PRAGMA optimize=0x10002`; מעברים עוקבים כל 6 שעות ריצה `PRAGMA optimize` (או `PRAGMA optimize=0x00002` לניתוח בלתי מוגבל). `false` או `0` משביתים את כל התחזוקה (ללא רגישות לאותיות רישיות, רווח קצוץ). מסדי נתונים של זיכרון ונתיבי גיבוי לקריאה בלבד אינם מושפעים. כשלים נרשמים, לא נזרקים. |
| `OMNIROUTE_SQLITE_ANALYSIS_LIMIT` | `400` | `src/lib/db/sqlitePlannerStats.ts` | מגדיר `PRAGMA analysis_limit` לפני אופטימיזציה. מספרים שלמים עשרוניים מוצמדים ל-[0, 100000]; ערכי malformed/empty כברירת מחדל ל-400. `0` מבקש ניתוח בלתי מוגבל ומדויק של טבלאות שנבחרו על ידי אופטימיזציה; המעבר המחזורי מנקה את סיביות ה-Optimize Sampling Cap של SQLite כדי לכבד זאת. לא מופעלת הצהרת ניתוח SQL עצמאית. |
| `OMNIROUTE_CRYPT_KEY` | _(לא מוגדר)_ | `src/lib/db/encryption.ts` | **כינוי מדור קודם** עבור `STORAGE_ENCRYPTION_KEY`. מקובל כפל-back כאשר המשתנה הראשוני נעדר. |
| `OMNIROUTE_API_KEY_BASE64` | _(לא מוגדר)_ | `src/lib/db/encryption.ts` | **כינוי מדור קודם** ( טופס Base64-encoded ) מקובל כחלופה. פענוח אוטומטי לפני השימוש. |
| `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` או unset נשאר שקט. ה- 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 יתחיל מחדש מבלי לשכתב את ה-wal-index הממופת. מחסומים חיים במצב חיתוך הוסרו (ראה שורת `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 restart policy) להחזיר תהליך נקי במקום לשרת 503s ללא הגבלת זמן. |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 מ') | `open-sse/utils/resourcePressure.ts` | כמה זמן הלחץ הקריטי חייב להימשך לפני שהיציאה להפעלה מחדש תידלק. |
| `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | הגדר ל- `1`/`true`/`yes`/`on` כדי להתעלם `/proc/pressure/memory` ברחבי המארח (`psi_some` / `psi_full`) כאשר שכן רועש מעביר 503s בזמן שהתהליך הזה בסדר (#13124). שומרי ערימות Cgroup ו-V8 נשארים פעילים. PSI גם מפסיק לספור כהוכחת מצערת ליבה עבור `cgroup_high`: סה"כ cgroup מעל `memory.high` ואז הופך קריטי רק בהגדלת `memory.events` `high`/`max`. ללא `memory.events` היחס הגולמי נשמר. |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(זיהוי אוטומטי)_ | `src/lib/db/adapters/sqljsAdapter.ts` | נתיב מפורש (מוחלט או יחסית ל-cwd) ל- `sql-wasm.wasm` בעת שימוש במתאם `sql.js` WASM fallback. זוהה אוטומטית באמצעות תלות בחבילות ופריסות מועמדים כאשר לא מוגדר. |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | ימים של מסוף (completed/failed/cancelled/expired) נקודות הבידוק של עבודת API של אצווה, קבצי input/output/error עם הפניות ושורה נשמרים על ידי סריקת הניקוי האוטומטית לפני המחיקה. נכנס לתוקף רק לאחר הפעלת `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` ; תואם את חלון שימור הפלט של OpenAI של אצווה API. אינו משפיע על מסלול `DELETE /api/v1/batches/delete-completed` המופעל על ידי מפעיל, אשר נשאר ללא תנאי (ללא מסנן גיל) לפי התכנון. |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | כאשר `true`, תן לניקוי האוטומטי למחוק מסוף אצווה עבודות API (ונקודות הבידוק שלהן) לאחר `OMNIROUTE_BATCH_RETENTION_DAYS`, ולנקות את תוכן BLOB של קבצים שהועלו מעבר `expires_at` שלהם. כבוי כברירת → : כל התקנה קיימת שומרת את הנתונים האלה בדיוק — קודם עד שמפעיל `docs/reference/FEATURE_FLAGS.md`. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | הגדר ל- `1` כדי לדלג על בדיקת הבריאות DB לחלוטין בעת ההפעלה. שימושי למשימות קצרות מועד ולמבחני אינטגרציה. |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | הגדר ל- `1` כדי לאלץ את לולאת ה- DB healthcheck לפעול, גם כאשר בדרך כלל ניתן יהיה לדלג עליה (למשל, משימות קצרות מועד). |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | הגדר ל- `1` כדי לדלג על החימום בזמן הריצה המקורי במהלך `npm install`. שימושי בהתקנות CI/headless שבהן sqlite כבר בנוי. |
| `OMNIROUTE_MIGRATIONS_DIR` | _(זיהוי אוטומטי)_ | `src/lib/db/migrationRunner.ts` | עוקף את הספרייה שרץ ההגירה סורק. שימושי בעת משלוח העברות מצורפות ב-builds מותאמים אישית. |
| `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 התקנה עצי פלוס tarball), אז אסור לו לרוץ על tmpfs קטן — על הרץ המתארח בעצמו `/tmp` הוא tmpfs עם גיבוי RAM של 12 GB והשער מיצה אותו, וחתך את החבילה. |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(ברירת מחדל בקוד)_ | `src/lib/spend/batchWriter.ts` | מרווח שטיפה (ms) עבור כותב spend/cost המצטבר. ערכים נמוכים יותר מפחיתים את התאחדות הכתיבה; ערכים גבוהים יותר מפחיתים מחלוקת DB. |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(ברירת מחדל בקוד)_ | `src/lib/spend/batchWriter.ts` | כניסות הוצאה מאוחסנות מקסימליות לפני שטיפה מאולצת. העלאה על פריסות QPS גבוהות; נמוך יותר כאשר זיכרון מוגבל חשוב יותר. |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(לא מוגדר)_ | `open-sse/utils/proxyFetch.ts` | הגדר ל- `"true"` כדי לפלוט יומני ניפוי באגים `[ProxyFetch]` בנתיב ממסר Vercel. כבוי כברירת מחדל כדי למנוע דליפת רמזים לניתוב. |
| `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(לא מוגדר)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | נתיב מוחלט של ליבת ה-proxy המקומי הבינארי (קובץ בשם `sing-box` / `mihomo`) שבודק תצורת ליבה שנוצרה לפני שהוא מחליף את הקובץ המאומץ. Unset כותב `.generated` לצד הקובץ המאומץ בלבד. סביבת מארח בלבד: מעולם לא נשמרה במסד הנתונים ולא התקבלה דרך הניהול API, כי הבינארי מבוצע. |
| `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(לא מוגדר)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | כיצד ליבת ה-proxy המקומי נטענת מחדש לאחר החלפת תצורה מאומתת: מערך ארגומנט JSON פועל ללא מעטפת, או בדיוק `external` כאשר צופה חיצוני מחיל את הקובץ. מעולם לא נשמר במסד הנתונים ולא נחשף באמצעות ה- API. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | הגדר ל- `"true"` או `"1"` כדי לכלול client/egress IPs ואת קידומת החשבון בשורת-log-proces `[ProxyEgress]` המילולית. שמר OFF כברירת מחדל כדי שיומן התהליך לא ידלוף IPs או קידומת החשבון. |
| `OMNIROUTE_DEBUG` | _(לא מוגדר)_ | `bin/cli/commands/quota.mjs` | הגדר ל- `1` כדי להדפיס אבחון תזמון לפי בקשה (`[omniroute] GET completed in Nms`) מפקודות CLI quota ל-stderr. |
| `OMNIROUTE_HEALTHCHECK_PATH` | _(אוטומטי)_ | `scripts/dev/healthcheck.mjs` | נתיב מפורש שנבדק על ידי בדיקת תקינות המכולה. לא מוגדר, הבדיקה גוזרת אותו מ- `OMNIROUTE_BASE_PATH`; הגדרתו מחזירה את נקודת הקצה לניטור העמוק. |
| `OMNIROUTE_DEBUG_COMPLETION` | _(לא מוגדר)_ | `bin/cli/commands/completion.mjs` | הגדר לכל ערך שאינו ריק כדי לפלוט אבחון `[omniroute completion]` מנתיבי המטמון להשלמת מעטפת CLI (read/refresh/write). כבוי כברירת מחדל — מטמונים אלה נכשלים בשקט כך שמטמון missing/corrupt לעולם לא שובר את השלמת הכרטיסיות. |
| `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` (שעה אחת) | `open-sse/services/batchProcessor.ts` | Cap (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` כדי לעקוף את בטיחות ההגירה.
### תרחישים
| תַרחִישׁ | תְצוּרָה |
| -------------------- | --------------------------------------------------------------------------------- |
| **פיתוח מקומי** | השאר את כל ברירות המחדל. DB גר ב- `~/.omniroute/omniroute.db`. |
| **Docker** | `DATA_DIR=/data` + התקן נפח ב- `/data`. |
| **מוצפן בזמן מנוחה** | הגדר `STORAGE_ENCRYPTION_KEY` + לשמור גיבויים של המפתח! מאבד את זה = מאבד נתונים. |
| **CI/Testing** | `DATA_DIR=/tmp/omniroute-test` — ארעית, אין צורך בהצפנה. |
---
## 3. רשת ויציאות
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PORT` | `20128` | `src/lib/runtime/ports.ts` | יציאה ראשית עבור נקודות קצה UI ו- API של לוח המחוונים (מצב יציאה בודדת). |
| `OMNIROUTE_BASE_PATH` | _(שורש = ריק)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | תת נתיב URL להגשת OmniRoute מאחורי פרוקסי הפוך (מגדיר Next.js `basePath`; הפניות מחדש של אישור הן basePath-aware). למשל `/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/omniroute/v1` במקום `https://host/v1`. נופל בחזרה ל- `OMNIROUTE_BASE_PATH` כאשר אינו מוגדר. בנה מחדש לאחר שינוי ( `basePath` הבא הוא זמן בנייה). |
| `DASHBOARD_ALLOW_EMBED` | _(בטל את ההגדרה = never framable)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | הצטרפות להטמעת iframe של דפי HTML. לא מוגדר, כל נתיב שולח `frame-ancestors 'none'` + `X-Frame-Options: DENY`. הגדר ל- `vscode` כדי להגיש את הדפים (לוח מחוונים, כניסה, מסמכים, נחיתה) עם `frame-ancestors 'self' vscode-webview:` וללא `X-Frame-Options`, כך שהדפדפן הפשוט של קוד VS יכול לרנדר אותם (מצב `dashboardOpen: "editor"` של OmniCopilot). משטח API (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, כינויים ברמת השורש) שומר על הכותרות המחמירות בכל מקרה. רק `vscode` מוכר — `1`/`true` אל תאפשר זאת. זמן בנייה: בנייה מחדש לאחר שינוי (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` עבור תמונות; הגדרתו להתקנה בנויה מראש אין השפעה). |
| `API_PORT` | _(לא מוגדר)_ | `src/lib/runtime/ports.ts` | כאשר מוגדר, משרת את ה-proxy `/v1/*` API (בתוספת `/v1beta/*` מקורי של תאומים) ביציאה נפרדת זו. |
| `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` | מגבילים חיבורי צ'אט במקביל בטיסה; בקשות מעל הכובע מקבלים `503` עם `Retry-After`. מספר שלם חיובי מאפשר את השמירה; unset/`0` משבית אותו. |
| `OMNIROUTE_INSTANCE_ID` | _(לא מוגדר)_ | `src/shared/resilience/peerRouting.ts` | ID יציב וייחודי עבור שער זה בעת שרשור מופעי OmniRoute. מאפשר בדיקות לולאת עמיתים נכנסות. תווים מותרים: אותיות, ספרות, `.`, `_`, `:` ו- `-`; מקסימום 64 תווים. |
| `OMNIROUTE_PEER_URLS` | _(לא מוגדר)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | בסיס OmniRoute מופרד URLs שעשוי לקבל `X-OmniRoute-Peer-Trace`. רק URLs הרשומים במפורש במעלה הזרם מקבלים מטא נתונים של עמיתים; כל שאר הספקים לא נגעו. |
| `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | המספר המרבי של מופעי OmniRoute שביקרו בהם בעבר התקבל על פי בקשה משורשרת (`1`-`32`). מופעים חוזרים או החזר תקציב מוצה HTTP `508 Loop Detected`. |
| `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | יציאה שפורסמה בצד המארח עבור לוח המחוונים במצב ייצור Docker. |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | יציאה שפורסמה בצד המארח עבור API במצב ייצור Docker. |
| `OMNIROUTE_PORT` | _(לא מוגדר)_ | `src/lib/runtime/ports.ts` | מקבל עדיפות על `PORT` כאשר פועל בתוך Electron או עטיפות אחרות. |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | יציאה לשרת ניטור WebSocket חי בזמן אמת. |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | קישור כתובת לשרת WebSocket החי. הגדר ל- `0.0.0.0` כדי לחשוף ב- LAN (הגדר גם `LIVE_WS_ALLOWED_ORIGINS`). חיבורים מאומתים עם קובץ ה-cookie של הפעלה של לוח המחוונים או מקש Bearer API שמחזיק בהיקף ניהול (`manage`/`admin`). |
| `LIVE_WS_ALLOWED_ORIGINS` | _(לא מוגדר)_ | `src/server/ws/liveServer.ts` | מקורות נוספים מופרדים בפסיקים מאפשרים לפתוח WebSocket חיה. כברירת מחדל, מקורות לוח המחוונים Loopback מותרים. |
| `LIVE_WS_ALLOWED_HOSTS` | _(לא מוגדר)_ | `src/server/ws/liveServerAllowList.ts` | שמות מארח נוספים מופרדים בפסיקים מותרים למקורות WebSocket חיים. שלא כמו `LIVE_WS_ALLOWED_ORIGINS` (מקור מלא URLs), מתאים רק לחלק המארח — שימושי עבור הגדרות LAN/Tailscale. |
| `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(לא מוגדר)_ | `src/hooks/useLiveDashboard.ts` | URL ציבורי עבור לוח המחוונים החי WebSocket (בצד הדפדפן). הגדר בעת חזית שרת WS עם פרוקסי הפוך או מנהרת Cloudflare (למשל `wss://ws.my-ai.com/live-ws`); הדפדפן מתחבר לשם במקום `ws://hostname:20132`. חלק שם הנתיב משמש גם כנתיב השדרוג WebSocket (ברירת מחדל: `/live-ws`). |
| `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` `scripts/start-ws-server.mjs` | הגדר ל- `0` או `false` כדי להשבית את שרת WebSocket בזמן אמת (מופעל כברירת מחדל, קשור ל-loopback). החלפת CI/harness משביתה את הסקריפט החי העצמאי WebSocket helper. |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | מגבלת קצב ממסר לכל (אסימון, IP), זיכרון requests/minute., לכל מופע. `0` או שלילי משבית את שער מימד ה-IP (מגבלה DB לכל אסימון עדיין חלה). |
| `NODE_ENV` | `production` | Next.js | שולט ברצינות רישום, שמירה במטמון, חשיפת פרטי שגיאה ואופטימיזציות Next.js. |
| `OMNIROUTE_USE_TURBOPACK` | _(לא מוגדר)_ (בחירת בנייה אוטומטית) | `scripts/build/build-next-isolated.mjs` | עבור `npm run build`, לא מוגדר או ריק בוחר webpack כאשר מגבלת הזיכרון האפקטיבית ( RAM פיזית או מכסת cgroup/process נמוכה יותר) היא לכל היותר** 16 GiB** או לא ניתן לקבוע בבטחה; מעל 16 GiB, נבחר Turbopack. `0` מפורש מאלץ webpack; `1` מפורש וערכים אחרים שאינם ריקים מאפס מאלצים את Turbopack. ערך סביבה ריק המועבר על ידי Compose עושה זאת** לֹא** כוח Turbopack. סף זה מגיע מרגרסיה של 15.6 GiB זיכרון בנייה (#18184); מארח בנייה עם 24/32 GiB לא סומנו. Webpack של ייצור מדלג אוטומטית על המטמון הקבוע שלו כברירת מחדל (ראה `OMNIROUTE_WEBPACK_BUILD_CACHE` להלן; #18141) ובונה עם הרבה פחות שיא RSS מאשר נתיב Turbopack הנוכחי. הפיתוח שומר על התנהגות ה-bunler הקיימת שלו.**Docker בונה כברירת מחדל ל- `0` (webpack)** ; השתמש ב- `--build-arg OMNIROUTE_USE_TURBOPACK=1` כדי להצטרף. ראה `docs/guides/DOCKER_GUIDE.md`. |
| `OMNIROUTE_WEBPACK_BUILD_CACHE` | _(לא מוגדר)_ | `next.config.mjs` | רכיבי ייצור של Webpack (`OMNIROUTE_USE_TURBOPACK=0`) מדלגים על המטמון של מערכת הקבצים הקבועה של webpack אלא אם כן זה `1`. כתיבת המטמון הזה מוסיפה כ-2.5 GB של זיכרון שיא של בנייה ב-6144 MB heap cap, ו-builds נקי אף פעם לא קוראים אותו בחזרה. הגדר ל- `1` כדי לשמור על `.build/next/cache/webpack` עבור בנייה חוזרת מהירה יותר על מכונה עם RAM נוסף; בניית Docker קח את זה בתור `--build-arg OMNIROUTE_WEBPACK_BUILD_CACHE=1` (שלבי בונה `Dockerfile` ו- `Dockerfile.bun` ). |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(לא מוגדר)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | הגדר ל- `1` כדי לדלג על בדיקת תקינות SQLite בעת האתחול. שימושי לאתחול מהיר יותר במסדי נתונים גדולים. |
| `NOTIFY_SOCKET` | _(לא מוגדר)_ | systemd (פרוטוקול sd_notify) | מוגדר על ידי systemd כאשר התהליך פועל תחת יחידת שירות עם שילוב sd_notify; OmniRoute קורא אותו (ראה `OMNIROUTE_DISABLE_SD_NOTIFY`) כדי לשלוח הודעות READY/WATCHDOG. לעולם לא נקבע על ידי המשתמש. |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(לא מוגדר)_ | `scripts/dev/systemd-notify.mjs` | הגדר ל- `1` כדי להשבית את systemd sd_notify (הקלד = notify / WatchdogSec=) גם כאשר פועל תחת יחידת systemd. המודיע הוא מערכת ללא הפעלה מחוץ למערכת ללא קשר. |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | מרווח (ms) עבור מתזמן בדיקת תקינות האישורים ברקע. מינימום: 10000 (10 שניות). |
| `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` כדי להשבית בדיקות תקופתיות ברקע של חיבורי ספק. ספקי חיפוש (SEARCH_VALIDATOR_CONFIGS ב- `src/lib/providers/validation/searchProviders.ts`, למשל `tavily-search`) תמיד אינם נכללים ב-sweep — "האימות" שלהם הוא שאילתת חיוב אמיתית במעלה הזרם, כך שהם לעולם לא נבדקים תקינות בטיימר (#9970). |
| `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | הגדר ל- `1` כדי לאפשר למתקשר מאומת לבקש `/api/monitoring/health?deep=1`, אשר דוגמת את משטח ההשלמות פעם אחת לכל TTL. מתקשרים אנונימיים לעולם אינם מפעילים את הבדיקה. |
| `OMNIROUTE_EVENT_LOOP_STALL_THRESHOLD_MS` | `5000` | `src/lib/healthzLag.ts` | סף עיכוב (ms) עבור מקליט לולאת אירועי האתחול: הקפאה ארוכה מזה רושמת קו `event loop stalled` אחד בקורות החיים עם זיכרון וספירות בטיסה, ומקפיצה את `eventLoopStall` counter/maximum ב- `/api/monitoring/health`. הגדר ל- `0` כדי להשבית; ערך בלתי קריא או שלילי נופל בחזרה ל- `5000`. |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | כתובת איגד עבור שרת dev/start Next.js עוקף את ברירת המחדל של `0.0.0.0` כאשר הוא מוגדר. |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | כתובת איגד המשמשת את רץ Playwright בעת השקת Next.js. ברירת המחדל היא `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 shell `HOSTNAME` (מוגדר תמיד לשם המכונה על ידי bash/zsh). נופל בחזרה ל- `0.0.0.0` כאשר אינו מוגדר. (#6194) |
### מצבי יציאה
```
┌─────────────────────────── Single Port (default) ──────────────────────────┐
│ PORT=20128 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Split Ports ─────────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ Use case: Expose API to LAN while restricting Dashboard to localhost. │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker Production ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → Maps container ports to host ports in 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` | מלח HMAC להפקת אסימון ה- CLI המקומי. הגדרת ערך זה מסובבת את כל אסימוני CLI במכונה ותמיד מקבלת עדיפות על פני המלח המתמשך. ראה `docs/security/CLI_TOKEN.md`. |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | מגדיר את דגל `Secure` בקובצי Cookie של הפעלה.** חייב להיות `true`** כאשר רצים מאחורי HTTPS. |
| `REQUIRE_API_KEY` | `false` | תוכנת האמצע API | כאשר `true`, כל בקשות ה-proxy `/v1/*` חייבות לכלול מפתח API חוקי.** הדגל הזה לא משער את `GET /v1/models`** , שעוקב אחר תנוחת הכניסה ללוח המחוונים (`requireAuthForModels`) במקום — כך ש- `401` מ- `/v1/models` אומר NOT שהסקת הסקה מוגנת. ראה `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). מקבל `true`, `1` או `yes`, תוך התעלמות מרישיות ומרווחים שמסביב; כל ערך אחר (כולל `on`) כבוי. |
| `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | מאפשר חשיפת ערכי מפתח API מלאים בלוח המחוונים UI. ניתן להגדרה מדגלי תכונות של לוח המחוונים; סיכון אבטחה במופעים משותפים. |
| `NO_LOG_API_KEY_IDS` | _(רֵיק)_ | `src/lib/compliance/index.ts` | מפתח API מופרד IDs, עוקף רישום בקשות (תאימות GDPR ). |
| `DEFAULT_RATE_LIMIT_PER_DAY` | _(בטל = unlimited)_ | `src/shared/utils/apiKeyPolicy.ts` | תקציב בקשות חלופי ליום הוחל על מפתחות API שעמודת `rate_limits` שלהם היא ריק. לא מוגדר או ריק: אין מכסה מרומזת (#2289, #11017). `0` זהה (ללא הגבלה). מספר שלם חיובי N מאפשר N/day, 5N/week, 20N/month. ערכים שגויים שאינם ריקים נופלים בחזרה לחלונות 1000/day, 5000/week, 20000/month מדור קודם. |
| `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | ברירת מחדל עבור הגדרת `maxBodySizeMb` גלוי; הגדרה שמורה מקבלת עדיפות. `/api/v1/chat/completions` ו- `/api/v1/responses` שומרים על ברירת מחדל של 50 MB עד שמירת מגבלה; לאחר מכן, מגבלה שמורה מחליפה אותה, למעלה או למטה, עבור מגן הכותרות ועבור כניסת צ'אט בפועל של בתים כאחד. |
| `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`. `maxBodySizeMb` שמור מחליף את ברירת המחדל של 50 MB ; כאשר המשתנה הזה מוגדר, הוא גם מגביל את הערך השמור. |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(בטל את ההגדרה — ללא מכסת ספירת בקשות)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** מכסת בקשה-COUNT מדור קודם זו מחייבת כעת רק כאשר מוגדרת במפורש. לא מוגדר (ברירת המחדל), הכניסה לצ'אט במשקל כבד מסודרת במקום זאת על ידי `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — תקציב BYTE הנגזר אוטומטית בגודל של תקרת הזיכרון האמיתית של התהליך** תהליך אחד** (ערימת V8 אחת). שתי חפיפות ~ 750k-token `/v1/responses` abort ~ 12 Gi heaps (#7849) — a** זיכרון-תקציב** אזהרה, לא מוצר קשיח מקסימום 2. תהליך בריא (ערימה מתחת ליחס הנפילה) MAY להודות יותר במקביל long `/v1/responses` דרך `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. עשרות לקוחות SSE ארוכים (40–50) הם heap + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, לא "max 2". העלאה עיוורת של זה כדי "להשתמש במארח" מציגה מחדש #7849. לְהַכפִּיל** ערימות** עִם** N עצמאי `DATA_DIR` s** (#11024); לעולם לא `replicas>1` על קובץ SQLite אחד. |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(נגזר אוטומטי)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** לעקוף את תקציב הבתים של אינט הנגזר אוטומטית (25% מתקרת הזיכרון ההדוקה יותר V8/cgroup חלקי הגברה חולפת פי 8). ערכים נגזרים ומפורשים מהדקים ל-8 MiB–2 GiB. גוף גדול מהתקציב האפקטיבי נכשל מיד עם `413 body_exceeds_budget`; מחלוקת בין גופים הניתנים לשירות בנפרד נותרה ניתנת לניסיון חוזר `503`. 40–50 לקוחות SSE ארוכים בו-זמנית היא ערימת ה- + הזו, לא "מקסימום 2" קשה. קרא `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` ב- `/api/monitoring/health` לפני כוונון. |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | יחס נפילת ערמות (`heapUsed / heap_size_limit`) עבור כניסה במשקל כבד של BYTE ו- STRUCTURE (#10183, #10268, #10437). בקשה מקבילה במשקל כבד מעבר `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` נשלפת רק עם ה- `503` הניתן לניסיון חוזר כאשר הערימה היא ALSO ביחס זה או מעלה; על ערמה בריאה היא מתקבלת דרך מרווח ראש בריא במקום זאת. |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (ברירת מחדל `1`) | `src/shared/middleware/chatBodyAdmission.ts` | קיבולת נוספת מוגבלת עבור הנתיב המהיר בערימה בריא (#10437) על** שְׁנֵיהֶם** STRUCTURE ו- BYTE (`admitChatRequest`, כולל גופים ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). ללא הגבלה זו, כל בקשה עמוסה-אך-בריאה-ערימה עקפה קבלה ללא תקרה. ברגע שמספר רב של חוזי שכירות בו-זמניים פעילים דרך נתיב ערימה בריא, בקשות עמוסות נוספות נופלות לנתיב SAME bounded-wait/shed המשמש בלחץ ערימה אמיתי. `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` וסככת לחץ הערימה. הגדר ערך חיובי על פריסות מוגבלות בזיכרון שזקוקות לתקרה קשה; excess מקבל אז `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`) יורדות כדי להישאר בתוך מגבלות כותרות פרוקסי הפוך נפוצות. הגדר גבוה יותר כדי להעביר יותר מטא נתונים במעלה הזרם במחיר של כותרת תגובות גדולה יותר. |
| `OMNIROUTE_QUOTA_RECOVERY_MAX_PER_KEY` | `64` | `src/lib/quota/quotaSessionRecovery.ts` | רוב הכרטיסים לשחזור מכסות (ממתינים, פועלים או ממתינים לאישור) עשויים להחזיק מפתח API אחד. ברגע שמפתח נמצא בגבול, תור חדש מקבל את שגיאת המכסה המקורית במקום כרטיס `202` ; ניסיון חוזר לפנייה שכבר חונה עדיין מחזיר את הכרטיס שלו. ערכים לא חוקיים או לא חיוביים משתמשים בברירת המחדל. |
| `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/outboundUrlGuardPolicy.ts` | כינוי מדור קודם. החלפת לוח המחוונים שלו (עקיפה של DB ) נקראת לפני ערך הסביבה הזה; `false`, `0`, `no`, או `off` באחד מהשניים הופכים את המארח לבטל את הסימון כפי ש- `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` עושה, גם כאשר החלפת לוח המחוונים של הדגל נשמר כבוי; ערכים אחרים משאירים את השומר לשני הדגלים למטה. |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | מכבה את בדיקות המארח של URL guard היוצא, כלול בלוק מטא-נתונים בענן (כולל 169.254.0.0/16, metadata.google.internal), בנתיבי הספק שעוקבים אחר מצב ה-guard: אימות URL, גילוי מודל, ספק-צומת בסיס URLs (כולל צמתים לדירוג מחדש מרוחקים), ומבחן ה-proxy-outbound path-falladja של ה-proxy, כגון image/media outbound path-adja. זה גם מאפשר יעדי webhook פרטיים, למעט נקודות קצה cloud-metadata/link-local, שנשארות חסומות גם עם הדגל הזה. בקשות צ'אט הנשלחות דרך `BaseExecutor.execute()` שומרות על בדיקת המטא נתונים בענן. ספקים מקומיים עובדים עם ברירות המחדל: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (ברירת מחדל `true`) כבר מאפשרת מקומית ו- LAN URLs בנתיבי האימות, הגילוי והצומת של ספק; בדיקת ה-Proxy-fallback ויעדי ה-webhook הפרטיים מתייעצים רק עם הדגל הזה וחוסמים מארחי local/LAN בזמן שהוא כבוי. עוקף `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. ערך שנשמר מהבורר של לוח המחוונים מקבל עדיפות על משתנה זה. |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | אפשר לספק URLs בכתובות local/private (127.0.0.1, localhost, LAN, טווחים פרטיים) עבור אימות ספק, גילוי מודל, צ'אט ושאר הנתיבים היוצאים הצמודים לספק שמצב השמירה שולט.** ברירת מחדל `true`** (local-first): לאחר מכן, השומר חוסם את נקודות הקצה בענן-metadata — את כל 169.254.0.0/16 בתוספת שמות המארח הידועים של המטא-נתונים (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). הגדר `false` למצב ציבורי בלבד, אשר חוסם גם מארחים פרטיים ו-loopback. השומר בודק את שם המארח או IP מילולי כפי שנכתב, לפני כל חיפוש DNS ; במצב ציבורי בלבד, מעטפת האחזור הבטוח פותרת בנוסף את שם המארח ומסרבת לכל תשובה פרטית. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` מבטל את הסימון הזה בנתיבים שמפרטים את השורות שלו. ספקים מקומיים מובנים, כגון LM Studio, Ollama, vLLM, Llamafile ו-Triton, מדלגים על כל בדיקות המארח לצורך אימות מפתח וצ'אט. ערך שנשמר מהבורר של לוח המחוונים מקבל עדיפות על משתנה זה. (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | אפשר למסלולי `/v1/audio/*` (תמלולים, דיבור, תרגומים) להשתמש בצומת ספק תואם OpenAI המתארח מחוץ ל-localhost. כבוי כברירת מחדל — ניתוב אודיו למארח מרוחק משנה את זהות היציאה וחייב להיות החלטת מפעיל מפורשת. צמתי Loopback/private (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` (ולשלב הדירוג מחדש של מנוע ה-loopback) להשתמש בצומת ספק תואם OpenAI המתארח מחוץ ל-localhost — a LAN box או Tailscale peer המריץ TEI, Infinity, vLLM וכו'. כבוי כברירת מחדל, ניתוב — למארח מרוחק משנה זהות יציאה וחייב להיות החלטת מפעיל מפורשת. צמתים מסוג Loopback (localhost, 127.0.0.1, 172.16-31.x) מותרים תמיד ואינם מושפעים. הבסיס URL של צומת מרוחק חייב לעבור גם את מדיניות URL היוצאת של הספק (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). |
| `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(רֵיק)_ | `src/shared/network/localNodeHosts.ts` | שמות מארחים (מופרדים באמצעות פסיק או רווח לבן) שניתוב צומת ספק מתייחס אליהם כאל — מקומי, בדרך כלל לשם שירות Docker/Compose של מדרג מחדש, TEI או אודיו צדדי ברשת Docker של OmniRoute(`http://reranker:8080/v1`), כך שהצומת אינו זקוק ל-container מקודד קשה IP. מארחים ברשימה זכאים ל- `/v1/rerank`, `/v1/audio/*` ולבדיקת תקינות מקומית מבלי להפעיל את `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` עבור כל צומת מרוחק, ונקראים ישירות — לעולם לא דרך `HTTP(S)_PROXY` או פרוקסי מוצמד של חיבור. הם עדיין שולחים את מפתח API של החיבור. מתקבלים רק שמות של תווית יחידה ושמות `.internal`/`.local` ; שמות FQDNs ציבוריים, IP מילוליים ומטא נתונים בענן מתעלמים באזהרה. (#14635) |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | כאשר OIDC מופעל, השבת את הכניסה לסיסמה כך שמשתמשים יוכלו לאמת רק באמצעות OIDC Single Sign-On. גם הכינוי החשוף `OIDC_DISABLE_PASSWORD_LOGIN` מתקבל; דגל תכונת לוח המחוונים של אותו מקש מקבל עדיפות. (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | כינוי חשוף של `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). |
| `OMNIROUTE_DISABLE_MFA` | `false` | `src/server/auth/dashboardMfa.ts` | שחזור מכשיר שאבד עבור התחברות ללוח המחוונים להצטרפות TOTP דו-גורמי כניסה. כאשר `true`, הגורם השני ידלג רק עבור כניסה מהמארח עצמו (loopback peer ו-loopback `Host`); כניסה מרחוק ו- `POST /api/cli/connect` ממקורות אחרים עדיין דורשים את הקוד. היכנס מקומית, השבת דו-גורמי תחת הגדרות → Security (ייתכן שהקוד יישאר ריק בזמן הגדרה, כך שניתן להסיר גורם שאינו מאמת עוד; הסיסמה עדיין נדרשת), ואז בטל את ההגדרה. TOTP מכסה כניסה לסיסמה וכניסת `omniroute connect` רק — OIDC/SSO מסתמכת על הגורם השני של ספק הזהות עצמו. ראה [AUTHZ_GUIDE](../architecture/AUTHZ_GUIDE.md#optional-totp-two-factor-login-16619). |
### רשימת התקשות
```bash
# Production security minimum:
AUTH_COOKIE_SECURE=true # Requires HTTPS
REQUIRE_API_KEY=true # Authenticate all proxy calls
ALLOW_API_KEY_REVEAL=false # Never expose keys in UI
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # 5 MB limit
```
---
## 5. חיטוי קלט והגנה PII
OmniRoute מספקת הגנה דו-שכבתית: סריקת הזרקה בצד הבקשה והפשטת PII בצד התגובה.
> **מגבלות ⚠️ :** מעקות בטיחות אלו הם זיהויים _היוריסטים במאמץ הטוב ביותר_, לא חומת אש מלאה להזרקת הודעה או מערכת PII DLP. הם יכולים לייצר תוצאות חיוביות שגויות (הנחיות שפירות persona/RPG מסומנות) ושליליות שגויות (leetspeak, ריווח, דפוסים שאינם אנגלים). הם לא מספיקים לבד לציות. כוונן מצבים ובדוק מול התנועה שלך לפני שתסתמך עליהם.
### צד הבקשה: מגן הזרקה מהיר
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| --------------------------------- | ---------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | אפשר סריקה של הודעות נכנסות לדפוסי הזרקה מיידית. |
| `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | מדיניות הזרקה: `warn` = log בלבד, `block` = דחה בקשה עם 400. Legacy `redact` עושה זאת** לֹא** טקסט הזרקת רצועה; השתמש `PII_REDACTION_ENABLED` עבור בקשה לשכתוב PII. |
| `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 / סודי-אסימון ידועים ממטעני request/response. הצטרפות; מראות `PII_REDACTION_ENABLED`. |
### תגובה-צד: PII Sanitizer
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| -------------------------------- | ---------------- | ------------------------- | -------------------------------------------------------------------- |
| `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | סרוק תגובות LLM לאיתור PII שדלפה לפני החזרה ללקוח. |
| `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = mask PII, `warn` = log בלבד, `block` = שחרר את כל התגובה. |
### VS Code Tokenized-Route Context Sanitizer
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ----------------------------------- | ---------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VSCODE_SANITIZE_CONTEXT` | `1` | `src/app/api/v1/vscode/contextSanitizer.ts` | מסיר הקשר מרומז של עורך פעיל (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`...) מבקשות `/v1/vscode/[token]/*` ומסיר תוכן של קבצים רגישים המצורפים במפורש. מאובטח כברירת מחדל; הגדר ל- `0` כדי להשבית. |
### תרחישים
| תַרחִישׁ | תְצוּרָה |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **תאימות ארגונית** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=block`, `PII_REDACTION_ENABLED=true`, `PII_RESPONSE_SANITIZATION=true` (הזרקה חוסמת תיקון + request/response PII ; המצבים אינם תלויים) |
| **ניטור בלבד** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — יומן אבל לעולם לא חוסם |
| **שימוש אישי** | השאר את כל — המושבתים אפס תקורה |
---
## 6. מדיניות כלים וניתוב
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ----------------------------------------------------------- | ---------------------------- | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | שולט בגישה LLM tool/function-calling. `allowlist` = רק כלים ברשימה, `denylist` = כולם חוץ מהרשימה, `disabled` = ללא הגבלות. |
| `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | נתיב למניפולציה של חוקי ה- JSON קובץ (per-model/protocol במעלה הזרם). |
| `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-*` model IDs מלקוחות Claude Code דרך חשבון Claude Code OAuth במקום לדרוש קידומת ספק. קידומות ספק מפורשות עדיין מנצחות. ניתן להגדרה גם באמצעות בורר לוח מחוונים בדף ספק Claude. |
| `OMNIROUTE_REDACT_THINKING` | `true` | `open-sse/executors/base/redactThinkingBeta.ts` | הגדר `false` להפסיק OmniRoute להוסיף את `redact-thinking-2026-02-12` Anthropic בטא עצמו (בלוקים ריקים לחשיבה של חתימה בלבד). בקשות עם `thinking.display: "summarized"` מדלגות על זה בלי קשר; גרסת ביתא של עריכת משא ומתן על ידי לקוח או הצטרפות ל- `requestDefaults.redactThinking` תואמת CC שומרת על זה. בקשות Claude OAuth שומרות על הבטא (היא חלק מטביעת האצבע של Claude Code OAuth ) אלא אם דגל התכונה `CLAUDE_OAUTH_SUMMARIZED_THINKING_UNREDACTED` מופעל כברירת מחדל. |
| `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | התנהגות `resolveBareModelToConnectionDefault` מדור קודם (#4825): החלף כל שם דגם חשוף ב- `defaultModel` של החיבור שנבחר. כבוי כברירת מחדל, רק `auto` או דגם ריק מוחלף; רושם אזהרה אחת לזוג כאשר הוא פועל. |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | כובע מקביל לכל דגם עבור שילובים עגולים (#9100). הסמפור המשולב של רובין עגול היה מוגבל ב-3 בקשות בו-זמנית לכל דגם ללא ביטול, מה שגרם לתעבורה בקצב גבוה יותר מאחורי המכסה הזו. מאומת ל- `>= 1`, מהודק ל- `<= 32`. |
| `OMNIROUTE_AGENTIC_STALL_FAILOVER` | `false` | `open-sse/services/combo/agenticStallFailover.ts` | הצטרפות: הגדר ל- `1` (או `true`) כך שחבר משולב שעונה לפנייה של תוצאה של כלי עם קריינות `finish: stop` + + zero כלי קריאות נכשל אל היעד הבא (אסטרטגיות לולאת עדיפות, סיבוב רובין והפעלות מוצמדות). אם אף מטרה לא מצליחה יותר, התשובה שנתקעה מוחזרת במקום שגיאה, וגם מפסק הספק או נעילת דגם לא מחויבים. תור הזרימה מעוכב מהלקוח עד להכרעת הדין. בקשות המשתמשות בצורת Responses API `input` אינן מסווגות. ברירת מחדל OFF. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | הסכמה מסוכנת המדלגת על בדיקת ההקשר המקומי של OmniRoute/ max-input-token עבור בקשות ישירות של דגם יחיד. ספקים במעלה הזרם עדיין אוכפים את המגבלות האמיתיות שלהם; דחיסה מהירה ומכסה אסימון הפלט של הדגם נשארים פעילים. עדיפות אפקטיבית היא תכונה דגלי 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 שמכיל את אותו מסמך `providers:` כמו `OMNIROUTE_SELF_HOSTED_PROVIDERS`, עבור פריסות המעדיפות קובץ על פני env var inline. כל אחד מפעיל את הערך באירוח עצמי. |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(בטל מסלול פתוח — )_ | `open-sse/services/selfHostedEntry.ts` | מפתח API משותף אופציונלי עבור הערך המאוחד מארח בעצמו (פיגום D5, שמור למערכת המכסות לכל מפתח). כאשר מוגדר, בקשות חייבות לכלול `Authorization: Bearer `. לא מוגדר: המסלול פתוח, תואם לדפוס הקיים של הספק המקומי המתארח בעצמו (פריסה loopback/trusted-network ). |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(לא מוגדר)_ | `open-sse/services/routingStrategies.ts` | מסמך YAML `strategy:` מוטבע עבור מנוע הניתוב הדטרמיניסטי (M2/RIC-740, D3) — blacklist/whitelist, מפסק קירור, עדיפות לעלות, מודע להשהייה, שרשרת נפילה. עוקף בלוק `strategy:` מוטבע המקונן בתוך `OMNIROUTE_SELF_HOSTED_PROVIDERS`, לכל מפתח. ראה `docs/routing/DETERMINISTIC_ROUTING.md`. |
| `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(לא מוגדר)_ | `open-sse/services/routingStrategies.ts` | נתיב לקובץ YAML שמכיל את אותו מסמך `strategy:` כמו `OMNIROUTE_SELF_HOSTED_STRATEGY`, עבור פריסות המעדיפות קובץ על פני env var inline. |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(לא מוגדר)_ | `open-sse/services/conversationTracker.ts` | הגדר `1` להפסיק לאסוף היסטוריית שיחות. `resolveConversationId()` מחזיר תוצאה ללא מעקב לפני שהוא קורא SQLite או מנתח היסטוריית הודעות, וגם IDs שסופק על ידי הלקוח מכוסים. הטיפול בהפעלת ניתוב לא השתנה והרשומות הקיימות אינן נמחקות. עבור פריסות שאינן משתמשות בתצוגת השיחה של לוח המחוונים ורוצות שהשולחן יפסיק לגדול. |
| `OMNIROUTE_NADIR_API_KEY` | _(לא מוגדר)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | מפתח API עבור אסטרטגיית הנתב המשולבת האוטומטית `nadir` להצטרפות, בשימוש כאשר `config.nadir.apiKey` של המשולב אינו מוגדר. אופציונלי: שיחות ללא מפתח נוחתות בשכבה האנונימית של Nadir, שהיא מוגבלת בתעריף לכל IP ולכן אינה ניתנת לשימוש מאחורי שער משותף. רָגִישׁ; העדיפו את השדה לכל שילוב כאשר שילובים משתמשים בחשבונות שונים. |
| `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | מקור הבסיס של החלטת Nadir API, משמש כאשר `config.nadir.baseUrl` של המשולב עצמו אינו מוגדר. נחוץ רק עבור Nadir שמתארח בעצמו, ששומר על ראשים מהירים בתוך הרשת שלך. `/v1` נגרר נסבל ומופשט. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | חלון שבועי למגבלות שימוש ב- USD לכל מפתח API (אכיפה של בקשה, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: השבוע מסתיים באיפוס השבועי המוקדם ביותר מבין החיבורים במעלה הזרם שאליהם המפתח יכול להגיע, או שהוא 7 ימים מתגלגלים כאשר אף אחד מהם אינו ידוע. `calendar`: השבוע המקומי מיום שני 00:00 עד יום שני הבא 00:00, זהה לכל מפתח. `calendar` מומלץ כאשר מאגר אחד של חשבונות במעלה הזרם משותף להרבה מפתחות מתוקצבים בנפרד. ערכים לא חוקיים נופלים בחזרה ל- `provider`. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(אזור זמן תהליך)_ | `src/lib/usage/apiKeyUsageLimits.ts` | אזור זמן IANA (לדוגמה `Asia/Shanghai`) המגדיר את יום שני 00:00 עבור החלון השבועי `calendar`. לא מוגדר או לא חוקי: אזור הזמן של תהליך OmniRoute (ה- `TZ` של המארח או המכולה, שלעתים קרובות אינו מוגדר, כלומר זמן אוניברסלי מתואם, בתמונות קונטיינר). התעלמו במצב `provider`. |
| `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | ברירת המחדל של מספר הכלים המרבי המותר בבקשה (ברירת מחדל OpenAI ). מספרים שלמים חיוביים בלבד; ערכים לא מוגדרים או לא חוקיים לשמור `128`. ספק עם מגבלת known/proactive (`grok-cli` 200, `nvidia` 1536) עדיין מחיל מכסה משלו — זה רק מזיז את תקרת ברירת המחדל. למטרות בפורמט קלוד אין מכסה ברירת מחדל ( API של Messages אין כזו); גבול נלמד עדיין חל. |
| `OMNIROUTE_TOOL_OUTPUT_IMAGE_MAX_COUNT` | `16` | `open-sse/translator/request/openai-responses.ts` | תגובות לתרגום צ'אט: כמה תמונות פלט של כלי (`function_call_output`, `custom_tool_call_output`, role `tool`) נשלחות מחדש כחלקי תמונת משתמש לכל בקשה. החדשים ביותר נשמרים וכל אחד ישן יותר הופך למציין מיקום טקסט עם `tool_call_id` שלו. מספרים שלמים חיוביים בלבד; ערכים לא מוגדרים או לא חוקיים לשמור `16`. |
| `OMNIROUTE_TOOL_OUTPUT_IMAGE_MAX_BYTES` | `20971520` (20 MB) | `open-sse/translator/request/openai-responses.ts` | הגודל הכולל של תמונת הפלט של הכלי URLs נשלח מחדש לכל בקשה באותו תרגום. התמונות שעברו את התקציב יוסרו קודם כל, עם אזהרה אחת לכל בקשה. מספרים שלמים חיוביים בלבד; ערכים לא מוגדרים או לא חוקיים לשמור `20971520`. |
| `OMNIROUTE_RESPONSES_STRICT_TOOL_HISTORY` | `false` | `open-sse/translator/helpers/responsesToolHistory.ts` | כיצד מטפלים בהיסטוריית הכלי Responses בחוסר עקביות: פלט ללא קריאה, קריאה ללא פלט, `call_id` חסר, ארוך מדי או לא חוקי, או ארגומנטים היסטוריים שגויים. כבוי, OmniRoute מתקן את ההיסטוריה ומשגר אותה (פלטים יתומים נשמטים, שיחות שלא נענו מקבלות פלט ריק, מזהים מוטבעים או מהודקים, ארגומנטים שגויים הופכים `{}`). מופעל, הבקשה מקבלת `400` לפני השליחה; היסטוריה חוקית מועברת עם מזהי השיחה והארגומנטים JSON כפי שנשלחו. מקבל `true` או `1`; כל ערך אחר שומר על ברירת המחדל. |
| `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(עַל)_ | `open-sse/executors/syntxChat.ts` | קריאה לכלי המחוות הנחיות SYNTX.ai: unset או `1`/`true`/`on`/`yes` מזריק את קטלוג הכלים המקומי לפקודה; כל ערך אחר (למשל `0`) מדלג על הזרקה זו. |
---
## 7. URLs & Cloud Sync
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL בצד השרת עבור עבודות סנכרון פנימיות להתקשרות `/api/sync/cloud`. שמור את זה כ- loopback/container URL גם כשהאפליקציה נמצאת בשרת פרוקסי ציבורי. כישורי A2A גם משתמשים בו (ראה `OMNIROUTE_BASE_URL`) ונכשלים במקום לשלוח מפתח API ל-http URL ציבורי רגיל. |
| `CLOUD_URL` | _(רֵיק)_ | `src/lib/cloudSync.ts` | נקודת קצה ממסר ענן URL (תכונת פרימיום). |
| `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | פסק זמן HTTP לבקשות סנכרון בענן. |
| `OMNIROUTE_BUILD_PROFILE` | `full` | תצורת בניית חבילת אינטרנט | פרופיל זמן בנייה (מוגדר ל- `minimal` כדי לא לכלול פיזית מודולים מורשים מהחבילה). |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ פלט עצמאי_ | `scripts/build/colocate-standalone.mjs` | עקיפת זמן בנייה עבור ספריית הפלט העצמאית הנצרכת בשלב ה-colocation שלאחר הבנייה. לא הגדרת זמן ריצה. |
| `OMNIROUTE_DIST_DIR` | `dist/` (שורש ריפו) | `scripts/build/prepublish.ts` | עקיפת זמן בנייה עבור הספרייה ששלב הפרסום (`prepublish.ts`) כותב לתוכו את חבילת CLI, במקום `dist/` מתחת לשורש ה-repo. הספרייה נמחקת לפני הבנייה. לא הגדרת זמן ריצה. |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(רֵיק)_ | `src/lib/cloudSync.ts` | סוד משותף המשמש לאימות חתימת HMAC-SHA256 של תגובות Cloud Sync. |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | הגדר ל- `true` כדי לאפשר לנקודת הקצה של Cloud Sync להחליף אישורים מקומיים. ברירת המחדל היא `false`. |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | הגדר ל- `true` כדי לדחות תגובה לא חתומה של Cloud Sync כאשר לא מוגדר סוד מקומי (#13679). חתימה שקיימת תמיד מאומתת — ותמיד נדחית כאשר `OMNIROUTE_CLOUD_SYNC_SECRET` אינו מוגדר — ללא קשר לדגל זה. ברירת המחדל הופכת לאכיפה בגרסה 3.9. |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | הגדר ל- `true` כדי לחזור ל-v3.8.5 התנהגות "ייבא הכל" בשלב אחד ללא אישור משתמש. |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, לוח מחוונים, סנכרון | URL הפונה לציבור עבור OAuth redirect_uri, קישורי לוח מחוונים ו- URLs ציבורי שנוצר. הגדר את זה ל- URL הציבורי היציב כאשר OAuth callbacks או קישורי דפדפן שנוצרו חייבים להשתמש במארח הפוך קנוני. |
| `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` | יציאת fallback בצד לקוח לתצוגה URLs כאשר לא ידוע מקור (SSR/tests); קרא לפני `PORT`. |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(לא מוגדר)_ | פותר ממקור ציבורי, תמונה URLs | מקור OmniRoute בעל העדיפות הגבוהה ביותר הפונה לדפדפן המשמש ליצירת URL ציבורית ואימות מקור הדפדפן שאינו לוח מחוונים. הגדר זאת כאשר OpenWebUI או ממסר אחר מגיע OmniRoute על ידי URL פנימי אך הדפדפן של המשתמש חייב להביא מדיה שנוצרה ממקור LAN, מנהרה או ציבורי. לַעֲשׂוֹת** לֹא** כולל `/v1`. |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(לא מוגדר)_ | `open-sse/config/providerPluginManifestUrl.ts` | מניפסט תוסף ספק מוחלט URL מפורסם ללקוחות צדדיים. כאשר אינו מוגדר, OmniRoute שואב את `/api/v1/provider-plugin-manifest` ממקור בקשה או HOST/PORT. |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | פרוטוקול בשימוש בעת גזירת המניפסט של תוסף הספק URL מ- HOST/PORT ללא מקור בקשה. הגדר ל- `https` מאחורי פרוקסי ציבורי שמסיים TLS כאשר לא מוגדר `OMNIROUTE_PROVIDER_MANIFEST_URL` מפורש. |
| `OMNIROUTE_TRUST_PROXY` | _(לא מוגדר)_ | `src/server/origin/publicOrigin.ts` | מצב אמון אופציונלי עבור כותרות ממקור ציבורי המועברות. Unset = אל תסמוך על `Forwarded` / `X-Forwarded-*` עבור החלטות אבטחה. `true` / `loopback` trusts העבירו host/proto רק מ-proxy loopback עם חותמת אסימון. `private` / `lan` גם סומך על עמיתים פרטיים של פרוקסי LAN, מאפשר לגשר `API_PORT` לשמור על `X-Forwarded-For` של עמית כזה, ומאפשר למסלולי LOCAL_ONLY לקבל לקוח רשת פרטית שפרוקסי כזה מדווח עליו (לעולם לא בקשת Cloudflare-tunnel, שרשרת עם loopback בלבד או שער CLI-token עם loopback בלבד). העדיפו `NEXT_PUBLIC_BASE_URL` מפורש בייצור. |
| `KIE_CALLBACK_URL` | _(לא מוגדר)_ | `open-sse/utils/kieTask.ts` | התקשרות חוזרת ציבורית URL עבור עבודות kie.ai אסינכרוניות. עקיפה בעדיפות הגבוהה ביותר לפני `OMNIROUTE_KIE_CALLBACK_URL` ו- `OMNIROUTE_PUBLIC_URL`. |
| `OMNIROUTE_KIE_CALLBACK_URL` | _(לא מוגדר)_ | `open-sse/utils/kieTask.ts` | כתיב חלופי של `KIE_CALLBACK_URL`. נופל לאחור כאשר המשתנה הראשי אינו מוגדר. |
| `OMNIROUTE_PUBLIC_URL` | _(לא מוגדר)_ | `open-sse/utils/kieTask.ts` | מקור ציבורי משמש לחיבור התקשרות חוזרת אסינכרית URLs. החזרה בעדיפות נמוכה ביותר עבור התקשרות חוזרת של kie.ai; משמש גם כ- URL ציבורי גנרי עבור ממסרים אחרים. |
| `OMNIROUTE_CROF_USAGE_URL` | `https://crof.ai/usage_api/` | `open-sse/services/usage.ts` | נקודת קצה בדיקת מכסת CrofAI המשמשת את דף השימוש. ביטול עבור ממסרים / גופי בדיקה. |
| `OMNIROUTE_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | ClinePass נקודת קצה מכסה של 5 שעות / שבועיות / חודשיות המשמשת את דף השימוש. ביטול עבור ממסרים / גופי בדיקה. |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | נקודת קצה רשמית OpenCode Go שאושרה על ידי מפתח API, המשמשת את דף השימוש. ביטול עבור ממסרים / גופי בדיקה. |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | סנתז כותרות זהות OpenCode CLI (User-Agent, x-opencode-client/project, request/session UUIDs) על בקשות opencode-go/zen במעלה הזרם שהלקוח לא שלח, כך Cloudflare על VPS egress מקבל אותן (#6210/#5997). פועל כברירת מחדל מאז #10571; בטל הצטרפות עם `false`/`0`/`no`/`off`. |
| `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | משתמש-סוכן ברירת מחדל בשימוש כאשר `OPENCODE_SYNTHESIZE_CLI_HEADERS` מופעל ולא הוגדרה עקיפה `_USER_AGENT` לכל ספק. מוחל רק על מבצעי Opencode. בבקשה ללא מפתח, השערים במעלה הזרם, ערך מוגדר שאינו נושא `opencode/= 1.17>` מוחלף בברירת המחדל הזו במקום בסירוב. |
| `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (מופעל) | `open-sse/utils/opencodeHeaders.ts` | העבר את כותרות ייחוס האפליקציה (`x-session-id`, `x-title`, `http-referer`) לספקים במעלה הזרם, כך שבקשה שמתחילה בתוך רתמה רשומה שומרת על זהותה דרך הנתב (מפתח OpenRouter publisher Gates על אלה). `0`/`false`/`no`/`off` שומר על זהות registry/operator ומפיל ערכים שסופקו על ידי הלקוח. כותרות מותאמות אישית בהגדרת מפעיל תמיד מנצחות את ערכי הלקוח. |
| `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | ערך עבור כותרת `x-opencode-client` המסונתז כאשר `OPENCODE_SYNTHESIZE_CLI_HEADERS` פועל. |
| `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | ערך עבור כותרת `x-opencode-project` המסונתז כאשר `OPENCODE_SYNTHESIZE_CLI_HEADERS` פועל. |
| `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(לא מוגדר)_ | `open-sse/config/providerErrorRules.ts` | קבוצה יעילה של ספקים שהכשלים שלהם במעלה הזרם נתפסים על ידי יציאת IP (אחד 429 מחנה כל חיבור אח ואחד שחולק את IP הזה). Unset משתמש בברירת המחדל החופשית `opencode,opencode-go,opencode-cli`; `none`/`off`/`false`/`0` משבית את המפל לחלוטין; רשימה מופרדת בפסיקים מחליפה את הסט. תוכניות בתשלום מועברות לחשבון במעלה הזרם ויכולות להשבית אותה בבטחה (#9611). |
| `OMNIROUTE_EGRESS_QUOTA_ROTATION_PROVIDERS` | _(לא מוגדר)_ | `open-sse/config/providerErrorRules.ts` | היקף סיבוב יציאה ממכסה סירוב. Unset משאיר חבר בבריכה בצד ב-429 רק עבור משפחת ה-IP שלמעלה; `all` מרחיב את הכתיבה לכל ספק, כך שהגבלת תעריף שמתקבלת דרך חבר מבצעת את היציאה הבאה של הבחירה במקום אחר. מתעלמים מכל ערך מלבד `all`. צריך `PROXY_SKIP_RECENTLY_FAILED` (מופעל כברירת מחדל). החנות מקודדת לפי כתובת יציאה, לא (ספק, כתובת), כך שהרחבו 429 חניונים שחברים עבור כל ספק עד שחולפת התקופה (5 דקות, הכפלה ל-15). תוצאת קריאה לכל תגובה, כך ששינוי חל ללא הפעלה מחדש. |
| `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(לא מוגדר)_ | `open-sse/executors/opencodeFreeTierContract.ts` | הגדר ל- `off` כדי להפסיק להתאים את הגוף של בקשות OpenCode ללא מפתח (דגל סטרימינג ורשימת כלים). כותרות עדיין מיושמות. קרא לפי בקשה, כך שהשינוי ייכנס לתוקף באופן מיידי. |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(לא מוגדר)_ | `open-sse/executors/opencodeFreeTierContract.ts` | שמות כלים מופרדים בפסיקים להכרזה על בקשת OpenCode ללא מפתח שאינה נושאת אף אחד, כאשר דבר עדיין לא נצפה עבור הדגם הזה. ריק נופל בחזרה למציין מיקום בודד שהדגם נאמר לו לא להתקשר. לכל היותר 32 ערכים, `[A-Za-z_][A-Za-z0-9_-]{0,63}`; מתעלמים מערכים לא חוקיים. |
| `OPENCODE_FREE_TIER_CREDENTIAL` | `public` | `open-sse/executors/opencodeFreeTierContract.ts` | אישור נשלח על הנתיב החופשי (`https://opencode.ai/inference/v1`). מאז 2026-10-21 הנתיב הזה עונה על 403 `Model access is disabled` למפתח API אמיתי ומשרת את המילולי האנונימי במקום. `key` שומר על מפתח API של המפעיל, `none`/`off` לא שולחים כותרת אישור, כל מילולית אחרת נשלחת כאסימון הנושא. קרא לפי בקשה. |
| `OPENCODE_FREE_TIER_RELAY_URL` | לא מוגדר | `src/lib/opencodeFreeRelay.ts` | בסיס URL של ממסר Bun עבור בקשות OpenCode בשכבה חופשית. כשהן מוגדרות, בקשות אלו נושאות את ההנחיה של מערכת OpenCode CLI ואת ערכת הכלים ונשלחות דרך הממסר (`scripts/ops/opencode-free-relay.ts`), מכיוון שה-upstream עונה 429 ללקוחות שאינם Bun HTTP. Loopback URLs מופעלים עם השרת כאשר `bun` נמצא ב- PATH; נתיב ב- URL מתעלם. `http://` רגיל מתקבל רק עבור מארחי loopback (`localhost`, `127.0.0.0/8`, `::1`); כל מארח אחר חייב להשתמש `https://`, אחרת הבקשות נכשלות עם שגיאה מפורשת. השלמות צ'אט בלבד. קרא לפי בקשה. |
| `OPENCODE_FREE_RELAY_BUN` | `bun` על PATH | `src/lib/opencodeFreeRelay.ts` | Bun binary משמש להפעלת הממסר. |
| `OPENCODE_FREE_RELAY_SCRIPT` | `scripts/ops/opencode-free-relay.ts` מתחת לשורש החבילה | `src/lib/opencodeFreeRelay.ts` | נתיב תסריט הממסר. ברירת המחדל נפתרת משורש החבילה המותקנת ולאחר מכן מספריית העבודה. |
| `OPENCODE_FREE_RELAY_HOST` | `127.0.0.1` | `scripts/ops/opencode-free-relay.ts` | מארח האזנה ממסר. |
| `OPENCODE_FREE_RELAY_PORT` | `20199` | `scripts/ops/opencode-free-relay.ts` | יציאת האזנה ממסר. |
| `OPENCODE_FREE_RELAY_UPSTREAM` | `https://opencode.ai` | `scripts/ops/opencode-free-relay.ts` | מקור הממסר מעביר אליו. חייב להיות `https://` (`http://` רק עבור מקור בדיקת loopback); הממסר מסרב להתחיל אחרת. |
| `OPENCODE_FREE_RELAY_TOKEN` | לא מוגדר | `scripts/ops/opencode-free-relay.ts`, `open-sse/executors/opencodeRelay.ts` | סוד משותף. OmniRoute שולח את זה ב- `x-opencode-relay-auth`; הממסר עונה 401 בלעדיו. חובה: ממסר עם `OPENCODE_FREE_RELAY_HOST` ללא loopback מסרב להתחיל בלעדיו. |
| `OPENCODE_FREE_RELAY_PROXY_ALLOWLIST` | לא מוגדר | `scripts/ops/opencode-free-relay.ts` | פרוקסי יציאת `host` או `host:port` מופרדים בפסיקים שממסר ללא לולאה חוזר מקבל ממתקשרים (`x-opencode-relay-proxy`); כל פרוקסי אחר עונה 403. התעלמו ב-loopback bind. |
| `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | הגדרות Ollama Cloud URL משמשות לגרידת מכסות. ביטול עבור ממסרים / גופי בדיקה. |
| `OMNIROUTE_OLLAMA_CLOUD_BALANCE_URL` | `https://ollama.com/api/balance` | `open-sse/services/ollamaCloudBalance.ts` | Ollama Cloud תיעד נקודת קצה איזון במעלה הזרם (`GET https://ollama.com/api/balance`, `Authorization: Bearer `). קרא פעם אחת בעת טעינת המודול. משמש תחילה עבור מכסת Ollama Cloud כאשר לחיבור יש מפתח API ; מגרד קובצי ה-cookie של דף ההגדרות נשאר כחלופה. ביטול עבור ממסרים / גופי בדיקה. |
| `OLLAMA_USAGE_COOKIE` | _(לא מוגדר)_ | `open-sse/services/usage.ts` | קובץ cookie Ollama Cloud `__Secure-session` המשמש לגירוד מכסה של דפי הגדרות. רָגִישׁ; העדיפו את שדה לוח המחוונים לכל חיבור כאשר מוגדרים מספר חשבונות. |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(לא מוגדר)_ | `open-sse/services/usage.ts` | חלופי Ollama Cloud `__Secure-session` cookie env var. רָגִישׁ; העדיפו את שדה לוח המחוונים לכל חיבור כאשר מוגדרים מספר חשבונות. |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(לא מוגדר)_ | `open-sse/services/usage.ts` | חלופי Ollama Cloud `__Secure-session` cookie env var בשימוש לפני הכינויים הקצרים יותר. רָגִישׁ; העדיפו את שדה לוח המחוונים לכל חיבור כאשר מוגדרים מספר חשבונות. |
| `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | CodeWhisperer (AWS Kiro) מגביל את נקודת הקצה. ביטול עבור ממסרים / גופי בדיקה. |
> [!IMPORTANT]
> בעת פריסה מאחורי פרוקסי הפוך (nginx, Caddy), הגדר `NEXT_PUBLIC_BASE_URL` ל- URL הציבורי היציב שלך (למשל, `https://omniroute.example.com`) כאשר התקשרויות OAuth או קישורים ציבוריים שנוצרו חייבים להשתמש בשם המארח הזה. בלי זה, התקשרות חוזרת OAuth יכולה להיכשל מכיוון שה-redirect_uri לא יתאים וקישורים ציבוריים שנוצרו יכולים להצביע על מקור המכולה הפנימי.
>
> שמור `BASE_URL` כ- URL loopback/container עבור עבודות שרת לשרת. אל תשתמש בדפדפן `Origin` או בשם מארח ציבורי עבור אחזור עצמי פנימי הנושא אישורים.
>
> כתיבת לוח מחוונים מאומתת אינה דורשת URL בסיס ציבורי סטטי: לוח המחוונים שולח בקשות לא בטוחות במקור זהה עם אסימון CSRF הקשור להפעלה. OmniRoute עדיין מרכזת אימות מקור ציבורי עבור אינטגרציות של דפדפנים שאינם בלוח המחוונים: קודם כל מהימנים URL env vars ציבוריים מפורשים; מתעלמים מכותרות `Forwarded` / `X-Forwarded-*` גולמיות, אלא אם כן `OMNIROUTE_TRUST_PROXY` מופעל והעמית ה-proxy המיידי מסומנת בחותמת אסימון כאמין. אל תשתמש בהגדרות CORS כדי לתקן בקשות ללוח מחוונים מאותו מקור; CORS מיועד רק עבור לקוחות דפדפנים חוצי מוצא.
---
## 8. פרוקסי יוצא
נתב שיחות ספק LLM במעלה הזרם דרך פרוקסי HTTP או SOCKS5 עבור בקרת יציאה, ניתוב גיאוגרפי או מיסוך IP.
ברירת המחדל של `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` היא `true`. הגדר אותו ל- `false`, `0`, `no` או `off` כדי לכפות על HTTP/1.1 על שולחני Undici ב- `open-sse/utils/proxyDispatcher.ts` ו- `open-sse/utils/proxyFetch.ts`: יציאה ישירה, פרוקסי HTTP(S)/SOCKS, ממסרים וניסיונות חוזרים של שקע חדש שלהם. זה שומר על אימות אישור TLS, אימות פרוקסי, מגבלות חיבור והגדרות שמירה בחיים. הפעל מחדש OmniRoute לאחר שינוי זה מכיוון שהשולחים נשמרים במטמון וסוכני ממסר נוצרים בעת ההפעלה. המתג אינו שולט בטביעת אצבע של wreq TLS או בהובלות ספציפיות לספק.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------------------- | ---------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | הפעל את סוכן ה-Proxy SOCKS5 עבור שיחות במעלה הזרם. ביטול הסכמה עם `false`. |
| `OMNIROUTE_GZIP_REQUEST_BODIES` | `true` | `open-sse/executors/base/gzipRequestBody.ts` | Gzip גוף הבקשה שנשלח ל- `api.anthropic.com` הרשמי (4096 תווים +, חיבורים ישירים בלבד; דילוג מאחורי פרוקסי, התחזות TLS או `NODE_EXTRA_CA_CERTS`). Anthropic מקבל gzip בלבד. קידוד סירוב (415, 400/403 שאינו Anthropic, או מקור JSON-parse 400) נשלח לא דחוס פעם אחת והמקור נשאר לא דחוס למשך שעה אחת. בטל הסכמה עם `0`, `false`, `off` או `no`. |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | צד הלקוח | מודעות מצד הלקוח לזמינות SOCKS5. |
| `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | דגל תכונה מופעל כברירת מחדל (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). מאגרי פרוקסי וסיבוב לכל חשבון מפסיקים להגיש מחדש לחבר שזה עתה נכשל (סירב לבדיקה TCP, או 429 דרכו) לתקופה המוכפלת בכל חזרה, עד למכסה. `false` משחזר בחירה רגילה. |
| `SELECTOR_CONTROL_ALLOWLIST` | _(לא מוגדר)_ | `src/lib/proxySubscription/selectorGuard.ts` | רשימת היתרים עבור יעדי בקרת בורר ליבה מקומית מעבר ל-loopback (מארחים מופרדים comma/space או IPs, `*` פותחת LAN/private אך לעולם לא metadata/link-local). Loopback מעל http/https מותר כברירת מחדל. ערך DB של לוח המחוונים מנצח את המשתנה הזה כשהוא מוגדר ואינו ריק. |
| `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | תקופת הבסיס (ms) של 429 ההפרזה, מוכפלת בכל חזרה. קרא פעם אחת בהפעלה. מוגבל `1000..3600000`; מחוץ לטווח או בלתי קריא חוזר לברירת המחדל עם אזהרה. |
| `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | מכסה (ms) של 429 ההפרזה. קרא פעם אחת בהפעלה. מוגבל `1000..3600000`; מחוץ לטווח או בלתי קריא חוזר לברירת המחדל עם אזהרה. כאשר המכסה נמצא מתחת לבסיס, הוא נופל בחזרה לברירת המחדל. הורדת המכסה גם מקצרת את שכחת הפסים: ערכים מטהרים `2 x max` לאחר פקיעת התוקף. |
| `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונת הצטרפות (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). עבור ספקים שהמכסה שלהם מחולקת לפי כתובת יציאה, דרג חבר בבריכה שחולק את כתובת היציאה של חבר שסירב לאחרונה, ממש מתחת לחברים בריאים. הזמנה בלבד, לעולם לא נכללה. צריך `PROXY_SKIP_RECENTLY_FAILED`, שמייצר את אות הסירוב שהוא קורא. |
| `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | חלון ריבאונד (ms) מכסה את ההתראות של `proxy.set_aside` webhook חוזרות לכל חבר בבריכה, כך שפרץ של סירובים שולח אירוע אחד. קרא על כל פולט. מוגבל ל- `1000..3600000`; מחוץ לטווח או בלתי קריא נופל בחזרה לברירת המחדל בשקט. |
| `HTTP_PROXY` | _(לא מוגדר)_ | תקן Node.js | HTTP proxy עבור שיחות במעלה הזרם. |
| `HTTPS_PROXY` | _(לא מוגדר)_ | תקן Node.js | HTTPS proxy עבור שיחות במעלה הזרם. |
| `ALL_PROXY` | _(לא מוגדר)_ | תקן Node.js | פרוקסי אוניברסלי (תומך ב- `socks5://`). |
| `OMNIROUTE_PROXY_ECHO_URL` | _(לא מוגדר)_ | `src/lib/proxyEchoTarget.ts` | מצמיד את יעד ה-Echo-IP המשמש על ידי בדיקות יציאות פרוקסי ל- URL בודד. לא מופעל, הגשושית מנסה `api64.ipify.org` ואז `api4.ipify.org` כך שמנהרות IPv4-only לא ידווחו כמתות (#9694). |
| `NO_PROXY` | _(לא מוגדר)_ | תקן Node.js | hostnames/IPs מופרד בפסיקים כדי לעקוף את ה-proxy. |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | מקסימום שקעים בו-זמניים לכל משגר proxy HTTP/SOCKS שמור. זרמי SSE ארוכים כמו Codex `/v1/responses` צריכים יותר מחיבור אחד כאשר מספר בקשות חולקות את אותו proxy ברמת החשבון. ערכים מעל `256` מוגבלים. |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | פסק זמן לחיצת יד SOCKS5 (חיבור) ב-ms. הרם אותו כאשר מארח שער יחיד למגורים נפגע מקביליות גבוהה (למשל 100 בקשות בו-זמנית) — לחיצת היד האמיתית יכולה לעלות על 10 שניות מתחת למאגר רווי למרות שניתן להגיע ל-proxy, שאחרת מופיע כ- `[Proxy Fast-Fail] Proxy unreachable` שקרי. מוגבל ב- `120000`. |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | כאשר `false` (ברירת מחדל), בקשה שהפרוקסי שהוקצה לה לא מצליח לפתור היא** סירב (כישלון-סגור)** במקום ליפול חזרה לחיבור ישיר — מונע דליפות IP אמיתיות. הגדר `true` כדי לשחזר את ה- DIRECT החלפה מדור קודם. |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | זיוף טביעת אצבע TLS באמצעות wreq-js (מחקה את Chrome 124). מונה חסימת JA3/JA4. |
| `TLS_FINGERPRINT_PROVIDERS` | _(לא מוגדר)_ | `open-sse/utils/proxyFetch.ts` | רשימת ההיתרים של ספקים מופרדת בפסיקים עבור ניתוב ה-proxy TLS החדש (`open-sse/utils/proxyFetch.ts`). Direct TLS שומר על התנהגות מדור קודם כאשר אינו מוגדר; רק הספקים האלה עוברים דרך גשר טביעות האצבע Chrome-124. Groq (`api.groq.com`) אינו נכלל גם כאשר רשימת ההיתרים אינה מוגדרת, מכיוון ש-Chrome JA3 מפעיל Cloudflare 1010 בעוד ש-Native undici מגיע ל- API. |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | אפשר להקשר של דפדפן Claude Turnstile Playwright להתעלם משגיאות אישור HTTPS. |
### תרחישים
| תַרחִישׁ | תְצוּרָה |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **SOCKS5 דרך מנהרת SSH** | `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 אינו זמין במקום דליפה דרך ישירה. |
| **Legacy / dev — מאפשרים נפילה ישירה** | `PROXY_FAIL_OPEN=true`. משחזר התנהגות טרום-התקשות: חיבור ישיר בשימוש כאשר רזולוציית פרוקסי נכשלת. |
> **הערה ( אימות NVIDIA עוקף — #3226):** נקודת הקצה של אימות מפתח API של NVIDIA נתקעת כאשר היא מנותבת דרך האחזור הגלובלי proxy/TLS-patched (undici dispatcher → 504). `src/lib/providers/validation.ts::directHttpsRequest()` עוקף בכוונה את תיקון ה-proxy עבור אותה קריאת אימות באמצעות `safeOutboundFetch({ bypassProxyPatch: true })`. זהו חריג מתועד עם היקף — שהוא עושה** לֹא** להשפיע על יציאת chat/usage. המעקף מוצמד להיקף על ידי `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` | ערכי PATH נוספים לגילוי בינארי CLI (מופרדים בנקודתיים). |
| `CLI_CONFIG_HOME` | _(לא מוגדר)_ | `src/shared/services/cliRuntime.ts` | עוקף את ספריית הבית לקריאת תצורות CLI (`~/.claude`, `~/.codex`). חייב להיות מוחלט ובתוך התהליך הביתה —** אוֹ** , במיכל, נתיב רכוב בכריכה (כך פועלת `/host-home` ). כל דבר אחר נופל בחזרה למנהל הבית. |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | אפשר ל- OmniRoute לכתוב קובצי תצורה של CLI (רענון אסימון, נתוני הפעלה). הגדר ל- `false` כדי לגרום לכל כתיבה של תצורת CLI להיכשל עם שגיאה מפורשת "כתיבה מושבתת". |
| `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 (פרופילי אישור בבעלות שורש); משקף את ברירת המחדל של STATE_DIR של 5dive. |
| `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית ל-Continue CLI binary. |
| `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_WHYCODES_BIN` | `whycodes` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית ל- WhyCodes CLI הבינארי. |
| `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | Custom path to the Google Gemini CLI binary — server-side detection/health checks only; `omniroute run gemini` resolves the `gemini` binary from the system PATH. |
| `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית ל-Kilo Code CLI הבינארי. |
| `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית ל- OpenCode CLI הבינארי. |
| `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של הרמס. משותף לשני ערכי הקטלוג (`hermes` ו- `hermes-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` | Custom path to the Oh My Pi (`omp`) agent binary. |
| `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 executor. |
| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | Devin Desktop `ide_version`. עקיפות חייבות להשתמש בפורמט `x.y.z` ; ערכים לא חוקיים חוזרים לברירת המחדל המאומתת. |
| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | חבילת 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 הראשי עבור הגשר המבודד. הרתמה החיה מחליפה את הדוגמה בדגם המוחזר על ידי חשבון Devin הנוכחי. |
| `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי גשר מבודד בשימוש כאשר קוד Claude מבקש את ברירת המחדל של Sonnet. |
| `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי גשר מבודד בשימוש כאשר קוד Claude מבקש את ברירת המחדל שלו ב-Opus. |
| `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי גשר מבודד בשימוש כאשר קוד Claude מבקש את ברירת המחדל של Haiku. |
| `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי גשר מבודד בשימוש עבור סוכני משנה של קוד Claude. |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | עקיפה אופציונלית עבור ה- API לניהול מושב Codeium המשמש את מכסת Devin CLI (`GetUserStatus`). |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | עקיפה של נתיב מוחלט עבור הבינארי Augment (Auggie) CLI המשמש את ספק `auggie` המקומי. נופל בחזרה ל- `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` | בינארי משמש עבור לקוח stdio של ספק `zcode` המקומי. נופל בחזרה ל- `zcode` ב- PATH. |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | מערך JSON (≤ 16 מחרוזות) של ארגומנטים נוספים שהועברו לקובץ הבינארי `zcode` כאשר הופעל באמצעות `cliTools`. |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | ספריית עבודה עבור תת-התהליך ZCode app-server. |
| `ZCODE_TRANSPORT` | `app-server` | `open-sse/executors/zcode.ts` | `app-server` (ברירת מחדל) או `gateway`.** ניסיוני / לא נתמך:** `gateway` שולח ישירות בקשות Z.AI Coding Plan HTTP על ידי שחזור פרוטוקול הלקוח ZCode (לחיצת יד חתימה וכותרת הוכחת עבודה של הלקוח 0.16.9) ועלול להישבר כאשר ZCode מתעדכן. הוא מקבל רק את פרופיל תוכנית הקידוד האישית. |
| `ZCODE_PROVIDER_ID` | `account:zai-individual-coding-plan` | `open-sse/executors/zcode.ts` | פרופיל ספק מקורי מדויק לבחירת דגם. כאשר אינו מוגדר, נעשה שימוש בפרופיל חשבון התוכנית האישית, ויורד חזרה ל- `builtin:zai-coding-plan` (ערך התצורה שמחזיק את מפתח תוכנית הקידוד האישי). הגדר ID מדויק כגון `account:zai-start-plan` כדי להצמיד את הפרופיל הזה; פרופיל מוצמד לעולם לא נופל אחורה. |
| `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. |
| `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` | פסק זמן RPC לכל בקשה (ms) עבור קריאת ZCode app-server. |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | משך מקסימלי (ms) של סיבוב ZCode אחד לפני שהמפקח פסק זמן. |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | מרווח סקר (ms) להשלמת פניות ZCode. |
| `MINIMAX_CODE_GATEWAY_URL` | `https://agent.minimax.io/mavis/api/v1/llm/v1/messages` | `open-sse/executors/minimaxCodeGateway.ts` | נקודת קצה של שער MiniMax המנוהל העונה באמצעות קריאות כלים מקוריים. זוהי נקודת קצה פנימית של אפליקציית MiniMax Code, לא API ציבורית מתועדת: היא יכולה להשתנות ללא הודעה מוקדמת, ולאחר מכן הבקשה נכשלת עם 502 ששם את התחבורה. |
| `MINIMAX_CODE_GATEWAY_TIMEOUT_MS` | `60000` | `open-sse/executors/minimax-code.ts` | משך מרבי (מיליות) של ניסיון שער מנוהל אחד. כל השיחה (ניסיון, השבתה, ניסיון חוזר אחד) נשארת בסביבות שתי דקות, כך ששער בלתי נגיש לא יכול להחזיק חריץ דגם לאורך זמן. |
| `MINIMAX_CODE_GATEWAY_RETRIES` | `1` | `open-sse/executors/minimaxCodeGateway.ts` | ניסיונות חוזרים של שיחת שער מנוהל שנכשלה עם שגיאה חולפת (429, 5xx, חיבור הופסק). |
| `MINIMAX_CODE_CONTEXT_WINDOW` | `1000000` | `open-sse/executors/minimaxCodeGateway.ts` | חלון ההקשר שבו מתבקש שער MiniMax המנוהל. קטלוג הדגמים של מוצר MiniMax Code מכריז על 512000 כחלון ברירת המחדל של MiniMax-M3 ו- MiniMax-M3.1-Flash ומציע 1000000 כחלון שני; השער עונה בחלון הגדול יותר (בקשה של 1024056 אסימוני קלט נענתה עם 200 בתאריך 2026-10-23). הגדר את זה ל-512000 כדי לצמצם את הבקשה — התוכנית סופרת פחות ממנה. מתעלמים מכל ערך אחר, כך ששגיאת הקלדה לא יכולה לבקש חלון שאין לדגם. |
| `MINIMAX_CODE_MAX_INPUT_TOKENS` | `1000000` | `open-sse/executors/minimaxCodeGateway.ts` | תקרה (באסימוני קלט) של בקשה אחת שנשלחת לשער MiniMax המנוהל. בקשה גדולה יותר נדחתה באופן מקומי עם 413 במקום להיות מועברת, מכיוון שסירוב של השער נועל את הדגם מהחסרונות. ברירת המחדל היא חלון ההקשר של השער (1000000); ערך זה יכול להוריד את התקרה, לעולם אל תעלה אותה מעל החלון. |
| `MINIMAX_CODE_MAX_TOKENS` | `8192` | `open-sse/executors/minimaxCodeGateway.ts` | המספר המרבי של אסימונים שהשער המנוהל עשוי לענות איתם. |
| `MINIMAX_CODE_AUTH_FILE` | `~/.minimax/auth/prod//mcode-public/auth.json` | `open-sse/executors/minimaxCodeGateway.ts` | נתיב של פרופיל האימות של קוד MiniMax שמכיל את אסימון הגישה והרענון. |
| `MINIMAX_CODE_PROFILE_DIR` | `~/.minimax` | `open-sse/executors/minimaxCodeGateway.ts` | ספרייה של פרופיל MiniMax Code שמחזיק את פרופיל האישור. |
| `MINIMAX_CODE_AUTH_RECORD` | _(הדור החדש ביותר)_ | `open-sse/executors/minimaxCodeGateway.ts` | תיעוד של הפרופיל לשימוש כאשר הוא מחזיק במספר חשבונות. Empty בוחר את הדור החדש ביותר, שהוא זה שה- CLI עצמו מרענן. |
| `MINIMAX_CODE_REGION` | `en` | `open-sse/executors/minimaxCodeGateway.ts` | אזור חשבון MiniMax. הוא מחליט על נקודת הקצה של החשבון שמרעננת את האסימון ואת ספריית הפרופיל שממנה קוראים את האישור. |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | ספריית הבית של סוכן Hermes שבה OmniRoute reads/writes התצורה של Hermes CLI. מתאים ל-env var שמתקין ה-Hermes PowerShell מגדיר ב- Windows (`%LOCALAPPDATA%\hermes`). |
| `WHYCODES_HOME` | `~/.whycodes` | `src/lib/cli-helper/config-generator/whycodesHome.ts` | שורש מופע WhyCodes שבו OmniRoute reads/writes `config.toml`. אותו env var WhyCodes קורא; ברירת המחדל היא `~/.whycodes` (`%USERPROFILE%\.whycodes` on Windows). |
### סנכרון אוטומטי של פרופיל CLI
דגלים אלה של תכונה ניתנים להצטרפות וכבויים כברירת מחדל. ניתן גם להחליף אותם מלוח המחוונים של קוד CLI.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------- | ---------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | לאחר סנכרון דגם ספק, משכתב אוטומטית קבצי פרופיל `~/.codex/*.config.toml` מהקטלוג החי. דורש `CLI_ALLOW_CONFIG_WRITES`; לעולם לא משנה את הגדרות active/default Codex config, auth, Codex-lb או בחירת ספק. |
| `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | לאחר סנכרון דגמי ספק, משכתב אוטומטית קובצי פרופיל `~/.claude/profiles//settings.json` Claude Code מהקטלוג החי. דורש `CLI_ALLOW_CONFIG_WRITES`; לעולם לא משנה את תצורת active/default Claude, האישור או בחירת הספק. |
### Docker דוגמה
```bash
# Mount host binaries into the container and tell OmniRoute where they are:
CLI_EXTRA_PATHS=/host-cli/bin
CLI_CONFIG_HOME=/host-home
CLI_ALLOW_CONFIG_WRITES=true
CLI_CLAUDE_BIN=/host-cli/bin/claude
```
`CLI_CONFIG_HOME` נכנס לתוקף רק כאשר הנתיב מותקן ב-bind-mountו מהמארח — זוג אותו עם mounts כמו `~/.codex:/host-home/.codex:rw` (ראה את פרופיל `host` ב- `docker-compose.yml`). מתעלמים מנתיב שאינו בתוך הבית של משתמש המכולה וגם לא חיבור לחיבור, מכיוון שהכתיבה שם תימחק כאשר המיכל ייווצר מחדש.
התמונה פועלת כ- `USER node`, כך ש- `/root` לא מותקן** לֹא** עקיפה תקפה.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------------------- | ---------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(אוטומטי)_ | `src/shared/utils/containerEnv.ts` | כוח זיהוי מיכל מופעל (`1`/`true`) או כבוי (`0`/`false`). נחוץ רק בזמני ריצה הזיהוי האוטומטי מחמיץ. |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | אפשר בכל מקרה כתיבת תצורת CLI-tool לתוך נתיב מיכל לא מותקן. המקבילה CLI היא `--allow-container-write`. |
| `DOCKER_UPDATE_TRIGGER_FILE` | לא מוגדר | `src/lib/system/autoUpdate.ts` | תמונת Docker בלבד: לוח מחוונים** עדכן עכשיו** כותב בקשת JSON לקובץ הזה (חייב להיות בתוך `DATA_DIR`) כדי שצופה בצד המארח ימשוך וייצור מחדש את המיכל. עיין [במדריך Docker](../guides/DOCKER_GUIDE.md#dashboard-updates-in-docker). |
### CLI בינארי (`omniroute`) עוזרים
משתנים אלה מכוונים את ההתנהגות של הבינארי `omniroute` CLI עצמו (לא זיהוי ה-sidecar לעיל).
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------- | --------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_LANG` | _(מַעֲרֶכֶת)_ | `bin/cli/i18n.mjs` | כפה על שפת פלט CLI. מיקום BCP-47 (למשל `en`, `pt-BR`). עוקף מערכת locale env vars (LC_ALL, LC_MESSAGES). |
| `OMNIROUTE_SHOW_LOG` | _(לא מוגדר)_ | `bin/cli/runtime/processSupervisor.mjs` | הגדר ל- `1` כדי להעביר את השרת stdout/stderr למסוף במצב מפוקח. שווה ערך לדגל `--log` ב- `omniroute serve`. |
| `OMNIROUTE_CLI_TOKEN` | _(לא מוגדר)_ | `bin/cli/api.mjs` | אסימון אישור מכונה מוזרק ככותרת `x-omniroute-cli-token`. נוצר אוטומטית במשימה 8.12. |
| `GEMINI_CLI_HOME` | _(לא מוגדר)_ | `bin/cli/commands/setup-gemini.mjs` | שורש Gemini ביתי מתמשך; ריצה חד-פעמית משתמשת בבית מבודד זמני. |
| `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | תקופת חסד באלפיות שניות לפני הרג בכוח של ילד עם אות CLI. |
| `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(לא מוגדר)_ | `bin/omniroute.mjs` | הגדר ל-1 עם DATA_DIR מפורש כדי לדלג על קובץ הסביבה של ספריית הנתונים של המשתמש המוגדר כברירת מחדל. |
| `OMNIROUTE_SYNC_TOKEN` | _(לא מוגדר)_ | `bin/cli/commands/sync.mjs` | אסימון סנכרון עבור `omniroute sync bundle` (`GET /api/sync/bundle` מקבל רק אסימון סנכרון, לא מפתח API ). שווה ערך ל- `--token`. |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | פסק זמן HTTP לכל ניסיון (ms) עבור בקשות שרת CLI →. |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | הזמן המקסימלי (ms) ה- CLI ממתין לנקודת הקצה של בריאות השרת לפני הדפסת אזהרת פסק זמן. שימושי להתחלות קרות איטיות (למשל Windows). ניתן להגדרה גם באמצעות `--ready-timeout`. |
| `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | הגדר ל- `1` כדי להדפיס אבחון retry/backoff ל-stderr במהלך פקודות CLI. |
| `OMNIROUTE_PLUGIN_PATH` | _(לא מוגדר)_ | `bin/cli/plugins.mjs` | ספרייה מותאמת אישית לגילוי פלאגין CLI (חבילות `omniroute-cmd-*` ). ברירת המחדל היא `~/.omniroute/plugins/` כאשר אינו מוגדר. CLI-only — זה לעולם לא מגיע לסורק התוספים בצד השרת, שמצביע על ידי `OMNIROUTE_PLUGINS_DIR` (סעיף 2). |
| `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(לא מוגדר)_ | `bin/omniroute.mjs` | דחק בדיקות עדכונים כאשר הוא מוגדר לכל ערך שאינו ריק: הודעת CLI ביציאה מהתהליך והבאנר "עדכון זמין" של לוח המחוונים (`GET /api/system/version` לאחר מכן מדלג על חיפושי npm, GitHub וחדשות). הודעת CLI נשארת כבויה גם במצב CI, מצב שקט ופלט ללא טקסט. |
| `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(נִגזָר)_ | `bin/cli/commands/doctor.mjs` | חיים URL נבדק על ידי `omniroute doctor`. אפשרות `livenessUrl` פרוגרמטית עדיפה; אחרת ערך זה משמש מילולית. לא מוגדר, ה- CLI גוזר את נקודת הקצה `/api/health/degradation` של לוח המחוונים המקומי. |
| `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | נתיב קטלוג ספק בשימוש על ידי פקודות ספק CLI. אפשרות `catalogPath` פרוגרמטית עדיפה. נתיבים מוחלטים משמשים כפי שהם; נתיבים יחסיים נפתרים משורש הפרויקט. לא מוגדר, ה- CLI משתמש בספריית הקבועים של ספק, עם קובץ `providers.ts` מדור קודם כ-fallback. |
| `OMNIROUTE_PROVIDER_TEST_MODEL` | _(ברירת המחדל של ספק)_ | `bin/cli/provider-test.mjs` | מודל נפילה גלובלי לבדיקות חיבור לספקי CLI. עדיפות היא מודל חיבור מוגדר, ספק ספציפי לעקוף מודל, ערך זה, ולאחר מכן מודל הבדיקה המובנה של הספק. |
---
## 10. אינטגרציות של סוכן פנימי ו- MCP
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_BASE_URL` | זיהוי אוטומטי | `open-sse/mcp-server/server.ts` | URL מפורש לכלי MCP/A2A כדי להגיע OmniRoute. עוקף את הזיהוי האוטומטי של המארח המקומי. כישורי A2A נכשלים במקום לשלוח מפתח API ל- URL הזה (או ל- `BASE_URL` שאליו הוא נופל) כאשר הוא http רגיל לכתובת ציבורית, שם מארח ציבורי מנוקד או מארח ענן-metadata, או בעל אישורים: השתמש ב-https, או ב-http ל-loopback, שם מכיל או שירות, או כתובת פרטית. |
| `OMNIROUTE_API_KEY` | _(לא מוגדר)_ | MCP/A2A | מקש API עבור קריאות פנימיות לכלי MCP. מיומנויות A2A שולחות אותו רק למתקשר ללא מקש API (הפעלת לוח המחוונים); מתקשר עם מפתח פועל עם שלו. |
| `OMNIROUTE_API_KEY_ID` | _(לא מוגדר)_ | `open-sse/mcp-server/audit.ts` | מפתח ID לייחוס יומן ביקורת MCP. |
| `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` | מפעיל את נקודת הקצה הרשומה של offline/local Issue Agent. השאר מושבת אלא אם כן מפעילים באופן מפורש זרימות עבודה מקומיות של טריאז'ים מוקלטים. |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(לא מוגדר)_ | `src/lib/issueAgent/execution.ts` | זמן קצוב (ms) עבור ריצה אחת של סוכן הנפקה שהוקלט. מהודק למקסימום פנימי; חוזר לברירת המחדל המובנית כאשר אינו מוגדר או אינו חוקי. |
| `OMNIROUTE_CONTEXT` | _(הקשר פעיל)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | CLI במצב מרחוק context/profile עבור פקודות `omniroute` ; עוקף את ההקשר הפעיל בחנות ההקשרים המקומית. שווה ערך ל- `--context `. |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | השבת את הקצה האחורי האופציונלי `keytar` OS-keychain עבור אישורי ההקשר של CLI. כאשר מופעל, האישורים נשארים במצב `config.json` `0600` וה- CLI משדר אזהרת חזרה חד-פעמית; מיועד לפעולה מכוונת headless/container. |
| `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_PPLX_RESEARCH_ENABLED` | `0` | `open-sse/mcp-server/tools/perplexityResearch.ts` | רשום את הכלי MCP Perplexity Deep Research. רק `1` רושם את זה; כל דבר אחר משאיר את זה. |
| `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` | דחיסה algorithm/profile. השבת ערכים: `0`, `false`, `off`. |
| `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | בטל תקציב (ms) עבור קריאות ניהול פנימיות של MCP-שרת (בריאות, חוסן, שילובים, מכסה, שימוש). |
| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | בטל תקציב (ms) עבור MCP hops שמחכים לספק (`route_request`, `web_search`, `web_fetch`). |
| `OMNIROUTE_MCP_SESSION_IDLE_MS` | `300000` | `open-sse/mcp-server/httpTransport.ts` | Zqa TTL (ms) לפני שהסוויפ קוצר הפעלה נטולת הזרמה MCP. סשן עם זרם פתוח או בקשה בטיסה לעולם לא נקצר. ערכים לא מוגדרים, לא שלמים או לא חיוביים נופלים בחזרה לברירת המחדל. |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | המספר המרבי של מופעי אינדקס מקומי-קורפוס המאוחסנים במטמון בזיכרון (LRU, אחד לכל ספריית שורש שנוספה לאינדקס). מהודק למינימום `1`. |
| `MODEL_SYNC_INTERVAL_HOURS` | `6` | `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` | פער (ms) בין שליפות רצופות של מכסת OAuth בסנכרון בכמות גדולה; חיבורי OAuth מובאים בזה אחר זה כדי למנוע התפוצצות במעלה הזרם. `0` מבטל הסכמה (במקביל). |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | מרווח מינימלי (ms) בין שליפות מכסה עוקבות במעלה הזרם בנתיב preflight/monitor לכל בקשה; מרווח שיחות רשת בו-זמנית כל כך הרבה חשבונות ב- IP אחד לא פורצים את ה-upstream. מחוברים ל- Codex (`/wham/usage`), DeepSeek, Bailian (שני אתרי האחזור), OpenCode ו-Crof מחזירי המכסה (#6009, #6911). נתיב השיגור הגנרי `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/etc.) אינו מכוסה עדיין במעקב אחר — בנפרד. התאמות המטמון לא הושפעו. `0` משבית; מהודק `0..60000`. |
| `OMNIROUTE_QUOTA_FETCH_JITTER_MS` | `120` | `open-sse/services/quotaFetchThrottle.ts` | מרווח אקראי נוסף לכל בקשה (ms), שנדגמו בכל אחזור מכסה שמורה במעלה הזרם. ברירת המחדל היא 120; מהדק `0..60000`; `0` מסיר רק ריצוד. הגדר `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS=0` כדי להשבית את כל המצערת. ריצוד אינו מבטיח מניעת איסורים במעלה הזרם. |
| `CODEX_QUOTA_FETCH_TIMEOUT_MS` | `8000` | `open-sse/services/codexQuotaFetcher.ts` | פסק זמן (ms) עבור שליפת מכסת Codex יחידה (`chatgpt.com/backend-api/wham/usage`). הטיסה המוקדמת ממתינה לאחזור הזה לפני שליחת הבקשה. לאחר פסק זמן או שגיאת העברה, נעשה שימוש חוזר בתמונת המצב האחרונה מ-15 הדקות האחרונות אלא אם החלון שלה מנוצה או התאפס; עם אף אחד, המכסה אינה ידועה, לכן דילוג על חשבון אשראי בתשלום עבור בקשה זו ולא נמשך צינון. מקבל מספר שלם חיובי עד `2147483647`; כל ערך אחר יחזור לברירת המחדל. |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | עיכוב (ms) לפני רענון מגבלות הספק לאחר אירוע שימוש אמיתי, מה שנותן למכסה במעלה הזרם API זמן לרשום צריכה. |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | זיהוי אוטומטי | `open-sse/services/adobeFireflyBrowserLogin.ts` | נתיב מוחלט לקובץ הפעלה של מערכת Chrome או Edge המשמש לכניסה אינטראקטיבית של Adobe Firefly וחידוש מחוץ למסך. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | מופעל | `open-sse/services/adobeFireflySession.ts` | שומר על מצב סיכון IMS ו-דפדפן עדכני עם הפעלות של Chrome CDP בהיקף חשבון. הגדר ל- `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` | השבת את כל שירותי הרקע: רענון מכסה, סנכרון מגבלות ספק, שחזור חיבור, תקינות אישורים, סנכרון cloud/model/free-proxy/proxy-health, ניקוי שמירה, VACUUM מתוזמן וסקר טעינה חוזרת חמה של ההגדרות. שימושי עבור CI/test; בהתקנה ארוכת טווח, החיבורים אינם מתאוששים אוטומטית ומסד הנתונים ממשיך לגדול. |
| `OMNIROUTE_HEADLESS` | _(לא מוגדר)_ | `src/lib/system/headless.ts` | אתחול במנוע פרוקסי בלבד: דילוג על תת-מערכות אופציונליות, `/dashboard` → 404. זהה ל- `omniroute serve --headless`. ראה [HEADLESS.md](../guides/HEADLESS.md). |
| `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` | _unset_ (מושבת) | `open-sse/services/reasoningTokenBuffer.ts` | רצפת הצטרפות לתקציבי פלט של מודל חשיבה: המתקשר `max_tokens` ב- `[256, floor)` מוגבה לרצפה (מוגבלת על ידי מכסת הפלט של הדגם). ביטול תקציבי לקוחות = מעולם לא הוגדלו (#9507). |
| `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _unset_ (מושבת) | `open-sse/services/learnedReasoningEffortCaps.ts` | הצטרפות, מזהי ספקים מופרדים בפסיקים (או `*`): כאשר `reasoning_effort` 400/422 לא נותנת קבוצה מקובלת, נסה פעם אחת רמה אחת נמוכה יותר (לעולם לא מתחת `low`) ולמד את השכבה הזו רק אם הבדיקה נענתה (#14895). |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Cron expression (UTC) עבור עבודת הייצוא של יומן שיחות שמנקזת כל יעד מופעל ליצוא יומן. העדיפו `*/5 * * * *` בעת ייצוא גופים. |
| `OMNIROUTE_LOG_EXPORT_RUN_TIMEOUT_MS` | `900000` | `src/lib/logExport/childRunner.ts` | פסק זמן של שעון קיר של ילד לכל יעד במילישניות. פסק זמן מתעד כישלון והורג את התהליך מבלי לקדם את האצווה הלא מאושרת. ערכי Invalid/non-positive/non-integer משתמשים בברירת המחדל. |
| `OMNIROUTE_LOG_EXPORT_CHILD_MAX_OLD_SPACE_MB` | `1024` | `src/lib/logExport/childRunner.ts` | מגבלת שטח ישן של צאצא V8 של צאצא ב- MB (לא סך RSS). ברירת המחדל משאירה מרווח ל-500 שורות של חפצים מכוסים עם גופות; קבוצות גדולות מדי עשויות עדיין להתיש את ערימת הילד. כשל ממליץ להוריד את גודל האצווה או להעלות את המגבלה הזו. ערכי Invalid/non-positive/non-integer משתמשים בברירת המחדל. יצוא Bun יורד תוך כדי תהליך ללא הגבלה זו. |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | מרווח סקר (ms) עבור טעינה חוזרת של תצורה. נמוך מ- `1000` נדחה. |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(מופעל)_ | `src/lib/db/apiKeys.ts` | הגדר `1` לעקוף את מטמון האימות של מפתח API המגובה Redis (כופה קריאת 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 כאשר `lite.maxToolLength` אינו מוגדר. טווח 256–1000000. הגדרת לוח המחוונים מנצחת את הסביבה הזו. |
| `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` | חיי סרק באלפיות שניות לפני סיום עובד דחיסה שאינו בשימוש. |
| `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | כובע ערימה מהדור הישן של V8 ב- MB עבור כל עובד דחיסה, כל המצבים (רצפה `128`). עבודה שחורגת ממנה נכשלת בפתיחה (לא דחוסה) במקום להגדיל את ערימת השערים. |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | מתג ראשי מפסק מפסק T02 צינור מוערם לכל מנוע.** הצטרפות (ברירת מחדל כבויה)** — כאשר הוא פועל, מנוע שזורק שוב ושוב על פני בקשות נדלג (כישלון פתוח) לצורך התקררות; off = byte זהה להתנהגות מדור קודם. |
| `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 retrieval-feedback ramp: each prior retrieval of a stored block raises its effective `minChars` linearly (frequently-retrieved content compresses less; `>=3` retrievals = never compressed). `1` disables the ramp (binary skip at the threshold only). |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | CCR durable block store (#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` לפי סקריפט bootstrap לאחר ההגדרה הראשונית. שולט בנראות אשף ההגדרה. |
| `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` מזרימה בבקשה הראשונה. |
| `OMNIROUTE_ANTIGRAVITY_TIMING_TELEMETRY` | `false` | `open-sse/executors/antigravity/executeAttempt.ts` | תזמון חיטוי של הסכמה לפי השליחה פיזית: חשבון בטל, בקשות בטיסה, זמן לכותרות ותוכן SSE משמעותי ראשון. אין הנחיות, אישורים או URLs במעלה הזרם ביומנים. |
| `ANTIGRAVITY_MAX_429_ATTEMPTS` | `2` | `open-sse/services/antigravity429Guard.ts` | 429s במעלה הזרם נסבלים לכל בקשה של Antigravity (`agy`/`antigravity`) בכל המארחים (1-12) לפני שה-429 חוזר למתקשר. גוף שבילה את זה נענה באופן מקומי בשליחה חוזרת (2 דקות, הכפלה ל-30 דקות, או רמז לניסיון חוזר במעלה הזרם), ומטפל הצ'אט לא מפעיל מחדש את הבקשה לאחר 429 זה. |
| `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | אפשר למתרגם בקשות Antigravity לדלג על אימות בקשת-חתימת CLI הקפדני שלו כאשר ה-upstream מסרב לחתימות אמיתיות (מצב debug/antiquated-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` | שרת URL עבור CLI↔OmniRoute auth bridge. |
| `OMNIROUTE_TOKEN` | _(לא מוגדר)_ | `src/lib/oauth/config/index.ts` | אסימון אישור עבור גשר CLI. |
| `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | משתמש ID עבור הפעלות CLI bridge. |
| `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
### רענון אסימון Codex פסיבי
`OMNIROUTE_TOKEN_REFRESH_PASSIVE_PROVIDERS` שהוגדר ל- `codex` הופך את המופע הזה לצרכן של אישורי Codex מסונכרנים, לא לבעלים של סיבוב אסימון רענון. ברירת המחדל הריקה או הבלתי מוגדרת שומרת על התנהגות רענון רגילה. ערכים מופרדים בפסיקים נחתכים ואינם רגישים לאותיות גדולות; `cx` הוא כינוי עבור `codex`. ספקים לא נתמכים נכשלים באימות האתחול. ספקים אחרים ללא שינוי.
בנקודות רענון קיימות, המופע עוקף את מטמון הקריאה של החיבור ומאמץ רק אסימון גישה אחר שלא פג. אסימונים שנדחו במעלה הזרם במהלך הבקשה אינם יכולים להיות זכאים שוב לאחר שהסנכרון חוזר לאחור: אישורי הבקשה מכילים לכל היותר ארבע טביעות אצבע SHA-256, שנמחקו יחד עם הבקשה הזו. רק שדות אסימון מאומצים, כך שמטא-נתונים של ספק מקומי שורדים. אין אישורים מאומצים. אם לא קיים תחליף, `refresh_disabled` אינו מסוף ואינו נחשב למפסק המעגל לרענון האסימון. תגובות 401/403 אמיתיות במעלה הזרם שומרות על חשבונאות כשלים רגילה, התקררות אקספוננציאלית ושגיאות לקוח; אותות ביטול חשבון עדיין ננעלים לצמיתות.
ידני dashboard/API refresh מחזיר `409` עם קוד `refresh_disabled` והוראה לרענן במופע הפעיל ולסנכרן. רענון מרומז (צ'אט, שימוש, בדיקות תקינות ואימות ייבוא) אינם מציגים שגיאה זו; שחזור שימוש 401 לפי דרישה מנסה פעם אחת עם אסימון מסונכרן מאומץ. Codex auth imports מאחסן את האסימונים שסופקו ללא החלפת רענון אסימונים; כניסות OAuth חדשות ללא שינוי. לא מתווסף סנכרון לפני שיגור מחוץ לנתיב הרענון הפרואקטיבי הקיים.
שמור בדיוק על בעל סיבוב אחד וארגן סנכרון אסימונים בנפרד, לפני שאסימוני גישה יפוג (לייד יזום ברירת מחדל: חמש דקות). אפשרות זו אינה מנעול מבוזר, שכפול מסד נתונים או פריסת SQLite משותפת. מקור: `open-sse/services/tokenRefresh/passiveCodex.ts`.
אישורים מובנים עבור** פיתוח localhost** . לפריסות מרחוק, רשום משלך במסוף המפתחים של כל ספק.
| מִשְׁתַנֶה | ספק | הערות |
| ------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_OAUTH_CLIENT_ID` | קוד Claude (Anthropic) | לקוח ציבורי — אין צורך בסוד. |
| `CLAUDE_CODE_REDIRECT_URI` | קוד Claude | עוקף את ההפניה מחדש 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 (Moonshot) | לקוח ציבורי. |
| `MUSE_CODE_OAUTH_CLIENT_ID` | קוד מוזה (Meta) | עקיפה אופציונלית עבור מזהה הלקוח הציבורי של Muse CLI device-flow. השאר לא מוגדר כדי להשתמש בלקוח הציבורי האפוי. |
| `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 | עקיפה אופציונלית עבור מזהה הלקוח OAuth של GitHub Enterprise Copilot. חוזר לברירת המחדל הציבורית של `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 key fallback בשימוש על ידי `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) | OAuth client ID עבור GitLab Duo. רשום אפליקציה ב- `https://gitlab.com/-/profile/applications` עם הפניה מחדש URI `/callback` ו-scopes `api, read_user, openid, profile, email`. נופל בחזרה ל- `GITLAB_OAUTH_CLIENT_ID`. |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | סוד לקוח OAuth עבור GitLab Duo. זרימת — PKCE אופציונלית אינה דורשת סוד. נופל בחזרה ל- `GITLAB_OAUTH_CLIENT_SECRET`. |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | עוקף את GitLab base 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) | חזרה מדור קודם עבור `GITLAB_DUO_OAUTH_CLIENT_ID` נצרך על ידי `src/lib/oauth/constants/oauth.ts`. |
| `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | חזרה מדור קודם עבור `GITLAB_DUO_OAUTH_CLIENT_SECRET` נצרך על ידי `src/lib/oauth/constants/oauth.ts`. |
| `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 | סביבת עבודה ID עבור Qoder CLI. |
| `OMNIROUTE_QODER_WORKSPACE` | Qoder | כינוי עבור `QODER_CLI_WORKSPACE`. |
| `QODER_CLI_CONFIG_DIR` | Qoder | עוקף את ה-dir config Qoder CLI (הפעלה מבודדת PAT, נמנעת מחסום כניסה לדפדפן). |
| `QODER_CLI_MAX_CONCURRENCY` | Qoder | מקסימום ריצות qodercli במקביל (הדפס שרצים או הנחיות ACP ); תור בקשות נוספות FIFO. בטל (ברירת מחדל) = no cap. |
| `QODER_CLI_QUEUE_TIMEOUT_MS` | Qoder | כמה זמן בקשת Qoder ממתינה למשבצת qodercli (רק עם סט כובע) לפני שהיא נכשלת עם 429 `qodercli_busy` + `Retry-After`. ברירת מחדל `120000`. |
| `QODER_CLI_TRANSPORT` | Qoder | `print` (ברירת מחדל) מולידה `qodercli --print` לכל בקשה; `acp` שומר על תהליך `qodercli --acp` מתמשך אחד לכל PAT. |
| `QODER_CLI_ACP_IDLE_TIMEOUT_MS` | Qoder | העברת ACP : הרוג את תהליך ה-qodercli המתמשך לאחר זמן סרק זה. ברירת מחדל `600000`. |
| `QODER_CLI_ACP_STARTUP_TIMEOUT_MS` | Qoder | ACP transport: המועד האחרון עבור qodercli לענות על ACP `initialize`. ברירת מחדל `60000`. |
| `QODER_CLI_ACP_MAX_SESSIONS_PER_PROCESS` | Qoder | הובלת ACP : מחזר את תהליך ה-qodercli המתמשך לאחר הפעלות רבות כל כך. ברירת מחדל `500`. |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | קוד קצה `tk` לשליחה כ- `validated` ב- `/api/chat`. נדרש כאשר Blackbox אוכפת התאמת אסימונים; אחרת OmniRoute נופל בחזרה ל- UUID אקראי. ראה גיליון #2252. |
| `VISION_BRIDGE_BASE_URL` | מעקה בטיחות של גשר חזון | בסיס URL תואם OpenAI עבור שיחות גשר ראייה שאינן אנתרופיות. ברירת המחדל של OpenAI URL env או api.openai.com מדור קודם. הצבע על לולאה עצמית `/v1` של OmniRoute או כל נקודת קצה של OpenAI-compat (Gemini OpenAI-compat, OpenRouter). הוצאת #2232. כאשר ה- URL הוא `/v1` של OmniRoute עצמו, בקשת המשנה לתאר שולחת `x-omniroute-admission-bypass: internal` ומאמתת עם האישור של לולאה עצמית שנפתרה (`sk_omniroute` sentinel במצב מקומי, או `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) כך שפריסות `REQUIRE_API_KEY=true` עובדות. |
| `VISION_BRIDGE_API_KEY` | מעקה בטיחות של גשר חזון | מפתח API עבור URL למעלה. עוקף לכל ספק OpenAI / Google env vars עבור קריאות גשר ראייה שאינן אנתרופיות. דגמי Anthropic שומרים על נתיב מפתח Anthropic הייעודי שלהם. גיליון #2232. |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | מעקה בטיחות של גשר חזון | כמה זמן תוצאת ניתוב "אין מועמד שמיש" נשמרת במטמון, ב-ms (ברירת מחדל `30000`). ערכים לא חוקיים או שליליים חוזרים לברירת המחדל; `0` משבית את המטמון השלילי. מקור: `src/lib/guardrails/visionBridgeRouter.ts`. |
| `OMNIROUTE_IMAGE_NORMALIZATION` | נורמליזציה של תמונת חזון | הצטרפות (בטל את ההגדרה של =, אפס שינוי התנהגות; `1`/`true`/`on` מאפשר). מנרמל כל תמונה מוטבעת (base64 data URI / Claude `source.data`) בגופי בקשת הצ'אט לפני שיגור: כיוון EXIF הוחל, RGB (אלפא משוטח ללבן), קצה ארוך `<= 4096` px, סך פיקסלים `<= ~4M`; תמונות שזקוקות לשינוי מקודדות מחדש כ- JPEG בסיסי ( PNGs ללא אלפא להישאר ללא הפסדים), PNGJPEG/PNG שכבר תואם RGB עוברות ללא נגיעה. התקציבים קבועים. מכוון לצינורות חזון Qwen2-VL-style שדוחים תמונות oversized/exotic עם 400 שגיאות ניתוח או ניתוק אפס פלט. http(s) URLs מרוחקים לא יורדים; בינארי `sharp` חסר או תמונה בלתי ניתנת לפענוח עוברים ללא נגיעה (פתוח נכשל). שינוי גודל תמונה גדול מוסיף חביון בקשה. מקור: `open-sse/utils/visionImageNormalization.ts`. |
> [!WARNING]
>
> 1. עבור אל [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) 2. צור OAuth 2.0 Client ID (סוג: "יישום אינטרנט") 3. הוסף את השרת שלך URL בתור Authorized redirect URI 4. החלף את ערכי האישורים ב- `.env`.
---
## 12. עקיפות ספק משתמש-סוכן
תעקוף את כותרת `User-Agent` שנשלחה לכל ספק במעלה הזרם. זה נפתר באופן דינמי בזמן ריצה על ידי מחלקת הבסיס של המבצע:
```
process.env[`${PROVIDER_ID}_USER_AGENT`]
```
> **מָקוֹר:** `open-sse/executors/base.ts` → `buildHeaders()`
| מִשְׁתַנֶה | ערך ברירת מחדל | מתי לעדכן |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | כאשר Anthropic משחרר גרסת CLI חדשה |
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | הגדר ל- `1`/`true` כדי להעביר שמות של כלי רתמה של צד שלישי מילה במילה ל- Anthropic בשני הנתיבים הקשורים לאנתרופיים (מקורי OAuth ו- CLIProxyAPI). כברירת מחדל, המבצע מחליף באופן דטרמיניסטי שמות של כלים שאינם Claude-Code (מיפוי קנוני של קוד Claude היכן שקיים כזה, אחרת PascalCase) והופך אותם בתגובה באמצעות `_toolNameMap`, כך שהרתמות עם כלים של snake_case אינם מסרבים כלקוחות צד שלישי עם טביעת אצבע. ניפוי באגים בלבד. |
| `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | כאשר OpenAI מעדכן את Codex CLI |
| `CODEX_CLIENT_VERSION` | `0.155.0` | עוקף את גרסת לקוח Codex ללא תלות במחרוזת UA מלאה |
| `GROK_CLI_CLIENT_VERSION` | `1.0.41` | עוקף `x-grok-client-version` עבור מסקנות, סנכרון מודל וקוד התקן OAuth, בתוספת ברירת המחדל Grok CLI User-Agent עבור מסקנות וסנכרון מודל. מקבל SemVer עם מטא נתונים אופציונליים prerelease/build, עד 128 תווים לאחר חיתוך הרווחים הסובבים. ערכים לא מוגדרים, ריקים, לא חוקיים או המכילים מעברי שורה משתמשים בסיכה שנשלחה. עקיפת המשתמש-סוכן המלאה הקיימת שומרת על עדיפות. |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | לעקוף את גרסת קוד Claude המפורסמת ללא תלות ב- `CLAUDE_USER_AGENT`. Anthropic משערים כמה דגמים על ערך זה (#12417). |
| `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | עוקף את הסיומת בת 3 התווים OmniRoute שמצרפת ל- `cc_version=` בבלוק החיוב Claude. Bump לצד `CLAUDE_CODE_CLIENT_VERSION` — הצמדה רק הגרסה מפרסמת זוג `version.revision` ללא פולט בינארי אמיתי. |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | לעקוף את גרסת Copilot CLI המפורסמת ללא תלות ב- `GITHUB_USER_AGENT` |
| `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` | כאשר GitHub Copilot Chat מתעדכן |
| `ANTIGRAVITY_CLI_CL` | _(לא מוגדר)_ | עוקף את רשימת השינויים Antigravity CLI (`agy`) Piper שדווחה כ- `cl=` ב- CLI User-Agent. לא נגזר מהגרסה ולא נחשף על ידי המניפסטים הציבוריים; זרע לכל גרסה מתוך לכידה חיה (1.4.4 → `1003595037`). לא מוגדר בגרסה לא ידועה משמיט `cl=` במקום לפרסם רשימת שינויים של build אחר. |
| `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | כאשר Kiro IDE מתעדכן |
| `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | עוקף את קוד ההתקן החברתי Kiro `clientId` (מזהה ציבורי) |
| `KIRO_VERIFY_FULL_CRC` | `false` | הצטרפות: אימות CRC של הודעה מלאה לכל מסגרת בזרם אירועי Kiro (ניפוי באגים בזרמים פגומים) |
| `KIRO_CREDIT_PRICE_USD` | `0.02` | USD לזיכוי Kiro ; ממירה זיכויים `meteringEvent` לעלות המדויקת לכל בקשה |
| `KIRO_REQUIRE_CREDITS` | `false` | כשל בתגובת Kiro המדווחת על שום מדידת אשראי במקום לרשום אותו ללא חיוב |
| `QODER_USER_AGENT` | `Qoder-Cli` | כאשר Qoder CLI מתעדכן |
| `CURSOR_USER_AGENT` | `Cursor/3.3` | כאשר Cursor מתעדכן |
> [!TIP]
> אתה יכול להוסיף עקיפות User-Agent עבור** כֹּל** ספק המשתמש בתבנית `{PROVIDER_ID}_USER_AGENT`. המבצע בונה באופן דינמי את שם var env.
---
## 13. תאימות טביעת אצבע CLI
כאשר מופעל, OmniRoute מסדר מחדש את כותרות HTTP ושדות JSON body כדי להתאים לחתימה המדויקת של כלי CLI הרשמיים. זה מפחית את הסיכון לסימון חשבון תוך שמירה על ה-proxy IP שלך.
**מָקוֹר:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts`
### לכל ספק
| מִשְׁתַנֶה | הַפעָלָה | אֵפֶקְט |
| ------------------------ | -------- | ------------------------------ |
| `CLI_COMPAT_CODEX` | `=1` | מחקה חתימת בקשת Codex CLI |
| `CLI_COMPAT_CLAUDE` | `=1` | מחקה חתימת בקשת קוד Claude |
| `CLI_COMPAT_GITHUB` | `=1` | מחקה חתימת בקשת GitHub Copilot |
| `CLI_COMPAT_ANTIGRAVITY` | `=1` | מחקה חתימת בקשת Antigravity |
| `CLI_COMPAT_CURSOR` | `=1` | מחקה חתימת בקשת Cursor |
| `CLI_COMPAT_KIMI_CODING` | `=1` | מחקה Kimi חתימת בקשת קידוד |
| `CLI_COMPAT_KILOCODE` | `=1` | מחקה חתימת בקשת קוד קילו |
| `CLI_COMPAT_CLINE` | `=1` | מחקה חתימת בקשת Cline |
### גלוֹבָּלִי
| מִשְׁתַנֶה | הַפעָלָה | אֵפֶקְט |
| ---------------- | -------- | --------------------------------------------------- |
| `CLI_COMPAT_ALL` | `=1` | אפשר תאימות טביעת אצבע עבור** כֹּל** ספקים בבת אחת. |
### Kimi קידוד CLI זהות עוקפת
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ----------------------- | --------------------- | ---------------------------------------- | ---------------------------------------------------- |
| `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | תעקוף את גרסת Kimi CLI שנשלחה במהלך שיחות OAuth/API. |
| `KIMI_CODING_DEVICE_ID` | _(ברירת מחדל שנתפסה)_ | `src/lib/oauth/providers/kimi-coding.ts` | עוקף את התקן Kimi שנלכד ID המשמש בכותרות הלקוח. |
> [!NOTE]
> תכונה זו פועלת לצד עקיפות User-Agent (§12). מערכת טביעות האצבע מטפלת בסידור כותרות וסידור שדות גוף, בעוד שעקיפות User-Agent מטפלות במחרוזת UA הספציפית. ניתן להפעיל את שניהם באופן עצמאי.
---
## 14. ספקי מפתח API
מפתחות API עבור ספקים המשתמשים באימות ישיר.** הגדרה מועדפת:** לוח מחוונים → ספקי → הוסף מפתח API.
הגדרה באמצעות משתני סביבה היא חלופה לפריסות Docker או ללא ראש.
דפוס מזוהה: `{PROVIDER_ID}_API_KEY`
| מִשְׁתַנֶה | ספק |
| ------------------ | ------------------------------------------------ |
| `DEEPSEEK_API_KEY` | DeepSeek |
| `NVIDIA_API_KEY` | NVIDIA NIM |
| `JINA_AI_API_KEY` | Jina AI (Foundation API + Reader fallback) |
| `JINA_API_KEY` | Jina AI (כינוי ל- `JINA_AI_API_KEY`) |
| `GEMINI_API_KEY` | Gemini (Google AI Studio) הטמעות + chat fallback |
| `GOOGLE_API_KEY` | Gemini (כינוי עבור `GEMINI_API_KEY`) |
> [!NOTE]
> ערכי `${PROVIDER}_API_KEY` סטטיים עבור Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius ו-Qianfan הוסרו בגרסה 3.8.0 מכיוון שזמן הריצה כבר לא קורא אותם — ספקים אלה מסתמכים אך ורק על Dashboard / `data/provider-credentials.json` / DB encrypted. עיין בקטע _ביקורת: משתנים הוסרו / מתים_ בתחתית מסמך זה עבור נתיב ההעברה.
> [!TIP]
> מפתחות המוגדרים דרך לוח המחוונים מאוחסנים מוצפנים ב- SQLite וקיימים עדיפות על משתני סביבה.
>
> **ג'ינה:** הטמעות `jina-ai/…`, דרג מחדש, סיווג, פלח ו- `jina-search` do** לֹא** חיוב מקש env של אשכול כאשר קיים חיבור `jina-ai` של לוח המחוונים (או משותף `jina-reader`) — `getProviderCredentials` הוא מילוי ראשון. `JINA_AI_API_KEY` / `JINA_API_KEY` משמשים רק כאשר לא קיים מפתח שמיש בלוח המחוונים. יומני שיחות מייחסים ל-env fallback כ- `connection_id=env:JINA_AI_API_KEY`. כרטיס הקורא (`jina-reader`, `r.jina.ai`) אף פעם לא משרת `/v1/embeddings` או `/v1/rerank`.
>
> **Gemini:** `gemini/gemini-embedding-2` (כינוי `google/gemini-embedding-2`) משתמש תחילה בחיבור `gemini` של לוח המחוונים. `GEMINI_API_KEY` / `GOOGLE_API_KEY` משמשים רק כאשר לא קיים מפתח שמיש בלוח המחוונים. יומני שיחות מייחסים את ה-env fallback כ- `connection_id=env:GEMINI_API_KEY`. תעבורה מולטי-מודאלית מקורית משתמשת ב- `x-goog-api-key` נגד `:embedContent` / `:batchEmbedContents` — N OpenAI `input` פריטים הופכים ל-N וקטורים.
---
## 15. הגדרות פסק זמן
כל הערכים נמצאים ב** אלפיות השנייה** . רזולוציה מרכזית ב- `src/shared/utils/runtimeTimeouts.ts`.
### היררכיית זמן קצוב
```
REQUEST_TIMEOUT_MS (global override)
├─→ FETCH_TIMEOUT_MS (upstream provider calls, default: 600000)
│ ├─→ FETCH_HEADERS_TIMEOUT_MS (inherits from FETCH_TIMEOUT_MS)
│ ├─→ FETCH_BODY_TIMEOUT_MS (inherits from FETCH_TIMEOUT_MS)
│ ├─→ TLS_CLIENT_TIMEOUT_MS (inherits from FETCH_TIMEOUT_MS)
│ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (independent, default: 10000)
│ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (independent, default: 15000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (independent, default: 0 = off, suggested: 30000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (independent, default: 2)
│ ├── FETCH_CONNECT_TIMEOUT_MS (independent, default: 30000)
│ └── FETCH_KEEPALIVE_TIMEOUT_MS (independent, default: 4000)
├─→ STREAM_IDLE_TIMEOUT_MS (inherits from REQUEST_TIMEOUT_MS, default: 600000)
├─→ STREAM_ACTIVE_TIMEOUT_MS (independent; unset: 1260000, raised by declared budgets; set: hard cap; 0 disables)
├─→ STREAM_READINESS_TIMEOUT_MS (inherits from REQUEST_TIMEOUT_MS, default: 80000)
├─→ STREAM_READINESS_MAX_TIMEOUT_MS (caps adaptive readiness extensions, default: 180000)
└─→ API_BRIDGE_PROXY_TIMEOUT_MS (inherits from REQUEST_TIMEOUT_MS, default: 30000)
├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (derived, default: 300000)
├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (default: 60000)
├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (default: 5000)
└── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (default: 0 = disabled)
```
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | תֵאוּר |
| ------------------------------------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REQUEST_TIMEOUT_MS` | _(לא מוגדר)_ | קיצור דרך גלובלי — עוקף גם את ברירת המחדל של `FETCH_TIMEOUT_MS` וגם `STREAM_IDLE_TIMEOUT_MS`. |
| `FETCH_TIMEOUT_MS` | `600000` | זמן קצוב כולל של בקשת HTTP עבור שיחות ספק במעלה הזרם. |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | שתיקה מקסימלית בין בתים גולמיים במעלה הזרם לפני הפסקה. מודלים בעלי חשיבה מורחבת מפסיקים לעתים רחוקות > שנות ה-90. |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | חיי זרם SSE פעילים מקסימליים; לעולם לא מתאפס על בתים במעלה הזרם ואינו תלוי ב- `REQUEST_TIMEOUT_MS`. כאשר לא מוגדר, ברירת המחדל היא ה- `timeoutMs` הגדול ביותר לכל דגם ברישום (1200000, Codex) בתוספת מרווח של 60000, ויעד שמצהיר על תקציב ארוך יותר (חיבור `timeoutMs`, ואז לכל דגם, ואז ברמת הספק, למשל 3000000 של GLM) מקבל את התקציב הזה פלוס 6000 במקום זאת. ערך חיובי הוא מכסה קשה לכל יעד שתקציבים מוצהרים אינם יכולים לגייס. הגדר ל- `0` כדי להשבית עבור כל יעד. |
| `OMNIROUTE_SSE_COMMENTS` | _(נָכֶה)_ | האם OmniRoute עשויה לפלוט שורות הערות SSE `:` (למשל הקדמונים של `: keepalive` heartbeat ו- `x-omniroute-*` metadata). מושבת כברירת מחדל (#10524) מכיוון שלקוחות קפדניים תואמי OpenAI JSON.מנתחים כל שורת SSE ומתרסקים על הערות `:` ; פעימות הלב `data:` אינן מושפעות. הגדר `on`/`true`/`1`/`yes` כדי להצטרף חזרה. בשימוש על ידי `open-sse/utils/sseHeartbeat.ts`. |
| `SSE_COALESCE_MS` | `0` (כבוי) | הצטרפות: מיזוג אירועי Claude `content_block_delta` עוקבים (אותו אינדקס בלוק וסוג דלתא) שנשלחו ללקוחות Claude, תוך שטיפה של לפחות כל N ms. חסר אובדן; אירועי `signature_delta` ו-boundary לעולם אינם ממוזגים. חל על כל סוג דלתא אלא אם הוגדר משתנה לכל סוג למטה. בשימוש על ידי `open-sse/utils/sseDeltaCoalesce.ts`. |
| `SSE_COALESCE_THINKING_MS` | `0` (כבוי) | עקיפה לפי סוג של `SSE_COALESCE_MS` עבור `thinking_delta`. |
| `SSE_COALESCE_TEXT_MS` | `0` (כבוי) | עקיפה לפי סוג של `SSE_COALESCE_MS` עבור `text_delta`. |
| `SSE_COALESCE_INPUT_JSON_MS` | `0` (כבוי) | עקיפה לפי סוג של `SSE_COALESCE_MS` עבור `input_json_delta`. |
| `SSE_FRAME_COALESCE_MS` | `0` (כבוי) | הצטרפות: מסגרות SSE אצווה שהועברו בתוך N ms לכתיבה אחת ללקוח. המסגרת הראשונה והמסגרות הטרמינליות (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) לעולם אינן מתעכבות; עם אצווה מופעל, ITL מודד פערי אצווה. בשימוש על ידי `open-sse/utils/sseOutputSink.ts`. |
| `SSE_STALL_WATCHDOG` | `timer` | יישום Byte-stall Watchdog עבור תגובות זורמות. `timer` מפעיל מחדש טיימר אחד לכל נתח במעלה הזרם (יורה בדיוק בתקציב הדוכן); `interval` שומרת צ'ק אחד לכל זרם עם תקופה `clamp(budget/4, 1s, 5s)`, כך שדוכן יורה בתוך תקופת + התקציב. בשימוש על ידי `open-sse/utils/streamStallWatchdog.ts`. |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | הגיע הזמן לקבל את האירוע הראשון ללא פינג SSE. יורש `REQUEST_TIMEOUT_MS` כאשר מוגדר. |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | חלון מוכנות לאירוע ראשון אדפטיבי מרבי עבור בקשות סטרימינג גדולות, כבדות בכלים או בעלות היגיון גבוה. |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | מתג הרג עבור היוריסטיקה `/goal`. הגדר `false`/`0`/`off` לביטול מלא של זיהוי — מוכנות ושחזור זרם לעולם אינו מוגבר על ידי request body/headers, מה שמקל על הגברה של זמן קצוב נשלטת על ידי הלקוח. |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | חלון מוכנות מקסימלי לאירוע ראשון עבור ריצות סוכן `/goal` שזוהו או בקשות שנכפו עם `x-omniroute-agent-goal`. |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | אפשר שחזור זרם מוקדם באופן אוטומטי עבור ריצות סוכן `/goal` שזוהו. הגדר `false`/`0`/`off` כדי להשבית את ההצטרפות הספציפית ליעד. זה יכול רק לשחזר ADD על גבי ברירת המחדל של המפעיל — זה אף פעם לא עוקף ביטול מפורש של הגדרות `STREAM_RECOVERY_ENABLED`/DB. |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | הסר אירועי `codex.*` SSE לא סטנדרטיים (למשל `codex.rate_limits`) השוברים את `responses.stream()` של OpenAI SDK עם 502. ברירת מחדל ON (#11014). הגדר `0`/`false`/`no`/`off` כדי להעביר אותם. |
| `OMNIROUTE_CODEX_APPSERVER_WS` | _(לא מוגדר)_ | הצטרפות להעברת אפליקציות-שרת Codex. נקודת קצה WebSocket (`ws://`/`wss://`) של מכונית צד מקומית `codex app-server`. כשהם מוגדרים יחד עם אסימון, בקשות Codex מנותבות דרך JSON-RPC ל-sidecar במקום ה- HTTP Responses API. ניתן להגדרה לכל חיבור באמצעות `providerSpecificData.codexAppServerUrl`. בשימוש על ידי `open-sse/executors/codex/appServerConfig.ts`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(לא מוגדר)_ | אסימון capability/bearer מוטבע הוצג לשרת האפליקציה. עקיפה לכל חיבור: `providerSpecificData.codexAppServerToken`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(לא מוגדר)_ | נתיב לקובץ המחזיק את אסימון יכולת האפליקציה-שרת (מ- `codex app-server --ws-token-file`). משמש כאשר `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` אינו מוגדר. עקיפה לכל חיבור: `providerSpecificData.codexAppServerTokenFile`. |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | ספריית עבודה שבה פועל שרת האפליקציה. עקיפה לכל חיבור: `providerSpecificData.codexAppServerCwd`. |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(לא מוגדר)_ | מדיניות האישור הועברה לתור האפליקציה-שרת (למשל `never`, `on-request`). עקיפה לכל חיבור: `providerSpecificData.codexAppServerApprovalPolicy`. |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(לא מוגדר)_ | מדיניות ארגז חול הועברה לתור האפליקציה-שרת (למשל `read-only`, `workspace-write`, `danger-full-access`). כאשר אינו מוגדר, ה-executor מוגדר כברירת מחדל ל- `workspace-write` (מוקשה; בעבר `danger-full-access`). עקיפה לכל חיבור: `providerSpecificData.codexAppServerSandbox`. |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | אישור אוטומטי של הנחיות האישור של שרת האפליקציות עצמו (ביצוע command/file/permission על המארח). כבוי כברירת מחדל, הנחיות — נדחות אוטומטית; קריאות כלי לרתום אינן מושפעות (הן עוברות את מעבר `item/tool/call` הנפרד). מקבל `true`/`1`/`yes`. עקיפה לכל חיבור: `providerSpecificData.codexAppServerAutoApprove`. |
| `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הגיע הזמן לקבל כותרות תגובה. |
| `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | המתנה מקסימלית לכותרות תגובה בבקשות סטרימינג (ms). `0` משבית את הכובע הזה; ספק מפורש `fetchStartTimeoutCapMs` מקבל עדיפות. |
| `OMNIROUTE_CODEX_IMAGE_RESPONSE_START_TIMEOUT_MS` | `600000` (10 דקות) | מועד אחרון לתגובה-התחלה (ms) עבור Codex image-generation/edit POSTs בתשלום, הן ישירות והן באמצעות פרוקסי HTTP(S)/SOCKS. בקשות אלו לעולם אינן משוחזרות לאחר פסק זמן מעורפל או כשל ברשת. גם ממסרי קצה (`vercel`/`deno`/`cloudflare`) עושים ניסיון אחד, אך שומרים על דדליין `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` משלהם. |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (שנות ה-30) | המתנה מקסימלית לתגובה-התחלה (ms) עבור כל ניסיון ישיר ללא פרוקסי. פסק זמן חוזר פעם אחת על שקע חדש; הגדר `0` כדי להשבית את ה-bound ולשמור על ההתנהגות הקודמת. |
| `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 דקות) | רצפת התחלה של תגובה (ms) עבור ניסיונות ישירים ללא פרוקסי שהמארח היעד שלהם הוא private/LAN/loopback (לדוגמה `localhost`, `host.docker.internal`, `192.168.x.x`), כך שהתחלה קרה מקורית Ollama לא מנותקת על ידי ברירת המחדל של שנות ה-30 למעלה. פועל כקומה: ההמתנה האפקטיבית היא הגדולה מבין הערך הזה ו- `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; `0` או ערך לא חוקי מסירים את הרצפה המקומית. מארחים מרוחקים אינם מושפעים. |
| `OMNIROUTE_DIRECT_HEADERS_VOLUME_ADAPTIVE` | `1` | הגדל את חלון התגובה הישירה לפי דרגת עומס הבקשה: גופים מעל 512 KB מקבלים × 2, מעל 2 MB × 3, מוגבל ל-180 שניות ולעולם לא מורידים קומה כבר גבוהה יותר (המפעיל עוקף או קומת local/LAN מעל). הקשרים גדולים ממלאים מראש באופן פרופורציונלי לגודל הקלט ללא בורר נימוקים לתקרת ההיגיון ללחצן, כך שהחלון השטוח חתך מילוי איטי בריא במעלה הזרם בדיוק ברצפה. הגדר `0`/`false`/`off` כדי להצמיד את ההתנהגות השטוחה. |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 דקות) | תקרה (ms) עבור ניסיון RETRY שקע חדש לאחר פסק זמן של התחלה מאוחדת של ניסיון תגובה למעלה (#13703). חל רק כאשר המתקשר כבר צירף אות מועד אחרון משלו (מפל החיבור/דגם/ספק/`FETCH_TIMEOUT_MS` שנפתרו); האות הזה הוא החיבור האמיתי ויורה ראשון בנתיב המיועד, אז זהו מעצור נדיב ולא כובע שטוח — בלעדיו, הניסיון החוזר עשה שימוש חוזר בחלון `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` הקצר הזהה כמו הניסיון המאוחד ומודלים בריאים של TTFB איטי. אסור אף פעם מתחת לקומה השטוחה שמעל; כאשר המתקשר לא מספק אות דד-ליין כלל, הניסיון החוזר שומר על הרצפה השטוחה ללא שינוי. |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הגיע הזמן לקבל את גוף התגובה המלא. |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | פסק זמן ליצירת חיבור TCP. |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | פסק זמן סרק של שקע שמירה בחיים. |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הזמן הקצוב לתפוגה של טביעת אצבע TLS proxy (wreq-js). |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | מגביל את הזמן לבייט הראשון בגוף הובלת טביעות האצבע wreq-js TLS-טביעות האצבע באופן ספציפי; `TLS_CLIENT_TIMEOUT_MS` לבדו לא יכול לתפוס גוף שנתקע מכיוון שהוא נפתר ברגע שמגיעים כותרות (#12656). פסק זמן מבטל את קורא wreq ונופל בחזרה לשדר direct/proxy ; `0` משבית את כלב השמירה. |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | מבצע OpenCode בלבד, ורק בזמן שדגל התכונה `OPENCODE_RESPONSES_STALL_ROTATION` מופעל (ברירת מחדל כבוי): מגביל את ההמתנה לבייט הראשון של תשובת תגובות זורמת לאחר הכותרות שלו (#13484). זרם תגובות נפתח עם `response.created`, כך ששתיקה מעבר לחלון הזה היא דוכן: החשבון מתקרר והבקשה מסתובבת לחשבון הבא פעם אחת; דוכן שני נכשל מהר. `0` משבית את השמירה גם עם הדגל. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= כבוי) | OpenCode executor בלבד: מגביל את ההמתנה לכותרות תגובה במעלה הזרם בקריאת תגובות זורמת כאשר חשבון אחר עדיין זמין — בקשה בתור מפסיקה להמתין וממשיכה הלאה במקום להחזיק את חלון הכותרות המלא. רק קריאות תגובות מוזרמות מושפעות (זרם התגובות נפתח עם `response.created`, אז יש שתיקה תור, לא יצירה); השלמות צ'אט ושיחות שאינן זורמות אינן נגועים, והחלון רק מקצר את תקרת האחזור האפקטיבית, לעולם לא מאריך אותה. ערך מוצע בעת הפעלת: `30000`. `0` משבית. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | OpenCode executor בלבד: כמה פעמים לכל בקשה ה-headers-wait bound לעיל עשוי לעבור לחשבון הבא. החשבון האחרון שנותר תמיד שומר על חלון הכותרות המלא. |
| `OPENCODE_PARK_AND_RESUME` | `false` | OpenCode executor בלבד: החנה את הבקשה עם פעימות לב לאחר 429s חולפות חוזרות ונשנות (או סמן טרי של בריכה), ולאחר מכן הפעל שוב רגל אחת עם מכסה של עד 3 חשבונות עוקבים במקום לשחרר את כל הצי (#13924). כבוי כברירת מחדל: כל 429 מסתובב לחשבון הבא בדיוק כמו קודם. |
| `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | OpenCode executor בלבד: כאשר כל חשבון מוכן ל-cooldown ברגל השידור החוזר של חנייה וחידוש מופרש על ידי זיכרון ה-proxy-revisy, הגיש אותם בכל מקרה במקום להפעיל כלום מחדש (#14851, follow-up to #14750). כבוי כברירת מחדל: רגל ההשמעה החוזרת ריקה במקרה זה, כמו לפני #14750. |
| `STREAM_READINESS_STALL_RETRY` | `false` | צ'אט סטרימינג בלבד: כאשר הגוף הראשון במעלה הזרם נתקע לפני הפקת אירוע שמיש, שלח ניסיון שני מוגבל אחד דרך אותו נתיב ניתוב עם אותו תקציב מוכנות וללא קנס בחשבון. כבוי כברירת מחדל: גוף ראשון שנתקע נכשל בבקשה ללא ניסיון חוזר. |
| `OPENCODE_POOL_RESELECT` | `false` | OpenCode executor בלבד: לאחר 429 מספק יציאה בחשבון ללא פרוקסי בהקשר של מאגר סביבתי, בקש ממאגר החיבורים חבר אחר לניסיון הבא במקום לנסות שוב את אותה כתובת יציאה. הזמנות, לעולם לא מוציאות מכלל: בריכה מותשת שומרת על ההתנהגות הנוכחית. כבוי כברירת מחדל: כל 429 מסתובב לחשבון הבא בדיוק כמו קודם. |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(לא מוגדר)_ | OpenCode executor בלבד: עוקף נתיב של סמן המתח הנקרא לפני החניה (`{since, reason, ttl_s}`, default `/tmp/opencode-pool-strain.json`, #13924). סמן טרי חונה בלי לספר; נעדר או מעופש נופל בחזרה לדלפק התפרצויות. |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | פסק זמן של הופעת proxy עבור בקשות גשר `/v1`. |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | הפנה את מבצע אחזור האינטרנט של Firecrawl לעבר מופע שמתארח בעצמו (מפתח API אופציונלי מחוץ לענן). |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | זמן קצוב לכל בקשה עבור מבצע אחזור האינטרנט של Firecrawl. |
| `TAVILY_BASE_URL` | _(לא מוגדר)_ | בסיס URL עבור שואב המכסות של Tavily `/usage` (מגבלות ספק); התעלמו כאשר הוא מצביע על `api.tavily.com`. Unset נופל בחזרה לבסיס החיבור URL. |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | פסק זמן כולל של בקשת שרת עבור הגשר. |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | הגיע הזמן לשלוח כותרות תגובה דרך הגשר. |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | פסק זמן סרק של Bridge Keep-alive. |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | פסק זמן של שקע גולמי (0 = מושבת). |
| `SHUTDOWN_TIMEOUT_MS` | `30000` | תקופת חסד על SIGTERM/SIGINT לפני יציאה בכוח. |
| `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | החזרה בשימוש על ידי `src/shared/utils/fetchTimeout.ts` כאשר `FETCH_TIMEOUT_MS` אינו מוגדר. |
| `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | פסק זמן (ms) עבור ההגדרות הקבועות מראש של `validationRead` ו- `modelsProbe` ב- `src/shared/network/safeOutboundFetch.ts`. הרם עבור נקודות קצה איטיות (Cerebras, Cloudflare AI, Groq) כדי למנוע נפנוף בין active/error בלוח המחוונים. יורד ל-8000ms עבור ערכים לא חוקיים (< 1000) או לא מספריים. |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | פסק זמן אחזור ספציפי לממסר ב- `open-sse/utils/proxyFetch.ts` (#9158). ממסר תלוי חייב להיכשל לפני פסק הזמן client/agent (~ 30s), כך שהמתקשרים רואים כשל ספציפי לממסר במקום פסק זמן גנרי במעלה הזרם. מוגבל ל- `29000` כך שהוא תמיד יורה ראשון. |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | נסיון חוזר משותף עבור הנתיבים direct/relay/proxy rery-once ב- `open-sse/utils/proxyFetch.ts` (#9158). `0` = נסה שוב מיד. |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | פסק זמן לבקשת Wreq-js מקורי (`claudeTlsClient.ts`). |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | חסד מוחלט JS קשיח דדליין נוסף על פסק הזמן הילידים. |
| `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | פסק זמן לבקשת Wreq-js מקורי (`perplexityTlsClient.ts`). |
| `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | חסד מוחלט JS קשיח דדליין נוסף על פסק הזמן הילידים. |
| `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (כבוי) | מוסיף "יש לך חיפוש מובנה באינטרנט. ענה על שאלות ישירות באמצעות תוצאות חיפוש." להודעת המערכת של המתקשר (`perplexity-web/protocol.ts`). כבוי כברירת מחדל — Perplexity חיפושים בכל מקרה, והמשפט דולף לתשובות כמטא-פרשנות עבור לקוחות קידוד. הגדר `1`/`true`/`yes`/`on` לשחזור. |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | פסק זמן לבקשת Wreq-js מקורי (`grokTlsClient.ts`). |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | חסד מוחלט JS קשיח דדליין נוסף על פסק הזמן הילידים. |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | פסק זמן של בקשה מקורית wreq-js (`notionTlsClient.ts`); `notion-web` מעלה אותו לפי בקשה ל- `180000` לדורות ארוכים. |
| `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | חסד מוחלט JS קשיח דדליין נוסף על פסק הזמן הילידים. |
| `OMNIROUTE_BROWSER_POOL` | `on` | מאגר דפדפנים משותף Playwright עם עוגיות אינטרנט מגובות דפדפן (`browserPool.ts`); הגדר `off` לנטרול. |
| `OBSCURA_BIN` | `auto-detect` | נתיב לקובץ הבינארי `obscura` המשמש כמנוע הראשי על ידי מאגר הדפדפן ו- Cloudflare Playground executor (`open-sse/services/obscura.ts`); זוהה אוטומטית מהמערכת PATH כאשר אינו מוגדר. |
| `OBSCURA_CDP_ENDPOINT` | _(לא מוגדר)_ | הצבע על אובסקורה שכבר פועלת (`http://host:port`) במקום להשריץ אחת; המודול אינו הבעלים של התהליך הזה (`open-sse/services/obscura.ts`). |
| `OBSCURA_PORT` | `random free port` | יציאה מפורשת עבור `obscura serve` שהולידה; יציאה חופשית נבחרת אוטומטית כאשר אינה מוגדרת (`open-sse/services/obscura.ts`). |
| `WEB_COOKIE_USE_BROWSER` | `0` | בחר בקשת צ'אט של עוגיות אינטרנט לנתיב המגובה בדפדפן (`browserBackedChat.ts`); `1` כדי להפעיל. |
| `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Base URL עבור ה- Kimi Web (International kimi.ai Connect-RPC) executor (`kimi-web.ts`); לעקוף רק עבור נקודות קצה mirror/proxy. |
| `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | נקודת קצה מלאה של צ'אט עבור ה- Kimi Web executor (`kimi-web.ts`). |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | _(זוהה אוטומטית)_ | נתיב לקובץ הפעלה Chrome/Edge של מערכת עבור הכניסה הדפדפן האינטראקטיבי של Adobe Firefly (`adobeFireflyBrowserLogin.ts`); עוקף את הזיהוי האוטומטי לכל מערכת הפעלה. |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ פלט עצמאי_ | עקיפת זמן בנייה עבור ספריית הפלט העצמאית הנצרכת על ידי שלב ה-colocation שלאחר הבנייה (`scripts/build/colocate-standalone.mjs`); לבנות כלי עבודה, לא זמן ריצה. |
ניסיונות יעד משולבים יורשים את פסק זמן הבקשה במעלה הזרם שנפתר (`FETCH_TIMEOUT_MS`, או `REQUEST_TIMEOUT_MS` כאשר הוא מספק את ברירת המחדל של האחזור). הגדר `targetTimeoutMs` בשילוב, ברירות מחדל משולבות או עקיפה של ספק רק כדי להפוך את החזרה המשולבת למהירה יותר; ערכים מעל פסק הזמן הנוכחי במעלה הזרם מוגבלים לזמן הקצוב במעלה הזרם.
`comboTimeoutMs` הוא תקציב נפרד של שעון קיר משולב שלם על פני יעדי מעבר לכשל. השאר את זה לא מוגדר או `0` כדי לשמור על איטרציה בלתי מוגבלת (עצירת תלייה מקודדת קשה של 10 דקות ב- `comboPredicates.ts` עדיין תקפה). ערך חיובי מחליף את רשת הביטחון הזו עבור המשולבת. שמור על `comboTimeoutMs` ארוך יותר מ- `targetTimeoutMs` כך שעדיין יהיה למעבר לכשל לאחר יעד ראשון איטי.
### ספי מפסק מעגלים
כוונון מפסק ברמת הספק. ברירת המחדל משקפת את הערכים המותאמים בשימוש מאז v3.6 עבור 500 חיבורי +.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------------------------------- | ---------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | סף כשל רצוף לספקי OAuth לפני שהמפסק יתקלף. |
| `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | אפס חלון (ms) עבור מפסק ספק OAuth. |
| `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` | אפס חלון (ms) עבור מפסק ספק מפתח API. |
| `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 כולו נכנס ל-cooldown. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: חלון ספירת כשלים מתגלגל (ms) עבור ספקי OAuth. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: התקררות (ms) ברגע שמגיעים לסף ספק OAuth. |
| `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 ספק max 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` | מפסק ברמת הספק: חלון מתגלגל לספירת כשלים (ms) עבור ספקי מפתח API. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: התקררות (ms) ברגע שמגיעים לסף ספק מפתח API. |
| `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` | מכפיל הסלמה max resetTimeout ספק API-key. |
| `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) ברגע שמגיעים לסף הספק המקומי. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | קירור לכל מפתח (ms) מיושם על ידי סיבוב API-מפתח מרובה מפתחות כאשר 429 במעלה הזרם אינו נושא `Retry-After` (#14573). ערכים לא חיוביים או לא מספריים חוזרים לברירת המחדל. |
| `OMNIROUTE_AVALANCHE_PROTECTION_ENABLED` | `false` | `open-sse/services/accountFallback/antiAvalanche.ts` | הצטרפות לשומר נגד מפולת: רק `true` מפורש מאפשר זאת. כאשר מופעל, 429 שמציין מגבלת אסימונים לדקה (והצפת הקשר 400) עוצר את הכשל המדורג על פני המפתחות הנותרים של הספק. 429 שמיצה את המכסה ממשיך להיכשל ככל שההנחיה גדולה ככל שתהיה, ו- HTTP 413 אינו מושפע (הוא שומר על התנהגות ה- #13350 ניסיון חוזר בחשבון אחר). |
| `OMNIROUTE_AVALANCHE_BURST_COOLDOWN_MS` | `60000` | `open-sse/services/accountFallback/antiAvalanche.ts` | התקררות נעילה של דגם (ms) מוחלת כאשר השומר יורה, במקום הנעילה ההסלמה. איפוס ארוך יותר במעלה הזרם תמיד מנצח. ערכים לא חיוביים או לא מספריים חוזרים לברירת המחדל. |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | עומק גיבוי שבו ספק ה-context-cache pin נחשב כלא בריא לאורך זמן והפין נשמט לצורך כשל. |
| `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. רישום
מערכת הרישום כותבת הן לקובצי סטדout והן לקובצי יומן מסובבים. כל התצורה נקראת על ידי `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` | ימים לשמירת ערכי יומן request/call במסד הנתונים. |
| `CALL_LOG_MAX_ENTRIES` | `10000` | מקסימום ערכי יומן שיחות במאגר בזיכרון. |
| `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | מקסימום שורות בטבלת `call_logs` SQLite לפני הגיזום. |
| `ENABLE_REQUEST_LOGS` | _(לא מוגדר)_ | כפה התחברות או ביטול של בקשה מפורטת, תוך עקיפת הגדרות לוח המחוונים. |
| `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (שעה אחת) | גיל מקסימלי עבור ערכי יומן בקשות פעילות יתומות לפני ניקוי בזיכרון. |
| `MAX_PENDING_DETAILS` | `5000` | מקסימום פרטים ממתינים (מספר שלם חיובי); כובע ספירה: לטאטא; כובעי byte/map : הכנס. |
| `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | אחסן נתחי זרם בחפצי צינור כאשר `call_log_pipeline_enabled=true`. הצטרפות (`true`) — כבויה כברירת מחדל כדי לשמור דיסק. |
| `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | גודל חפץ מקסימלי ביומן שיחות צינור ב- KB כאשר `call_log_pipeline_enabled=true`. |
| `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | מקסימום שורות בטבלת `proxy_logs` SQLite לפני הגיזום. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | כלול client/egress IPs וקידומות חשבון ביומני מסוף `[ProxyEgress]`. רשומות ה-proxy-log dashboard/database שומרות פרטים מלאים. |
| `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | הגדר ל- `"true"` או `"1"` כדי להקליט `first_chunk_ms` (שלח התחלה לבייט שימושי ראשון בגוף) בשורות פרוקסי-log. עוטף כל גוף במעלה הזרם בזרם מעבר עצלן ומתקן את השורה ברגע שהבייט מגיע; כבוי כברירת מחדל כך שהתגובות עוברות ללא נגיעה. |
| `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (דקה אחת) | באיזו תדירות `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` | גודל גוף שלם request/response (KB) לפני שהוא מוחלף בסיכום חשוף במקום השיבוט המלא. העלה זאת אם שיחות סוכן ארוכות מציגות מציין מיקום במקום ההודעות האמיתיות במרכז המחוונים. |
| `CHAT_DEBUG_FILE` | `false` | כאשר נכון, `serializeArtifactForStorage` מדלגת על חיתוך מבוסס גודל. ניפוי באגים בלבד. |
---
## 17. אופטימיזציה של זיכרון
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | תֵאוּר |
| -------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_HEAP_DIAGNOSTICS_ENABLED` | `0` (כבוי) | הגדר `1` לרישום מדדי לחץ ערימה של V8 מ- `src/lib/healthzLag.ts`. גדלי יומנים וספירת טיסות, לעולם אל תבקש תוכן, עקבות או ערימה של צילומי מצב. פועל בתוך מקליט לולאת האירועים, כך `OMNIROUTE_EVENT_LOOP_STALL_THRESHOLD_MS=0` גם מכבה אותו. |
| `OMNIROUTE_HEAP_DIAGNOSTICS_THRESHOLD_MB` | `900` | סף חיובי עבור heapUsed (MiB) שמפעיל יומן אבחון הסכמה. ערכים לא חוקיים משתמשים ב-900 MiB; הודעות עם ערימות גבוהות מוגבלות לפעם ב-60 שניות. |
| `OMNIROUTE_MEMORY_MB` | _אוטו_ (מתכת חשופה);**`1024` בתמונת Docker** | **מוּמלָץ** Docker/standalone V8 heap limit (MB). כאשר אינו מוגדר, מכויל באופן דינמי (~ 35% ממערכת RAM, מהודק ל- `[512, 4096]`); `512` הוא רק הרצפה כאשר לא ניתן לקרוא את הזיכרון הכולל. על `run-standalone.mjs` (Docker CMD), an** מְפוֹרָשׁ** הערך מצורף כ- `--max-old-space-size` ו** מנצח** מעל דגל ערימת NODE_OPTIONS מתנגש (V8 last-flag). `omniroute serve` עדיין מעדיף ערימת NODE_OPTIONS קיימת (#5238). אל תגדיר את שניהם למספרים שונים — התהליך רושם אזהרה המציינת את שני הערכים ואת המנצח.** תמונת Docker הרשמית תמיד מגדירה `1024`, כך שהכיול אף פעם לא פועל שם.** סוכן קידוד `/v1/responses` צריך `8192`–`12288` plus cgroup headroom — ראה [Docker Guide — runtime RAM](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). |
| `OMNIROUTE_RSS_PRESSURE_MB` | _auto_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; כבוי כאשר `OMNIROUTE_MEMORY_MB` אינו מוגדר) | `open-sse/utils/resourcePressure.ts` | תהליך RSS אבסולוטי (MB) עבור זיכרון native/external ש-V8 `heapUsed` לא יכול לראות; מעליו בקשות חדשות מקבלים 503 `resource_pressure`. RSS רק לעתים רחוקות נופל לאחר ספייק, אז צמד אותו עם `OMNIROUTE_PRESSURE_SELF_RESTART`. |
| `PROMPT_CACHE_MAX_SIZE` | `50` | מקסימום כניסות בקשת מערכת במטמון. |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | גודל המטמון הכולל המרבי. |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 דקות) | הזן הזנת מטמון TTL. |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | טמפרטורת מטמון מקסימלית = 0 תגובות. |
| `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | גודל מקסימלי של מטמון סמנטי. |
| `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 דקות) | ערך מטמון סמנטי TTL. |
| `OMNIROUTE_SEMANTIC_CACHE_PRUNE_INTERVAL_MS` | `1800000` (30 דקות) | מרווח גיזום SQLite. `0` משבית את האתחול והרצה תקופתית; ערכים אחרים מתחת ל- `60000` חוזרים לברירת המחדל. ערכים מעל `2147483647` ms מהדקים להשהיית הטיימר המקסימלית של Node, ומונעים גלישה ל-1ms סקר. ריצה ראשונה לאחר 1 שניות; הטיימרים אינם מסומנים והריצות לעולם אינן חופפות. |
| `OMNIROUTE_SEMANTIC_CACHE_PRUNE_BATCH_SIZE` | `2000` | שורות לכל SQLite גזם DELETE, מהודקים `[100, 50000]`; נכנע ללופ האירוע בין אצווה. |
| `OMNIROUTE_SEMANTIC_CACHE_PRUNE_MAX_BATCHES` | `50` | תקציב אצווה משותף DELETE להרצה על פני תפוגה ומעברים אופציונליים של כובע שורות, מהודקים ל- `[1, 10000]`. ההצטברות הגיונית נמשכת בריצות מאוחרות יותר. |
| `OMNIROUTE_SEMANTIC_CACHE_MAX_ROWS` | `0` | כובע שורה אופציונלי SQLite (`0` = none). לאחר מחיקת `expires_at <=` את חותמת הזמן של run-start ISO, הוצא `created_at` הישן ביותר, ולאחר מכן `rowid`, כולל שורות חיות, בכפוף לתקציב האצווה המשותף. הספירות נקוצצות למספרים שלמים (עד לגבול הבטוח של המספרים השלמים). ערכים ריקים, לא מספריים, לא סופיים או שליליים עבור כל ארבעת משתני הגזם חוזרים לברירות המחדל שלהם; שברים מתעגלים למטה. גיזום אינו משנה את ההתנהגות של TTL, memory LRU או וקטור-מטמון. |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | שורשי קורפוס מקומיים השומרים על אינדקס חי בזיכרון בבת אחת (`src/lib/localCorpus/configured.ts`). LRU: במגבלה, אינדקס השורש שנעשה בו שימוש פחות לאחרונה מודח ונבנה מחדש בשאילתה הבאה שלו. מהודק למינימום `1`; ערך לא מספרי נופל בחזרה לברירת המחדל. |
| `STREAM_HISTORY_MAX` | `50` | מקסימום אירועי סטרימינג אחרונים במאגר התצוגה החיה של לוח המחוונים. |
| `CONTEXT_LENGTH_DEFAULT` | _(לא מוגדר)_ | עקיפה גלובלית של אורך הקשר (אסימונים) עבור כל ספק שאין לו משתנה `CONTEXT_LENGTH_`. כאשר מוגדר, זה** מחליף** הקטלוג, עקיפת לוח המחוונים וערכי הרישום עבור אותם ספקים; כאשר אינו מוגדר, OmniRoute משתמש בשרשרת המובנית שלה, שהמוצא האחרון שלה הוא `128000`. ראה [אורך הקשר לכל ספק](#per-provider-context-length-context_length_provider). |
| `USAGE_TOKEN_BUFFER` | `100` | מרווח ראש נוסף אסימון שמור בעת מעקב אחר מכסות שימוש. |
### אורך ההקשר לכל ספק (`CONTEXT_LENGTH_`)
`open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) קורא גם א** לכל ספק** טופס ששמו בנוי מהספק ID בזמן ריצה, כך שלא ניתן לרשום אותו שורה אחר שורה בטבלה למעלה או ב- `.env.example`.
**שֵׁם.** `CONTEXT_LENGTH_`, כאשר `` הוא הספק ID באותיות גדולות, כאשר כל תו מחוץ `A-Z` / `0-9` מוחלף ב- `_`. הספק ID הוא הקנוני לאחר רזולוציית הכינוי (החלק `provider` של מחרוזת `provider/model` לאחר פתרון כינוי קצר). צמתים מותאמים אישית תואמי OpenAI או Anthropic משתמשים בצומת שנוצר שלהם ID, כך שה- UUID הוא חלק משם המשתנה. הערך הוא מספר שלם חיובי של אסימונים; מתעלמים מכל דבר אחר (ריק, `0`, שלילי, לא מספרי) והרזולוציה עוברת לשלב הבא.
| ספק ID | שם משתנה |
| ----------------------------------------------------------- | -------------------------------------------------------------------------- |
| סוכן נתב | CONTEXT_LENGTH_AGENTROUTER |
| נתב פתוח | CONTEXT_LENGTH_OPENROUTER |
| openai-compatible-chat-0f8e2c1a-5b7d-4e3f-9a6c-2d1b8e4f7a90 | CONTEXT_LENGTH_OPENAI_COMPATIBLE_CHAT_0F8E2C1A_5B7D_4E3F_9A6C_2D1B8E4F7A90 |
**עֲדִיפוּת.** עבור זוג `provider/model`, הצעד הראשון שמניב ערך מנצח:
1. `CONTEXT_LENGTH_` עבור הספק הזה.
2. `CONTEXT_LENGTH_DEFAULT` (עקיפה של סביבה גלובלית).
3. החלון לכל דגם: עקיפה של הקשר מתמשך (מוגדר בלוח המחוונים, או מוצמד אוטומטית על ידי מיישב הגילוי, ראה `CONTEXT_WINDOW_RECONCILE_INTERVAL`), אחרת הערך של הקטלוג / models.dev המסונכרן.
4. הרישום של הספק `defaultContextLength`.
5. יוריסטיקה של שם דגם (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` / `codex` 400000).
6. ברירות מחדל מובנות לפי ספק, ואז `128000`.
שני שלבי הסביבה חלים על** ספק שלם** : כל דגם של אותו ספק מקבל את אותה הגבלה, והם זוכים לעקיפות של לוח המחוונים לכל דגם. כאשר רק דגם אחד של ספק זקוק לחלון אחר, השתמש במקום זאת בעקיפה לכל דגם בלוח המחוונים.
**תְחוּם.** שרשרת זו מניעה את בדיקת ההקשר-חלון בזמן הבקשה (דחיית `context_length_exceeded` / "הקלט חורג מחלון ההקשר" ב- `open-sse/handlers/chatCore.ts`), תקציבי דחיסה מנחים ומגבלות ההקשר המשולבות. ה- `context_length` המפורסם על ידי `GET /v1/models` עדיין יכול להגיע ממטא-נתונים של קטלוג או רישום ולא מובטח שישקף את עקיפת הסביבה.
**דוּגמָה.** ספק שהדגם שלו מקבל חלון של 1,050,000 אסימונים בעוד הקטלוג מדווח על 128,000:
```dotenv
CONTEXT_LENGTH_AGENTROUTER=1050000
```
הפעל מחדש את השרת לאחר שינויו: הערך נקרא מסביבת תהליך השרת. על** אפליקציית שולחן העבודה** השרת פועל כתהליך צאצא ואינו רואה משתנה מערכת שהוגדר לאחר השקת האפליקציה; שים את השורה בקובץ `.env` שהאפליקציה נטענת (סדר חיפוש במדריך [Electron : Environment file lookup](../guides/ELECTRON_GUIDE.md#environment-file-lookup) ), ואז צא לחלוטין והפעל מחדש את האפליקציה.
### דְחִיסָה
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | תֵאוּר |
| ------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------- |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | לא מוגדר | אמון פרויקט `.rtk/filters.json` ללא חשיש של `.rtk/trust.json`. השתמש רק בפיתוח מקומי מבוקר. |
### מנוע זיכרון (תוכנית 21)
### עלות לולאת אירוע של זיכרון, כישורים ורענון אסימונים (#10349)
OmniRoute הוא א** תהליך צומת יחיד** . זיכרון extraction/retrieval, הזרקת מיומנויות ורענון אסימון ספק פועל על זה** אותה לולאת אירוע** כמו `GET /healthz` ולוח המחוונים. הם לא חוט עובדים.
| עֲבוֹדָה | קוד | בְּרִירַת מֶחדָל | בקרת מפעיל |
| --------------------- | ---------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| חילוץ/שליפה של זיכרון | `src/lib/memory/` | לוּחַ מַחווָנִים**memoryEnabled** (ברירת מחדל מופעל) | לְכַבּוֹת** הגדרות → זיכרון** . אין מתג התקנת env נפרד מעבר לביטול התכונה בהגדרות. |
| הזרקת מיומנויות | `src/lib/skills/injection.ts` | לוּחַ מַחווָנִים**skillsEnabled** (ברירת מחדל מופעל) | לְכַבּוֹת** הגדרות → Memory/Skills** (`skillsEnabled`). כפתורי ארגז חול מתחת לביצוע קשור רק לאחר שההזרקה כבר מופעלת. |
| רענון אסימון | `src/sse/services/tokenRefresh.ts` | פועל עבור ספקי OAuth/web מחוברים | נתק את הספק או תן לאסימונים להישאר בתוקף; אין היום `TOKEN_REFRESH=0` env. |
אם `/healthz` איטי בקופסה שקטה, השבת תחילה את כישורי + בזיכרון, ולאחר מכן בדוק את ה- catalog/compression load (#10303, #9685). תכונות אלו מניבות נקודות `await` אך עדיין מתחרות על השרשור האחד.
הטמעת שכבה, אחסון וקטור ודירוג מחדש עבור תת-מערכת הזיכרון המתמשך (`src/lib/memory/`).
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | תֵאוּר |
| ------------------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 דקות) | TTL עבור מטמון הטבעה בזיכרון (לכל חתימת source/model/dim ). |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | ערכים מקסימליים LRU שמורים במטמון ההטמעה. |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | מזהה ריפו של HF עבור צינור `@huggingface/transformers` המקומי להצטרפות (~ 23 MiniLM MB, ~ 400 MB RAM). |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | HF repo id עבור הטמעת טבלת בדיקת potion/Model2Vec סטטית. הורד בעצלתיים לתוך המטמון dir. |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | ספרייה המשמשת לשמירה במטמון של קבצי מודל השיקויים הסטטיים. ברירת מחדל תחת `DATA_DIR` כאשר לא מוגדר. |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | עוקף את בסיס ה- URL של Hugging Face Hub בשימוש על ידי `staticPotion.ts` (למשל נקודת קצה של מראה עבור הגדרות מרווחות אוויר). |
| `MEMORY_VEC_TOP_K` | `20` | ברירת המחדל של top-K בשימוש בחיפוש הווקטור `sqlite-vec` brute-force בתוך `src/lib/memory/vectorStore.ts`. |
| `MEMORY_RRF_K` | `60` | Reciprocal Rank Fusion קבוע `k` לשחזור וקטור FTS5 + (מתכון sqlite-vec). |
| `VECTOR_STORE_DISABLE_VEC` | `false` | תפר Test/diagnostic ב- `getVectorStore()` (`src/lib/memory/vectorStore.ts`): כאשר `true`, מאלץ את מאגר הווקטור ל- `null` (מדמה סביבת cloud/WASM ללא `sqlite-vec`), ובכך משפיל את אחזור הזיכרון לחיפוש מילות מפתח FTS5. השאר לא מוגדר בייצור. |
| `NOTION_API_KEY` | _(לא מוגדר)_ | מפתח API עבור Notion backend (בשימוש על ידי `genericBackend.ts` ידוע מראש של backend). |
| `NOTION_API_URL` | `https://api.notion.com/v1` | בסיס URL עבור Notion API (יכול לעקוף עבור חלופות Notion שמתארחות בעצמם). |
| `OBSIDIAN_API_KEY` | _(לא מוגדר)_ | מפתח API עבור Obsidian Vault backend (בשימוש על ידי `genericBackend.ts` ידוע מראש של backend). |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Base URL עבור Obsidian Vault API (יכול לעקוף עבור כספת מרחוק). |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | מתג ראשי של ריקבון זיכרון מסוג TV6.** הצטרפות (ברירת מחדל כבויה)** — הסוויפ** מוחק** זיכרונות נרקבים. עם זה כבוי, `access_count`/`last_accessed_at` הם טלמטריה טהורה ושום דבר לא נמחק. |
| `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (ימים) שלאחריו זיכרון `episodic` שאינו בשימוש מתפורר. `0` עושה חסינות אפיזודית מדי. סוגים עמידים (`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`/unset = אין סוויפ תקופתי. הצטרפות כפולה: דורשת גם `MEMORY_TYPED_DECAY_ENABLED=true`. |
| `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(לא מוגדר)_ | מזהי ספקים מופרדים בפסיקים (לא רגישים לאותיות גדולות) שמקבלים הודעת `system`** רק במדד 0** (`src/lib/memory/injection.ts`). עבור אלה, ספייס זיכרון אמצע המערך בטוח במטמון אינו בטוח בשיחות מרובות פניות, כך שהזיכרון הוא merged/prepended בתור הודעת המערכת המובילה במקום זאת. ברירת המחדל היא רק `xiaomi-mimo`/`mimo`; להרחיב עבור נקודות קצה תואמות OpenAI המתארחות בעצמן (למשל Qwen3.5 +/3.6) שתבנית הצ'אט שלהן אוכפת את אותו אילוץ מסר מערכת מובילה אחת. |
### זיכרון RAM נמוך Docker דוגמה
`128` הוא לוח המחוונים בלבד. סוכני קידוד על ערימת `FATAL ERROR` זו במהלך `/v1/responses` ארוך. אל תשתמש בדוגמה זו כשער 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` (24 שעות) | `src/lib/pricingSync.ts` | מרווח סנכרון בשניות. |
| `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | מקורות נתונים מופרדים בפסיקים. |
---
## Arena ELO Sync
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------- | ----------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | סינכרון תקופתי של Arena AI leaderboard ELO, ניתן להגדרה מדגלי תכונות של לוח המחוונים או עם `false` לביטול הסכמה. |
| `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | טופס קידומת המשמש למזהי מודל ב- `GET /v1/models`. `dual` מפרסמת הן את קידומת הכינוי הקצרה והן את קידומת הספק הקנונית עבור כל דגם (תאימות לאחור — מכפילה בערך את הקטלוג); `alias` פולט מזהה אחד לכל דגם; `canonical` פולט רק את קידומת הספק-מזהה המלאה (ספקים שהכינוי שלהם כבר הוא המזהה הקנוני שומרים על הערך היחיד שלהם). לקוחות יכולים לעקוף לפי בקשה עם `?prefix=alias`. ראה [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). |
| `ARENA_ELO_SYNC_INTERVAL` | `86400` (24 שעות) | `src/lib/arenaEloSync.ts` | מרווח סנכרון בשניות. |
---
## ספק מגרש משחקים PromptQL (Unofficial/Experimental)
הנדסה הפוכה GraphQL session bridge עבור prompt.ql.app (`src/shared/constants/providers/web-cookie.ts`). כל ברירות המחדל האופציונליות — מצביעות על נקודות הקצה של מגרש המשחקים הציבורי; לעקוף רק עבור פריסת self-hosted/alternate PromptQL.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------ |
| `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | נקודת קצה GraphQL משמשת לפעולות chat/session. |
| `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | נקודת קצה GraphQL משמשת לשאילתת אשראי balance/usage. |
| `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` | זמן מקסימלי (ms) לסקר `thread_events` לפני הזמן הקצוב. |
---
## ספק אינטרנט HyperAgent (Unofficial/Experimental)
גשר הפעלה מהונדס לאחור עבור hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). אופציונלי — נקודות ברירת המחדל בנקודת הקצה billing/usage הציבורית; לעקוף רק עבור פריסת self-hosted/alternate HyperAgent.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------- | --------------------------------------------------- | --------------------------------------- | -------------------------------------------------- |
| `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | נקודת קצה משמשת לאיסוף חסימות אשראי billing/usage. |
---
## מדיניות תקציב שימוש ללא מחיר
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------ | ------------------------------------------------------------ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `UNPRICED_USAGE_BUDGET_POLICY` | _(לא מוגדר; כישלון סגור אלא אם ביטול ההסכמה הבוליאני מופעל)_ | `src/shared/utils/featureFlags.ts` | מגבלות daily/weekly USD לכל מפתח: `fail_closed` חוסם שימוש אמיתי ללא מחיר; `count_as_zero` סופרת אותו כ-$0 תוך אכיפת הוצאה במחיר. Enum מפורש (DB לפני env) עוקף את ביטול ההצטרפות בוליאני. ערכים לא חוקיים וכישלונות חיפוש תמחור נכשלו סגור. |
| `USAGE_LIMIT_IGNORE_UNPRICED` | `false` | `src/shared/utils/featureFlags.ts` | ביטול הסכמה לתאימות בוליאנית במעלה הזרם: סופרת שימוש אמיתי ללא מחירים כ-$0 רק כאשר לא מוגדרת מדיניות enum מפורשת. הוצאה במחיר וחיפושים כושלים נשארים נאכפים. |
## מכסות שימוש בקוד קילו
מאזן USD אישי וחיפוש שימוש ב-Kilo Pass עבור ספק ה-Kilo Code. אופציונלי — נקודות ברירת המחדל ב- Kilo API הציבורי; לעקוף רק עבור מתקן relay/test. האימות משתמש באסימון הגישה הקיים של החיבור OAuth.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| -------------- | --------------------- | ------------------------------------- | ----------------------------------------------------------------- |
| `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | Base URL משמש כדי להביא יתרת Kilo Code אישית ושימוש ב- Kilo Pass. |
---
## ספק האינטרנט של Adobe Firefly (Unofficial/Experimental)
רענון הפעלה מונחה דפדפן עבור ספק האינטרנט של Adobe Firefly (`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`, `open-sse/services/adobeFireflyClient.ts`). — אופציונלי, כל ברירות המחדל מכוונות להתקנת שולחן עבודה רגילה.
> **הוסר ב-#9255.** זמן הריצה הישן של Chrome המחובר ל-CDP (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` | הגדר ל- `1` עבור Chrome ללא ראש אמיתי (ידוע שבור עבור יצירת; ניפוי באגים בלבד). |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | דפדפן יזום חם opt-in/out. `0` משבית חום יזום (שחזור אמצע אצווה 408 עדיין חל). |
| `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | הגדר ל- `0` כדי לבטל את השהיית ההפעלה של Adobe Firefly לדיסק. |
| `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | _(לא מוגדר)_ | `open-sse/services/adobeFireflySession.ts` | הפער המינימלי (ms) נאכף בין הגשות עוקבות, עוקף את ברירת המחדל המובנית. |
| `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(לא מוגדר)_ | `open-sse/services/adobeFireflySession.ts` | פער נוסף (ms) נוסף לאחר אצווה מוצלחת, עוקף את ברירת המחדל המובנית. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(לא מוגדר)_ | `open-sse/services/adobeFireflyClient.ts` | השהיה בבסיס (ms) לפני הגשת בקשת יצירה, עוקף את ברירת המחדל המובנית. |
---
## 19. סנכרון מודל (פיתוח)
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ----------------------------------- | ----------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MODELS_DEV_SYNC_ENABLED` | _(לא מוגדר)_ | `src/lib/modelsDevSync.ts` | עקיפה קשה לסנכרון תמחור models.dev. בטל את ההגדרה = honor הגדרות > AI (`modelsDevSyncEnabled`). `0`/`false`/`off`/`no`** מנצח את ה- DB** ומדלג גם על סנכרון תקופתי וגם על סריקות `getModelsDevPricing()` SQL/JSON (התאוששות כאשר לוח המחוונים תקוע על אותה לולאת אירוע). `1`/`true`/`on`/`yes` כופה על סנכרון. תמחור save/clear עדיין קורא `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 model catalog cache TTL. |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | כלול שדות `name` ידידותיים לתצוגה בתגובות `/v1/models`. השבת עבור לקוחות שמצפים IDs בלבד. |
| `OMNIROUTE_GEMINI_WEB_ARGON_ENABLED` | `0` (כבוי) | `open-sse/config/providers/registry/gemini/web/index.ts` | הצטרפות (#16573). הגדר `1` (או `true`/`yes`) כדי לפרסם `gweb/gemini-4-argon` בספק האינטרנט Gemini ותן למבצע שלו לבחור במצב זה. כבוי כברירת מחדל מכיוון שבוררי התפריט של מצב ארגון לא נבדקו מול חשבון Gemini אינטרנט חי; כאשר הוא כבוי, הדגם אינו מופיע ברשימה ובקשה עבורו נדחית כדגם לא ידוע, כמו קודם. קרא בעת ההפעלה, כך ששינוי מצריך הפעלה מחדש. |
| `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8s) | `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). שורות שלעולם לא עם חותמת זמן נחשבות כמיוששות. |
| `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (שנות ה-60) | `src/lib/usage/analyticsResponseCache.ts` | כמה זמן נעשה שימוש חוזר בתגובת `GET /api/usage/analytics` איטית עבור אותה מחרוזת שאילתה (#15629). `0` משבית את המטמון. |
| `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1s) | `src/lib/usage/analyticsResponseCache.ts` | רק תגובות אנליטיות שלקח לפחות כל כך הרבה זמן לבנות נשמרות במטמון, כך שמופעים קטנים תמיד רואים נתונים טריים. |
| `OMNIROUTE_CACHE_METRICS_MIN_COMPUTE_MS` | בטל (כבוי) | `src/app/api/cache/route.ts` דרך `src/lib/usage/analyticsResponseCache.ts` | הצטרפות (#16361). כאשר מוגדר למספר שלם לא שלילי, החלק של היסטוריית השימוש של `GET /api/cache` (מגמת prompt-cache totals + ) מוגש ממטמון התגובה האנליטית המשותפת כאשר נדרשו לפחות N ms לבנות, לכל חלון `trendHours` מהודק, עבור `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` (ההיסטוריה עשויה לפגר עד ל- TTL זה; `DELETE /api/cache` מבטל אותו). היסטוריית = לא מוגדרת או לא חוקית לקרוא בשידור חי בכל בקשה. |
| `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` | חשבון ID עבור Cloudflare Workers AI. |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(לא מוגדר)_ | `open-sse/executors/cloudflare-playground.ts` | נתיב בינארי מלא של Chrome בשולחן העבודה עבור ה- Cloudflare AI Playground executor, בשימוש כאשר בדיקת טביעת האצבע ללא ראש חוסמת את Chromium החבילה של Playwright. |
| `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) — _unset = no length cap_ | `open-sse/executors/codebuddy/shared.ts` | מכסת אורך אופציונלית עבור הנחיות מערכת המתקשרות שנשלחות ל- CodeBuddy (CN ובינלאומי). כברירת מחדל, רק הנחיה הנושאת סמן זהות סוכן קידוד מוחלפת בהודעה ניטרלית (מסנן התוכן של Tencent דוחה את אלה); הנחיות ארוכות נשמרות. מספר שלם > 0 גם מחליף כל הנחיה מערכת ארוכה יותר ממספר תווים רבים. unset, `0` או ערך שאינו מספר שלם משבית את הכובע. כל תחליף מתעד איזה כלל הופעל (סמן זהות או אורך). |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | עוקף את בסיס Cloudflare REST API המשמש את מאגר הממסרים של מאגר ה-proxy Workers (#4640 / 9router#1360). |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | שם פרויקט עובד המוצע כברירת מחדל במאגר ה-proxy "Deploy Relay". |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | הגדר ל- `false` כדי להסתיר את אפשרות ממסר Cloudflare Workers מהכרטיסייה Proxy Pool. |
| `CLOUDFLARED_BIN` | זיהוי אוטומטי | `src/lib/cloudflaredTunnel.ts` | נתיב מותאם אישית ל- `cloudflared` בינארי. |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | פרוטוקול הובלת מנהרה: `http2` (ברירת מחדל), `quic` או `auto`. |
| `CLOUDFLARED_CONFIG` | _(לא מוגדר)_ | `src/lib/cloudflaredTunnel.ts` | נתיב ל- `config.yml` עם ענן מנוהל מקומי (עם `tunnel:`, `credentials-file:`, `ingress:`). כאשר מוגדר, OmniRoute מפעיל את `tunnel --config run` (המכונה מנהרה) במקום מנהרה מהירה ארעית. |
| `CLOUDFLARED_HOSTNAME` | _(מכניסה לתצורה)_ | `src/lib/cloudflaredTunnel.ts` | ביטול עבור שם המארח הציבורי של המנהרה עם השם (למשל `ai.example.com`), מדווח כ- `publicUrl`/`apiUrl`. כאשר אינו מוגדר, הוא נקרא משם המארח הראשון של `ingress` של התצורה. |
| `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | עוקף את בסיס ה-Deno Deploy REST API המשמש את מפרסת הממסרים של מאגר ה-proxy (#4643 / 9router#1437). |
| `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | ברירת המחדל של Deno Deploy שם האפליקציה המוצע ב-proxy-pool "Deploy Relay". |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | הגדר ל- `false` כדי להסתיר את אפשרות הממסר Deno Deploy מהכרטיסייה Proxy Pool. |
| `SEARCH_CACHE_TTL_MS` | `300000` (5 דקות) | `open-sse/services/searchCache.ts` | TTL לחיפוש API (Perplexity, Brave וכו') שמירה במטמון. |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | חשוף את הספק הניסיוני תואם CC UI עבור ממסרי קוד Claude בלבד. |
| `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | עוקף את המארח שבו מופע הנתב 9 המוטבע מאזין. |
| `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | עוקף את היציאה שבה מופע הנתב 9 המוטבע מאזין. |
| `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | מארח קשירה עבור פרוקסי WebSocket של השירות המוטמע (לולאה חזרה רק כברירת מחדל). |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | יציאה עבור שרת ה-proxy 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` sidecar ב- (#12578). נפח הנתונים שלו מכיל אישורי ספק OAuth/API ולתמונה המוצמדת אין עקיפת `api-keys` מבוססי-env (רק `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 Automation) (תמיד 127.0.0.1). |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | מארח bind/connect שירות משובץ של Dario (לופ-בק רק כברירת מחדל). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | יציאת שירות משובץ של דריו. |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | מארח bind/connect שירות משובץ של Dario (לופ-בק רק כברירת מחדל). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | יציאת שירות משובץ של דריו. |
| `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. |
| `NONE_HONORED_WINDOW_HOURS` | `24` | `src/lib/db/reasoningEffortCompliance.ts` | חלון נגרר בשעות עבור הקורא reasoning_effort = none compliance ב- GET /v1/models/health. |
| `NONE_HONORED_CACHE_TTL_MS` | `20000` | `src/lib/db/reasoningEffortCompliance.ts` | מטמון TTL ב-ms עבור תמונת המצב של אי-תאימות (15-30 שניות). |
| `NONE_HONORED_MIN_SAMPLE` | `3` | `src/lib/db/reasoningEffortCompliance.ts` | מינימום אין בקשות לפני שדוגמנית קורא מכובד או לא מכובד; מתחת לזה הדגם קורא לא ידוע. |
| `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 ברקע שבודק מעת לעת פרוקסי רשומים. |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | מרווח סוויף של מתזמן בריאות ברקע ב-ms (מינימום `60000`). |
| `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | מרווח בדיקה ב-ms עבור פרוקסי ממסר קצה (`deno`/`vercel`/`cloudflare`), שהבדיקות שלהם מעירות מבודד ללא שרת מחויב (מינימום `60000`). |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | מרווח התאוששות-מעבר ברקע ב-ms: באיזו תדירות נבדקים מחדש פרוקסי שלא היו בריאים בעבר כך שפרוקסי משוחזר חוזר לסיבוב ללא הפעלה מחדש. ערכים מתחת ל- `60000` חוזרים לברירת המחדל. |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | יעד בדיקת גישה המשמש את המתזמן ואת נקודת הקצה `/api/settings/proxies/auto-test`. כוון אותו ל- internal/self-hosted URL כדי למנוע את ברירת המחדל הציבורית. |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | בדיקות התחילו בבת אחת בכל אצווה, משותפים על ידי המתזמן ונקודת הקצה `/api/settings/proxies/auto-test`. מוקף ב-1 ומוגבל ל-50. |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | עיכוב ב-ms בין שתי יציאות בדיקה בתוך אצווה. בלעדיו כל האצווה עוזבת באותו רגע ויציאה משותפת IP יכולה להכשיל יעד מוגבל בקצב. הגדר ל- `0` כדי להשבית את המרווח; מוגבל ל-5000. |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | הגדר "false" כדי להפסיק לחקור את המארח האמיתי של הספק המוקצה של פרוקסי (`GET /models`, ללא מפתח API ) ותמיד השתמש `PROXY_HEALTH_TEST_URL` במקום. |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | כאשר `false` (ברירת מחדל), בדיקות נגישות אוטומטיות (המתזמן + כפתור `/api/settings/proxies/auto-test` "בדוק הכל")** לקריאה בלבד** ולעולם אל תכתוב את הסטטוס של פרוקסי — רק האופרטור מגדיר active/inactive, כך שבדיקה מתקלפת לא יכולה לתקוע פרוקסי מוקצה (#6246). הגדר `true` כדי לשחזר את התנהגות הבדיקה וההגדרה מדור קודם. |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונת הצטרפות (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). `true` (או `1`, `yes`) מנסה שוב סטרימינג מתורגם ריק פונה בנתיב האישורים הרגיל (עד ניסיונות חוזרים `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` ) במקום לחשוף 200 ריק או 502 ריק. |
| `EMPTY_STREAM_SIBLING_RECOVERY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונת הצטרפות (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). `true` (או `1`, `yes`) מפעילה את בדיקת התוכן הזרם הריק Claude/Codex ומבלה את הניסיון החוזר הקיים בחיבור מתאים אחר לאחר סיבוב `empty_content`, ללא התקררות או נעילת דגם. |
| `STREAM_LATE_OUTPUT_PROBE_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונת הצטרפות (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). `true` (או `1`, `yes`) ממשיכה לדגום נתח אחד מועבר ב-16 לאחר ש-64 הפלט הראשונים הנראים המאוחרים כל כך עדיין מסמנים את הזרם כפלט פלט (פוסט-פלט בודד 5xx נשאר בטווח בקשה במקום נעילה לדגם בלבד). |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונת הצטרפות (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). `true` (או `1`, `yes`) מציגה את תצפית היציאה של מאגר לקריאה בלבד תחת מאגר פרוקסי בלוח המחוונים (יציאה ברורה IPs, חיבורים והכי הרבה שנראה מאחורי IP אחד במהלך 24 השעות האחרונות, מיומן ה-proxy). מעולם לא נעשה בו שימוש לניתוב. |
| `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונת הצטרפות (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md) ; עקיפת DB של לוח המחוונים מנצחת). `true` (או `1`, `yes`) מקבל כתובות נצפות מתוארכות שנדחפו על ידי מפעיל לכל חבר בבריכה וממזג אותן עם היומן הנקרא לצורך תצוגה וסדר מאגר. |
| `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | חלון תצפית בשעות עבור שורות יציאה שנדחפו על ידי מפעיל (קרא בכל קריאה; אין צורך בהפעלה מחדש). מוגבל ל-1..168; מחוץ לטווח, לא מספרי או ריק נופל חזרה ל-24 עם אזהרה אחת לכל אורך התהליך, אף פעם לא זריקה. |
| `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` | הגדר `true` לאפשר למתזמן להשבית באופן רך (סטטוס `dead`, מעולם לא נמחק) פרוקסי לאחר כשלים חוזרים ונשנים, במקום להסיר אותו. אלטרנטיבה לא הרסנית ל- `PROXY_AUTO_REMOVE`: ה-proxy נושר מרזולוציית pool/rotation באופן מיידי (מסנן הסטטוס החי בו נעשה שימוש ברזולוציית scope-pool כבר אינו כולל אותו) ומופעל מחדש באופן אוטומטי ברגע שהוא מתחיל להעביר שוב בדיקות. חולק את סף `PROXY_AUTO_REMOVE_AFTER`. אם שני הדגלים הם `true`, `PROXY_AUTO_REMOVE` מנצח. |
| `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | דילוג פסיבי להצטרפות: כאשר `true`, המתזמן מדלג על הבדיקה החיה עבור נקודת קצה שתעבורת הייצור האחרונה שלה כבר מוכיחה זאת (לפחות הצלחה אחת וללא כשל פרוקסי מיוחס בחלון, ספק אחד בדיוק נצפה). כבוי כברירת מחדל: כל פרוקסי נבדק. |
| `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | חלון ב-ms של תעבורת ייצור שהדילוג הפסיבי מסתכל עליו (תוחם `60000..599999`). קצר יותר ממרווח הסוויפ של 10 דקות כך שכשל לאחרונה שולט במקום להיות מדולל. |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | אפשר לזרימות האימות של OAuth ולספק לעקוף פרוקסי מוצמד ולהתחבר ישירות כאשר בדיקות מוקדמות של נגישות פרוקסי נכשלות. עדיפות אפקטיבית היא תכונה דגלי DB עוקפת > env var > ברירת המחדל. |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (שנות ה-30) | `src/lib/resilience/settings.ts` | בְּרִירַת מֶחדָל** תור-המתנה** תקציב: כמה זמן בקשה עשויה לחכות למשבצת של ספק ולעמוד בתור לפני שהיא תידחה, ולעולם לא תגיע למעלה הזרם. הטיימר נמחק ברגע שהעבודה מתחילה לבצע ביצוע — מוגבל בנפרד על ידי `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Env מגדיר את ברירת המחדל בלבד: a persisted `resilienceSettings.requestQueue.maxWaitMs`, ולאחר מכן `rateLimitOverrides.maxWaitMs` לכל חיבור, כל אחד מנצח אותו. |
| `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 דקות) | `open-sse/services/rateLimitManager.ts` | התקרה למשך כמה זמן בקשה שהתקבלה עשויה להישאר בביצוע לפני שתפוג תוקף ההזמנה של מגבלת התעריף שלה — מנותקת מתקציב המתנה בתור, כך שהתחלת אחזור איטית בשערים שאינם מצטברים לא תסתיים זמן קצוב (#12027). |
| `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (נכה) | `open-sse/services/rateLimitManager.ts` | תקרת כניסה לתור: דחה עם 429 `queue_full` ברגע שכל כך הרבה בקשות כבר עומדות בתור. `0` = unbounded (ברירת מחדל). |
| `RATE_LIMIT_AUTO_ENABLE` | _(לא מוגדר)_ | `open-sse/services/rateLimitManager.ts` | כפה את רשת הביטחון של מגבלת הקצב להפעלה אוטומטית on/off ללא קשר להגדרת לוח המחוונים המתמשכת (`resilienceSettings.requestQueue.autoEnableApiKeyProviders`). מקבל `true`/`1`/`on` כדי להפעיל בכוח, `false`/`0`/`off` לכבות. כאשר הם פעילים (ברירת מחדל), חיבורי מפתח API פעילים מוגנים אוטומטית בהגבלת קצב. הגדרת `rateLimitProtection: false` לכל חיבור משביתה הגנה מפורשת אך אינה מבטלת את ההצטרפות לרשת ביטחון זו; הגדרת ה-env var ל- `false` היא המנגנון הגלובלי להפעלת חיבורי מפתח API ללא תורים להגבלת קצב. |
| `PROVIDER_COOLDOWN_ENABLED` | _(בטל את ההגדרה → )_ | `open-sse/services/providerCooldownTracker.ts` | הצטרפות גלובלית למעקב אחר בקשות צולבות provider/connection cooldown. OFF כברירת מחדל (חופף להתקררות חיבור / מפסק ספק). מקבל `true`/`1`/`on` כדי להפעיל. |
| `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | התקררות מינימלית (ms) לפני ניסיון חוזר provider/connection שנכשל. קנה מידה אקספוננציאלי עם כשלים רצופים. משמש רק כאשר `PROVIDER_COOLDOWN_ENABLED`. |
| `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 דקות) | `open-sse/services/providerCooldownTracker.ts` | מכסת קירור מקסימלית (ms) לפני ניסיון חוזר provider/connection שנכשל ללא קשר. משמש רק כאשר `PROVIDER_COOLDOWN_ENABLED`. |
| `STREAM_RECOVERY_ENABLED` | _(בטל את ההגדרה → )_ | `src/lib/resilience/settings.ts` (זרע) → `open-sse/services/streamRecovery.ts` (לוגיקה) | **מַה:** שחזור שקוף של זרמים קטועים במעלה הזרם (יציאת קוד חופשי-קלאוד). מחזיק את חלון SSE הפותח עד `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) כך ש-_pre-commit_ cutoff — אחד שמתרחש לפני כל בייט מגיע ל- — של הלקוח נפתח מחדש ומנוסה מחדש באופן בלתי נראה.** מתי להפעיל:** flaky/upstreams שלעתים קרובות 0-byte-קטוע בתחילת הזרם; עזוב OFF אם אינך יכול להרשות לעצמך עד 750 אלפיות השנייה של זמן נוסף ל-Token הראשון בכל זרם. מקבל `true`/`1`/`on`. משרה את הגדרת החוסן המתמשך; הגדרת לוח המחוונים מנצחת ברגע שנקבע. |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(בטל את ההגדרה → )_ | `src/lib/resilience/settings.ts` (זרע) → `open-sse/services/streamRecovery.ts` (לוגיקה) | **מַה:** המשך mid-stream (Fase 4.4) — לאחר גזירת _post-commit_ (בייטים כבר הגיעו ללקוח), בקש מחדש עם הטקסט החלקי כמילוי מקדימה של עוזר ותפור את הסיומת החסרה. זרמים תואמי OpenAI בטקסט רגיל בלבד; אף פעם לא יורה עם קריאת כלי בטיסה.** מתי להפעיל:** דורות ארוכים שנחתכים באמצע התשובה ואתה מקבל את הזנב המשוחזר שמגיע כפרץ אחד ולא אסימון אחר אסימון. בלתי תלוי ב- `STREAM_RECOVERY_ENABLED` (פרופיל סיכון שונה). מקבל `true`/`1`/`on`. |
| `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(בטל את ההגדרה → )_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | כלב שמירה על פלט שימושי בזרם פעיל. מזהה זרמים שממשיכים לשלוח נתחים אבל נשארים מתחת לקצב הפלט המוגדר של עוזר; פעימות לב, אירועי שימוש, דלתות ריקות ושלבי tool/reasoning אינם מתחפשים להתקדמות. הפרד מתקופת זמן סרק וזמן קשיח. זרעים את ברירת המחדל בלבד: בוליאן שנשמר ב- `resilienceSettings` (Dashboard → Settings → Resilience) מקבל עדיפות. |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | תקופת חסד לפני הערכת התפוקה, מוגבלת ל-0–600000 אלפיות השנייה. |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | חלון פלט שימושי מתגלגל, מוגבל ל-1000–600000 אלפיות השנייה; נדרש חלון שלם אחד לפני הפסקה. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | קצב בתים מינימלי UTF-8 assistant-out (proxy אסימון שמרני), מוגבל ל-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` | ריצוד אקראי מינימלי (ms) נוסף על גבי `HEALTHCHECK_STAGGER_MS` בין בדיקות תקינות אסימון הספק, כדי למנוע התפוצצות (גיליון מס' 1220). |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | ריצוד אקראי מקסימלי (ms) נוסף על גבי `HEALTHCHECK_STAGGER_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` | פרוקסי חוסך אסימון מרווח ראש URL. מחזור החיים של לוח המחוונים (`api/headroom/*`) מולידה `headroom-ai` CLI מקומי ב-loopback כברירת מחדל; לעקוף רק כדי להצביע על פרוקסי חיצוני Docker sidecar. |
### קבועי כוונון של שחזור זרם
התנהגות השהיית התאוששות מכוונת על ידי קבועים מקודדים ב- `open-sse/config/constants.ts` (`STREAM_RECOVERY`), המוצגת כאן לעיון — שינוים דורש עריכת קוד, לא env var:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — כמה זמן חלון SSE הפותח מוחזק כדי שניתן יהיה לנסות שוב חיתוך מוקדם לפני כל בייט מחויב ללקוח.
- כובע קשיח `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — על החלון המוחזק; commit (flush + passthrough) ברגע שהרבה בתים מצטברים, ללא קשר לטיימר.
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — max שקופה נפתחת מחדש של הזרם במעלה הזרם בזמן שההחזקה עדיין לא מחויבת.
> **מגבלת תעריף של חלון הזזה לכל ספק (ללא env var):** מגבלת שיעור _fallback_ של חלון הזזה לפי ספק עם יציאת FCC קיימת בקוד (`open-sse/services/providerDefaultRateLimit.ts`, חוטית דרך `open-sse/services/rateLimitManager.ts`) אך נשלחת עם** מפת ברירת מחדל ריקה** ויש** אין מפעיל env var** היום — זה מופעל רק באמצעות הוק לבדיקה / עריכת קוד. זה בכוונה לא רשום בטבלה למעלה. מגביל ממסר per-`(token, IP)` ש_יש_ לו כפתור הוא `RELAY_IP_PER_MINUTE` (§3 רשת ויציאות).
---
## 22. איתור באגים
> [!CAUTION]
> משתנים אלו מייצרים** פלט מילולי** ועלול לדלוף נתונים רגישים.** לעולם אל תאפשר בייצור.**
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CURSOR_DEBUG` | _(לא מוגדר)_ | `open-sse/executors/cursor.ts` | הגדר `1` לאפשר יומני ביצוע מילוליים Cursor (נתחי SSE מפוענחים וכו'). |
| `CURSOR_STREAM_DEBUG` | _(לא מוגדר)_ | `open-sse/executors/cursor.ts` | כינוי תואם אחורה של `CURSOR_DEBUG`. |
| `CURSOR_DUMP_FILE` | _(לא מוגדר)_ | `open-sse/executors/cursor.ts` | נתיב קובץ אופציונלי המקבל נתחי Cursor מפוענחים גולמיים כאשר `CURSOR_DEBUG=1`. |
| `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | פסק זמן סרק של זרם (ms) עבור המבצע Cursor. |
| `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | חלון חסד (ms) לאחר terminator רך של composer kv_after_text כאשר בתים נשארים מאוגרים — נותן זמן קריאה לכלי exec_mcp נגרר להשלמת המסגרת שלו. |
| `CURSOR_TOOL_DIRECTIVE` | מופעל (`!== "0"`) | `open-sse/executors/cursor.ts` | הנחיית Tool-commit שגורמת composer-2.5 להנפיק קריאות לכלים באופן מהימן. הגדר `0` כדי להשבית. |
| `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(לא מוגדר)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | טקסט הודעת מערכת המוגדרת על ידי מפעיל מצורף להודעת המערכת תרגום AFTER (הזרקה לאחר תרגום), ומגיע לנתיבי codex/Responses ו- `/v1/messages`. משמש גם בתור קידומת ההנחיה שהופשטה מגושי ההקדמה של המערכת. השאר לא מוגדר כדי להשבית. |
| `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (כבוי) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | הגדר ל- `1` כדי להסיר את בלוקי ההקדמה של המערכת מהדהוד מתחילתו של זרם openai → קלאוד. כבוי כברירת מחדל — ההיוריסטיקה היא בצורת פרוזה באנגלית ומשנה את מטען התגובה, כך שתשובה שנפתחת באופן לגיטימי עם סעיף כזה תאבד אותה. |
| `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | פסק זמן לאחזור לכל תמונה (ms) עבור קלט ראיית `image_url` מרחוק. |
| `CURSOR_STATE_DB_PATH` | _(נבדק)_ | `open-sse/utils/cursorVersionDetector.ts` | עוקף את בדיקת Cursor DB IDE לזיהוי גרסת IDE. |
| `CURSOR_AGENT_CLI_VERSION` | _(זהה / הצמד)_ | `open-sse/utils/cursorAgentCliVersion.ts` | מזהה בניית סוכן CLI (`YYYY.MM.DD-`) עבור `x-cursor-client-version: cli-…` ב- Agent Run. |
| `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` | שעון קיר לכל תמונה (ms) לעבודות תמונת Cursor Agent. |
| `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) image-gen result-poll cadence (ms). |
| `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | UC image-gen תוצאות סקר שעון קיר (ms). |
| `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | UC (uncensored.com) קצב תוצאות סקר וידאו-gen (ms). |
| `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | UC video-gen תוצאות סקר שעון קיר (ms). |
| `CURSOR_DATA_DIR` | _(נבדק)_ | `open-sse/utils/cursorAgentCliVersion.ts` | עוקף Cursor Agent CLI data dir (`…/versions/`); אותו ואר שבו משתמש הסוכן הרשמי. |
| `CURSOR_TOKEN` | _(לא מוגדר)_ | `scripts/ad-hoc/cursor-tap.cjs` | אסימון Cursor ישיר בשימוש על ידי כלי מפתחים. |
| `OMNIROUTE_LOG_REQUEST_SHAPE` | מושבת (הצטרפות דרך `"1"`) | `src/app/api/v1/chat/completions/route.ts` | רישום סמני content-type/length עבור עומסי צ'אט גדולים כאשר `"1"` מוגדר. כבוי כברירת מחדל כדי להפחית רעש יומן. |
| `DEBUG_RESPONSES_SSE_TO_JSON` | _(לא מוגדר)_ | `open-sse/handlers/responseTranslator.ts` | הגדר `true` לתיעוד תגובות API SSE→JSON פרטי תרגום. |
| `DEBUG_CLAUDE_NONSTREAM` | _(לא מוגדר)_ | `open-sse/handlers/responseTranslator.ts` | הגדר `true` לשטח נתחי textContent ריקים בנתיב התרגום של תגובת Claude (ניפוי באגים בלבד). |
| `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(לא מוגדר)_ | רתמת מבחן E2E | הגדר `true` כדי לאפשר מצב בדיקה E2E (אישור רגוע, ווים לבדיקה). |
---
## 23. שילוב GitHub
אפשר למשתמשים לדווח על בעיות ישירות ממרכז השליטה.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| --------------------- | ---------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `GITHUB_ISSUES_REPO` | _(לא מוגדר)_ | `src/app/api/v1/issues/report/route.ts` | מאגר בפורמט `owner/repo`. |
| `GITHUB_ISSUES_TOKEN` | _(לא מוגדר)_ | `src/app/api/v1/issues/report/route.ts` | אסימון גישה אישי של GitHub עם היקף `issues:write`. |
| `GITHUB_TOKEN` | _(לא מוגדר)_ | מסייעים לטריאג' / ענן לסוכן ענן | אסימון גישה כללי GitHub המשמש כ-fallback עבור `GITHUB_ISSUES_TOKEN` ונצרך על ידי עוזרי סוכני ענן ב- `src/lib/cloudAgent/*`. |
---
## עיבוד Free-Tier Keep-Alive
Render מסובב שירות אינטרנט בחינם לאחר כ-15 דקות ללא תנועה נכנסת. המשגר העצמאי (`scripts/dev/run-standalone.mjs`, שתמונת Docker מריץ) יכול לעשות פינג URL הציבורי של השירות כדי למנוע זאת. זה לא עושה כלום אלא אם כן URL ציבורי זמין, והוא מתעד רק כשהסטטוס משתנה.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | תֵאוּר |
| ---------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------- |
| `SELF_PING_ENABLED` | מופעל כאשר URL מוגדר | `0`, `false`, `off` או `no` מכבים את הפינגר. השתמש בו בתוכניות Render בתשלום, שבהן שום דבר לא מסתובב. |
| `SELF_PING_URL` | `RENDER_EXTERNAL_URL` | בסיס URL לפינג. Render מגדיר את `RENDER_EXTERNAL_URL` את עצמו בכל תוכנית, כך שהפינגר נמצא שם כברירת מחדל. |
| `SELF_PING_PATH` | `/api/monitoring/health` | נתיב על URL ההוא. חייב להתחיל עם `/`; כל דבר אחר משבית את הפינגר עם אזהרה. |
| `SELF_PING_INTERVAL_SECONDS` | `180` | שניות בין פינג לפינג, לאחר פינג ראשון 60 שניות פנימה. ערכים מתחת `30` נופלים בחזרה ל- `180`. |
שירות שנשמר ער במשך חודש שלם משתמש בכ-744 שעות מופע, אז בדוק אותו מול הקצבה הנוכחית של רנדר.
## תרחישי פריסה
להנחיית SRE ממסר אחורי (התנהגות ts/bifrost/auto, מיקום 9נתב לעומת 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
```
### VPS עם פרוקסי הפוך (nginx + Cloudflare)
```bash
JWT_SECRET=
API_KEY_SECRET=
STORAGE_ENCRYPTION_KEY=
PORT=20128
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
NEXT_PUBLIC_BASE_URL=https://omniroute.example.com
BASE_URL=http://127.0.0.1:20128
CORS_ORIGIN=https://omniroute.example.com
ENABLE_TLS_FINGERPRINT=true
CLI_COMPAT_ALL=1
```
---
## 24. Skills Sandbox (v3.8.0 +)
מגבלות וכפתורי בטיחות מיושמים כאשר מסגרת המיומנויות (`src/lib/skills/`) מבצעת אוטומציות מוגדרות על ידי משתמש בסביבת ארגז חול.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| -------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 שניות) | `src/lib/skills/builtins.ts` | פסק זמן של שעון קיר לכל ביצוע עבור קוד מיומנות בארגז חול. כובע קשיח; כל דבר יותר נהרג. |
| `SKILLS_EXECUTION_TIMEOUT_MS` | _(נופל בחזרה ל- `SKILLS_SANDBOX_TIMEOUT_MS`)_ | `src/lib/skills/` | פסק זמן לתזמור מיומנות ברמה גבוהה. הגדר גבוה מ- `SKILLS_SANDBOX_TIMEOUT_MS` כדי לאפשר זרימות עבודה מרובות שלבים. |
| `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | מקסימום בתים שמיומנות יכולה לקרוא מכל קובץ בודד בארגז חול. |
| `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | מקסימום בתים שנלכדו מכל תגובת HTTP בודדת בתוך מיומנות. |
| `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | כובע קשיח על דמויות stdout/stderr חזר מקריאת ארגז חול. |
| `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | הגדר `1`/`true` כדי לאפשר רשת יוצאת מתוך ארגז החול. ברירת מחדל ל** מְבוּדָד** למען הבטיחות. זמן הריצה של `agent-sandbox` מתעלם ממנו: בידוד רשת, מערכת הקבצים הבסיסית לקריאה בלבד ומגבלות CPU/memory מגיעות מה- `SandboxTemplate` של המפעיל. |
| `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` | זמן ריצה של מיכל ל-Skill Sandboxing: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman` \| `agent-sandbox`. `auto` בוחר את זמן הריצה המותקן הטוב ביותר לכל מארח OS (Apple Container/OrbStack על macOS, WSL Container על Windows, Podman על Linux), נופל בחזרה ל- Docker. `agent-sandbox` (בריכות חמות של Kubernetes מרוחקות) ניתנת להצטרפות בלבד ולעולם לא מזוהה אוטומטית. |
| `SKILLS_AGENT_SANDBOX_POOLS` | _(רֵיק)_ | `src/lib/skills/agentSandboxProvider.ts` | צמדי `image=pool`, מופרדים בפסיקים: איזה `SandboxWarmPool` משרת כל תמונת ארגז חול כאשר `SKILLS_SANDBOX_RUNTIME=agent-sandbox`. |
| `SKILLS_AGENT_SANDBOX_POOL` | _(רֵיק)_ | `src/lib/skills/agentSandboxProvider.ts` | בריכה חמה נקודתית לתמונות שאינן מופיעות ב- `SKILLS_AGENT_SANDBOX_POOLS`. ריצה נכשלת (ללא חזרה למכולות מקומיות) כאשר אף אחת מהן לא נפתרת. |
| `SKILLS_AGENT_SANDBOX_NAMESPACE` | `default` | `src/lib/skills/agentSandboxProvider.ts` | מרחב שמות המחזיק את הבריכות החמות; `SandboxClaim` אחד לכל ריצה נוצר ונמחק כאן. |
| `SKILLS_AGENT_SANDBOX_KUBECONFIG` | _(kubectl ברירת מחדל)_ | `src/lib/skills/agentSandboxProvider.ts` | Kubeconfig עבור זמן הריצה של agent-sandbox. צריך רק Sandboxclaims create/get/list/watch/delete, pods get, pods/exec create במרחב השמות. |
| `SKILLS_AGENT_SANDBOX_KUBECTL` | `kubectl` | `src/lib/skills/agentSandboxProvider.ts` | kubectl בינארי בשימוש זמן הריצה של agent-sandbox. |
| `SKILLS_AGENT_SANDBOX_CONTAINER` | `main` | `src/lib/skills/agentSandboxProvider.ts` | שם מיכל בתוך תרמיל ארגז החול שבו הפקודות מבוצעות. |
| `SKILLS_AGENT_SANDBOX_CLAIM_TIMEOUT_S` | `60` | `src/lib/skills/agentSandboxProvider.ts` | שניות לחכות עד שתביעה תהפוך למוכנה (מקסימום 600). התביעה נמחקת אם היא לעולם לא נמחקת. |
> [!CAUTION]
> הפעלת `SKILLS_SANDBOX_NETWORK_ENABLED=true` פותחת נתיב יציאה מקוד מיומנות שרירותי. התאמה עם `OUTBOUND_SSRF_GUARD_ENABLED=true` ומדיניות `CORS_ORIGIN`/proxy קפדנית בפריסות משותפות.
---
## 25. מכסות ספקים, מנהרות, גיבויים וזמן ריצה שונות
ביטול תוקף חלופי של זיקת הפעלה באמצעות Redis (בהסכמה מפורשת בלבד; ברירת המחדל של SQLite נותרת ללא שינוי):
כל מאגר זיקה של Redis מקבל לכל היותר 8 פעולות שטרם הושלמו; כאשר מגיעים לקיבולת, הקריאות משתמשות מיד ב-SQLite, והמשבצות נותרות תפוסות עד שעבודת Redis הבסיסית מסתיימת, גם לאחר שהמועד האחרון של 100 ms עבור הקורא חלף.
- R1. כל תשובת Redis שנמסרת בזמן עבור פעולת הפעלה היא סמכותית: שינויים שהתקבלו, CAS שנדחו או אבדו, מפתחות חסרים, מחיקות של מפתחות שאינם קיימים, ופגיעות או החטאות של פינוי, מנקים באופן סינכרוני את שורת החלופה המקומית של אותה הפעלה, ללא await בין התשובה לניקוי. הניקוי בטוח (במקרה הגרוע תתבצע בחירה מחדש אחת במהלך תקלה מאוחרת יותר); שורה מיושנת אינה בטוחה.
- R2. פעולה שפג הזמן שהוקצב לה או שנכשלה וכותבת חלופה מקומית מתעדת בדיוק את מה שכתבה כבייטים מסודרים. אם פקודת Redis שלה מסתיימת באיחור, השוואה-ומחיקה סינכרונית ב-SQLite מנקה רק את השורה שזהה לחלוטין מבחינת הבייטים, ולעולם לא לפי התאמה של חשבון או חיבור. כתיבה חדשה יותר במהלך תקלה נשמרת.
- R3. פינוי תמיד מסיר את ההצמדה המקומית של החשבון שנכשל, כולל במהלך תקלה; לאחר מכן הטיפול בתשובתו פועל לפי R1/R2. Redis תקין לעולם אינו כותב הצמדות מקומיות: אין מראה או פנקס סדר, וייתכן שהמופעים יהיו שונים במהלך תקלה.
נקודות קצה למכסות ספקים, מנהרות רשת (Tailscale, Ngrok, פרוקסי ניפוי באגים מסוג MITM), מאגר היציאה של 1Proxy, גיבויי מסד הנתונים ועקיפות קטנות לכל תכונה, שאליהן מפנים שכבת המבצע או הסקריפטים.
| משתנה | ברירת מחדל | קובץ מקור | תיאור |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_SESSION_AFFINITY_STORE` | `sqlite` | `src/lib/db/sessionAffinity/storeFactory.ts` | מנגנון עורפי לזיקה בין סשן לחשבון. רק `redis` יחד עם `REDIS_URL` שהוגדר מאפשר שיתוף; ערכים שלא הוגדרו או שאינם מוכרים, וכן תצורת Redis חסרה, משתמשים ב-SQLite. דורש `sessionAffinityTtlMs` חיובי. ניתוב Redis מאחסן זהות חשבון שימוש מגובבת בתוספת מזהה חיבור; ניתוב SQLite המוגדר כברירת מחדל שומר על מבנה ה-JSON הישן בעל ארבעת השדות. מתבצעת התאמת זהות בתוך המאגר המקומי הזכאי לפני המזהה. משתמשים ב-`REDIS_KEY_PREFIX` של הלקוח המשותף, בערכי JSON וב-TTL מסוג `PX`; שינויים משווים לערך שנצפה במדויק. תשובות Redis תקינות מבטלות את מנגנון החזרה המקומי במקרה של השבתה, ותשובה מאוחרת יכולה לנקות רק את שורת החזרה המסודרת המדויקת שנכתבה על ידי אותה פעולה שפג הזמן שהוקצה לה. הצמדות שנשלפו מראש מאומתות מחדש בעת השימוש. שגיאות Redis, פסקי זמן או רוויה בקבלה חוזרים ל-SQLite עם אזהרות מוגבלות בקצב (גבול של 100 אלפיות השנייה לכל קריאת מאגר); החמצות Redis מוצלחות אינן קוראות מהעותק הצדי. אין בכך שיתוף של דביקות צירופים, הצמדות תור native Codex, מקביליות חשבונות, חסימות או מגבלות הוצאה. |
| `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` | עקיפה של כתובת ה-URL המלאה של המכסה עבור Alibaba Bailian. |
| `QWEN_CLOUD_COOKIE` | _(לא מוגדר)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | קובץ Cookie של סשן המסוף עבור שער המכסות של Token Plan האישי ב-Qwen Cloud / Model Studio (מפתח ה-API של ההסקה אינו יכול לקרוא אותו). העתיקו את כל כותרת הבקשה `Cookie` — היא מכילה את `login_qwencloud_ticket` — מכל קריאת `api.json` אל `cs-data.qwencloud.com` בכתובת home.qwencloud.com › חיוב › מינוי (F12 › Network). מידע רגיש ומוגבל לסשן; העדיפו את השדה `qwenCloudCookie` בלוח הבקרה לכל חיבור. |
| `QWEN_CLOUD_SEC_TOKEN` | _(לא מוגדר)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | עקיפה ידנית של `sec_token` עבור שער המסוף של Token Plan. מידע רגיש; כאשר הוא אינו מוגדר, ה-fetcher מפענח אותו מ-HTML של לוח הבקרה באמצעות קובץ ה-Cookie. |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | עקיפת מארח השער עבור מאחזר המכסה של Token Plan האישי (לדוגמה, `bailian-singapore-cs.alibabacloud.com` עבור מסוף Model Studio). |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | כתובת ה־URL של לוח המחוונים המשמשת לפתרון `sec_token` מתוך קובץ ה־HTML של המשתמש המחובר. |
| `XIAOMI_MIMO_CONSOLE_COOKIE` | _(unset)_ | `open-sse/services/usage/xiaomi-mimo.ts` | קובץ Cookie של סשן המסוף עבור API המכסות של Xiaomi MiMo Token Plan (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — מפתח ה־API של ההסקה אינו יכול לקרוא אותו). העתיקו את כל כותרת הבקשה `Cookie` — היא מכילה את `api-platform_serviceToken` ואת `userId` — מכל בקשה אל `platform.xiaomimimo.com` בדף Token Plan (F12 › רשת). רגיש ומוגבל לסשן; העדיפו את השדה `xiaomiMimoConsoleCookie` של לוח המחוונים עבור החיבור. |
| `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | תקציב חודשי (Credits) עבור חלופת Xiaomi MiMo במעקב OmniRoute, המשמשת כאשר לא מוגדר Cookie של המסוף. ברירת המחדל היא 4.1B של שכבת Lite; הגדירו אותו ל־Credits של התוכנית (Standard 11B / Pro 38B / Max 82B). עקיפה לכל חיבור באמצעות `providerSpecificData.monthlyTokenLimit` גוברת על משתנה הסביבה הזה. |
| `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` | _(unset)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | נתיב אופציונלי לעקיפה מקומית בפורמט JSON עבור רשימת ההיתרים המובנית של מודלי הטקסט ברובד החינמי של Alibaba. אם לא נמצא, המערכת משתמשת ב־`$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` | הגדירו `false` (או `0`) כדי להשבית את מנגנון החירום למיצוי התקציב, שמנתב מחדש בקשות שנכשלו למודל החינמי `nvidia`/`nvidia/nemotron-3.5-super-vl-120b-a12b`. סדר הקדימויות האפקטיבי הוא עקיפת מסד הנתונים של דגלי התכונות > משתנה סביבה > ברירת מחדל; אם הוא אינו זמין, השירות חוזר להשתמש בערך הגולמי של משתנה הסביבה. |
| `COMMAND_CODE_CALLBACK_PORT` | _(לא מוגדר)_ | `src/app/api/providers/command-code/auth/shared.ts` | היציאה המקומית המשמשת לקריאות חוזרות בסגנון OAuth מעוזר ה-CLI של Command Code. |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | הערך שנשלח בכותרת `x-command-code-version` לשרת upstream של Command Code. ניתן לעקוף ערך זה כדי לעדכן את גרסת ה-CLI. |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | כתובת ה-URL הבסיסית של שרת ה-upstream לשימוש ולמכסה של Command Code, המשמש את הטלמטריה של רכיב איסוף המכסות מהטלפון החכם. ניתן לעקוף ערך זה עבור API עצמאי או חלופי של Command Code. |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | היציאה המקומית שאליה נקשר פרוקסי ניפוי הבאגים של MITM. |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | הגדר `1` כדי להשבית את אימות ה-TLS מול השרת במעלה הזרם (לסביבת פיתוח בלבד). |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | פסק זמן (במילישניות) לחיבורי socket ללא פעילות בחיבורים שעוברים דרך שרת proxy; חיבורי socket שנותרים ללא פעילות מעבר לכך נסגרים כדי למנוע דליפה של מנהרות פתוחות למחצה. |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | היציאה שבה גשר ה-MITM של Antigravity מאזין. |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | נקודת הקצה של הנתב שאליה הגשר מעביר את תעבורת Antigravity. |
| `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | עוקף את הספרייה שממנה הגשר קורא את חומר ה-TLS שלו. מודל התעודות נבחר כפי שעושה שרת AgentBridge: `server.crt`/`server.key` עבור התקנת עלה מדור קודם, או `ca.crt`/`ca.key` אחרת (CA שורש, עלה אחד לכל מארח שיורט; נאכף על ידי `MITM_ROOT_CA_ENABLED=true`). הגשר יוצא בעת האתחול אם הקבצים של המודל הפעיל חסרים. |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | רמת פירוט ביומן של החלטות הניתוב: `0` משתיק את היומן, וערכים גבוהים יותר מתעדים החלטות נוספות לגבי עקיפה/ניתוב. |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | הגדר `true` כדי לבחור במודל של CA שורש + תעודת עלה לכל מארח (#6684). התקנות חדשות מקבלות אותו באופן אוטומטי; התקנות שבהן כבר קיימת תעודת עלה מדור קודם ומהימנה שומרות על תעודת ה-SAN הקבועה מדור קודם, אלא אם בוחרים במודל החדש. |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | מוגדר על ידי מנהל ה-MITM עבור תהליך ה-proxy שהופעל (`root-ca` \| `legacy`) — משקף את החלטת העברת התעודות; אינו מיועד להגדרה ידנית. |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | הגדירו `1` (ערך truthy) כדי להסיר את ה־`sudo` המוביל מפקודות האמון בתעודת MITM — עבור פריסות ללא root / במרחב שמות של משתמש, שבהן המפעיל נותן אמון ב־CA באופן ידני (למשל באמצעות מנגנון ה־extra-CA-certs של Node). |
| `SKIP_ANTIGRAVITY_DNS` | _(לא מוגדר)_ | `src/mitm/dns/provision.ts` | הגדירו `true` כדי לדלג לחלוטין על הקצאת רשומות ה־DNS בקובץ `/etc/hosts` עבור שמות המארחים של פרוקסי Antigravity — עבור קונטיינרים ללא גישה ל־sudo/root. |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(לא מוגדר)_ | `src/mitm/dns/dnsConfig.ts` | הגדירו `1` כדי לדלג על כתיבה לקובץ hosts בעת הוספה או הסרה של רשומות DNS — עבור סביבות בדיקה מבודדות או לקריאה בלבד. |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | הגנה לשימוש בבדיקות/CI בלבד: הגדירו `1` כדי להפוך את ההתקנה/הסרה של אמון בתעודות לפעולה ללא תוצאה, כך שחבילת הבדיקות לעולם לא תשנה את מאגר האמון של מערכת ההפעלה. מוגדר אוטומטית על ידי הגדרת הבדיקות ותהליכי העבודה של CI. |
| `CHANGELOG_BASE_REF` | _(אוטומטי)_ | `scripts/check/check-changelog-integrity.mjs` | הפניה מפורשת לבסיס עבור שער ההגנה מפני אכילת CHANGELOG (ברירת המחדל היא ענף הבסיס של ה־PR ב־CI, או `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` | _(see oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | עקיפת כתובת ה־API של 1proxy. |
| `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. |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | הפעלת מקור מאגר ה־Webshare. יש להגדיר ל־`false` כדי להשבית; בנוסף, יש להגדיר את `FREE_PROXY_WEBSHARE_API_KEY`. |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(none)_ | `src/lib/freeProxyProviders/webshare.ts` | אסימון ה־API של חשבון Webshare (`Authorization: Token `). נדרש — הספק יישאר מושבת בלעדיו. |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | עקיפה של כתובת ה־API לרשימת הפרוקסים של Webshare. |
| `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 בכרטיסייה Proxy Pool. |
| `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | עקיפה של כתובת הבסיס של ה־API של Vercel (לבדיקות). |
| `NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/…/VercelRelayModal.tsx` | שם הפרויקט המוגדר כברירת מחדל ומולא מראש בחלון הפריסה של Vercel Relay. |
| `TAILSCALE_BIN` | _(auto-detect)_ | `src/lib/tailscaleTunnel.ts` | נתיב מפורש לקובץ הבינארי של `tailscale`. |
| `TAILSCALED_BIN` | _(זיהוי אוטומטי)_ | `src/lib/tailscaleTunnel.ts` | נתיב מפורש לקובץ הבינארי של הדמון `tailscaled`. |
| `TAILSCALE_AUTHKEY` | _(לא מוגדר)_ | `src/lib/tailscaleTunnel.ts` | מפתח האימות המשותף מראש של Tailscale עבור `tailscale up` לא־אינטראקטיבי / ללא ממשק משתמש (מועבר באמצעות `--auth-key=`). כאשר אינו מוגדר, ההתחברות חוזרת לכתובת URL של אימות אינטראקטיבי בדפדפן. |
| `NGROK_AUTHTOKEN` | _(לא מוגדר)_ | `src/lib/ngrokTunnel.ts` | מאמת מנהרות ngrok יוצאות. |
| `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | המספר המרבי של קובצי גיבוי SQLite שנשמרים על ידי ניקוי גיבויים ידני/מתוזמן. תמונות מצב של הגירה מזוהות לפי התוכן ונעשה בהן שימוש חוזר עבור מצב DB זהה; הן אינן נמחקות במהלך חלון ההגירה המקבילית. עוקף את הערך שנשמר מתוך הגדרות → שמירת גיבויי מסד הנתונים. |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | הגיל המרבי (בימים) של גיבויים שנשמרים על ידי ניקוי גיבויים ידני/מתוזמן. `0` משבית מחיקה לפי גיל. תמונות מצב של הגירה אינן נמחקות במהלך חלון ההגירה המקבילית. עוקף את הערך שנשמר מתוך הגדרות → שמירת גיבויי מסד הנתונים. |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | מרווח התקתוק (במילישניות) של משימת השרת שמבצעת את `backup-schedule.json`. עליו להישאר נמוך משמעותית מרזולוציית ה־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` | _(unset)_ | `src/lib/quota/storeFactory.ts` | מחרוזת חיבור ל-Redis המשמשת כאשר `QUOTA_STORE_DRIVER=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` | מכפיל ניקוד (0..1) המוחל על ספק שמכסתו אזלה (`credits_exhausted`/`rate_limited`) בדירוג auto-combo, כאשר חיתוך המכסה בבדיקה המקדימה כבוי (#4540). |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | חלון השמירה (בימים) עבור מאגרי `quota_consumption` לפני GC (`gcQuotaConsumption`). |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | הפעלה לפי בחירה (כבוי כברירת מחדל): מאפשרת את חיתוך המכסה הקשיח בניתוב האוטומטי, שמסיר מועמדים בעלי מכסה נמוכה לפני הניקוד. מאתחל את ברירת המחדל בלבד: ערך בוליאני שנשמר ב-`resilienceSettings` (לוח הבקרה → הגדרות → עמידות) גובר עליו. |
| `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` | הגבלת גודל הפאנל (מוגבלת לטווח 1–10) עבור גרסת השידור `auto/*:chaos` — בקשה אחת מתפצלת לכל היותר למספר זה של מודלים ממגוון ספקים. |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(ברירת המחדל של המנוע)_ | `open-sse/services/autoCombo/virtualFactory.ts` | כוונון גודל הפאנל המינימלי המועבר למטפל בשידורי הכאוס; אם אינו מוגדר, נשמרת ברירת המחדל של המנוע. |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(ברירת המחדל של המנוע)_ | `open-sse/services/autoCombo/virtualFactory.ts` | פסק זמן קשיח (מילישניות) עבור התפצלות פאנל הכאוס כולו; אם אינו מוגדר, נשמרת ברירת המחדל של המנוע. |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | הנתיב לקובץ `auth.json` של Grok CLI, המשמש לאחזור המכסה השבועית של grok-web; ניתן לדרוס אותו לצורך בדיקות או התקנת CLI שאינה סטנדרטית. |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(לא מוגדר)_ | `src/mitm/manager.ts` | אישור CA נוסף (PEM) שניתן בו אמון עבור חיבורי TLS במעלה הזרם של AgentBridge. |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | המספר המרבי של בקשות שנלכדו ונשמרות במאגר המעגלי של מפקח התעבורה. |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | הגודל המרבי של גוף בקשה/תגובה שנלכד (KB) לפני חיתוך. |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | היציאה המקומית עבור פרוקסי ה-HTTP של מפקח התעבורה. |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | הפעלה אוטומטית של פרוקסי ה-HTTP של המפקח בעת האתחול. |
| `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` | מספר הדקות לפני שמנגנון ההגנה של system-proxy משחזר אוטומטית את הגדרות ה-proxy של מערכת ההפעלה. |
| `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` | מתג השבתה ראשי עבור פרוקסי ה-sidecar של Bifrost. כאשר הערך מוגדר ל-`0`, הנתיב מחזיר 503 עם הכותרת `X-Bifrost-Killswitch`, והמפעיל מנותב לנתיב TS. יש להשתמש בכך כדי להשבית את ה-sidecar ללא פריסה מחדש (תקרית נתב tier-1, החלפת מפתחות). |
| `BIFROST_BASE_URL` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כאשר מוגדר, נתיב פרוקסי ה-sidecar של Bifrost מעביר את תעבורת `/v1/chat/completions` לשער Go זה במקום ל-handler של ממסר TS. לא מוגדר → 503-with-fallback. הלוכסן בסוף מוסר. |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | היציאה שאליה שירות Bifrost המוטמע והמנוהל נקשר (`127.0.0.1:`) כאשר OmniRoute מנהל את מחזור החיים של ה־sidecar של Bifrost. ברירת המחדל היא `8080`. |
| `SINGBOX_PORT` | `20140` | `src/lib/services/bootstrap.ts` | היציאה שאליה שירות sing-box המוטמע והמנוהל נקשר (`127.0.0.1:`) כאשר OmniRoute מנהל את מחזור החיים של ה־sidecar של sing-box. ברירת המחדל היא `20140`. |
| `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | היציאה שאליה שירות הדחיסה המנוהל של LLMLingua נקשר (`127.0.0.1:`). ברירת המחדל היא `20135`. |
| `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | כתובת הבסיס של daemon שירות המיקרו המקומי לדחיסת HTTP באמצעות LLMLingua. ברירת המחדל היא `http://127.0.0.1:20135`. |
| `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | מזהה המודל ב־Hugging Face שה־sidecar המנוהל של LLMLingua טוען (מועבר למשתני הסביבה של תהליך הצאצא). |
| `BIFROST_API_KEY` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | מפתח API עבור שער Bifrost (נשלח בתור `Authorization: Bearer ...`). אם אינו מוגדר, הנתיב מצפה שהבקשה תכלול מפתח API חוקי של OmniRoute; מפתח זה משמש רק לאימות בצד השער. |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כאשר הערך הוא true, הנתיב של ה־sidecar של Bifrost מזרים את התגובות בחזרה באמצעות SSE דרך השער, במקום דרך מפעיל הסטרימינג של TS. יש להגדיר ל־`0` כדי לכפות תגובות JSON שאינן מוזרמות דרך השער. |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | הזמן הקצוב לכל בקשה בעת העברת proxy לשער Bifrost (באלפיות שנייה). במקרה של חריגה מהזמן הקצוב, הנתיב מחזיר את נתיב ה־relay של TS דרך הכותרת `X-Bifrost-Fallback`. |
| `OMNIROUTE_BIFROST_KEY` | _(unset)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כינוי עבור `BIFROST_API_KEY` (בשימוש סקריפטים שקוראים את הסביבה דרך `OMNIROUTE_*`). ל-`BIFROST_API_KEY` יש קדימות כאשר שניהם מוגדרים. |
| `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | בקנד לרכיב ה-relay עבור `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = relay של TypeScript (ברירת המחדל כאשר Bifrost אינו מוגדר); `auto` בוחר ב-Bifrost כאשר `BIFROST_BASE_URL` מוגדר ו-`BIFROST_ENABLED` ≠ `0`, עם חזרה אוטומטית ל-TypeScript אם ה-sidecar אינו נגיש; `bifrost` כופה שימוש ב-Bifrost (מצב מחמיר, ללא חזרה). אימות, הגבלת קצב, הגנה מפני הזרקות ורשימת ההיתרים תמיד מתבצעים תחילה בנתיב של Next. התגובות כוללות את `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. |
| `RELAY_ROUTING_BACKEND` | _(unset)_ | `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` | תקופת צינון (במילישניות) לאחר שכשל מעבר דרך ה-sidecar של Bifrost במצב `auto`, שלפניה ה-relay לא מנסה שוב את ה-sidecar; במהלך תקופת הצינון הוא מנתב ישירות לנתיב של TypeScript, ולאחר מכן בודק שוב. `0` משבית. חל רק כאשר `OMNIROUTE_RELAY_BACKEND=auto`. |
| `OMNIROUTE_TLS_CERT` | _(unset)_ | `bin/cli/commands/serve.mjs` | נתיב לאישור TLS בפורמט PEM, לצורך הפעלת `omniroute serve` דרך HTTPS (שקול ל-`--tls-cert`). יש לצרף אליו את `OMNIROUTE_TLS_KEY`; לאחר מכן השרת העצמאי מסיים את TLS על אותו מאזין (`wss://` פועל ללא שינוי). ערך לא מוגדר → HTTP רגיל. אספקה של אחד בלבד מבין cert/key, או נתיב שלא ניתן לקריאה, תתעד אזהרה ותשאיר את החיבור ב-HTTP. |
| `OMNIROUTE_TLS_KEY` | _(unset)_ | `bin/cli/commands/serve.mjs` | נתיב למפתח הפרטי של TLS בפורמט PEM עבור HTTPS של `omniroute serve` (שקול ל-`--tls-key`). יש לצרף אליו את `OMNIROUTE_TLS_CERT`. ראו `OMNIROUTE_TLS_CERT`. |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | מתג ראשי עבור נתיבי `/api/local/*`. כאשר אינו מוגדר או מוגדר כ-`0`, כל נתיבי `/api/local/*` מחזירים 503 בסביבת ייצור. יש להגדיר `1` בפריסות שאינן loopback כדי לאפשר את מפעיל Redis ואת מפעילי שירותים מקומיים דומים בלחיצה אחת. שכבת הגנה נוספת לצד סיווג הגנת הנתיבים של `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` ב-`src/server/authz/routeGuard.ts`). |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(unset)_ | `src/lib/security/localEndpoints.ts` | אסימון Bearer עבור קוראים של `/api/local/*` שאינם נמצאים ב-loopback (לדוגמה, יישום שולחן העבודה). כאשר הוא מוגדר, בקשות מכתובות IP שאינן loopback חייבות לכלול `Authorization: Bearer `. נדרש כאשר `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` בפריסות שאינן loopback. |
| `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | שם המכולה עבור מפעיל Redis בלחיצה אחת (`omniroute redis up`). משמש הן את ה-CLI והן את ממשק המשתמש הגרפי `RedisLauncherPanel`. |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | יציאת המארח עבור מפעיל Redis בלחיצה אחת. יש להגדיל את הערך אם המארח כבר מאגד את 6379. היציאה הפנימית של המכולה נשארת 6379. |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | ממשק המארח שבו מפעיל Redis בלחיצה אחת מפרסם את השירות. המפעיל מפעיל את Redis ללא סיסמה, לכן איגוד ל-`0.0.0.0` מעניק לכל מארח ברשת ה-LAN גישה ל-Redis ללא אימות — יש להרחיב זאת רק אם מגדירים בעצמכם סיסמה במופע. |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שבו docker-compose מפרסם את שירות Redis הנלווה (#9286). Redis של compose פועל ללא `requirepass`; מכולות היישום ניגשות אליו דרך רשת compose (`redis:6379`) — היציאה המפורסמת קיימת רק עבור כלי עבודה בצד המארח. `0.0.0.0` חושף Redis ללא אימות לכל רשת ה-LAN. |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | יציאת המארח עבור שירות Redis הנלווה של compose. |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | ממשק המארח שבו docker-compose מפרסם את יציאות לוח הבקרה, ה-API וה-WS החי של היישום עצמו (#12568). כאשר `REQUIRE_API_KEY=false` מוגדר כברירת המחדל ב-`.env.example`, `0.0.0.0` חושף את פרוקסי ה-LLM האנונימי של `/v1` לכל רשת ה-LAN/WAN — יש להרחיב זאת רק לאחר שמגדירים `REQUIRE_API_KEY=true` או שפרוקסי הפוך מלפנים אוכף אימות משלו. |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שבו docker-compose מפרסם את שירות הזיכרון הנלווה של Qdrant (#12578). אותו היגיון של חשיפה לרשת ה-LAN כמו ב-`REDIS_BIND_HOST`. |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שבו docker-compose מפרסם את שירות הנתב הנלווה של Bifrost (#12578). אותו היגיון של חשיפה לרשת ה-LAN כמו ב-`REDIS_BIND_HOST`. |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | קידומת מרחב שמות המוחלת על כל מפתח Redis של OmniRoute (מגביל קצב, מטמון אימות, מאגר מכסות, מפסק מעגל חימום). מונעת התנגשויות מפתחות כאשר מופע 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` | חלופת קובץ-סוד לאסימון השירות הפנימי: נתיב לקובץ שהתוכן המקוצץ שלו הוא האסימון. נבדק רק כאשר המשתנה המוטבע אינו מוגדר. |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | מעשיר את רשימת הספקים בלוח המחוונים בנתוני הדירוג השבועיים של OpenRouter (#9324). מופעל כברירת מחדל; הגדירו ל־`false` כדי לדלג לחלוטין על השליפה ברקע (אינה חוסמת ולעולם אינה גורמת לכשל קריטי). |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | משך החיים של המטמון עבור תמונת המצב של נתוני ספקי OpenRouter, במילישניות. |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | תמונת Redis המשמשת את מפעיל Redis בלחיצה אחת. דרסו ל־`redis:8-alpine` או למראה של רישום פרטי לפי הצורך. |
| `QDRANT_HOST` | `qdrant` | _(פרופיל אשכול אופציונלי)_ | שם המארח של ה־sidecar של Qdrant כאשר `--profile memory` פעיל. ברירת המחדל מפנה לשם שירות ה־qdrant ברשת הפנימית; ניתן לדרוס עבור פריסה חיצונית. נצרך רק כאשר `qdrantEnabled` הוא `true` בקוד (`src/lib/memory/vectorStore.ts:108`). |
| `QDRANT_PORT` | `6333` | _(פרופיל אשכול אופציונלי)_ | יציאת ה־REST של ה־sidecar של Qdrant. |
| `QDRANT_GRPC_PORT` | `6334` | _(פרופיל אשכול אופציונלי)_ | יציאת ה-gRPC של ה-sidecar של Qdrant. משמשת ספריות לקוח שמעדיפות gRPC על פני REST עבור פעולות סטרימינג. |
| `QDRANT_API_KEY` | _(unset)_ | _(פרופיל אשכול אופציונלי)_ | מפתח API אופציונלי עבור Qdrant Cloud או מופע on-prem מאומת. ריק → לא נשלחת כותרת `api-key`. |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(פרופיל אשכול אופציונלי)_ | שם האוסף עבור הטמעות זיכרון השיחות של OmniRoute. נוצר בהרצה הראשונה עם ממד `QDRANT_VECTOR_SIZE`. |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(פרופיל אשכול אופציונלי)_ | שם מודל ההטמעה המוגדר כברירת מחדל, המתועד במטא-נתונים של אוסף Qdrant. ההטמעות בפועל נוצרות על ידי הספק שאליו מפנה השדה `embeddingModel` בהגדרות של OmniRoute. |
| `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) לשקף את כללי הסבב שלו במנוע המעבר לחשבון חלופי של צד ה-backend. |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | תקופת צינון (בשניות) המוחלת על חשבון שהוגבל בקצב כאשר upstream אינו מספק רמז מפורש לאיפוס. `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` | מספר שגיאות `429` בתוך `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` הנדרש לפני החלפת החשבון. הערך `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` | מספר שגיאות `5xx` בתוך `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` הנדרש לפני החלפת החשבון. הערך `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` | מספר שגיאות `502` בתוך `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` הנדרש לפני שהחשבון יוחלף. `1` (ברירת המחדל) גורם להחלפה מיידית. |
| `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | חלון נע (בשניות) שבמהלכו נספרות שגיאות `502` לצורך `OMNIROUTE_ROTATE_502_THRESHOLD`. |
| `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | הפעלה לפי בחירה (כבויה כברירת מחדל): כאשר הערך הוא `true`, גם `400` רגיל (בקשה שגויה) מפעיל החלפת חשבון. זוהי תוספת בלבד — היא לעולם אינה חוסמת את ההתנהגות הקיימת של המנוע, שבה `400` הכולל טקסט של הגבלת קצב/מכסה עדיין גורם למעבר לחשבון אחר ללא קשר לדגל זה. |
| `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | מספר שגיאות `400` בתוך `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` הנדרש לפני שהחשבון יוחלף (נבדק רק כאשר `OMNIROUTE_ROTATE_ON_400=true`). |
| `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | חלון נע (בשניות) שבמהלכו נספרות שגיאות `400` לצורך `OMNIROUTE_ROTATE_400_THRESHOLD`. |
### מתזמן חימום מקדים של Claude
חימום מקדים המופעל באמצעות Cron עבור חיבורי Anthropic OAuth שהופעלו עבורם, כך שחלון הגבלת הקצב של 5 שעות ייפתח באמצעות בקשה מתוזמנת פשוטה במקום באמצעות הבקשה האמיתית הראשונה (#8848). המתזמן כבוי, אלא אם `OMNIROUTE_WARMUP_ENABLED` מקבל ערך אמת **והחיבור מסומן ב־`settings.claudeWarmup.connections`**; רשימת חיבורים ריקה פירושה שלא מתבצע חימום, גם כאשר משתנה הסביבה מופעל.
| Variable | Default | Source File | Description |
| ------------------------------ | --------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_WARMUP_ENABLED` | _(unset → off)_ | `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 לכניסה דרך הדפדפן וכינוי ספריית נתונים
Chromium+VNC במכולה, המשמש ללכידת פרטי התחברות באמצעות דפדפן באופן אינטראקטיבי (`/api/vnc-session`), וכן כינוי מדור קודם של `DATA_DIR`. הכול אופציונלי — ברירות המחדל של VNC מכוונות לתמונת `omniroute-vnc-chromium:local` המצורפת, ומשתנות רק עבור תמונת מכולה מותאמת אישית, יציאות או כוונון מחזור החיים.
| משתנה | ברירת מחדל | קובץ מקור | תיאור |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | תגית תמונת Docker עבור קונטיינר ההתחברות של Chromium+VNC. יש לבנות את `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 בתוך הקונטיינר. |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | הנתיב לספריית הפרופיל של Chromium בתוך הקונטיינר. |
| `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | ספרייה במארח המאחסנת פרופילי התחברות לדפדפן שנשמרו. |
| `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 דקות) | `src/lib/vncSession/manifest.ts` | זמן קצוב לחוסר פעילות (במילישניות), שלאחריו סשן VNC לא פעיל יוסר. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 דקות) | `src/lib/vncSession/manifest.ts` | מגבלה קשיחה (במילישניות) על משך החיים של סשן VNC יחיד. |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | המספר המרבי של סשני VNC בו-זמניים. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | זמן קצוב (במילישניות) להמתנה עד שהדפדפן שבקונטיינר יהיה מוכן ל-CDP. |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | זמן קצוב (במילישניות) לאיסוף הסשן/העוגיות שנלכדו לאחר השלמת ההתחברות. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | דגלי שורת פקודה נוספים המועברים ל-Chromium שבקונטיינר. |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | רשת Docker ייעודית שאליה מצטרף קונטיינר ההתחברות של VNC (#12571), במקום ל-bridge ברירת המחדל, כך שקונטיינרים אחיים לא יוכלו להגיע ליציאת גשר ה-CDP שלו. |
| `VIBEPROXY_DATA_DIR` | _(לא מוגדר)_ | `open-sse/services/notionThreadSessions.ts` | **כינוי חלופי מדור קודם** עבור `DATA_DIR`, שנבדק רק לאחר שגם `DATA_DIR` וגם `OMNIROUTE_DATA_DIR` לא הוגדרו. מציין את מטמון סשני ה-web-thread של Notion (`/notion-web-thread-sessions.json`). |
---
## 26. Test & 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` | מצב E2E bootstrap (`auth`, `fresh`, `reuse`) עבור הרץ Playwright. |
| `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`). חלופה ממוקדת להשבתה מלאה של ספקי ה- — short-TTL של healthcheck ממשיכים לרענן בעוד שספקי מפל נשארים בתגובה בלבד. |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | השתקת רעשי בדיקת בריאות ב- Playwright stdout. |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | דלג על בניית הייצור של Next.js לפני תחילת Playwright (אופטימיזציה 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) עד שהשרת יהיה בריא לפני הפעלת בדיקות ecosystem/protocol. |
| `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 smoke run. |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | הגדר `1` לשמר את ספריית נתוני העשן לאחר הריצה. |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | הגדר `1` להזרים יומני Electron ל-stdout במהלך הריצה. |
| `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. |
### צינור תרגום Docs
בשימוש על ידי `scripts/i18n/run-translation.mjs` (הפקודה `npm run i18n:run` ). כל ששת המשתנים אינם מוגדרים כברירת מחדל. — הגדר אותם ב- `.env` רק במחשבים שאמורים להיות מסוגלים להריץ את מתרגם docs.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------------ | ---------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_TRANSLATION_API_URL` | _(לא מוגדר)_ | `scripts/i18n/run-translation.mjs` | URL בסיס תואם OpenAI עבור קצה התרגום האחורי. |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(לא מוגדר)_ | `scripts/i18n/run-translation.mjs` | אסימון נושא עבור קצה התרגום האחורי (מעולם לא נרשם). |
| `OMNIROUTE_TRANSLATION_MODEL` | _(לא מוגדר)_ | `scripts/i18n/run-translation.mjs` | מזהה דגם, למשל `gpt-4o-mini` או `cx/gpt-5.4-mini`. |
| `OMNIROUTE_TRANSLATION_FALLBACK_MODELS` | _(לא מוגדר)_ | `scripts/i18n/lib/translate-backend.mjs` | שרשרת מודלים אופציונלית מופרדת בפסיק נוסתה לפי הסדר כאשר המודל הראשי נכשל (429 מכסה, 401/402, 5xx, פסק זמן, רשת); בקשה שגויה (400/413/422) לא נוסתה מחדש במקום אחר. |
| `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | פסק זמן לכל בקשה באלפיות שניות. |
| `OMNIROUTE_TRANSLATION_REASONING_EFFORT` | _(לא מוגדר)_ | `scripts/i18n/lib/translate-backend.mjs` | בקרת חשיבה אופציונלית, נשלחת כפי שהיא לקצה העורפי כאשר מוגדרת. |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | בקשות תרגום מקבילות בעת ריצה על מספר קבצים / מקומות. |
| `OMNIROUTE_TRANSLATION_ENGINE` | `llm` | `scripts/i18n/run-translation.mjs` | `llm` משתמש בקצה האחורי שלמעלה; `google` מתרגם דרך מנוע Google בטוח למבנה ואינו זקוק לאף אחד ממשתני LLM. |
| `OMNIROUTE_TRANSLATION_GOOGLE_FALLBACK` | `1` | `scripts/i18n/run-translation.mjs` | עם מנוע `llm`, נתח שהדגם לא הצליח לייצר (שומר פלט נכשל בכל ניסיון, או שגיאת דגם) מתורגם על ידי Google במקום להיכשל במיקום. `0` משבית את זה. |
| `OMNIROUTE_TRANSLATION_GOOGLE_API_KEY` | _(לא מוגדר)_ | `scripts/i18n/lib/google-translate.mjs` | מפתח אופציונלי לתרגום ענן v2. Unset משתמש בנקודת קצה האינטרנט ללא מפתח (מוגבל בקצב, בסדר עבור גלים מזדמנים). |
| `OMNIROUTE_TRANSLATION_GOOGLE_CONCURRENCY` | `6` | `scripts/i18n/lib/google-translate.mjs` | בקשות Google מקבילות המשותפות לכל אזור של ריצה. |
| `OMNIROUTE_TRANSLATION_GOOGLE_TIMEOUT_MS` | `30000` | `scripts/i18n/lib/google-translate.mjs` | זמן קצוב לכל בקשה עבור מנוע Google, באלפיות שניות. |
| `UI_KIT_READ_TOKEN` | _(לא מוגדר)_ | `scripts/check/check-ui-kit-upstream.mjs` | אסימון לקריאה בלבד עבור מאגר ערכת UI הפרטי במעלה הזרם, המשמש את `npm run check:ui-kit-upstream` ואת זרימת העבודה השבועית "UI Kit upstream watch". באופן מקומי הצ'ק משתמש באישורי ה-GIT שלך. |
---
## 27. הזנת רדאר (אירוח עצמי)
תוספת אופציונלית המוגדרת על ידי דגל התכונה RADAR_ENABLED (ברירת המחדל כבויה — דגל תכונה מוחלף באמצעות Settings/DB, לא env var; ראה [docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off) ). ארבעת המשתנים הראשונים להלן הם עקיפות אופציונליות עבור הזנה מתארחת או מזולגת וזרימות מפתח תומך. החמישי, `RADAR_ADMIN_URL`, הוא קישור נפרד ללא ברירת מחדל ללוח הפעולות הפרטיות של הבעלים. ראה [docs/frameworks/RADAR.md](../frameworks/RADAR.md) עבור מסמך המודול המלא ורצף [ההפעלה שלו מקצה לקצה ורצף התקנה מודרך](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup).
קורא ההכרזה הגנרי Home/Changelog אינו מוגדר על ידי משתנה סביבה ואינו תלוי בדגל התכונה RADAR_ENABLED. הוא קורא את המאגר הציבורי `news.json` URL שהוכרז ב- `src/shared/utils/releaseNotes.ts` על ידי GET בלבד; ביטול IDs נשאר באחסון המקומי של הדפדפן.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | בסיס 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 כפתור לוח המחוונים "תמוך בפרויקט" נפתח (דף payment/plans ). |
| `RADAR_ADMIN_URL` | _(לא מוגדר)_ | `src/lib/radar/links.ts` | קישור ללוח התפעול הפרטי לבעלים בלבד. נדרש HTTPS למעט HTTP loopback SSH קדימה; ערכים לא מוגדרים או לא חוקיים לא יוצרים פריט ניווט. |
---
## ביקורת: משתנים הוסרו / מתים
המשתנים הבאים הופיעו בגרסאות קודמות של `.env.example` אבל יש** ללא הפניות בזמן ריצה** בבסיס הקוד הנוכחי. הם הוסרו:
| מִשְׁתַנֶה | לְנַמֵק |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `STORAGE_DRIVER=sqlite` | לעולם אל תקרא לפי קובץ מקור כלשהו. SQLite הוא מנהל ההתקן הנתמך היחיד — ללא צורך בבחירה. |
| `INSTANCE_NAME=omniroute` | קיים בתבניות docs/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 משתמש OAuth, לא ב- CLI בינארי). |
| `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` | הוסר בגרסה 3.8.0. זמן הריצה כבר לא קורא את אישורי ה-env vars — האלה מגיעים מ-Dashboard/ `data/provider-credentials.json` / DB מוצפן. |
| `CURSOR_PROTOBUF_DEBUG` | הוסר בגרסה 3.8.0. Cursor executor משתמש `CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (ראה §22). |
| `CLI_COMPAT_KIRO` | הוסר בגרסה 3.8.0. Kiro נמצא ב- `CLI_COMPAT_OMITTED_PROVIDER_IDS` — למתג שלו אין השפעה. |
| `QIANFAN_API_KEY` | הוסר לצד סתמי מפתח ז API של ספק שאינם בשימוש בגרסה 3.8.0. |
### תיקוני ערך ברירת מחדל
| מִשְׁתַנֶה | ערך `.env.example` הישן | ברירת מחדל של קוד בפועל | קָבוּעַ |
| ------------------------- | ----------------------- | ----------------------- | --------------------------------------- |
| `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ הוסר ערך מטעה; מתועד `7` כברירת מחדל |
| `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ הוסר ערך מטעה; מתועד `7` כברירת מחדל |
### חידוש תצורת OpenCode (כלי אד-הוק)
בשימוש על ידי `scripts/ad-hoc/regen-opencode-config.ts` כדי ליצור מחדש `opencode.json` עם ערכי `limit.context` ו- `limit.output` מדויקים שנשלפו ממופע OmniRoute הפועל. אף אחד מאלה אינו נדרש לפעולה רגילה — הסקריפט הוא כלי מפתח למפתחים בלבד.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------ | ------------------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | בסיס URL של מופע OmniRoute לשאילתה עבור `/v1/models`. |
| `OMNIROUTE_KEY` | _(לא מוגדר)_ | `scripts/ad-hoc/regen-opencode-config.ts` | מפתח API לאימות מול נקודת הקצה OmniRoute `/v1/models`. נופל בחזרה ל- `OPENCODE_API_KEY` כאשר אינו מוגדר. |
| `OPENCODE_API_KEY` | _(לא מוגדר)_ | `scripts/ad-hoc/regen-opencode-config.ts` | מפתח API בסגנון OpenCode (`sk-...`) שנכתב ב- `opencode.json` המחודש. נופל בחזרה ל- `OMNIROUTE_KEY` כאשר אינו מוגדר. |
### רתמת דחיסה לא מקוונת (כלי אד-הוק)
בשימוש על ידי `scripts/compression-eval/index.ts`, הערכת הדחיסה הלא מקוונת CLI. לא נדרש עבור פעולה רגילה — Developer Tooling בלבד.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------- | ---------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (ריק) | `scripts/compression-eval/index.ts` | אישורי JSON שסופקו על ידי המפעיל עבור הספק המופעלים על ידי CLI לא מקוון של דחיסה-eval (מנותח עם `JSON.parse`). השאירו לא כפוף לריצה יבשה. |
### VNC הפעלות דפדפן
בשימוש על ידי `src/lib/vncSession/manifest.ts` כדי להגדיר הפעלות Chromium ללא ראש מבוסס Docker עבור ספקי אוטומציה של דפדפן. כל ברירות המחדל האופציונליות — מוצגות להלן.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------------- | ------------------------------ | ------------------------------------------- | ----------------------------------------------------------------------- |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | נתיב ל- Docker הבינארי המשמש להשראת מיכלי VNC. |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | תמונת Docker עבור מיכל VNC Chromium. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(דגלים מובנים)_ | `src/lib/vncSession/manifest.ts` | אקסטרה Chromium CLI args הועברו לדפדפן בתוך הקונטיינר. |
| `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 בתוך המכולה. |
| `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` | פסק זמן סרק (ms) לפני קצירת הפעלת VNC. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` | `src/lib/vncSession/manifest.ts` | משך הפעלה מקסימלי (מילישניות). |
| `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` | פסק זמן Harvest/cleanup (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` | הגדר ל- `false` כדי לדלג על שליפת נתונים סטטיסטיים OpenRouter לכל ספק להעשרת קטלוגים. |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | מטמון TTL (ms) עבור הנתונים הסטטיסטיים של ספק OpenRouter שהובאו. |
### כריכת Redis משובצת
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | תֵאוּר |
| --------------------------- | ---------------- | --------------------------------------------------------- |
| `REDIS_BIND_HOST` | `127.0.0.1` | איגד כתובת עבור שירות Redis המוטבע. |
| `REDIS_PORT` | `6379` | יציאה לשירות Redis המוטבע. |
| `OMNIROUTE_REDIS_BIND_HOST` | – | עקיפה בהיקף של OmniRoute עבור כתובת הקישור המוטבעת Redis. |
---
## 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 שניות) | `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). להבדיל מה- vars של נתיב לכל חיבור שהוצא משימוש למעלה (TTL_MS / MAX_SESSIONS, ללא פעולות מאז #10110). דגל בעל אותו שם של לוח המחוונים; ה-env var מנצח את דחיפת לוח המחוונים; דורש הפעלה מחדש. |
| `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | מגביל כמה זמן שיחת ריצה עכשיו ממתינה לעבודה בטיסה לפני תחילת הריצה בתור. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | מופעל | `open-sse/services/adobeFireflySession.ts` | שומר על מצב סיכון IMS ו-דפדפן עדכני באמצעות הפעלות של Chrome CDP בהיקף חשבון; הגדר `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 אופציונלי המשמש את המבצעים מונעי הדפדפן כאשר הזיהוי האוטומטי של הפלטפורמה אינו מספיק. |
| `TELEGRAM_BOT_TOKEN` | _(לא מוגדר)_ | `src/lib/telegram/config.ts` | אסימון BotFather המאפשר את ה-webhook הנכנס ומחתים את Mini App `initData`. |
| `TELEGRAM_WEBHOOK_SECRET` | _(לא מוגדר)_ | `src/lib/telegram/config.ts` | סוד משותף נרשם דרך `setWebhook` ומאומת מול כותרת `X-Telegram-Bot-Api-Secret-Token` בכל משלוח webhook. נדרש עבור נתיב 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 base URL עבור פרוקסי או שרתי Bot API המתארחים בעצמם. |
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | פסק זמן באלפיות שניות עבור שיחות Bot API יוצאות. |
| `TELEGRAM_USER_ALLOWLIST_ENABLED` | `false` | `src/lib/telegram/config.ts` | הגדר ל- `true` כדי לשרת רק את משתמשי Telegram הרשומים ב- `TELEGRAM_ALLOWED_USER_IDS` (אחרים: Mini App 403, הודעת webhook בוטלה). כבוי כברירת מחדל: כל משתמש Telegram מוגש ומקבל מפתח API מוטבע שמוציא מכסה במעלה הזרם. |
| `TELEGRAM_ALLOWED_USER_IDS` | _(לא מוגדר)_ | `src/lib/telegram/config.ts` | מזהי משתמש מספריים מופרדים Telegram מוצגים כאשר `TELEGRAM_USER_ALLOWLIST_ENABLED=true`. מתעלמים מערכים שאינם מספרים שלמים חיוביים רגילים באזהרה חד פעמית. התעלמו כאשר רשימת ההיתרים כבויה; ריק עם רשימת ההיתרים פועלת לא משרת אף אחד. |
| `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (מופעל) | `scripts/build/optionalPackStaging.mjs` | הגדר `0` לדלג על פליטת כדורי `.tar.gz` תוך ביצוע חבילות ML/browser אופציונליות עבור העץ העצמאי Electron (ספריות חבילות ו- `optional-packs.index.json` עדיין מיוצרות). משמש את זרימת העבודה של שחרור שולחן העבודה כדי לקצץ את גודל העלאת חפצים. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | מאפשר רישום של מסלולי תמונת המנוי xAI ; מושבת כברירת מחדל כך שנתיב התמונה של מפתח ה-API נשאר ללא שינוי. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | צינון לכל מפתח באלפיות שניות כאשר לתגובת `429` אין רמז `Retry-After` שמיש. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | מופעל | `open-sse/services/estimatorCalibration.ts` | הגדר ל- `off`, `0`, או `false` כדי להשבית את ההקלטה והיישום של כיול מעריך בזיכרון. |
| `NEXT_MANUAL_SIG_HANDLE` | _(פְּנִימִי)_ | `scripts/dev/standalone-server-ws.mjs` | עקיפה פנימית של שרת עצמאי של מטפל איתות; בדרך כלל מוגדר ומנקה על ידי המשגר במקום מוגדר על ידי המפעילים. |
| `CHATGPT_WEB_TURN_TIMEOUT_MS` | `180000` | `open-sse/utils/chatgptWebExecutorAdapter.ts` | תקרה לפי סיבוב עבור סיבוב טקסט של ChatGPT Web (חדר נקי); מתעלמים מערכים מתחת ל- `1000`. |
| `CHATGPT_WEB_TOOL_TURN_TIMEOUT_MS` | `180000` | `open-sse/utils/chatgptWebExecutorAdapter.ts` | תקרה לפי סיבוב עבור סיבוב ChatGPT Web (Clean Room) הנושא כלי לקוח (מעטפת `` הדמיית); להוריד אותו כדי להחזיר את השליטה ללקוח מוקדם יותר. מתעלמים מערכים מתחת ל- `1000`. |
| `CHATGPT_WEB_HEADLESS` | `1` (ללא ראש) | `open-sse/utils/chatgptWebExecutorAdapter.ts` | הפעל את הדפדפן ChatGPT Web (Clean Room) ללא ראש. הגדר `0` רק עבור חשבונות שהאתגר של הצד הראשון שלהם דוחה מצב ללא ראש (ברירת המחדל השתנתה מ-headed ל-headless ב-#14948). |
| `CHATGPT_WEB_BROWSER_ACQUIRE_TIMEOUT_MS` | `45000` | `open-sse/utils/chatgptWebExecutorAdapter.ts` | תקרה להפעלת דפדפן ChatGPT Web (Clean Room) וחימום chatgpt.com, כך שדפדפן או הפעלה מתים לא יכולים לצרוך את המועד האחרון לתור הבקשות. |
| `UI_KIT_CLONE` | `_references/cheaper-inference-ui-kit` | `scripts/check/check-ui-kit-snapshot.mjs` | הנתיב של ערכת CI UI הפרטית לשכפל את שער הסנאפצ'ט המוכר מבדל `packages/ui-kit/src` נגד (KEA-7886); השער מדלג באזהרה כשהשיבוט נעדר. |
### ChatGPT Web (Codex)
ברירות מחדל גלובליות עבור דפדפן חסר ראש ו-Tunnel Tool-Tunnel. Im Dashboard gesetzte Connection-Werte haben Vorrang.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(זיהוי אוטומטי)_ | `open-sse/executors/chatgpt-web-codex.ts` | Expliziter Chrome-/Chromium-Pfad für npm-, systemd- und PM2-Betrieb. |
| `CHROME_PATH` | _(זיהוי אוטומטי)_ | `open-sse/executors/chatgpt-web-codex.ts` | Gemeinsamer Fallback für einen expliziten Chrome-/Chromium-Pfad. |
| `CHATGPT_WEB_CODEX_CDP_URL` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | פנימי CDP-Endpunkt; Docker verwendet den Sidecar auf Port `9223`. |
| `CHATGPT_WEB_CODEX_USE_CDP_PROFILE` | _(בטל את ההגדרה — )_ | `open-sse/vendor/codex-chatgpt-web/persistent-cdp-context.ts` | הגדר ל- `1` (עם מוגדרת נקודת קצה CDP ) כדי לעשות שימוש חוזר בדף ChatGPT הקיים של פרופיל הדפדפן המנוהל חיצונית, המחובר, במקום בהקשר מבודד לכל תור; מגדירה גם כרטיסיות ChatGPT במקביל ב-1. כבוי כברירת מחדל. ראה [פרופיל CDP מתמיד](../guides/CHATGPT-WEB-PERSISTENT-CDP.md). |
| `CDP_PROXY_TOKEN` | _(לא מוגדר)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Wenn gesetzt, muss jede Anfrage and den CDP-Proxy-Sidecar diesen Wert im Header `X-Omni-Cdp-Token` mitschicken (#13679). Ohne Wert leitet der Proxy unauthentifiziert weiter — dann schützt nur die Netzisolierung des Compose-Netzes `chatgpt-web-codex-net`. ארזאוגן מיט `openssl rand -hex 32`. |
| `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | OpenAI-Tunnel-ID גלובלי עבור Codex-Tool-Runden המקומי. |
| `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globaler Tunnel Runtime-Key; niemals ב Logs ausgeben. |
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | שם המדויק של ChatGPT-Custom-Connectors ל-MCP-Brücke. |
| `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | Dediziertes Verzeichnis für Browser-, Broker- und Tunnelzustand. |
| `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | Bei `1` werden דפדפן-אבחון תמונות an jedem Checkpoint erfasst. |
| `CODEX_CHATGPT_WEB_LAUNCHER` | _(לא מוגדר)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | אופציונלי מוחלט Pfad zu einem dauerhaften Launcher-Binary. |
| `CODEX_CHATGPT_WEB_BUN` | _(זיהוי אוטומטי)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | אופציונלי מוחלט Pfad zum Bun-Runtime-Binary. |
| `CODEX_WEB_GPT_BUN` | _(לא מוגדר)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | Legacy-Fallback für `CODEX_CHATGPT_WEB_BUN`; Neue Setups verwenden den kanonischen Namen. |
---
## גשר OmniConductor
צרכן SSE בעל חיים ארוכים המשקף משימות רכזת OmniConductor לתוך A2A TaskManager המקומי (`src/lib/conductor/`). הצטרפות — הגשר מתחיל רק כאשר `CONDUCTOR_HUB_URL` מוגדר. בצד השרת בלבד: אסור שהאסימון של הרכזת יגיע לדפדפן.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------ | ----------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `CONDUCTOR_HUB_URL` | _(רֵיק)_ | `src/lib/conductor/boot.ts` | בסיס URL של רכזת OmniConductor (למשל `http://127.0.0.1:7910`). ביטול ההגדרה של גשר = מושבת. |
| `CONDUCTOR_HUB_TOKEN` | _(רֵיק)_ | `src/lib/conductor/boot.ts` | אישורי רכזת עבור הזנת SSE — פולטת עמית `spokesperson` -kind ברכזת (`POST /v1/peers`, admin). |
| `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` | בסיס URL של שירות הדובר (Faro) מאחורי פרוקסי הצ'אט של לוח המחוונים (`/api/conductor/ask`). |
### תזמון מודע למכסה
בשימוש על ידי `open-sse/services/combo.ts` ו- `src/lib/quota/quotaScheduler.ts` עבור בדיקות תקציב אסימון לפני בקשה. התנהגות ניתוב ברירת המחדל של Opt-in — אינה משתנה כאשר אינה מוגדרת.
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ---------------------------------- | ---------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | כאשר `1`, דלג על חיבורים שתקציב האסימון לכל חלון שלהם (`rateLimitOverrides.tpm`, table `provider_quota_state`) אינו יכול לעמוד בעלות הבקשה המשוערת לפני המשלוח. פתיחת כשל כאשר לא הוגדר תקציב. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(עַל)_ | `open-sse/services/estimatorCalibration.ts` | כיול משוב של מעריך אסימון ההקשר (#14931): לכל (ספק, דגם, כלים קיימים) EMA של `usage.prompt_tokens` / הערכה, מהודק ל-0.15–2.0, בזיכרון בלבד. `off`, `0` או `false` משביתים הקלטה ויישום. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | רושם את מסלולי התמונה `xai-oauth` (`xao`) ו- `grok-cli`. דגל בעל אותו שם של לוח המחוונים; עקיפת DB מנצחת את הערך הזה. |
## אבחון סנכרון מודל
| מִשְׁתַנֶה | בְּרִירַת מֶחדָל | קובץ מקור | תֵאוּר |
| ------------------------------ | ---------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_MODEL_SYNC_TIMINGS` | `0` | `src/lib/providerModels/modelSyncTimings.ts` | הגדר ל- `1` לתיעוד של תזמון שלב, תוצאות ID של בקשה ו-phase success/error במהלך סנכרון המודל. מושבת עבור כל שאר הערכים. יומנים משמיטים משאבי בקשה, חשבון, קטלוג ושגיאות. |
## כלי ניתוח המדיה המקומי של OpenCode
בשימוש על ידי `scripts/cli/omniroute-media-mcp.mjs`. יש להגדיר אותם בסביבת התהליך של הכלי המקומי.
| משתנה | ברירת מחדל | תיאור |
| -------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_MEDIA_CONFIG` | `$XDG_CONFIG_HOME/opencode/opencode.json` (או `~/.config/opencode/opencode.json`) | תצורת OpenCode שנקראת על ידי כלי המדיה ותוכנית ההתקנה. |
| `OMNIROUTE_MEDIA_PROVIDER` | `omniroute` | רשומת הספק שנקראת מתצורת OpenCode על ידי כלי המדיה. |
| `OMNIROUTE_MEDIA_MODEL` | `auto` | המודל שנשלח על ידי כלי המדיה. הספק שלו חייב לתמוך בסוגי המדיה המבוקשים. |
| `OMNIROUTE_MEDIA_API_KEY` | מפתח ה-API של הספק שהוגדר, או ההפניה הסביבתית שלו | פרטי התחברות אופציונליים לעקיפה. יש להשאיר אותם בסביבת התהליך המקומית; לעולם אין לבצע להם commit. |