# 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. כתובות URL וסנכרון ענן](#7-urls--cloud-sync) - [8. פרוקסי יוצא](#8-outbound-proxy) - [9. שילוב כלי CLI](#9-cli-tool-integration) - [10. שילובי סוכן פנימי ו-MCP](#10-internal-agent--mcp-integrations) - [11. פרטי גישה לספקי OAuth](#11-oauth-provider-credentials) - [12. דריסות User-Agent של ספקים](#12-provider-user-agent-overrides) - [13. תאימות טביעת אצבע של CLI](#13-cli-fingerprint-compatibility) - [14. ספקי מפתחות API](#14-api-key-providers) - [15. הגדרות זמן קצוב](#15-timeout-settings) - [16. רישום יומן](#16-logging) - [17. מיטוב זיכרון](#17-memory-optimization) - [18. סנכרון תמחור](#18-pricing-sync) - [19. סנכרון מודלים (פיתוח)](#19-model-sync-dev) - [20. הגדרות ייעודיות לספק](#20-provider-specific-settings) - [21. תקינות הפרוקסי](#21-proxy-health) - [22. ניפוי שגיאות](#22-debugging) - [23. שילוב GitHub](#23-github-integration) - [24. ארגז חול למיומנויות (v3.8.0+)](#24-skills-sandbox-v380) - [27. הזנת Radar (אירוח עצמי)](#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` | חותם/מאמת את כל עוגיות ההפעלה (session) של לוח הבקרה (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` | סוד משותף עבור גשר ה-WebSocket הפנימי של Codex Responses. מאמת בקשות גשר בין ממסר ה-WS של Electron/הדפדפן לבין OmniRoute. ⚠️ **נדרש בייצור — כשהוא לא מוגדר, כל בקשות גשר ה-WS נדחות.** צרו באמצעות `openssl rand -base64 32`. | | `OMNIROUTE_SW_BUILD_ID` | לא | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | מזהה מפורש לשבירת מטמון (cache-busting) של ה-service worker עבור מעטפת ה-PWA (#11779); ראשון בשרשרת הייחוס. | | `SOURCE_VERSION` | לא | _(לא מוגדר)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | שני בשרשרת — מוגדר על ידי בוני PaaS (למשל בסגנון Heroku) כ-commit הפרוס. | | `NEXT_PUBLIC_SW_BUILD_ID` | לא | _(נגזר)_ | `src/shared/components/PwaRegister.tsx` | ערך ציבורי בזמן בנייה שבו הלקוח משתמש כדי לרשום את `/sw.js?v=…`; נגזר משני אלו שלמעלה, ולאחר מכן מ-git SHA. | | `OMNIROUTE_PEER_STAMP_TOKEN` | לא (אוטומטי) | _(אוטומטי בכל אתחול)_ | `src/server/authz/policies/management.ts` | סוד לכל תהליך המוכיח שחותמת כתובת ה-IP המהימנה של העמית (peer) הגיעה משרת ה-HTTP של OmniRoute עצמו (`scripts/dev/peer-stamp.mjs`). תוכנת הביניים (middleware) של ההרשאות (authz) נוהגת אמון במקומיות הבקשה (ניתוב loopback/LAN של נתיבי LOCAL_ONLY) רק כשהחותמת נושאת את הטוקן הזה. נוצר אוטומטית בכל אתחול — השאירו לא מוגדר; קבעו אותו באופן קבוע רק עבור הקמות מרובות-תהליכים שחייבות לשתף את החותמת. | | `OMNIROUTE_TRUSTED_PROXIES` | לא | _(לא מוגדר)_ | `scripts/dev/peer-stamp.mjs` | כתובות IP או טווחי CIDR מופרדים בפסיקים של פרוקסי הפוך (reverse proxy) שרשימת ההתרה/חסימה של IP רשאית להאמין לכותרות `X-Forwarded-For` / `X-Real-IP` שלהם, בנוסף ל-loopback, כתובות רשת פרטית וצמתי הקצה של Cloudflare, שמהימנים תמיד. נדרש רק עבור פרוקסי בכל כתובת ציבורית אחרת; אחרת, כתובתו של הפרוקסי עצמו היא מה שהמסנן שופט. מגביל הקצב לכל לקוח של הממסר (`/api/v1/relay/chat/completions`) מבוסס על אותה כתובת לקוח מזוהה, לעולם לא על כותרות העברה בלבד. | ### פקודות יצירה ```bash # צרו את כל ארבעת הסודות בבת אחת: echo "JWT_SECRET=$(openssl rand -base64 48)" echo "API_KEY_SECRET=$(openssl rand -hex 32)" echo "INITIAL_PASSWORD=$(openssl rand -base64 16)" echo "OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -base64 32)" ``` > [!CAUTION] > לעולם אל תבצעו commit לקבצי `.env` המכילים סודות אמיתיים למערכת בקרת הגרסאות. ה-`.gitignore` כבר מחריג את `.env`, אך ודאו זאת לפני ביצוע push. --- ## 2. אחסון ומסד נתונים OmniRoute משתמש ב-**SQLite** (באמצעות `better-sqlite3`) לכל שמירת הנתונים. משתנים אלה שולטים במיקום הנתונים, בהצפנה ובמחזור החיים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | ספריית הבסיס עבור מסד הנתונים SQLite, גיבויים וקבצי נתונים. ניתן לעקוף עבור אמצעי אחסון (volumes) של Docker או נתיבים מותאמים אישית. | | `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(לא מוגדר)_ | `src/lib/dataPaths.ts` | פתח מילוט עבור שומר ה-DATA_DIR של בדיקות/eval (#10428). בדיקות ובדיקות eval/print של Node (`-e`/`--eval`/`-p`/`--print`, כולל צורות `--eval=`/`--print=`) ללא `DATA_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 שמולו שער ה-provenance של אריזת הארטיפקט בודק את ה-build SHA (#10427). | | `OMNIROUTE_ALLOW_CANARY_BUILD` | _(לא מוגדר)_ | `scripts/build/buildProvenance.ts` | הגדר ל-`1` כדי לאפשר אריזת build שה-SHA שלו אינו על קו ה-release, תוך תיעודו כ-canary מכוון במקום להפיל את השער (#10427). | | `OMNIROUTE_SMOKE_API_KEY` | _(לא מוגדר)_ | `scripts/ops/deploy-canary.mjs` | מפתח API עבור בדיקת ה-smoke של פריסת ה-canary, נשלח כ-`Authorization: Bearer` ב-`/v1/chat/completions`. משמש רק את סקריפט הפריסה (#10429), לעולם לא את השרת. לא קשור למשתני `OMNIROUTE_SMOKE_*` של ערכת ה-CLI smoke האופציונלית (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` ב-`tests/integration/upstream-cli-smoke.int.test.ts`) — ראה [אינטגרציות CLI → סריקת smoke אמיתית](../guides/CLI-INTEGRATIONS.md). | | `OMNIROUTE_BUILDING` | _(לא מוגדר)_ | `src/lib/buildPhase.ts` | אות שלב הבנייה (#10060): מוגדר ל-`1` על ידי `scripts/build/build-next-isolated.mjs` ועובר בירושה לכל build worker שנוצר, כך ששכבת מסד הנתונים מחזירה stub ריק (no-op) במקום לטעון את תוסף ה-better-sqlite3 הטבעי (אשר מבטל את ה-worker ביציאה). לעולם לא מוגדר עבור השרת הרץ. | | `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | הגדר ל-`1` כדי לדלג על בדיקת ה-prebuild האופציונלית של תלות טבעית עבור עצי vendor אקזוטיים. זה לא הופך תלות חסרה לבנויה; השתמש רק כאשר תלויות טבעיות מסופקות מחוץ לתהליך (out of band). | | `OMNIROUTE_DATA_DIR` | _(לא מוגדר)_ | `open-sse/executors/promptql/threadSticky.ts` | **כינוי גיבוי (fallback)** עבור `DATA_DIR`, נבדק רק כאשר `DATA_DIR` אינו מוגדר. משמש לאיתור מטמון הסשנים ה-thread-sticky על הדיסק של מנתח ה-PromptQL (`/promptql-thread-sessions.json`); אם אף אחד מהמשתנים אינו מוגדר, המטמון נשאר בזיכרון בלבד (לא נשמר בין הפעלות מחדש). | | `OMNIROUTE_PLUGINS_DIR` | _(לא מוגדר)_ | `src/lib/plugins/scanner.ts` | הספרייה שממנה **סורק התוספים בזמן ריצה** קורא — והשורש שאליו מנהל התוספים מתקין — בעקיפת ברירת המחדל הנגזרת מ-home (#11827). הפנה אותה לעץ התוספים המחובר ב-bind-mount ב-Docker/K8s במקום להזיז את HOME רק כדי למקם מחדש את נתיב הסריקה (HOME שולט גם בכל התנהגות אחרת יחסית ל-home). לא מוגדר = `~/.omniroute/plugins`, או `/tmp/.omniroute/plugins` כאשר התהליך אינו מייצא home כלל — אי-הגילוי השקט שמשתנה זה מסיר. הספרייה שנפתרה נרשמת פעם אחת בהפעלה כ-`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`, מדלג על גיבויים שגרתיים/לפני-כתיבה של קובץ SQLite (שמירה/ניקוי של תמחור models.dev, כתיבות הגדרות). גיבויים ידניים וגיבויים לפני-שחזור עדיין מופעלים. זה **לא** משבית את צילום הבטיחות העמיד ההכרחי של רץ המיגרציות או את משמר המיגרציה ההמונית עבור מסד נתונים מתמשך קיים. גיבויים שאינם ידניים מוגבלים ללכל היותר פעם ב-60 דקות. לוח הבקרה **Settings → Storage** יכול להשבית את הגיבוי האוטומטי השגרתי באופן עצמאי. | | `OMNIROUTE_SQLITE_SLOW_MS` | _(לא מוגדר/כבוי)_ | `src/lib/db/adapters/slowDiagnostics.ts` | אלפיות שנייה; ערכים מתחת ל-1 או ערכים לא מספריים נשארים כבויים; מזהיר לכל היותר פעם ב-10 שניות; שורת הלוג מכילה רק driver,‏ operation ו-elapsedMs. | | `OMNIROUTE_CRYPT_KEY` | _(לא מוגדר)_ | `src/lib/db/encryption.ts` | **כינוי מדור קודם** עבור `STORAGE_ENCRYPTION_KEY`. מתקבל כגיבוי כאשר המשתנה הראשי נעדר. | | `OMNIROUTE_API_KEY_BASE64` | _(לא מוגדר)_ | `src/lib/db/encryption.ts` | **כינוי מדור קודם** (בצורה מקודדת Base64) המתקבל כגיבוי. מפוענח אוטומטית לפני השימוש. | | `OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS` | _(לא מוגדר)_ | `src/lib/db/core.ts` | עוקף את מרווח בדיקת התקינות התקופתית של SQLite (באלפיות שנייה). כאשר לא מוגדר, ברירות המחדל נגזרות מ-`NODE_ENV`. | | `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS` | _(הוסר)_ | `src/lib/db/walMaintenance.ts` | **הוסר.** ‏`wal_checkpoint(TRUNCATE)` תקופתי וחי עלול לפסול את מיפוי ה-wal-index המשותף ולהקריס את התהליך עם SIGBUS (#13973), ולכן המתזמן כבר לא קיים. המשתנה אינרטי: ערך חיובי רושם אזהרת הוצאה משימוש חד-פעמית, בעוד `0` או לא מוגדר נשאר שקט. ה-WAL מתוחזק על ידי checkpoints מסוג PASSIVE (להלן) ונקטע על ידי ה-checkpoint של הכיבוי. | | `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 דקות) | `src/lib/db/walMaintenance.ts` | עוקף את מרווח ה-`wal_checkpoint(PASSIVE)` התדיר (באלפיות שנייה). שומר על מסגרות WAL ממתינות קטנות כך שה-checkpoints נשארים מהירים וקובץ ה-WAL נשאר חסום בין קיטועי הכיבוי. `0` משבית. | | `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | כאשר טיק PASSIVE מגלה שקובץ ה-WAL מעל גודל זה, מריץ `wal_checkpoint(RESTART)` כך שה-WAL מתחיל מחדש מבלי לשכתב את ה-wal-index הממופה. checkpoints חיים במצב truncate הוסרו (ראו את השורה של `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). | | `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | הגדירו ל-`1`/`true`/`yes`/`on` כדי לצאת מהתהליך לאחר שלחץ משאבים קריטי נמשך במשך `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, ומאפשר למפקח (systemd `Restart=always`, מדיניות הפעלה מחדש של Docker) להחזיר תהליך נקי במקום להגיש שגיאות 503 ללא הגבלת זמן. | | `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 דקות) | `open-sse/utils/resourcePressure.ts` | כמה זמן לחץ קריטי חייב להימשך לפני שיציאת האתחול העצמי מופעלת. | | `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | הגדירו ל-`1`/`true`/`yes`/`on` כדי להתעלם מ-`/proc/pressure/memory` ברמת המארח כולו (`psi_some` / `psi_full`) כאשר שכן רועש גורם לשגיאות 503 בזמן שהתהליך הזה תקין (#13124). משמרות ה-Cgroup וה-V8 heap נשארות פעילות. PSI גם מפסיק להיחשב כהוכחת ויסות מצד הקרנל עבור `cgroup_high`: סכום cgroup מעל `memory.high` הופך אז לקריטי רק בעת עלייה של `high`/`max` ב-`memory.events`. ללא `memory.events` היחס הגולמי נשמר. | | `OMNIROUTE_SQLJS_WASM_PATH` | _(זיהוי אוטומטי)_ | `src/lib/db/adapters/sqljsAdapter.ts` | נתיב מפורש (מוחלט או יחסי ל-cwd) אל `sql-wasm.wasm` בעת שימוש במתאם הגיבוי `sql.js` WASM. מזוהה אוטומטית באמצעות תלויות החבילה ופריסות מועמדות כאשר לא מוגדר. | | `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | מספר הימים שבהם נשמרים נקודות הביקורת (checkpoints) של משימת Batch API במצב סופי (completed/failed/cancelled/expired), קבצי הקלט/פלט/שגיאה המוזכרים והשורה שלה, על ידי סריקת הניקוי האוטומטית לפני המחיקה. נכנס לתוקף רק לאחר ש-`BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` מופעל; תואם את חלון שמירת הפלט של Batch API של OpenAI עצמה. אינו משפיע על נתיב `DELETE /api/v1/batches/delete-completed` המופעל על ידי המפעיל, הנשאר ללא תנאי (ללא מסנן גיל) מתוך כוונה תחילה. | | `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | כאשר `true`, סריקת הניקוי האוטומטית מוחקת משימות Batch API סופיות (ונקודות את הביקורת שלהן) שעברו את `OMNIROUTE_BATCH_RETENTION_DAYS`, ומנקה את תוכן ה-BLOB של קבצים שהועלו ושעברו את `expires_at` שלהם. כבוי כברירת מחדל: כל התקנה קיימת שומרת את הנתונים האלה בדיוק כפי שהיו עד שמפעיל מביע הסכמה מפורשת. כמו כן דגל תכונה הניתן לעריכה מלוח הבקרה — ראה `docs/reference/FEATURE_FLAGS.md` ← Runtime. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | הגדר ל-`1` כדי לדלג לחלוטין על בדיקת התקינות של מסד הנתונים (healthcheck) בעת ההפעלה. שימושי למשימות קצרות-חיים ולבדיקות אינטגרציה. | | `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | הגדר ל-`1` כדי לאלץ את לולאת בדיקת התקינות של מסד הנתונים לפעול, גם כאשר בדרך כלל היא מדולגת (למשל, משימות קצרות-חיים). | | `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | הגדר ל-`1` כדי לדלג על חימום סביבת ההרצה הנטיבית במהלך `npm install`. שימושי בהתקנות CI/headless שבהן sqlite כבר בנוי. | | `OMNIROUTE_MIGRATIONS_DIR` | _(זיהוי אוטומטי)_ | `src/lib/db/migrationRunner.ts` | עקוף את התיקייה שרץ המיגרציות סורק. שימושי כאשר שולחים מיגרציות ארוזות בבנייה מותאמת אישית. | | `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(לא מוגדר)_ | `src/lib/db/migrationRunner/extraDirs.ts` | תיקיית מיגרציות נוספות כערכי `namespace=dir` המופרדים במפריד הנתיבים של הפלטפורמה (למשל `ee=/opt/app/enterprise/db/migrations`). קבצים שנמצאים שם נרשמים כ-`-`, כך שהפצה השולחת מיגרציות משלה לעולם לא תתנגש עם המשבצות המספריות של ה-upstream. ערך פגום, מרחב שמות (namespace) לא תקין או תיקייה חסרה גורמים לזריקת שגיאה בעת ההפעלה במקום דילוג שקט על הסכמה. | | `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | סף בטיחות מפני מיגרציות ממתינות המוניות (#3416). ההפעלה נקטעת אם יותר ממספר זה של מיגרציות ממתינות במסד נתונים קיים (מגן מפני טבלת מעקב שנמחקה). העלה את הערך כדי לשחזר גיבוי ישן יותר; הגדר ל-`0` כדי להשבית את הבדיקה. | | `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | תיקיית עבודה עבור שער השחרור `check:install-upgrade`. הוא זקוק לכ-12 GB (שני עצי התקנה של כ-3 GB בתוספת ה-tarball), ולכן אסור לו לרוץ על tmpfs קטן — על ה-runner העצמאי (self-hosted) `/tmp` הוא tmpfs בגודל 12 GB המגובה ב-RAM, והשער מיצה אותו עד תום, מה שקטע את החבילה. | | `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(ברירת מחדל בקוד)_ | `src/lib/spend/batchWriter.ts` | מרווח הריקון (flush, ב-ms) עבור כותב ההוצאות/עלויות המקובץ. ערכים נמוכים יותר מפחיתים את איחוד הכתיבות; ערכים גבוהים יותר מפחיתים את התנגשות הגישה למסד הנתונים. | | `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(ברירת מחדל בקוד)_ | `src/lib/spend/batchWriter.ts` | מספר רשומות ההוצאה המרבי ב-buffer לפני ריקון כפוי. העלה בפריסות עם QPS גבוה; הורד כאשר זיכרון חסום חשוב יותר. | | `OMNIROUTE_PROXY_FETCH_DEBUG` | _(לא מוגדר)_ | `open-sse/utils/proxyFetch.ts` | הגדר ל-`"true"` כדי להפיק יומני debug של `[ProxyFetch]` בנתיב ה-relay של Vercel. כבוי כברירת מחדל כדי להימנע מדליפת רמזי ניתוב. | | `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(לא מוגדר)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | הנתיב המוחלט של הקובץ הבינארי של ליבת ה-proxy המקומית (קובץ בשם `sing-box`) הבודק תצורת ליבה שנוצרה לפני שהיא מחליפה את הקובץ המאומץ. כאשר לא מוגדר, נכתב רק `.generated` לצד הקובץ המאומץ. סביבת מארח בלבד: לעולם אינו נשמר במסד הנתונים ואינו מתקבל דרך ממשק ה-API לניהול, מכיוון שהקובץ הבינארי מופעל. | | `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(לא מוגדר)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | כיצד ליבת ה-proxy המקומית נטענת מחדש לאחר החלפת תצורה שאומתה: מערך ארגומנטים ב-JSON המופעל ללא shell, או בדיוק `external` כאשר גורם משקיף חיצוני מחיל את הקובץ. לעולם אינו נשמר במסד הנתונים ואינו נחשף דרך ה-API. | | `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | הגדירו ל-`"true"` או `"1"` כדי לכלול כתובות IP של לקוח/תעבורה יוצאת ואת קידומת החשבון בשורת לוג התהליך המפורטת `[ProxyEgress]`. כבוי כברירת מחדל כדי שלוג התהליך לא יחשוף כתובות IP או את קידומת החשבון. | | `OMNIROUTE_DEBUG` | _(לא מוגדר)_ | `bin/cli/commands/quota.mjs` | הגדירו ל-`1` כדי להדפיס אבחון תזמון לכל בקשה (`[omniroute] GET completed in Nms`) מפקודות ה-quota של ה-CLI אל stderr. | | `OMNIROUTE_HEALTHCHECK_PATH` | _(אוטומטי)_ | `scripts/dev/healthcheck.mjs` | נתיב מפורש הנבדק על ידי בדיקת הבריאות של הקונטיינר. כשלא מוגדר, הבדיקה גוזרת אותו מ-`OMNIROUTE_BASE_PATH`; הגדרתו מחזירה את השימוש בנקודת הקצה של הניטור העמוק. | | `OMNIROUTE_DEBUG_COMPLETION` | _(לא מוגדר)_ | `bin/cli/commands/completion.mjs` | הגדירו לכל ערך לא-ריק כדי לפלוט אבחון `[omniroute completion]` מנתיבי המטמון של השלמת ה-shell ב-CLI (קריאה/רענון/כתיבה). כבוי כברירת מחדל — המטמונים הללו נכשלים בשקט, כך שמטמון חסר או פגום לעולם לא ישבור את השלמת ה-tab. | | `BATCH_RETRY_DURATION_MS` | `86400000` (24h) | `open-sse/services/batchProcessor.ts` | חלון ניסיונות חוזרים מקסימלי עבור פריטי batch בודדים (ב-ms). פריטים החורגים ממשך זה מסומנים ככושלים. | | `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | השהיית בסיס (ב-ms) עבור backoff מעריכי בניסיונות חוזרים של פריטי batch. | | `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | תקרה (ב-ms) עבור backoff מעריכי בין ניסיונות חוזרים של פריטי batch. | | `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | מספר מקסימלי של batches המעובדים במקביל. הגדילו כדי להגביר תפוקה; שמרו על ערך נמוך כדי להימנע מסופות rate-limit. | > [!IMPORTANT] > לפני שינוי מסד נתונים מתמשך קיים, רכיב ההרצה של המיגרציות מפרסם תמונת מצב מלאה, > עם כתובות מבוססות-תוכן, תחת `DATA_DIR/db_backups/`. הפרסום דורש מערכת קבצים > התומכת ב-hard links ללא דריסה באותה מערכת קבצים, בתוספת סנכרון קבצים עמיד. מארחי POSIX > דורשים גם סנכרון תיקיות; ב-Windows, ייתכן ש-Node ידחה handles של תיקיות, ולכן OmniRoute > מבצעת flush לקובץ שפורסם ומתייחסת לסנכרון רשומות התיקייה כ-best effort. > אם ה-`DATA_DIR` המחובר אינו יכול לספק ערבויות אלו, ההפעלה נכשלת באופן סגור לפני > החלת מיגרציה. העבירו את `DATA_DIR` ל-volume עם פרימיטיבים אלו; אל תשתמשו ב-`DISABLE_SQLITE_AUTO_BACKUP` כדי לעקוף את בטיחות המיגרציה. ### תרחישים | תרחיש | תצורה | | ---------------- | -------------------------------------------------------------------------------- | | **פיתוח מקומי** | השאירו את כל ברירות המחדל. מסד הנתונים נמצא ב-`~/.omniroute/omniroute.db`. | | **Docker** | `DATA_DIR=/data` + חיבור volume ב-`/data`. | | **הצפנה במנוחה** | הגדירו `STORAGE_ENCRYPTION_KEY` + שמרו גיבויים של המפתח! אובדנו = אובדן הנתונים. | | **CI/בדיקות** | `DATA_DIR=/tmp/omniroute-test` — זמני, אין צורך בהצפנה. | --- ## 3. רשת ופורטים | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | הפורט הראשי עבור ממשק המשתמש של לוח הבקרה וגם עבור נקודות הקצה של ה-API (מצב פורט יחיד). | | `OMNIROUTE_BASE_PATH` | _(ריק = שורש)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | תת-נתיב URL להגשת OmniRoute מאחורי reverse proxy (מגדיר את `basePath` של Next.js; הפניות האימות מודעות ל-basePath). למשל `/omniroute`. ב-Docker הערך נאפה במהלך `docker build` (`ARG OMNIROUTE_BASE_PATH`); אימג'י root מוכנים מראש יכולים להחיל ערך runtime שונה פעם אחת בעת הפעלת הקונטיינר, לפני ש-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`. כאשר אינו מוגדר, נעשית חזרה (fallback) ל-`OMNIROUTE_BASE_PATH`. בצעו בנייה מחדש לאחר שינוי (`basePath` של Next הוא בזמן בנייה). | | `DASHBOARD_ALLOW_EMBED` | _(לא מוגדר = לעולם לא ניתן למסגר)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | הטמעת iframe בהסכמה (opt-in) של דפי ה-HTML. כאשר לא מוגדר, כל נתיב נשלח עם `frame-ancestors 'none'` + `X-Frame-Options: DENY`. הגדירו ל-`vscode` כדי להגיש את הדפים (לוח הבקרה, ההתחברות, התיעוד, דף הנחיתה) עם `frame-ancestors 'self' vscode-webview:` וללא `X-Frame-Options`, כך שה-Simple Browser של VS Code יוכל לרנדר אותם (מצב `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 API של `/v1/*` על פורט נפרד זה. | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | כתובת ה-bind עבור פורט ה-API. | | `DASHBOARD_PORT` | _(לא מוגדר)_ | `src/lib/runtime/ports.ts` | כאשר מוגדר, מגיש את ממשק המשתמש של לוח הבקרה על פורט נפרד זה. | | `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(מושבת)_ | `src/sse/utils/backpressure.ts` | מגביל חיבורי צ'אט מקבילים פעילים (in-flight); בקשות מעבר למגבלה מקבלות `503` עם `Retry-After`. מספר שלם חיובי מפעיל את מנגנון ההגנה; לא מוגדר/`0` משבית אותו. | | `OMNIROUTE_INSTANCE_ID` | _(לא מוגדר)_ | `src/shared/resilience/peerRouting.ts` | מזהה יציב וייחודי עבור שער זה בעת שרשור מופעי OmniRoute. מאפשר בדיקות peer-loop נכנסות. תווים מותרים: אותיות, ספרות, `.`, `_`, `:` ו-`-`; מקסימום 64 תווים. | | `OMNIROUTE_PEER_URLS` | _(לא מוגדר)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | כתובות URL בסיסיות של OmniRoute, מופרדות בפסיקים, שרשאיות לקבל את `X-OmniRoute-Peer-Trace`. רק כתובות URL של upstream המופיעות ברשימת ההיתרים במפורש מקבלות מטא-נתונים של peer; כל שאר הספקים אינם מושפעים. | | `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` | פורט מפורסם בצד המארח עבור ה-Dashboard במצב ייצור של Docker. | | `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | פורט מפורסם בצד המארח עבור ה-API במצב ייצור של Docker. | | `OMNIROUTE_PORT` | _(לא מוגדר)_ | `src/lib/runtime/ports.ts` | גובר על `PORT` כאשר רץ בתוך Electron או wrappers אחרים. | | `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | פורט עבור שרת הניטור החי בזמן אמת מבוסס WebSocket. | | `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | כתובת bind עבור שרת ה-WebSocket החי. הגדר ל-`0.0.0.0` כדי לחשוף ברשת ה-LAN (יש להגדיר גם את `LIVE_WS_ALLOWED_ORIGINS`). החיבורים מאומתים באמצעות עוגיית ה-session של הדשבורד או מפתח API מסוג Bearer המחזיק scope ניהולי (`manage`/`admin`). | | `LIVE_WS_ALLOWED_ORIGINS` | _(לא מוגדר)_ | `src/server/ws/liveServer.ts` | origins נוספים מופרדים בפסיקים המורשים לפתוח WebSocket חי. origins של דשבורד מ-loopback כבר מותרים כברירת מחדל. | | `LIVE_WS_ALLOWED_HOSTS` | _(לא מוגדר)_ | `src/server/ws/liveServerAllowList.ts` | hostnames נוספים מופרדים בפסיקים המותרים עבור origins של WebSocket חי. שלא כמו `LIVE_WS_ALLOWED_ORIGINS` (כתובות URL מלאות של origin), ההתאמה מתבצעת רק על חלק ה-host — שימושי עבור תצורות LAN/Tailscale. | | `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(לא מוגדר)_ | `src/hooks/useLiveDashboard.ts` | כתובת URL ציבורית עבור ה-WebSocket של הדשבורד החי (צד הדפדפן). יש להגדיר כאשר שרת ה-WS נמצא מאחורי reverse proxy או Cloudflare Tunnel (למשל `wss://ws.my-ai.com/live-ws`); הדפדפן מתחבר לשם במקום ל-`ws://hostname:20132`. חלק ה-pathname משמש גם כנתיב ה-upgrade של ה-WebSocket (ברירת מחדל: `/live-ws`). | | `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` and `scripts/start-ws-server.mjs` | הגדר ל-`0` או `false` כדי להשבית את שרת ה-WebSocket בזמן אמת (מופעל כברירת מחדל, קשור ל-loopback). מתג CI/harness המשבית את סקריפט העזר העצמאי של ה-WebSocket החי. | | `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | מגבלת קצב relay לכל (token, IP), בקשות לדקה. נשמרת בזיכרון, לכל מופע. `0` או ערך שלילי משבית את שער ממד ה-IP (מגבלת ה-DB לכל token עדיין חלה). | | `NODE_ENV` | `production` | Next.js core | שולט ברמת הפירוט של הלוגים, בשמירה במטמון, בחשיפת פרטי שגיאות ובאופטימיזציות של Next.js. | | `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — ברירת מחדל בקוד) | `package.json` / Next.js 16 | Turbopack הוא ה-bundler ברירת המחדל עבור `npm run dev` ו-`npm run build` (בנייה מהירה פי 2-3, נמדד בבנצ'מרק). הגדירו `0` כדי לחזור ל-webpack ב-Windows, כשנתקלים בחוסר תאימות של native binding / bundler-compat, **או במכונות עם RAM מוגבל** — בניית production עם Turbopack בקו הגרסאות הזה של Next.js (16.2.x) ידועה ב-upstream כמגיעה לשיא זיכרון גבוה בהרבה מ-webpack בגרפי מודולים גדולים (תיקון ה-memory-eviction של Turbopack ב-Next 16.3 עדיין לא יציב); ה-fallback ל-webpack מגיע לשיא נמוך בהרבה. ראו #6409. **בניית אימג' Docker מוגדרת כברירת מחדל ל-`0` (webpack)**: ה-`Dockerfile` מכריז `ARG OMNIROUTE_USE_TURBOPACK=0` כך ש-`docker build .` פשוט (Railway ומארחי one-click אחרים, מתקינים עצמאיים אד-הוק) לא ייהרג ב-OOM-killed ב-builder עם מגבלת זיכרון; העבירו `--build-arg OMNIROUTE_USE_TURBOPACK=1` כדי לבנות את האימג' עם Turbopack. ראו `docs/guides/DOCKER_GUIDE.md` → משאבים בזמן בנייה. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(לא מוגדר)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | הגדירו `1` כדי לדלג על בדיקת התקינות של SQLite בעת ההפעלה. שימושי לאתחול מהיר יותר במסדי נתונים גדולים. | | `NOTIFY_SOCKET` | _(לא מוגדר)_ | systemd (פרוטוקול sd_notify) | מוגדר על ידי systemd כאשר התהליך רץ תחת service unit עם אינטגרציית sd_notify; OmniRoute קורא אותו (ראו `OMNIROUTE_DISABLE_SD_NOTIFY`) כדי לשלוח התראות READY/WATCHDOG. לעולם לא מוגדר על ידי המשתמש. | | `OMNIROUTE_DISABLE_SD_NOTIFY` | _(לא מוגדר)_ | `scripts/dev/systemd-notify.mjs` | הגדירו `1` כדי להשבית את systemd sd_notify (Type=notify / WatchdogSec=) גם כשרצים תחת unit של systemd. ה-notifier הוא no-op מחוץ ל-systemd בכל מקרה. | | `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | מרווח (במילישניות) עבור מתזמן בדיקת תקינות האישורים ברקע. מינימום: 10000 (10 שניות). | | `CREDENTIAL_HEALTH_CACHE_TTL` | `300000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/cache.ts` | TTL (במילישניות) עבור סטטוס תקינות האישורים השמור במטמון. | | `OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK` | `false` | `src/lib/credentialHealth/scheduler.ts` | הגדירו `1` או `true` כדי להשבית בדיקה תקופתית ברקע של חיבורי הספקים. ספקי חיפוש (SEARCH_VALIDATOR_CONFIGS ב-`src/lib/providers/validation/searchProviders.ts`, למשל `tavily-search`) תמיד מוחרגים מהסריקה — ה"אימות" שלהם הוא שאילתת upstream אמיתית שמחויבת בתשלום, ולכן הם לעולם לא נבדקים על ידי טיימר (#9970). | | `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | הגדירו `1` כדי לאפשר למתקשר מאומת לבקש `/api/monitoring/health?deep=1`, שדוגם את משטח ה-completions פעם אחת לכל TTL. מתקשרים אנונימיים לעולם לא מפעילים את הבדיקה. | | `OMNIROUTE_EVENT_LOOP_STALL_THRESHOLD_MS` | `5000` | `src/lib/healthzLag.ts` | סף קיפאון (במילישניות) עבור מתעד ה-event-loop בעת האתחול: קיפאון ארוך מזה רושם שורה אחת של `event loop stalled` בעת החזרה לפעילות, עם ספירות זיכרון ובקשות בטיפול, ומעלה את המונה/המקסימום של `eventLoopStall` ב-`/api/monitoring/health`. הגדירו `0` כדי להשבית; ערך לא קריא או שלילי חוזר לברירת המחדל `5000`. | | `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | כתובת ה-bind עבור שרת ה-dev/start של Next.js. עוקפת את ברירת המחדל `0.0.0.0` כאשר מוגדרת. | | `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | כתובת ה-bind שבה משתמש ה-Playwright runner בעת הפעלת 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` | כתובת ה-bind עבור `omniroute serve`. נמנע מהתנגשות עם משתנה `HOSTNAME` של מעטפת POSIX (תמיד מוגדר לשם המכונה על ידי 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` | מלח (salt) המשולב עם מזהי חומרה ליצירת טביעת אצבע של המכונה. יש לשנות בכל פריסה לצורך בידוד. | | `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` על עוגיות הסשן. **חייב להיות `true`** בעת הרצה מאחורי HTTPS. | | `REQUIRE_API_KEY` | `false` | middleware של ה-API | כאשר `true`, כל בקשות ה-proxy אל `/v1/*` חייבות לכלול מפתח API תקף. **דגל זה אינו מגן על `GET /v1/models`**, שפועל במקום זאת לפי מדיניות ההתחברות של לוח הבקרה (`requireAuthForModels`) — לכן `401` מ-`/v1/models` לא אומר שה-inference מוגן. ראו `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). | | `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | מאפשר חשיפת ערכי מפתחות API מלאים בממשק לוח הבקרה. ניתן להגדרה מ-Feature Flags של לוח הבקרה; מהווה סיכון אבטחה במופעים משותפים. | | `NO_LOG_API_KEY_IDS` | _(ריק)_ | `src/lib/compliance/index.ts` | מזהי מפתחות API מופרדים בפסיקים העוקפים את רישום הבקשות (תאימות GDPR). | | `DEFAULT_RATE_LIMIT_PER_DAY` | _(לא מוגדר = ללא הגבלה)_ | `src/shared/utils/apiKeyPolicy.ts` | מכסת בקשות יומית חלופית החלה על מפתחות API שעמודת ה-`rate_limits` שלהם היא null. לא מוגדר או ריק: אין תקרה משתמעת (#2289, #11017). `0` זהה (ללא הגבלה). מספר שלם חיובי N מאפשר N ליום, 5N לשבוע, 20N לחודש. ערכים לא-ריקים שגויים חוזרים לחלונות הישנים של 1000 ליום, 5000 לשבוע, 20000 לחודש. | | `MAX_BODY_SIZE_BYTES` | `10485760` (10 MB) | `src/shared/middleware/bodySizeGuard.ts` | גודל גוף הבקשה המרבי המותר. דוחה מטענים (payloads) החורגים ממגבלה זו. | | `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | גופי בקשות בפועל השווים או גדולים מסף זה מקבלים את ה-lease האטומי הכבד לקבלה, המקומי לתהליך, לפני פענוח ה-JSON (נתיב BYTE, כולל `POST /v1/responses`). אותו מנגנון מילוט של מרווח תקין כמו ב-[#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) שבמסלול ה-structure-heavy; עדיין חסום על ידי `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110) כך ש-[#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) לא יחזור. | | `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | תקרה קשיחה של נתיב הצ'אט הנאכפת כנגד בתים שנקראו במהלך קליטה חסומה, כולל בקשות עם `Content-Length` חסר, לא תקין או לא כנה; העודף מקבל `413`. | | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(לא מוגדר — אין תקרת מספר-בקשות)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** תקרת מספר-הבקשות המדורתית הזו מחייבת כעת רק כאשר היא מוגדרת במפורש. כשהיא לא מוגדרת (ברירת המחדל), קבלת צ'אט כבדה נשלטת במקום זאת על ידי `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — תקציב בתים הנגזר אוטומטית שגודלו נקבע מתקרת הזיכרון האמיתית של התהליך ב**תהליך אחד** (ערימת V8 אחת). שתי בקשות `/v1/responses` של ~750k טוקנים החופפות מפילות ערימות של ~12 Gi (#7849) — אזהרת **תקציב-זיכרון**, לא מקסימום מוצר קשיח של 2. תהליך בריא (ערימה מתחת ליחס הנידוף) רשאי לקבל עוד בקשות `/v1/responses` ארוכות במקביל דרך `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. עשרות לקוחות SSE ארוכים (40–50) זה ערימה + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, לא “מקסימום 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` הניתן לניסיון חוזר רק כאשר הערימה **גם** ביחס זה או מעליו; על ערימה בריאה היא מתקבלת במקום זאת דרך healthy-headroom. | | `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`). ללא גבול זה, כל בקשה עמוסה-אבל-עם-ערימה-בריאה עקפה את הקבלה ללא תקרה. ברגע שמספר זה של שכירויות (leases) במקביל פעילות דרך נתיב הערימה הבריאה, בקשות עמוסות נוספות נופלות לאותו נתיב המתנה-חסומה/נידוף המשמש תחת לחץ ערימה אמיתי. `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` | תקרת היסטוריית צ'אט אופציונלית בהצטרפות (opt-in). מושבתת כברירת מחדל: מספר הודעות הוא מדיניות פריסה, לא תכונה אוניברסלית של בקשה, והגבלה כאן דוחה שיחות עם `413` סופני לפני שצנרת הדחיסה יכולה להפוך אותן לניתנות לשירות. גדילת הערימה חסומה על ידי `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` ונידוף לחץ-הערימה. הגדירו ערך חיובי בפריסות עם מגבלות זיכרון הזקוקות לתקרה קשיחה; העודף מקבל אז `413` מובנה מסוג compact-required. | | `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | תקרה קשיחה עבור תגובת upstream לא-זורמת המאוחסנת במלואה בזיכרון. מעבר לכך קורא ה-upstream מבוטל והבקשה נכשלת במהירות במקום להגדיל מחרוזת בלתי חסומה עד שהערימה מוצתה. | | `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | מספר הבייטים המרבי בקו (wire) המועבר מכותרות התגובה של ה-upstream. כאשר חורגים מהתקציב, כותרות בעדיפות נמוכה (למשל, `x-codex-*` מותאמים אישית, `x-oai-request-id`) מושמטות כדי להישאר במגבלות הכותרות הנפוצות של reverse proxy. הגדירו ערך גבוה יותר כדי להעביר יותר מטא-דאטה מה-upstream, על חשבון כותרות תגובה גדולות יותר. | | `CORS_ORIGIN` | _(לא מוגדר)_ | `src/server/cors/origins.ts` | רשימת היתרים מדור ישן של CORS למקור יחיד. העדיפו `CORS_ALLOWED_ORIGINS` בפריסות חדשות. CORS מיועד רק ללקוחות API בדפדפן ממקורות חיצוניים (cross-origin); כתיבות מאומתות בלוח הבקרה משתמשות במקום זאת בבקשות same-origin בתוספת הגנת CSRF הקשורה לסשן. | | `CORS_ALLOWED_ORIGINS` | _(לא מוגדר)_ | `src/server/cors/origins.ts` | רשימת היתרים של CORS מופרדת בפסיקים. לא נשלח wildcard אלא אם `CORS_ALLOW_ALL=true` מוגדר במפורש. | | `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | דלת מילוט לפיתוח בלבד, להחזרת כל `Origin` של דפדפן כמו שהוא. אין להפעיל בפריסות משותפות או בסביבות ייצור. | | `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | כינוי מדור ישן. מתג לוח הבקרה שלו (דריסה בבסיס הנתונים) נקרא לפני ערך הסביבה הזה; `false`, `0`, `no` או `off` בכל אחד מהם מכבים את בדיקות ה-host באותה צורה שבה `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` עושה זאת, גם כאשר מתג לוח הבקרה של אותו דגל נשמר כבוי; ערכים אחרים משאירים את השומר לשני הדגלים שלמטה. | | `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | מכבה את בדיקות ה-host של שומר כתובות ה-URL היוצאות, כולל חסימת ה-cloud-metadata (כל 169.254.0.0/16, ‏metadata.google.internal), בנתיבי הספקים הפועלים לפי מצב השומר: אימות URL, גילוי מודלים, כתובות base URL של צמתי ספקים (כולל צמתי rerank מרוחקים), ובדיקת ה-proxy-fallback, בין נתיבים יוצאים נוספים הסמוכים לספקים כגון שליפת תמונות/מדיה מרוחקת. הוא גם מאפשר יעדי webhook פרטיים, למעט נקודות קצה של cloud-metadata/link-local, שנשארות חסומות גם כשדגל זה מופעל. בקשות צ'אט הנשלחות דרך `BaseExecutor.execute()` שומרות על בדיקת ה-cloud-metadata שלהן. ספקים מקומיים עובדים עם ברירות המחדל: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (ברירת מחדל `true`) כבר מאפשר כתובות URL מקומיות ו-LAN בנתיבי האימות, הגילוי וצמתי הספקים; בדיקת ה-proxy-fallback ויעדי ה-webhook הפרטיים מתייעצים רק עם דגל זה וחוסמים hosts מקומיים/LAN כשהוא כבוי. דורס את `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. ערך שנשמר ממתג לוח הבקרה גובר על משתנה זה. | | `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | מאפשר כתובות URL של ספקים בכתובות מקומיות/פרטיות (127.0.0.1, ‏localhost, ‏LAN, טווחים פרטיים) עבור אימות ספקים, גילוי מודלים, צ'אט, ושאר הנתיבים היוצאים הסמוכים לספקים שמצב השומר שולט בהם. **ברירת מחדל `true`** (עדיפות למקומי): השומר חוסם אז נקודות קצה של cloud-metadata — כל 169.254.0.0/16 בתוספת שמות ה-host הידועים של ה-metadata (metadata.google.internal, ‏metadata.goog, ‏Alibaba/Azure/Oracle IMDS, ‏fd00:ec2::254). הגדירו `false` למצב ציבורי-בלבד, שחוסם גם hosts פרטיים ו-loopback. השומר בודק את שם ה-host או את ה-IP המילולי כפי שכתוב, לפני כל חיפוש DNS; במצב ציבורי-בלבד, עטיפת ה-safe-fetch פותרת בנוסף את שם ה-host ומסרבת לכל תשובה פרטית. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` מכבה בדיקות אלה בנתיבים הרשומים בשורתו. ספקים מקומיים מובנים, כגון LM Studio, ‏Ollama, ‏vLLM, ‏Llamafile ו-Triton, מדלגים על כל בדיקות ה-host עבור אימות מפתח וצ'אט. ערך שנשמר ממתג לוח הבקרה גובר על משתנה זה. (#5066) | | `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | מאפשר לנתיבי `/v1/audio/*` (תמלולים, דיבור, תרגומים) להשתמש בצומת ספק תואם-OpenAI המאוחסן מחוץ ל-localhost. כבוי כברירת מחדל — ניתוב אודיו ל-host מרוחק משנה את זהות ה-egress וחייב להיות החלטה מפורשת של המפעיל. צמתים מסוג loopback/פרטיים (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` (ולשלב ה-rerank של ה-loopback במנוע הזיכרון) להשתמש בצומת ספק תואם-OpenAI המאוחסן מחוץ ל-localhost — מכונת LAN או peer ב-Tailscale שמריץ TEI, ‏Infinity, ‏vLLM וכדומה. כבוי כברירת מחדל — ניתוב ל-host מרוחק משנה את זהות ה-egress וחייב להיות החלטה מפורשת של המפעיל. צמתי loopback (localhost, ‏127.0.0.1, ‏172.16-31.x) מותרים תמיד ואינם מושפעים. כתובת ה-base URL של צומת מרוחק חייבת גם לעבור את מדיניות כתובות ה-URL היוצאות של הספקים (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). | | `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(ריק)_ | `src/shared/network/localNodeHosts.ts` | שמות מארחים (מופרדים בפסיקים או ברווחים) שניתוב provider-node מתייחס אליהם כמקומיים — בדרך כלל שם שירות ה-Docker/Compose של reranker, TEI או סיידקאר אודיו ברשת ה-Docker של OmniRoute עצמה (`http://reranker:8080/v1`), כך שהצומת אינו זקוק לכתובת IP של קונטיינר המקודדת באופן קשיח. מארחים הרשומים זכאים ל-`/v1/rerank`, ל-`/v1/audio/*` ולבדיקת התקינות המקומית מבלי להפעיל את `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` עבור כל צומת מרוחק, והם נקראים ישירות — לעולם לא דרך `HTTP(S)_PROXY` או דרך פרוקסי מוצמד של חיבור. הם עדיין שולחים את מפתח ה-API של החיבור. מתקבלים רק שמות בעלי תווית בודדת ושמות `.internal`/`.local`; שמות FQDN ציבוריים, ליטרלים של IP ושמות של cloud-metadata מוזנחים עם אזהרה. (#14635) | | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | כאשר OIDC מופעל, השביתו את ההתחברות באמצעות סיסמה כך שמשתמשים יוכלו להתאמת רק דרך OIDC Single Sign-On. הכינוי החשוף `OIDC_DISABLE_PASSWORD_LOGIN` מתקבל אף הוא; דגל התכונה (Feature Flag) בעל אותו מפתח ב-Dashboard גובר. (#10889) | | `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | כינוי חשוף של `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). | ### רשימת בדיקה להקשחה ```bash # מינימום אבטחה לסביבת ייצור: AUTH_COOKIE_SECURE=true # דורש HTTPS REQUIRE_API_KEY=true # אימות של כל קריאות הפרוקסי ALLOW_API_KEY_REVEAL=false # לעולם לא לחשוף מפתחות בממשק המשתמש CORS_ALLOWED_ORIGINS=https://your.domain.com MAX_BODY_SIZE_BYTES=5242880 # מגבלה של 5 MB ``` --- ## 5. סינון קלט והגנה על מידע המאפשר זיהוי אישי (PII) OmniRoute מספקת הגנה דו-שכבתית: סריקת הזרקות בצד הבקשה והסרת מידע המאפשר זיהוי אישי (PII) בצד התגובה. > **⚠️ מגבלות:** אמצעי הגנה אלה מבוססים על זיהוי היוריסטי במתכונת _המאמץ המיטבי_, ואינם מהווים חומת אש מלאה מפני הזרקת הנחיות או מערכת DLP למידע המאפשר זיהוי אישי (PII). הם עלולים להפיק תוצאות חיוביות שגויות (למשל, סימון הנחיות תמימות של דמויות או משחקי תפקידים) ותוצאות שליליות שגויות (למשל, דפוסי leetspeak, ריווח או דפוסים שאינם באנגלית). הם אינם מספיקים לבדם לצורכי תאימות. כווננו את המצבים ובדקו אותם מול התעבורה שלכם לפני שתסתמכו עליהם. ### צד הבקשה: הגנה מפני הזרקת הנחיות | משתנה | ברירת מחדל | קובץ מקור | תיאור | | --------------------------------- | ------------ | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | הפעלת סריקה של הודעות נכנסות לאיתור דפוסי הזרקת הנחיות. | | `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | מדיניות הזרקה: `warn` = רישום ביומן בלבד, `block` = דחיית הבקשה עם 400. המצב הישן `redact` **אינו** מסיר טקסט של הזרקה; השתמשו ב-`PII_REDACTION_ENABLED` לשכתוב מידע המאפשר זיהוי אישי בבקשה. | | `INJECTION_GUARD_MODE` | _(לא מוגדר)_ | `src/middleware/promptInjectionGuard.ts` | כינוי ישן עבור `INPUT_SANITIZER_MODE` — אותה התנהגות. | | `INPUT_SANITIZER_BLOCK_THRESHOLD` | `high` | `src/shared/utils/injectionSeverity.ts` | רמת החומרה המינימלית ש-`MODE=block` דוחה: `high` (ברירת המחדל), `medium` או `low`. דפוסים ברמת `medium` מיועדים לתצפית בלבד, אלא אם הסף מונמך. | | `INJECTION_GUARD_BLOCK_THRESHOLD` | _(לא מוגדר)_ | `src/shared/utils/injectionSeverity.ts` | כינוי ישן עבור `INPUT_SANITIZER_BLOCK_THRESHOLD` — אותה התנהגות. | | `PII_REDACTION_ENABLED` | `false` | `src/lib/guardrails/piiMasker.ts` | כאשר הערך הוא `true`, מידע המאפשר זיהוי אישי בבקשות נכנסות מושחר (ללא תלות במצב ההזרקה). | | `CREDENTIAL_REDACTION_ENABLED` | `false` | `src/lib/guardrails/credentialMasker.ts` | השחרת דפוסים מוכרים של מפתחות API ואסימונים סודיים במטעני הבקשה והתגובה. דורש הפעלה מפורשת; מקביל ל-`PII_REDACTION_ENABLED`. | ### צד התגובה: מסנן מידע המאפשר זיהוי אישי (PII) | משתנה | ברירת מחדל | קובץ מקור | תיאור | | -------------------------------- | ---------- | ------------------------- | ------------------------------------------------------------------------------------------------ | | `PII_RESPONSE_SANITIZATION` | `false` | `src/lib/piiSanitizer.ts` | סריקת תגובות LLM לאיתור מידע המאפשר זיהוי אישי שדלף לפני החזרתן ללקוח. | | `PII_RESPONSE_SANITIZATION_MODE` | `redact` | `src/lib/piiSanitizer.ts` | `redact` = מיסוך מידע המאפשר זיהוי אישי, `warn` = רישום ביומן בלבד, `block` = השמטת התגובה כולה. | ### מסנן הקשר לנתיבים מבוססי אסימון של VS Code | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------------------- | ---------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `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` (חסימת הזרקות + השחרת מידע המאפשר זיהוי אישי בבקשות ובתגובות; המצבים בלתי תלויים) | | **ניטור בלבד** | `INPUT_SANITIZER_ENABLED=true`, `INPUT_SANITIZER_MODE=warn` — מתבצע רישום ביומן, אך לעולם אין חסימה | | **שימוש אישי** | השאירו הכול מושבת — אפס תקורה | --- ## 6. מדיניות כלים וניתוב | Variable | Default | Source File | Description | | ----------------------------------------------------------- | ---------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | שולט בגישה לקריאת כלים/פונקציות של LLM. `allowlist` = רק הכלים הרשומים, `denylist` = הכול מלבד הרשומים, `disabled` = ללא הגבלות. | | `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | נתיב לקובץ JSON של כללי מניפולציית payload (שינויי upstream לפי מודל/פרוטוקול). | | `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | מרווח טעינה מחדש (ב-ms) עבור טעינה חמה של קובץ כללי ה-payload. מינימום `1000`. | | `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | הצטרפות (opt-in): ניתוב מזהי מודלים חשופים מסוג `claude-*` מלקוחות Claude Code דרך חשבון ה-OAuth של Claude Code במקום לדרוש קידומת ספק. קידומות ספק מפורשות עדיין גוברות. ניתן להגדרה גם באמצעות מתג בדשבורד בעמוד הספק של Claude. | | `OMNIROUTE_REDACT_THINKING` | `true` | `open-sse/executors/base/redactThinkingBeta.ts` | הגדר `false` כדי למנוע מ-OmniRoute להוסיף בעצמו את ה-beta של Anthropic `redact-thinking-2026-02-12` (בלוקי thinking ריקים עם חתימה בלבד). בקשות עם `thinking.display: "summarized"` מדלגות עליו בכל מקרה; redact beta שנמשא וניתן על ידי הלקוח או opt-in תואם-CC של `requestDefaults.redactThinking` שומרים אותו. בקשות Claude OAuth שומרות את ה-beta (הוא חלק מטביעת ה-OAuth של Claude Code) אלא אם דגל התכונה `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` | תקרת מקביליות לכל מודל עבור קומבואים מסוג round-robin (#9100). הסמפור של קומבו ה-round-robin הוגבל קשיחות ל-3 בקשות במקביל לכל מודל ללא אפשרות עקיפה, מה שהעמיד בתור תעבורה במקביליות גבוהה יותר מאחורי תקרה זו. מאומת ל-`>= 1`, מוגבל ל-`<= 32`. | | `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | opt-in מסוכן שמדלג על הבדיקה המקומית של OmniRoute לחלון ההקשר / מקסימום טוקני קלט עבור בקשות ישירות למודל בודד. ספקי ה-upstream עדיין אוכפים את המגבלות בפועל שלהם; דחיסת הפרומפט ותקרת טוקני הפלט של המודל עצמו נשארות פעילות. סדר הקדימות האפקטיבי הוא דריסת Feature Flags DB > משתנה סביבה > ברירת מחדל; לא נדרשת הפעלה מחדש. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(לא מוגדר)_ | `open-sse/services/selfHostedEntry.ts` | מסמך YAML מוטבע של `providers:` (RIC-738, D4). כשמוגדר (עם או בלי בלוק `strategy:`), הנתיב `/v1/chat/completions` מופנה לכניסה המאוחדת התואמת-OpenAI המארחת-עצמית במקום לצנרת הענן. לא מוגדר (ברירת המחדל): הנתיב עובר ישירות לצנרת הענן הקיימת. ראה `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. | | `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(לא מוגדר)_ | `open-sse/services/selfHostedEntry.ts` | נתיב לקובץ YAML המכיל את אותו מסמך `providers:` כמו `OMNIROUTE_SELF_HOSTED_PROVIDERS`, עבור פריסות שמעדיפות קובץ על פני משתנה סביבה מוטבע. כל אחד מהשניים מפעיל את הכניסה המארחת-עצמית. | | `OMNIROUTE_SELF_HOSTED_API_KEY` | _(לא מוגדר — נתיב פתוח)_ | `open-sse/services/selfHostedEntry.ts` | מפתח API משותף אופציונלי עבור הכניסה המאוחדת המארחת-עצמית (שלד D5, שמור למערכת מכסות לכל-מפתח). כשמוגדר, בקשות חייבות לכלול `Authorization: Bearer `. לא מוגדר: הנתיב פתוח, בהתאמה לדפוס הספק המקומי המארח-העצמי הקיים (פריסת loopback/רשת מהימנה). | | `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(לא מוגדר)_ | `open-sse/services/routingStrategies.ts` | מסמך YAML מוטבע מסוג `strategy:` עבור מנוע הניתוב הדטרמיניסטי (M2/RIC-740, D3) — רשימה שחורה/רשימה לבנה, מפסק-cooldown, עדיפות-עלות, מודע-שהייה, שרשרת fallback. עוקף בלוק `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`, עבור פריסות המעדיפות קובץ על פני משתנה סביבה מוטבע. | | `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(לא מוגדר)_ | `open-sse/services/conversationTracker.ts` | הגדר `1` כדי להפסיק לאסוף היסטוריית שיחות. `resolveConversationId()` מחזירה תוצאה לא-מנוטרת לפני שהיא קוראת מ-SQLite או מנתחת היסטוריית הודעות, וגם מזהי session שסופקו על ידי הלקוח מכוסים. טיפול ב-routing-session אינו משתנה ורשומות קיימות אינן נמחקות. מיועד לפריסות שאינן משתמשות בתצוגת השיחות של לוח הבקרה ורוצות שטבלת התורים תפסיק לגדול. | | `OMNIROUTE_NADIR_API_KEY` | _(לא מוגדר)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | מפתח API עבור אסטרטגיית נתב ה-auto-combo האופציונלית `nadir`, בשימוש כאשר `config.nadir.apiKey` של הקומבו עצמו אינו מוגדר. אופציונלי: קריאות ללא מפתח מגיעות לדרגה האנונימית של Nadir, שמוגבלת בקצב לפי IP ולכן אינה שמישה מאחורי שער משותף. רגיש; עדיף להשתמש בשדה לכל קומבו כאשר קומבואים משתמשים בחשבונות שונים. | | `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | כתובת ה-origin הבסיסית של ה-API להחלטות של Nadir, בשימוש כאשר `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`: השבוע מסתיים באיפוס השבועי המוקדם ביותר מבין חיבורי ה-upstream שהמפתח יכול להגיע אליהם, או שהוא 7 ימים גולשים כשאין ידוע. `calendar`: השבוע המקומי מיום שני 00:00 עד יום שני הבא 00:00, זהה לכל מפתח. `calendar` מומלץ כאשר מאגר אחד של חשבונות upstream משותף למפתחות רבים עם תקציב פרטני לכל אחד. ערכים לא חוקיים חוזרים ל-`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`. ספק עם מגבלה ידועה/פרואקטיבית (`grok-cli` 200, `nvidia` 1536) עדיין מחיל את התקרה שלו — זה רק מזיז את תקרת ברירת המחדל. | | `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(מופעל)_ | `open-sse/executors/syntxChat.ts` | קריאת כלים מדומה-פרומפט של SYNTX.ai: לא מוגדר או `1`/`true`/`on`/`yes` מזריק את קטלוג הכלים המקומי לתוך הפרומפט; כל ערך אחר (למשל `0`) מדלג על הזרקה זו. | --- ## 7. כתובות URL וסנכרון ענן | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | כתובת ה-URL בצד השרת, המשמשת משימות סנכרון פנימיות לקריאה אל `/api/sync/cloud`. יש להשאיר אותה ככתובת URL של loopback/קונטיינר, גם כאשר היישום נגיש לציבור דרך פרוקסי. | | `CLOUD_URL` | _(ריק)_ | `src/lib/cloudSync.ts` | כתובת ה-URL של נקודת הקצה לממסר הענן (תכונת פרימיום). | | `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | פסק הזמן של HTTP עבור בקשות סנכרון ענן. | | `OMNIROUTE_BUILD_PROFILE` | `full` | תצורת הבנייה של Webpack | פרופיל זמן בנייה (יש להגדיר ל-`minimal` כדי להחריג פיזית מודולים בעלי הרשאות מהחבילה). | | `OMNIROUTE_STANDALONE_DIR` | _.build/ פלט עצמאי_ | `scripts/build/colocate-standalone.mjs` | דריסת זמן בנייה עבור ספריית הפלט העצמאית שבה משתמש שלב המיקום המשותף שלאחר הבנייה. זו אינה הגדרת זמן ריצה. | | `OMNIROUTE_CLOUD_SYNC_SECRET` | _(ריק)_ | `src/lib/cloudSync.ts` | סוד משותף המשמש לאימות חתימת HMAC-SHA256 של תגובות סנכרון הענן. | | `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | יש להגדיר ל-`true` כדי לאפשר לנקודת הקצה של סנכרון הענן לדרוס פרטי גישה מקומיים. ברירת המחדל היא `false`. | | `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | יש להגדיר ל-`true` כדי לדחות תגובת סנכרון ענן שאינה חתומה כאשר לא מוגדר סוד מקומי (#13679). חתימה שקיימת תמיד מאומתת — ותמיד נדחית כאשר `OMNIROUTE_CLOUD_SYNC_SECRET` אינו מוגדר — ללא קשר לדגל זה. ברירת המחדל משתנה לאכיפה ב-v3.9. | | `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | יש להגדיר ל-`true` כדי לחזור להתנהגות החד-שלבית "ייבוא הכול" של v3.8.5 ללא אישור המשתמש. | | `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, לוח המחוונים, סנכרון | כתובת ה-URL הפונה לציבור עבור OAuth redirect_uri, קישורים בלוח המחוונים וכתובות URL ציבוריות שנוצרות. יש להגדיר אותה לכתובת ה-URL הציבורית היציבה כאשר קריאות חוזרות של OAuth או קישורי דפדפן שנוצרו חייבים להשתמש במארח reverse-proxy קנוני. | | `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` | פורט חלופי בצד הלקוח עבור כתובות URL לתצוגה כאשר לא ידוע מקור (SSR/בדיקות); נקרא לפני `PORT`. | | `OMNIROUTE_PUBLIC_BASE_URL` | _(לא מוגדר)_ | פותר המקור הציבורי, כתובות URL של תמונות | מקור OmniRoute הפונה לדפדפן ובעדיפות הגבוהה ביותר, המשמש ליצירת כתובות URL ציבוריות ולאימות מקור הדפדפן מחוץ ללוח הבקרה. הגדירו זאת כאשר OpenWebUI או ממסר אחר ניגשים אל OmniRoute באמצעות כתובת URL פנימית, אך הדפדפן של המשתמש חייב למשוך מדיה שנוצרה ממקור ברשת LAN, ממנהרה או ממקור ציבורי. **אין** לכלול `/v1`. | | `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(לא מוגדר)_ | `open-sse/config/providerPluginManifestUrl.ts` | כתובת URL מוחלטת של מניפסט תוסף הספק, המפורסמת ללקוחות sidecar. כאשר אינה מוגדרת, OmniRoute גוזר את `/api/v1/provider-plugin-manifest` ממקור הבקשה או מ-HOST/PORT. | | `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | הפרוטוקול המשמש בעת גזירת כתובת ה-URL של מניפסט תוסף הספק מ-HOST/PORT ללא מקור בקשה. יש להגדיר ל-`https` מאחורי proxy ציבורי שמסיים TLS, כאשר לא הוגדר `OMNIROUTE_PROVIDER_MANIFEST_URL` מפורש. | | `OMNIROUTE_TRUST_PROXY` | _(לא מוגדר)_ | `src/server/origin/publicOrigin.ts` | מצב אמון אופציונלי עבור כותרות מקור ציבורי שהועברו. לא מוגדר = אין לתת אמון ב-`Forwarded` / `X-Forwarded-*` לצורך החלטות אבטחה. `true` / `loopback` נותן אמון במארח/פרוטוקול שהועברו רק מ-proxy מסוג loopback שסומן באסימון. `private` / `lan` נותן אמון גם בעמיתי proxy ברשת LAN פרטית, ומאפשר לגשר `API_PORT` לשמר את `X-Forwarded-For` של עמית כזה. בסביבת ייצור, עדיף להשתמש ב-`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` | מקור ציבורי המשמש להרכבת כתובות URL לקריאות חוזרות אסינכרוניות. חלופה בעדיפות הנמוכה ביותר עבור קריאות חוזרות של 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` | נקודת קצה למכסת 5 שעות / שבועית / חודשית של ClinePass, המשמשת את דף השימוש. ניתן לדרוס עבור ממסרים / נתוני בדיקה. | | `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, מזהי UUID של בקשה/הפעלה) בבקשות opencode-go/zen אל שירותים במעלה הזרם, כאשר הלקוח לא שלח אותן, כדי ש-Cloudflare ביציאת VPS יקבל אותן (#6210/#5997). מופעל כברירת מחדל מאז #10571; ניתן להשבית באמצעות `false`/`0`/`no`/`off`. | | `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | ה־User-Agent המוגדר כברירת מחדל, המשמש כאשר `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 מסתמכים עליהן). `0`/`false`/`no`/`off` משמר את זהות הרישום/המפעיל ומשמיט ערכים שסופקו על ידי הלקוח. כותרות מותאמות אישית שהוגדרו על ידי המפעיל תמיד גוברות על ערכי הלקוח. | | `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). כאשר הערך אינו מוגדר, נעשה שימוש בברירת המחדל של המסלול החינמי `opencode,opencode-go,opencode-cli`; הערכים `none`/`off`/`false`/`0` משביתים לחלוטין את תגובת השרשרת; רשימה מופרדת בפסיקים מחליפה את הקבוצה. תוכניות בתשלום מקובצות במעלה הזרם לפי חשבון ויכולות להשבית זאת בבטחה (#9611). | | `OMNIROUTE_EGRESS_QUOTA_ROTATION_PROVIDERS` | _(לא מוגדר)_ | `open-sse/config/providerErrorRules.ts` | היקף החלפת נקודת היציאה בעקבות סירוב מכסה. כאשר הערך אינו מוגדר, חבר במאגר מושהה בעקבות 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}`; המערכת מתעלמת מרשומות לא חוקיות. | | `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | כתובת ה־URL של הגדרות Ollama Cloud המשמשת לאיסוף נתוני מכסה. ניתן לדרוס אותה עבור ממסרים / מתקני בדיקה. | | `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 מסוג `__Secure-session` של Ollama Cloud, המשמש לאיסוף נתוני מכסה מדף ההגדרות. רגיש; כאשר מוגדרים חשבונות מרובים, עדיף להשתמש בשדה הייעודי לכל חיבור בלוח המחוונים. | | `OLLAMA_CLOUD_USAGE_COOKIE` | _(לא מוגדר)_ | `open-sse/services/usage.ts` | משתנה סביבה חלופי עבור קובץ ה־Cookie מסוג `__Secure-session` של Ollama Cloud. רגיש; כאשר מוגדרים חשבונות מרובים, עדיף להשתמש בשדה הייעודי לכל חיבור בלוח המחוונים. | | `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(לא מוגדר)_ | `open-sse/services/usage.ts` | משתנה סביבה חלופי לעוגיית `__Secure-session` של Ollama Cloud, שבו נעשה שימוש לפני הכינויים הקצרים יותר. רגיש; כאשר מוגדרים מספר חשבונות, העדיפו את השדה הייעודי לכל חיבור בלוח הבקרה. | | `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/קונטיינר עבור משימות שרת-לשרת. אין להשתמש בערך `Origin` של דפדפן או בשם מארח ציבורי עבור משיכות עצמיות פנימיות הנושאות פרטי גישה. > > כתיבות מאומתות מלוח הבקרה אינן דורשות כתובת URL ציבורית סטטית: לוח הבקרה שולח בקשות לא-בטוחות מאותו מקור עם אסימון CSRF הקשור להפעלה. OmniRoute עדיין מרכזת את אימות המקור הציבורי עבור שילובי דפדפן שאינם מלוח הבקרה: תחילה ניתן אמון במשתני סביבה מפורשים של כתובות URL ציבוריות; המערכת מתעלמת מכותרות `Forwarded` / `X-Forwarded-*` גולמיות, אלא אם `OMNIROUTE_TRUST_PROXY` מופעל ועמית הפרוקסי המיידי מסומן באסימון כמהימן. אין להשתמש בהגדרות CORS כדי לתקן בקשות מאותו מקור של לוח הבקרה; CORS מיועד רק ללקוחות דפדפן ממקור שונה. --- ## 8. פרוקסי יוצא נתב קריאות לספקי ה-LLM ב-upstream דרך פרוקסי HTTP או SOCKS5 לצורך בקרת תעבורה יוצאת, ניתוב גיאוגרפי או הסתרת IP. ברירת המחדל של `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` היא `true`. הגדר אותו ל-`false`, `0`, `no` או `off` כדי לאכוף HTTP/1.1 על ה-dispatchers של Undici ב-`open-sse/utils/proxyDispatcher.ts` וב-`open-sse/utils/proxyFetch.ts`: יציאה ישירה, פרוקסי HTTP(S)/SOCKS, relays, וניסיונות החוזרים שלהם עם socket חדש. פעולה זו שומרת על אימות תעודות TLS, אימות פרוקסי, מגבלות חיבור והגדרות keep-alive. הפעל מחדש את OmniRoute לאחר שינוי הערך, מכיוון שה-dispatchers נשמרים במטמון וה-relay agents נוצרים בעת ההפעלה. מתג זה אינו שולט על TLS fingerprinting של wreq או על transports ייעודיים לספקים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------- | ------------ | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | הפעלת סוכן פרוקסי SOCKS5 עבור קריאות upstream. ביטול באמצעות `false`. | | `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | צד לקוח | מודעות בצד הלקוח לזמינות SOCKS5. | | `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | דגל תכונה המופעל כברירת מחדל (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); עקיפה ממסד הנתונים של לוח הבקרה גוברת). מאגרי פרוקסי ורוטציה לפי חשבון מפסיקים להגיש שוב חבר שכשל זה עתה (בדיקת TCP שנדחתה, או 429 שעבר דרכו) לתקופה המוכפלת בכל חזרה, עד לתקרה. `false` משחזר בחירה רגילה. | | `SELECTOR_CONTROL_ALLOWLIST` | _(לא מוגדר)_ | `src/lib/proxySubscription/selectorGuard.ts` | רשימת היתרים עבור יעדי selector-control של הליבה המקומית מעבר ל-loopback (מארחים או כתובות IP מופרדים בפסיקים/רווחים, `*` פותח LAN/פרטי אך לעולם לא metadata/link-local). Loopback דרך http/https מותר כברירת מחדל. ערך ממסד הנתונים של לוח הבקרה גובר על משתנה זה כאשר הוא מוגדר ואינו ריק. | | `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | תקופת הבסיס (באלפיות שנייה) של ההפרשה עקב 429, מוכפלת בכל חזרה. נקראת פעם אחת בהפעלה. מוגבלת ל-`1000..3600000`; ערך מחוץ לטווח או לא קריא חוזר לברירת המחדל עם אזהרה. | | `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | התקרה (באלפיות שנייה) של ההפרשה עקב 429. נקראת פעם אחת בהפעלה. מוגבלת ל-`1000..3600000`; ערך מחוץ לטווח או לא קריא חוזר לברירת המחדל עם אזהרה. כאשר התקרה נמוכה מהבסיס, היא חוזרת לברירת המחדל. הורדת התקרה גם מקצרת את שכחת הרצף: ערכים נמחקים `2 x max` לאחר תפוגתם. | | `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונה מסוג opt-in (ראה [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); עקיפה ממסד הנתונים של לוח הבקרה גוברת). עבור ספקים שהמכסה שלהם מקובצת לפי כתובת יציאה (egress), דרג חבר במאגר החולק כתובת יציאה שנצפתה של חבר שנדחה לאחרונה ממש מתחת לחברים תקינים. סדר בלבד, לעולם לא הדרה. דורש `PROXY_SKIP_RECENTLY_FAILED`, שמפיק את אות הדחייה שהוא קורא. | | `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | חלון התאוששות (באלפיות שנייה) המגביל התראות webhook חוזרות של `proxy.set_aside` לכל חבר במאגר, כך שפרץ של דחיות שולח אירוע אחד. נקרא בכל שידור אירוע. מוגבל ל-`1000..3600000`; ערך מחוץ לטווח או לא קריא חוזר לברירת המחדל בשקט. | | `HTTP_PROXY` | _(לא מוגדר)_ | תקן Node.js | פרוקסי HTTP עבור קריאות upstream. | | `HTTPS_PROXY` | _(לא מוגדר)_ | תקן Node.js | פרוקסי HTTPS עבור קריאות upstream. | | `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 | שמות מארח/כתובות IP מופרדים בפסיקים לעקיפת הפרוקסי. | | `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | מספר הסוקטים הבו-זמניים המרבי לכל dispatcher של פרוקסי HTTP/SOCKS שמור ב-cache. זרמי SSE ארוכי-חיים כמו Codex `/v1/responses` זקוקים ליותר מחיבור אחד כאשר מספר בקשות חולקות את אותו פרוקסי ברמת החשבון. ערכים מעל `256` נחתכים. | | `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | זמן קצוב ל-handshake של SOCKS5 (connect) במילישניות. העלו אותו כאשר מארח gateway ביתי יחיד נתקל בריבוי בקשות גבוה (למשל 100 בקשות בו-זמניות) — ה-handshake האמיתי עלול לחרוג מ-10 שניות תחת מאגר רווי גם כשהפרוקסי נגיש, מה שאחרת יצוף כ-`[Proxy Fast-Fail] Proxy unreachable` שגוי. נחתך ב-`120000`. | | `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | כאשר `false` (ברירת מחדל), בקשה שהפרוקסי שהוקצה לה נכשל בפענוח **נדחית (fail-closed)** במקום לחזור לחיבור ישיר — מונע דליפות של IP אמיתי. הגדירו `true` כדי לשחזר את ה-fallback הישן של DIRECT. | | `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | זיוף טביעת אצבע TLS באמצעות wreq-js (מחקה את Chrome 124). מתמודד עם חסימות JA3/JA4. | | `TLS_FINGERPRINT_PROVIDERS` | _(לא מוגדר)_ | `open-sse/utils/proxyFetch.ts` | רשימת היתרים (allowlist) של ספקים מופרדת בפסיקים עבור ניתוב ה-TLS החדש דרך פרוקסי (`open-sse/utils/proxyFetch.ts`). TLS ישיר שומר על התנהגותו הישנה כשלא מוגדר; רק ספקים אלה מנותבים דרך גשר טביעת האצבע של Chrome-124. Groq (`api.groq.com`) מוחרג גם כשרשימת ההיתרים אינה מוגדרת, מכיוון ש-JA3 של Chrome מפעיל את Cloudflare 1010 בעוד 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` (ברירת מחדל). בקשות נכשלות באופן מוחלט כשהפרוקסי אינו זמין במקום לדלוף דרך חיבור ישיר. | | **Legacy / פיתוח — לאפשר fallback ישיר** | `PROXY_FAIL_OPEN=true`. משחזר את ההתנהגות שלפני ההקשחה: חיבור ישיר משמש כאשר פענוח הפרוקסי נכשל. | > **הערה (עקיפת תיקוף NVIDIA — #3226):** נקודת הקצה לתיקוף מפתח ה-API של NVIDIA > נתקעת כשמנותבת דרך ה-fetch הגלובלי עם הפרוקסי/TLS patched (undici dispatcher ← 504). > `src/lib/providers/validation.ts::directHttpsRequest()` עוקף בכוונה את > ה-patch של הפרוקסי עבור קריאת התיקוף היחידה הזו באמצעות `safeOutboundFetch({ bypassProxyPatch: true })`. > זהו חריג מתועד ומוגבל-היקף — הוא **לא** משפיע על יציאת צ'אט/שימוש. > העקיפה מוצמדת להיקף על ידי `tests/unit/proxy-bypass-scope-guard-3226.test.ts`. --- ## 9. שילוב כלי CLI שולט כיצד OmniRoute מגלה ומפעיל תהליכי sidecar של 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`). חייב להיות נתיב מוחלט ונמצא בתוך תיקיית הבית של התהליך — **או**, בקונטיינר, נתיב שמחובר ב-bind mount (כך פועל `/host-home`). כל ערך אחר יחזור לתיקיית הבית. | | `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | לאפשר ל-OmniRoute לכתוב קובצי קונפיגורציה של CLI (רענון טוקנים, נתוני סשן). הגדירו כ-`false` כדי שכל ניסיון כתיבה לקונפיגורציית CLI ייכשל עם שגיאה מפורשת של "writes disabled". | | `CLI_CLAUDE_BIN` | `claude` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Claude CLI. | | `CLI_CODEX_BIN` | `codex` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Codex CLI. | | `CLI_DROID_BIN` | `droid` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Droid CLI. | | `CLI_OPENCLAW_BIN` | `openclaw` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של OpenClaw CLI. | | `CLI_CURSOR_BIN` | `agent`, ואז `cursor` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של הסוכן של Cursor. ללא הגדרה זו, הזיהוי מנסה קודם את `agent` ואז חוזר ל-`cursor`. | | `CLI_CLINE_BIN` | `cline` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Cline CLI. | | `CLI_5DIVE_BIN` | `5dive` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של 5dive CLI. | | `CLI_5DIVE_STATE_DIR` | `/var/lib/5dive` | `src/shared/services/cliRuntime.ts` | תיקיית מצב המערכת של 5dive (פרופילי אימות בבעלות root); משקפת את ברירת המחדל של STATE_DIR של 5dive עצמו. | | `CLI_CONTINUE_BIN` | `cn` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Continue CLI. | | `CLI_QODER_BIN` | `qodercli` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Qoder CLI. | | `CLI_QWEN_BIN` | `qwen` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Qwen Code CLI. | | `CLI_AIDER_BIN` | `aider` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Aider CLI. | | `CLI_GOOSE_BIN` | `goose` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Goose CLI. | | `CLI_GEMINI_BIN` | `gemini` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Google Gemini CLI — לזיהוי ובדיקות תקינות בצד השרת בלבד; `omniroute run gemini` מזהה את קובץ ההרצה `gemini` מתוך ה-PATH של המערכת. | | `CLI_KILO_BIN` | `kilocode` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של Kilo Code CLI. | | `CLI_OPENCODE_BIN` | `opencode` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ ההרצה של OpenCode CLI. | | `CLI_HERMES_BIN` | `hermes` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Hermes. משותף לשני ערכי הקטלוג (`hermes` ו-`hermes-agent`). | | `CLI_FORGE_BIN` | `forge` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של ForgeCode CLI. | | `CLI_JCODE_BIN` | `jcode` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של jcode CLI. | | `CLI_DEEPSEEK_TUI_BIN` | `deepseek-tui` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של DeepSeek TUI. | | `CLI_CODEWHALE_BIN` | `codewhale` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של CodeWhale CLI. | | `CLI_SMELT_BIN` | `smelt` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Smelt CLI. | | `CLI_PI_BIN` | `pi` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Pi (pi-coding-agent). | | `CLI_CRUSH_BIN` | `crush` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Crush CLI. | | `CLI_OMP_BIN` | `omp` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של סוכן Oh My Pi (`omp`). | | `CLI_LETTA_BIN` | `letta` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Letta CLI. | | `CLI_PRIME_AGENT_BIN` | `prime-agent` | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Prime Agent (Prime Intellect). | | `CLI_WINDSURF_BIN` | _(אין)_ | `src/shared/services/cliRuntime.ts` | נתיב מותאם אישית לקובץ הבינארי של Windsurf. Windsurf מסופק **ללא פקודת ברירת מחדל** — זיהוי הבינארי נשאר מושבת עד שמשתנה זה מוגדר. | | `CLI_DEVIN_BIN` | `devin` | `open-sse/executors/devin-cli.ts` | נתיב מותאם אישית לקובץ הבינארי של Devin CLI (v3.8.0). משמש את ה-executor של Windsurf/Devin. | | `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | ה-`ide_version` של Devin Desktop. ערכי עקיפה חייבים להיות בפורמט `x.y.z`; ערכים לא תקינים חוזרים לברירת המחדל המאומתת. | | `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | ה-`extension_version` של Codeium/language-server המצורף בחבילה, נבדל מ-`ide_version` של Desktop. ערכי עקיפה חייבים להיות בפורמט `x.y.z`; ערכים לא תקינים משתמשים בברירת המחדל המצורפת. | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | עקיפת Devin CLI עבור ה-bridge האג'נטי בלבד. ה-executor מקבל רק את ה-upstream המקומי של ACP stdio. | | `DEVIN_AGENTIC_HOME` | _(נדרש)_ | `open-sse/executors/devin-cli-agentic.ts` | ספריית home מבודדת ומוחלטת עבור תת-התהליך האג'נטי של Devin; נתיבי ה-bridge המקובלים הם `/home/bridge` ונתיבי `.sandbox` ייעודיים למשימה (ב-Windows, `C:\...\.sandbox\...`). | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | משך הזמן המרבי לתור ACP אחד של Devin לפני שה-bridge מסיים את תת-התהליך ומחזיר timeout מפורש. | | `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | כינוי המודל הראשי של Claude Code עבור ה-bridge המבודד. ה-harness החי מחליף את הדוגמה במודל שמוחזר מחשבון ה-Devin הנוכחי. | | `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי bridge מבודד המשמש כאשר Claude Code מבקש את ברירת המחדל Sonnet שלו. | | `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי bridge מבודד המשמש כאשר Claude Code מבקש את ברירת המחדל Opus שלו. | | `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי bridge מבודד המשמש כאשר Claude Code מבקש את ברירת המחדל Haiku שלו. | | `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי bridge מבודד המשמש עבור ה-subagents של Claude Code. | | `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | דריסה אופציונלית של ה-API לניהול מושבים (seat-management) של 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. | | `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | דריסה של מזהה הספק הנשלח לשרת האפליקציה. | | `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` | קובץ ההפעלה של Node המשמש לאירוח שרת האפליקציה ZCode. | | `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | סקריפט הכניסה של שרת האפליקציה המשמש לאירוח שרת ZCode. | | `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | פסק זמן להפעלה (באלפיות שנייה) לפני שהפעלת שרת האפליקציה ZCode נחשבת לכושלת. | | `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | פסק זמן RPC לכל בקשה (באלפיות שנייה) עבור קריאה לשרת האפליקציה ZCode. | | `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | המשך המרבי (באלפיות שנייה) של תור ZCode אחד לפני שהמפקח מסיים אותו בפסק זמן. | | `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | מרווח התשאול (באלפיות שנייה) להשלמת תור ZCode. | | `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | תיקיית הבית של Hermes Agent שבה OmniRoute קורא/כותב את תצורת Hermes CLI. תואם למשתנה הסביבה שמתקין ה-PowerShell של Hermes מגדיר ב-Windows (`%LOCALAPPDATA%\hermes`). | ### סנכרון אוטומטי של פרופילי CLI דגלי התכונה הבאים הם אופציונליים (opt-in) וכבויים כברירת מחדל. ניתן גם להפעיל ולכבות אותם מלוח הבקרה של CLI Code. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------- | ---------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_AUTO_SYNC_CODEX_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | לאחר סנכרון מודלים של ספק, משכתב אוטומטית את קובצי הפרופיל `~/.codex/*.config.toml` מהקטלוג החי. דורש `CLI_ALLOW_CONFIG_WRITES`; לעולם אינו משנה את תצורת Codex הפעילה/ברירת המחדל, את האימות, את הגדרות Codex-lb או את בחירת הספק. | | `OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | לאחר סנכרון מודלים של ספק, משכתב אוטומטית את קובצי פרופיל Claude Code תחת `~/.claude/profiles//settings.json` מהקטלוג החי. דורש `CLI_ALLOW_CONFIG_WRITES`; לעולם אינו משנה את תצורת Claude הפעילה/ברירת המחדל, את האימות או את בחירת הספק. | ### דוגמת Docker ```bash # עיגון הקבצים הבינאריים של המארח לתוך הקונטיינר וציון מיקומם עבור OmniRoute: CLI_EXTRA_PATHS=/host-cli/bin CLI_CONFIG_HOME=/host-home CLI_ALLOW_CONFIG_WRITES=true CLI_CLAUDE_BIN=/host-cli/bin/claude ``` `CLI_CONFIG_HOME` משפיע רק כאשר הנתיב מחובר בפועל (bind-mounted) מהמארח — שלבו אותו עם mounts כמו `~/.codex:/host-home/.codex:rw` (ראו את פרופיל ה-`host` ב-`docker-compose.yml`). נתיב שאינו בתוך תיקיית הבית של משתמש הקונטיינר ואינו bind mount — מתעלמים ממנו, מכיוון שכתיבה אליו תימחק כאשר הקונטיינר נוצר מחדש. האימג' רץ כ-`USER node`, ולכן `/root` שאינו מחובר **אינו** override חוקי. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------- | ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CONTAINER` | _(אוטומטי)_ | `src/shared/utils/containerEnv.ts` | אילוץ זיהוי קונטיינר מופעל (`1`/`true`) או כבוי (`0`/`false`). נדרש רק ב-runtime-ים שהזיהוי האוטומטי מפספס. | | `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | אפשר כתיבת קונפיגורציה של כלי CLI לנתיב קונטיינר לא מחובר בכל מקרה. המקבילה ב-CLI היא `--allow-container-write`. | | `DOCKER_UPDATE_TRIGGER_FILE` | לא מוגדר | `src/lib/system/autoUpdate.ts` | אימג' Docker בלבד: כפתור **Update Now** בדשבורד כותב בקשת JSON לקובץ זה (חייב להיות בתוך `DATA_DIR`) עבור watcher בצד המארח שימשוך (pull) וייצור מחדש את הקונטיינר. ראו את [מדריך Docker](../guides/DOCKER_GUIDE.md#dashboard-updates-in-docker). | ### עזרים של בינארי ה-CLI (`omniroute`) משתנים אלה מכווננים את התנהגותו של בינארי ה-CLI `omniroute` עצמו (לא את זיהוי ה-sidecar שלעיל). | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------- | --------------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_LANG` | _(מערכת)_ | `bin/cli/i18n.mjs` | אילוץ שפת פלט של ה-CLI. locale בפורמט BCP-47 (למשל `en`, `pt-BR`). דורס את משתני הסביבה של ה-locale של המערכת (LC_ALL, LC_MESSAGES). | | `OMNIROUTE_SHOW_LOG` | _(לא מוגדר)_ | `bin/cli/runtime/processSupervisor.mjs` | הגדירו ל-`1` כדי להעביר את stdout/stderr של השרת לטרמינל במצב supervised. מקביל לדגל `--log` ב-`omniroute serve`. | | `OMNIROUTE_CLI_TOKEN` | _(לא מוגדר)_ | `bin/cli/api.mjs` | טוקן אימות מכונה המוזרק כ-header בשם `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` | תקופת חסד באלפיות שנייה לפני kill כפוי של תהליך-בן של CLI שקיבל signal. | | `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` | timeout של HTTP לכל ניסיון (באלפיות שנייה) עבור בקשות CLI → שרת. | | `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | הזמן המרבי (באלפיות שנייה) שה-CLI ממתין לנקודת הקצה של בריאות השרת לפני הדפסת אזהרת timeout. שימושי להפעלות קרות איטיות (למשל 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 בלבד — הוא לעולם אינו מגיע לסורק התוספים בצד השרת, שמוצבע על ידי `OMNIROUTE_PLUGINS_DIR` (סעיף 2). | | `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(לא מוגדר)_ | `bin/omniroute.mjs` | השתיקת הודעת העדכון של ה-CLI ביציאה מהתהליך כאשר מוגדר לכל ערך לא ריק. ההודעה נשארת מושבתת באופן עצמאי ב-CI, במצב שקט ובמצבי פלט שאינם טקסט. | | `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(נגזר)_ | `bin/cli/commands/doctor.mjs` | כתובת ה-liveness שנבדקת על ידי `omniroute doctor`. אפשרות תכנותית `livenessUrl` גוברת; אחרת ערך זה משמש כפי שהוא (verbatim). כאשר לא מוגדר, ה-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` | מודל fallback גלובלי לבדיקות חיבור של ספקים ב-CLI. סדר העדיפות הוא: מודל החיבור המוגדר, דריסת מודל ספציפית לספק, ערך זה, ואז מודל הבדיקה המובנה של הספק. | --- ## 10. אינטגרציות פנימיות של Agent ו-MCP | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_BASE_URL` | זיהוי אוטומטי | `open-sse/mcp-server/server.ts` | כתובת URL מפורשת שדרכה כלי MCP/A2A מגיעים ל-OmniRoute. עוקפת את זיהוי ה-localhost האוטומטי. | | `OMNIROUTE_API_KEY` | _(לא מוגדר)_ | מודולי MCP/A2A | מפתח API עבור קריאות כלי MCP פנימיים וקריאות מיומנויות (skills) של A2A. | | `OMNIROUTE_API_KEY_ID` | _(לא מוגדר)_ | `open-sse/mcp-server/audit.ts` | מזהה מפתח (Key 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` | מתג-כיבוי לתכונת התצפיתיות memory-hits של A2A. הגדירו `0` כדי לדלג לחלוטין על בדיקת שליפת הזיכרון עבור משימה; כל ערך אחר (כולל לא מוגדר) משאיר אותה מופעלת. | | `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | מפעיל את נקודת הקצה recorded-triage של Issue Agent במצב לא-מקוון/מקומי. השאירו מושבת אלא אם אתם מריצים במפורש זרימות עבודה מקומיות של recorded-triage. | | `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(לא מוגדר)_ | `src/lib/issueAgent/execution.ts` | פסק-זמן (באלפיות שנייה) עבור ריצת recorded-triage בודדת של Issue Agent. מוגבל למקסימום פנימי; חוזר לברירת המחדל המובנית כאשר אינו מוגדר או אינו חוקי. | | `OMNIROUTE_CONTEXT` | _(הקשר פעיל)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | הקשר/פרופיל של מצב מרוחק ב-CLI עבור פקודות `omniroute`; עוקף את ההקשר הפעיל במאגר ההקשרים המקומי. שקול ל-`--context `. | | `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | משבית את הרכיב האופציונלי `keytar` של צרור המפתחות של מערכת ההפעלה עבור אישורי ההקשר של ה-CLI. כאשר מופעל, האישורים נשארים ב-`config.json` עם הרשאות `0600` וה-CLI מציג אזהרת נסיגה חד-פעמית; מיועד להפעלה מכוונת במצב headless/קונטיינר. | | `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | אוכף בקרת גישה מבוססת-scopes על קריאות כלי MCP. | | `OMNIROUTE_MCP_SCOPES` | _(הכל)_ | `open-sse/mcp-server/server.ts` | scopes מופרדים בפסיקים: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | דוחס את תיאורי כלי ה-MCP לפני סריאליזציה של ה-manifest. ערכי הפעלה: `1`, `true`, `on`. | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | אלגוריתם/פרופיל הדחיסה. ערכי השבתה: `0`, `false`, `off`. | | `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | תקציב זמן (באלפיות שנייה) לביטול קריאות ניהול פנימיות של שרת ה-MCP (health, resilience, combos, quota, usage). | | `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | תקציב ביטול (ms) עבור קפיצות MCP שממתינות לספק (`route_request`, `web_search`, `web_fetch`). | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | מספר מקסימלי של מופעי אינדקס corpus מקומי המאוחסנים במטמון בזיכרון (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 נשלפים אחד בכל פעם כדי להימנע מפיק עומס כלפי ה-upstream. `0` מבטל זאת (מקבילי). | | `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | מרווח מינימלי (ms) בין שליפות מכסה רצופות מ-upstream בנתיב 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), הנדגם בכל שליפת מכסה שמורה מ-upstream. ברירת מחדל 120; מוגבל ל-`0..60000`; `0` מסיר רק את ה-jitter. הגדירו `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS=0` כדי להשבית את כל מנגנון ה-throttle. Jitter אינו מבטיח מניעת חסימות מ-upstream. | | `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | השהיה (ms) לפני רענון מגבלות הספק לאחר אירוע שימוש אמיתי, כדי לתת ל-API המכסות של ה-upstream זמן לרשום את הצריכה. | | `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` | ריווח מינימלי במילישניות בין שליחות generate של 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` | backoff בסיסי במילישניות לאחר תגובות 408 חולפות של Adobe; משולב עם ריווח שליחות על פני חמישה ניסיונות לכל היותר. | | `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | משבית את כל שירותי הרקע (סנכרון, תמחור, רענון מודלים). שימושי עבור 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` | _לא מוגדר_ (מושבת) | `open-sse/services/reasoningTokenBuffer.ts` | רצפת מינימום בהפעלה מפורשת (opt-in) לתקציבי פלט של מודלי חשיבה: `max_tokens` של הקורא בטווח `[256, floor)` מועלה לרצפה (מוגבל על ידי תקרת הפלט של המודל). לא מוגדר = תקציבי לקוח לעולם אינם מוגדלים (#9507). | | `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _לא מוגדר_ (מושבת) | `open-sse/services/learnedReasoningEffortCaps.ts` | בהפעלה מפורשת (opt-in), מזהי ספקים מופרדים בפסיקים (או `*`): כאשר שגיאת 400/422 עבור `reasoning_effort` אינה מציינת קבוצת ערכים מקובלת, בצע ניסיון חוזר פעם אחת ברמה אחת נמוכה יותר (לעולם לא מתחת ל-`low`) ולמד את הרמה ההיא רק אם הבדיקה נענתה (#14895). | | `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | ביטוי cron ‏(UTC) עבור משימת ייצוא יומן הקריאות המרוקנת כל יעד ייצוא-יומנים מופעל. מומלץ `*/5 * * * *` בעת ייצוא גופים. | | `OMNIROUTE_LOG_EXPORT_RUN_TIMEOUT_MS` | `900000` | `src/lib/logExport/childRunner.ts` | זמן קצוב מוחלט (wall-clock) לתהליך-בן עבור כל יעד, במילישניות. חריגה מהזמן הקצוב נרשמת ככישלון והורגת את התהליך מבלי לקדם את האצווה שטרם אושרה. ערכים לא חוקיים/לא חיוביים/לא שלמים משתמשים בברירת המחדל. | | `OMNIROUTE_LOG_EXPORT_CHILD_MAX_OLD_SPACE_MB` | `1024` | `src/lib/logExport/childRunner.ts` | מגבלת ה-old-space של V8 עבור תהליך-בן הייצוא של Node, ב-MB (לא סך כל ה-RSS). ברירת המחדל משאירה מרווח עבור 500 שורות של ארטיפקטים מוגבלים עם גופים; אצוות גדולות מדי עלולות עדיין למצות את ערמת התהליך-בן. כישלון ממליץ להקטין את גודל האצווה או להעלות מגבלה זו. ערכים לא חוקיים/לא חיוביים/לא שלמים משתמשים בברירת המחדל. ייצואי 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` | זמן קצוב לכל משימה, במילישניות. עובדים שחרגו מהזמן הקצוב מופסקים והבקשה נכשלת באופן פתוח (fail-open) ללא שינוי. | | `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` | מגבלת ה-heap מדור-ישן (old-generation) של V8 ב-MB עבור כל compression worker, בכל המצבים (רצפה `128`). משימה שחורגת ממנה נכשלת-פתוח (uncompressed) במקום להגדיל את ה-heap של ה-gateway. | | `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | מתג ראשי של circuit-breaker לכל-מנוע ב-pipeline הערוך T02. **הצטרפות אקטיבית (כבוי כברירת מחדל)** — כשהוא דולק, מנוע שזורק שגיאות שוב ושוב על פני בקשות מדולג (fail-open) למשך תקופת צינון; כבוי = התנהגות מדור-קודם זהה בית-לבית. | | `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | מספר כשלונות רצופים חוצי-בקשות לפני שה-breaker של מנוע נפתח. | | `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | אלפיות השנייה שבהן מנוע פתוח נשאר מדולג לפני בדיקת half-open. | | `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | מדרון משוב-שליפה של CCR מסוג T08/H8: כל שליפה קודמת של בלוק מאוחסן מעלה את ה-`minChars` האפקטיבי שלו באופן לינארי (תוכן שנשלף לעיתים תכופות נדחס פחות; `>=3` שליפות = לעולם לא נדחס). `1` משבית את המדרון (דילוג בינארי רק בסף). | | `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | אחסון בלוקים עמיד (durable) של CCR (#9061). מגבה את האחסון בזיכרון עם SQLite כך שבלוק שורד פינוי LRU, את ה-TTL, אתחול מחדש, או שליפה שמגיעה למופע אחר. הגדירו `false` כדי לשמור בלוקים בזיכרון בלבד. בלוקים מעל 512KB וסביבות ריצה בענן נשארים בזיכרון בלבד בכל מקרה. | | `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | מתג ראשי של הקפאת prefix הנצפת-בשימוש מסוג T08/H5. **הצטרפות אקטיבית (כבוי כברירת מחדל)** — כשהוא דולק, system prompt שנצפה `>=` מהסף נחשב ל-prefix יציב הניתן לשמירה ב-cache ונשמר מדחיסה גם עבור ספקים שההיוריסטיקה הסטטית של ה-cache מפספסת (ההקפאה רק _משמרת_, לעולם לא משנה). | | `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | מספר תצפיות על system prompt לפני שהוא נחשב ל-prefix יציב קפוא. | | `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` מזריק בבקשה הראשונה. | | `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | מאפשר למתרגם הבקשות של Antigravity לדלג על אימות חתימת-הבקשה הקפדני של ה-CLI כאשר ה-upstream מסרב לחתימות אמיתיות (מצב debug / 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 Bridge (פנימי) | Variable | Default | Source File | Description | | ------------------- | ------------- | ------------------------------- | ------------------------------------------------ | | `OMNIROUTE_SERVER` | זיהוי אוטומטי | `src/lib/oauth/config/index.ts` | כתובת URL של השרת עבור גשר האימות CLI↔OmniRoute. | | `OMNIROUTE_TOKEN` | _(לא מוגדר)_ | `src/lib/oauth/config/index.ts` | טוקן אימות עבור גשר ה-CLI. | | `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | מזהה משתמש עבור סשנים של גשר ה-CLI. | | `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 אישורים מובנים עבור **פיתוח ב-localhost**. עבור פריסות מרוחקות, רשמו אישורים משלכם בקונסולת המפתחים של כל ספק. | משתנה | ספק | הערות | | ------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLAUDE_OAUTH_CLIENT_ID` | Claude Code (Anthropic) | לקוח ציבורי — אין צורך בסוד. | | `CLAUDE_CODE_REDIRECT_URI` | Claude Code | עקיפת URI להפניה חוזרת. ברירת מחדל: `https://platform.claude.com/oauth/code/callback` | | `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | לקוח ציבורי. | | `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | דורש `_SECRET` תואם. | | `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — | | `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | לקוח ציבורי. | | `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | עקיפה אופציונלית של מזהה הלקוח הציבורי של device-flow של Muse CLI. השאירו לא מוגדר כדי להשתמש בלקוח הציבורי המובנה. | | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | דורש `_SECRET` תואם. | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | לקוח ציבורי. | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | עקיפה אופציונלית של מזהה לקוח ה-OAuth של GitHub Enterprise Copilot. כאשר לא מוגדר, חוזר לברירת המחדל הציבורית של `GITHUB_OAUTH_CLIENT_ID`. | | `COPILOT_INTEGRATION_ID` | GitHub Copilot | עקיפה אופציונלית של מזהה האינטגרציה של לקוח GitHub Copilot הנשלח בכותרות `Copilot-Integration-Id` ו-`Editor-Plugin-Version`. ברירת מחדל: `copilot-developer-cli`. | | `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | מפתח API חלופי המשמש את `open-sse/executors/devin-cli.ts` כאשר לא זמין אישור לכל חיבור בנפרד. אופציונלי. | | `CLI_DEVIN_BIN` | Devin CLI (v3.8) | נתיב מותאם אישית לקובץ הבינארי של Devin CLI (`devin`). נקבע על ידי `open-sse/executors/devin-cli.ts`. | | `GITLAB_DUO_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | מזהה לקוח OAuth עבור GitLab Duo. רשמו אפליקציה בכתובת `https://gitlab.com/-/profile/applications` עם URI הפניה חוזרת `/callback` והיקפים `api, read_user, openid, profile, email`. חוזר ל-`GITLAB_OAUTH_CLIENT_ID`. | | `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | סוד לקוח OAuth עבור GitLab Duo. אופציונלי — זרימת PKCE אינה דורשת סוד. חוזר ל-`GITLAB_OAUTH_CLIENT_SECRET`. | | `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | עקיפת כתובת ה-URL הבסיסית של GitLab (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 | מזהה סביבת העבודה (Workspace) עבור Qoder CLI. | | `OMNIROUTE_QODER_WORKSPACE` | Qoder | כינוי (alias) עבור `QODER_CLI_WORKSPACE`. | | `QODER_CLI_CONFIG_DIR` | Qoder | עקיפת תיקיית ההגדרות של Qoder CLI (סשן PAT מבודד, מונע דריסה של התחברות בדפדפן). | | `QODER_CLI_MAX_CONCURRENCY` | Qoder | מספר הריצות המרבי של qodercli במקביל (הפעלות print או פרומפטים של ACP); בקשות נוספות ממתינות בתור בסדר FIFO. לא מוגדר (ברירת מחדל) = ללא מגבלה. | | `QODER_CLI_QUEUE_TIMEOUT_MS` | Qoder | כמה זמן בקשת Qoder ממתינה לחריץ (slot) פנוי של 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: המועד האחרון שבו qodercli צריך לענות על `initialize` של ACP. ברירת מחדל `60000`. | | `QODER_CLI_ACP_MAX_SESSIONS_PER_PROCESS` | Qoder | תעבורת ACP: מחזור תהליך ה-qodercli המתמשך לאחר מספר סשנים זה. ברירת מחדל `500`. | | `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | טוקן `tk` של ה-Frontend לשליחה כ-`validated` ב-`/api/chat`. נדרש כאשר Blackbox אוכף התאמת טוקנים; אחרת OmniRoute חוזר ל-UUID אקראי. ראו issue #2252. | | `VISION_BRIDGE_BASE_URL` | מנגנון ההגנה Vision Bridge | כתובת בסיס תואמת-OpenAI עבור קריאות vision-bridge שאינן Anthropic. ברירת המחדל היא משתנה הסביבה המדור הקודם של כתובת OpenAI או api.openai.com. הפנו אותה ל-self-loop של ה-`/v1` של OmniRoute או לכל נקודת קצה תואמת-OpenAI (Gemini OpenAI-compat, OpenRouter). תקלה #2232. כאשר כתובת ה-URL היא ה-`/v1` של OmniRoute עצמו, בקשת המשנה describe שולחת `x-omniroute-admission-bypass: internal` ומבצעת אימות עם אישור ה-self-loop שנקבע (ערך ה-sentinel `sk_omniroute` במצב מקומי, או `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) כך שפריסות עם `REQUIRE_API_KEY=true` יפעלו. | | `VISION_BRIDGE_API_KEY` | מנגנון ההגנה Vision Bridge | מפתח API עבור כתובת ה-URL שלמעלה. עוקף את משתני הסביבה של OpenAI / Google לפי ספק עבור קריאות vision-bridge שאינן Anthropic. מודלים של Anthropic שומרים על נתיב מפתח ה-Anthropic הייעודי שלהם. תקלה #2232. | | `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | מנגנון ההגנה Vision Bridge | משך הזמן שבו תוצאת ניתוב של "אין מועמד שמיש" נשמרת במטמון, באלפיות שנייה (ברירת מחדל `30000`). ערכים לא חוקיים או שליליים חוזרים לברירת המחדל; `0` משבית את המטמון השלילי. מקור: `src/lib/guardrails/visionBridgeRouter.ts`. | > [!WARNING] > > 1. עברו אל [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) > 2. צרו OAuth 2.0 Client ID (סוג: "Web application") > 3. הוסיפו את כתובת ה-URL של השרת שלכם כ-Authorized redirect URI > 4. החליפו את ערכי האישורים בקובץ `.env`. --- ## 12. דריסות User-Agent לפי ספק דרוס את כותרת ה-`User-Agent` הנשלחת לכל ספק upstream. הערך נקבע באופן דינמי בזמן ריצה על ידי מחלקת הבסיס של ה-executor: ``` 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` כדי להעביר שמות כלים של harness צד שלישי כפי שהם ל-Anthropic בשני הנתיבים המופנים ל-Anthropic (OAuth מקורי ו-CLIProxyAPI). כברירת מחדל, ה-executor מעניק באופן דטרמיניסטי כינויים לשמות כלים שאינם של Claude Code (מיפוי קנוני של Claude Code כאשר קיים כזה, אחרת PascalCase) והופך אותם בתגובה באמצעות `_toolNameMap`, כך ש-harnesses עם כלים ב-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 עם קוד-מכשיר, וכן את ברירת המחדל של ה-User-Agent של Grok CLI עבור הסקה וסנכרון מודלים. מקבל SemVer עם מטא-דאטה אופציונלי של prerelease/build, עד 128 תווים לאחר חיתוך רווחים מסביב. ערכים לא מוגדרים, ריקים, לא תקינים או המכילים מעברי שורה ישתמשו ב-pin המגיע עם החבילה. דריסת ה-User-Agent המלאה הקיימת להסקה שומרת על קדימות. | | `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | דריסת גרסת Claude Code המפורסמת באופן בלתי תלוי ב-`CLAUDE_USER_AGENT`. Anthropic מגבילה מודלים מסוימים לפי ערך זה (#12417). | | `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | דריסת הסיומת בת 3 התווים ש-OmniRoute מוסיף ל-`cc_version=` בבלוק החיוב של Claude. יש לעדכן יחד עם `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_USER_AGENT` | `antigravity/2.0.1 darwin/arm64` | כאשר Antigravity IDE מתעדכן | | `KIRO_USER_AGENT` | `AWS-SDK-JS/3.0.0 kiro-ide/1.0.0` | כאשר Kiro IDE מתעדכן | | `KIRO_OAUTH_CLIENT_ID` | `kiro-cli` | דריסת ה-`clientId` של קוד-המכשיר החברתי (social) של Kiro (מזהה ציבורי) | | `KIRO_VERIFY_FULL_CRC` | `false` | הצטרפות מפורשת (opt-in): אימות CRC מלא לכל פריים בזרם האירועים של Kiro (דיבוג של זרמים פגומים) | | `KIRO_CREDIT_PRICE_USD` | `0.02` | דולר ארה"ב לכל קרדיט 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`. ה-executor בונה באופן דינמי את שם משתנה הסביבה. --- ## 13. תאימות טביעת אצבע של CLI כאשר תכונה זו מופעלת, OmniRoute מסדר מחדש כותרות HTTP ושדות בגוף JSON כדי להתאים במדויק לחתימה של כלי CLI רשמיים. כך מצטמצם הסיכון לסימון החשבון, תוך שימור כתובת ה-IP של ה-proxy שלכם. **מקור:** `open-sse/config/cliFingerprints.ts`, `open-sse/executors/base.ts` ### לפי ספק | משתנה | הפעלה | השפעה | | ------------------------ | ----- | ------------------------------------- | | `CLI_COMPAT_CODEX` | `=1` | מחקה את חתימת הבקשה של Codex CLI | | `CLI_COMPAT_CLAUDE` | `=1` | מחקה את חתימת הבקשה של Claude Code | | `CLI_COMPAT_GITHUB` | `=1` | מחקה את חתימת הבקשה של GitHub Copilot | | `CLI_COMPAT_ANTIGRAVITY` | `=1` | מחקה את חתימת הבקשה של Antigravity | | `CLI_COMPAT_CURSOR` | `=1` | מחקה את חתימת הבקשה של Cursor | | `CLI_COMPAT_KIMI_CODING` | `=1` | מחקה את חתימת הבקשה של Kimi Coding | | `CLI_COMPAT_KILOCODE` | `=1` | מחקה את חתימת הבקשה של Kilo Code | | `CLI_COMPAT_CLINE` | `=1` | מחקה את חתימת הבקשה של Cline | ### גלובלי | משתנה | הפעלה | השפעה | | ---------------- | ----- | --------------------------------------------------- | | `CLI_COMPAT_ALL` | `=1` | מפעיל תאימות טביעת אצבע עבור **כל** הספקים בבת אחת. | ### דריסות זהות עבור Kimi Coding CLI | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------- | --------------------- | ---------------------------------------- | ---------------------------------------------------- | | `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | דורס את גרסת Kimi CLI הנשלחת במהלך קריאות OAuth/API. | | `KIMI_CODING_DEVICE_ID` | _(ברירת מחדל שנלכדה)_ | `src/lib/oauth/providers/kimi-coding.ts` | דורס את מזהה מכשיר Kimi שנלכד ומשמש בכותרות הלקוח. | > [!NOTE] > תכונה זו פועלת לצד דריסות User-Agent (§12). מערכת טביעת האצבע מטפלת בסדר הכותרות ובסדר השדות בגוף, בעוד שדריסות User-Agent מטפלות במחרוזת ה-UA הספציפית. ניתן להפעיל כל אחת מהן בנפרד. --- ## 14. ספקי מפתחות API מפתחות API עבור ספקים המשתמשים באימות ישיר. **הגדרה מועדפת:** Dashboard → Providers → Add API Key. הגדרה באמצעות משתני סביבה היא חלופה עבור פריסות Docker או פריסות ללא ממשק משתמש. תבנית מזוהה: `{PROVIDER_ID}_API_KEY` | משתנה | ספק | | ------------------ | --------------------------------------------- | | `DEEPSEEK_API_KEY` | DeepSeek | | `NVIDIA_API_KEY` | NVIDIA NIM | | `JINA_AI_API_KEY` | Jina AI (Foundation API + חלופת Reader) | | `JINA_API_KEY` | Jina AI (כינוי עבור `JINA_AI_API_KEY`) | | `GEMINI_API_KEY` | Gemini (Google AI Studio) הטמעות + חלופת צ'אט | | `GOOGLE_API_KEY` | Gemini (כינוי עבור `GEMINI_API_KEY`) | > [!NOTE] > רשומות `${PROVIDER}_API_KEY` סטטיות עבור Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius ו-Qianfan הוסרו ב-v3.8.0 משום שסביבת הריצה אינה קוראת אותן עוד — ספקים אלה מסתמכים באופן בלעדי על Dashboard / `data/provider-credentials.json` / מסד הנתונים המוצפן. ראו את הסעיף _ביקורת: משתנים שהוסרו / שאינם בשימוש_ בתחתית מסמך זה לקבלת נתיב ההעברה. > [!TIP] > מפתחות שמוגדרים דרך Dashboard נשמרים באופן מוצפן ב-SQLite ומקבלים עדיפות על פני משתני סביבה. > > **Jina:** הטמעות `jina-ai/…`, דירוג מחדש, סיווג, פילוח ו-`jina-search` **אינם** מחייבים מפתח סביבת אשכול כאשר קיים חיבור `jina-ai` (או `jina-reader` משותף) ב-Dashboard — `getProviderCredentials` פועל בשיטת מילוי-תחילה. נעשה שימוש ב-`JINA_AI_API_KEY` / `JINA_API_KEY` רק כאשר לא קיים מפתח Dashboard שמיש. יומני הקריאות מייחסים את חלופת הסביבה כ-`connection_id=env:JINA_AI_API_KEY`. כרטיס Reader (`jina-reader`, `r.jina.ai`) לעולם אינו משרת את `/v1/embeddings` או את `/v1/rerank`. > > **Gemini:** `gemini/gemini-embedding-2` (הכינוי `google/gemini-embedding-2`) משתמש תחילה בחיבור `gemini` שב-Dashboard. נעשה שימוש ב-`GEMINI_API_KEY` / `GOOGLE_API_KEY` רק כאשר לא קיים מפתח Dashboard שמיש. יומני הקריאות מייחסים את חלופת הסביבה כ-`connection_id=env:GEMINI_API_KEY`. תעבורה מולטימודלית מקורית משתמשת ב-`x-goog-api-key` מול `:embedContent` / `:batchEmbedContents` — N פריטי `input` של OpenAI הופכים ל-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, default: 1260000; 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 עבור קריאות לספק ה-upstream. | | `STREAM_IDLE_TIMEOUT_MS` | `600000` | שקט מקסימלי בין בתים גולמיים מה-upstream לפני ביטול. מודלים מסוג extended-thinking כמעט לא משתתקים ליותר מ-90 שניות. | | `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | משך החיים הכולל המקסימלי של זרם SSE פעיל; לעולם לא מתאפס בעקבות בתים מה-upstream ואינו תלוי ב-`REQUEST_TIMEOUT_MS`. נגזר מ-`timeoutMs` הגדול ביותר למודל ברישום (1200000, Codex) בתוספת מרווח של 60000, כך שמודל שמורשה לרוץ את מלוא התקציב שלו לעולם לא ייהרג באמצע תשובה. הגדר `0` כדי להשבית. | | `OMNIROUTE_SSE_COMMENTS` | _(מושבת)_ | האם OmniRoute רשאי לפלוט שורות הערה מסוג SSE `:` (למשל ה-heartbeat `: keepalive` וה-trailers של מטא-דאטה `x-omniroute-*`). מושבת כברירת מחדל (#10524) מכיוון שלקוחות תואמי-OpenAI מחמירים מבצעים JSON.parse על כל שורת SSE וקורסים על הערות `:`; heartbeats מסוג `data:` אינם מושפעים. הגדר `on`/`true`/`1`/`yes` כדי לחזור למצב מופעל. בשימוש על ידי `open-sse/utils/sseHeartbeat.ts`. | | `SSE_COALESCE_MS` | `0` (כבוי) | הצטרפות אופציונלית: מיזוג אירועי `content_block_delta` רצופים של Claude (אותו אינדקס בלוק ואותו סוג delta) הנשלחים ללקוחות Claude, עם ריקון לפחות כל N מילישניות. ללא אובדן; `signature_delta` ואירועי גבול לעולם לא ממוזגים. חל על כל סוג delta אלא אם מוגדר משתנה ייעודי לסוג למטה. בשימוש על ידי `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 מילישניות לכתיבה אחת ללקוח. הפריים הראשון והפריימים הסופיים (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) לעולם לא מתעכבים; כשהאיגוד פעיל, ITL מודד פערים בין אצוות. בשימוש על ידי `open-sse/utils/sseOutputSink.ts`. | | `SSE_STALL_WATCHDOG` | `timer` | מימוש watchdog לתקיעת בתים עבור תגובות מוזרמות. `timer` מחמש מחדש טיימר אחד לכל chunk מה-upstream (מופעל בדיוק בתקציב התקיעה); `interval` שומר בדיקה אחת לכל זרם במחזור `clamp(budget/4, 1s, 5s)`, כך שתקיעה מופעלת בתוך תקציב + מחזור. בשימוש על ידי `open-sse/utils/streamStallWatchdog.ts`. | | `STREAM_READINESS_TIMEOUT_MS` | `80000` | הזמן לקבלת אירוע ה-SSE הראשון שאינו ping. יורש את `REQUEST_TIMEOUT_MS` כשהוא מוגדר. | | `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | חלון מוכנות אדפטיבי מקסימלי לאירוע הראשון עבור בקשות סטרימינג גדולות, עתירות כלים, או בעלות רמת reasoning גבוהה. | | `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | מתג-כיבוי עבור ההיוריסטיקה של `/goal`. הגדר `false`/`0`/`off` כדי להשבית את הזיהוי לחלוטין — פסקי זמן של מוכנות ושחזור זרם לעולם לא מוגברים על ידי גוף הבקשה או הכותרות, דבר המפחית האצת פסק זמן בשליטת הלקוח. | | `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | חלון מוכנות מקסימלי לאירוע הראשון עבור ריצות agent מזוהות של `/goal` או בקשות שנכפו באמצעות `x-omniroute-agent-goal`. | | `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | הפעל שחזור זרם מוקדם באופן אוטומטי עבור ריצות agent מזוהות של `/goal`. הגדר `false`/`0`/`off` כדי להשבית את ההצטרפות הייעודית ל-goal. זה יכול רק להוסיף שחזור מעל ברירת המחדל של המפעיל — הוא לעולם לא עוקף בחירת opt-out מפורשת דרך `STREAM_RECOVERY_ENABLED` או הגדרות ה-DB. | | `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | הסר אירועי SSE לא-סטנדרטיים מסוג `codex.*` (למשל `codex.rate_limits`) ששוברים את `responses.stream()` של ה-SDK של OpenAI עם שגיאת 502. ברירת מחדל מופעל (#11014). הגדר `0`/`false`/`no`/`off` כדי להעביר אותם הלאה. | | `OMNIROUTE_CODEX_APPSERVER_WS` | _(לא מוגדר)_ | תעבורת app-server אופציונלית של Codex. נקודת קצה WebSocket (`ws://`/`wss://`) של sidecar מקומי `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 מוטבע המוצג ל-app-server. עקיפה לכל חיבור: `providerSpecificData.codexAppServerToken`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(לא מוגדר)_ | נתיב לקובץ המכיל את טוקן ה-capability של ה-app-server (מתוך `codex app-server --ws-token-file`). בשימוש כאשר `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` אינו מוגדר. עקיפה לכל חיבור: `providerSpecificData.codexAppServerTokenFile`. | | `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | תיקיית העבודה שבה רץ ה-turn של ה-app-server. עקיפה לכל חיבור: `providerSpecificData.codexAppServerCwd`. | | `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(לא מוגדר)_ | מדיניות האישור המועברת ל-turn של ה-app-server (למשל `never`, `on-request`). עקיפה לכל חיבור: `providerSpecificData.codexAppServerApprovalPolicy`. | | `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(לא מוגדר)_ | מדיניות ה-sandbox המועברת ל-turn של ה-app-server (למשל `read-only`, `workspace-write`, `danger-full-access`). כאשר אינה מוגדרת, ברירת המחדל של ה-executor היא `workspace-write` (מוקשח; בעבר `danger-full-access`). עקיפה לכל חיבור: `providerSpecificData.codexAppServerSandbox`. | | `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | אישור אוטומטי של בקשות האישור של ה-app-server עצמו (הרצת פקודות/קבצים/הרשאות על המארח). כבוי כברירת מחדל — בקשות נדחות אוטומטית; קריאות הכלים של ה-harness אינן מושפעות (הן עוברות דרך ה-passthrough הנפרד `item/tool/call`). מקבל `true`/`1`/`yes`. עקיפה לכל חיבור: `providerSpecificData.codexAppServerAutoApprove`. | | `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הזמן לקבלת כותרות התגובה. | | `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | המתנה מרבית לכותרות תגובה בבקשות streaming (ב-ms). `0` משבית תקרה זו; `fetchStartTimeoutCapMs` מפורש של provider גובר. | | `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 שניות) | המתנה מרבית לתחילת תגובה (ב-ms) לכל ניסיון ישיר ללא proxy. ב-timeout מתבצע ניסיון חוזר אחד על socket חדש; הגדר `0` כדי להשבית את הגבול ולשמור על ההתנהגות הקודמת. | | `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 דקות) | רצפת תחילת-תגובה (ב-ms) לניסיונות ישירים ללא proxy שמארח היעד שלהם הוא פרטי/LAN/loopback (למשל `localhost`, `host.docker.internal`, `192.168.x.x`), כך שהפעלה קרה של Ollama מקומי לא תיקטע על ידי ברירת המחדל של 30 השניות לעיל. פועל כרצפה: ההמתנה האפקטיבית היא הגדול מבין ערך זה ו-`OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`; `0` או ערך לא חוקי מסיר את הרצפה המקומית. מארחים מרוחקים אינם מושפעים. | | `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 דקות) | תקרה (ב-ms) לניסיון ה-RETRY על socket חדש לאחר timeout של תחילת תגובה בניסיון ה-pooled לעיל (#13703). חל רק כאשר ה-caller כבר צירף אות deadline משלו (מפל ה-connection/model/provider/`FETCH_TIMEOUT_MS` שנפתר); אות זה הוא הגבול האמיתי והוא מופעל ראשון בנתיב המיועד, כך שזהו backstop נדיב ולא תקרה שטוחה — בלעדיו, ה-retry עשה שימוש חוזר באותו חלון `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` קצר כמו בניסיון ה-pooled והחזיר 504 למודלי reasoning בריאים עם TTFB איטי. לעולם לא מתחת לרצפה השטוחה לעיל; כאשר ה-caller אינו מספק אות deadline כלל, ה-retry שומר על הרצפה השטוחה ללא שינוי. | | `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הזמן לקבלת גוף התגובה המלא. | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | timeout להקמת חיבור TCP. | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | timeout למצב idle של socket keep-alive. | | `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | timeout של proxy טביעת-האצבע TLS (wreq-js). | | `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | מגביל את ה-time-to-first-byte ספציפית על גוף תעבורת טביעת-האצבע TLS של wreq-js; `TLS_CLIENT_TIMEOUT_MS` לבדו אינו יכול לתפוס גוף תקוע מכיוון שהוא נפתר ברגע שהכותרות מגיעות (#12656). timeout מבטל את קורא ה-wreq וחוזר ל-dispatcher הישיר/proxy; `0` משבית את ה-watchdog. | | `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | executor של OpenCode בלבד, ורק כאשר דגל התכונה `OPENCODE_RESPONSES_STALL_ROTATION` דולק (כבוי כברירת מחדל): מגביל את ההמתנה לבייט הראשון בגוף של תשובת Responses מוזרמת לאחר הכותרות שלה (#13484). זרם Responses נפתח עם `response.created`, כך ששקט מעבר לחלון זה הוא קיפאון: החשבון מצונן והבקשה מסתובבת לחשבון הבא פעם אחת; קיפאון שני נכשל במהירות. `0` משבית את המשמר גם כאשר הדגל דולק. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= כבוי) | executor של OpenCode בלבד: מגביל את ההמתנה לכותרות תגובה מה-upstream בקריאת Responses מוזרמת כאשר חשבון נוסף עדיין זמין — בקשה בתור מפסיקה לחכות וממשיכה הלאה במקום להחזיק את חלון הכותרות המלא. רק קריאות Responses מוזרמות מושפעות (זרם ה-Responses נפתח עם `response.created`, כך ששקט שם הוא תור, לא יצירה); chat completions וקריאות לא-מוזרמות אינן נגעות, והחלון רק מקצר את תקרת ה-fetch-start האפקטיבית, לעולם לא מאריך אותה. ערך מומלץ בעת ההפעלה: `30000`. `0` משבית. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | מבצע OpenCode בלבד: כמה פעמים בכל בקשה גבול ההמתנה לכותרות שלעיל רשאי לעבור לחשבון הבא. החשבון האחרון שנותר תמיד שומר את חלון הכותרות המלא. | | `OPENCODE_PARK_AND_RESUME` | `false` | מבצע OpenCode בלבד: החנה את הבקשה עם heartbeat לאחר שגיאות 429 חולפות חוזרות (או סמן עומס-בריכה טרי), ולאחר מכן הפעל מחדש רגל אחת מוגבלת של עד 3 חשבונות ברצף במקום לפרוש את כל הצי (#13924). כבוי כברירת מחדל: כל 429 מעביר לחשבון הבא בדיוק כמו קודם. | | `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | מבצע OpenCode בלבד: כאשר כל חשבון מוכן-ל-cooldown ברגל ההפעלה-מחדש של park-and-resume מושם בצד על ידי זיכרון סירובי ה-proxy, הגש אותם בכל זאת במקום לא להפעיל מחדש דבר (#14851, המשך ל-#14750). כבוי כברירת מחדל: רגל ההפעלה-מחדש ריקה במקרה זה, כמו לפני #14750. | | `STREAM_READINESS_STALL_RETRY` | `false` | צ'אט בסטרימינג בלבד: כאשר גוף ה-upstream הראשון נתקע לפני הפקת אירוע שמיש, בצע ניסיון שני אחד מוגבל דרך אותו נתיב ניתוב עם אותו תקציב מוכנות וללא קנס על החשבון. כבוי כברירת מחדל: גוף ראשון תקוע מכשיל את הבקשה ללא ניסיון חוזר. | | `OPENCODE_POOL_RESELECT` | `false` | מבצע OpenCode בלבד: לאחר 429 מספק המחולק לדליי-egress בחשבון ללא proxy תחת הקשר בריכה סביבתי, בקש ממאגר החיבורים חבר אחר לניסיון הבא במקום לנסות שוב את אותה כתובת egress. מסדר בלבד, לעולם לא מוציא: בריכה מוצה שומרת את ההתנהגות הנוכחית. כבוי כברירת מחדל: כל 429 מעביר לחשבון הבא בדיוק כמו קודם. | | `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(לא מוגדר)_ | מבצע OpenCode בלבד: נתיב דריסה של סמן עומס-הבריכה הנקרא לפני ההחניה (`{since, reason, ttl_s}`, ברירת מחדל `/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 בסיסית עבור שולף מכסת ה-`/usage` של Tavily (מגבלות ספקים); מתעלמים ממנה כאשר היא מצביעה על `api.tavily.com`. כאשר לא מוגדרת, חוזרים לכתובת ה-URL הבסיסית של החיבור. | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | פסק-זמן כולל לבקשת שרת עבור הגשר. | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | הזמן לשליחת כותרות תגובה דרך הגשר. | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | פסק-זמן חוסר-פעילות של keep-alive בגשר. | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | פסק-זמן socket גולמי (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) כדי למנוע התנודדות בין פעיל/שגיאה בלוח הבקרה. חוזר ל-8000ms עבור ערכים לא תקינים (<1000) או לא מספריים. | | `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | פסק-זמן fetch ייעודי לממסר ב-`open-sse/utils/proxyFetch.ts` (#9158). ממסר תקוע חייב להיכשל לפני פסק-הזמן של הלקוח/סוכן (~30s) כדי שהמתקשרים יראו כשל ייעודי לממסר במקום פסק-זמן upstream גנרי. מוגבל ל-`29000` כך שהוא תמיד מופעל ראשון. | | `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | backoff משותף לניסיון חוזר עבור נתיבי הניסיון-החוזר-היחיד direct/relay/proxy ב-`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` (off) | מוסיף את המשפט "You have built-in web search. Answer questions directly using search results." להודעת ה-system של הקורא (`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 (`open-sse/services/obscura.ts`); מזוהה אוטומטית מה-PATH של המערכת כאשר לא מוגדר. | | `OBSCURA_CDP_ENDPOINT` | _(unset)_ | מצביעים על Obscura שכבר רץ (`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` | כתובת בסיס עבור מבצע Kimi Web (kimi.ai הבינלאומי, Connect-RPC) (`kimi-web.ts`); החליפו רק עבור נקודות קצה של מראה/פרוקסי. | | `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | נקודת הקצה המלאה של הצ'אט עבור מבצע Kimi Web (`kimi-web.ts`). | | `OMNIROUTE_LOGIN_BROWSER_PATH` | _(auto-detected)_ | נתיב לקובץ הרצה של Chrome/Edge במערכת עבור התחברות אינטראקטיבית בדפדפן ל-Adobe Firefly (`adobeFireflyBrowserLogin.ts`); דורס את הזיהוי האוטומטי לפי מערכת הפעלה. | | `OMNIROUTE_STANDALONE_DIR` | _פלט ה-standalone של .build/_ | דריסה בזמן בנייה עבור תיקיית הפלט של ה-standalone שצורך שלב שילוב-הקבצים שלאחר הבנייה (`scripts/build/colocate-standalone.mjs`); כלי בנייה, לא זמן ריצה. | ניסיונות יעד של קומבו יורשים את פסק הזמן שנפתר של בקשת ה-upstream (`FETCH_TIMEOUT_MS`, או `REQUEST_TIMEOUT_MS` כאשר הוא מספק את ברירת המחדל של fetch). הגדירו `targetTimeoutMs` בקומבו, בברירות המחדל של הקומבו, או בדריסת ספק רק כדי להאיץ את ה-fallback של הקומבו; ערכים מעל פסק הזמן הנוכחי של ה-upstream נחתכים לפסק הזמן של ה-upstream. `comboTimeoutMs` הוא תקציב שעון-קיר נפרד לכל הקומבו על פני יעדי failover. השאירו אותו לא מוגדר או `0` כדי לשמור על איטרציה בלתי מוגבלת (עצירת-תקיעה קבועה בקוד של 10 דקות ב-`comboPredicates.ts` עדיין חלה). ערך חיובי מחליף את רשת הביטחון הזו עבור הקומבו. שמרו על `comboTimeoutMs` ארוך יותר מ-`targetTimeoutMs` כך של-failover עדיין יישאר זמן אחרי יעד ראשון איטי. ### ספי מפסק המעגל (Circuit Breaker) כוונון מפסק מעגל ברמת הספק. ברירות המחדל משקפות את הערכים המותאמים בקנה מידה שבשימוש מאז 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` | מכפיל ההסלמה המרבי של resetTimeout עבור ספק OAuth. | | `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` | מכפיל ההסלמה המרבי של resetTimeout עבור ספק מפתח API. | | `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 מה-upstream אינו כולל `Retry-After` (#14573). ערכים לא חיוביים או לא מספריים חוזרים לברירת המחדל. | | `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | עומק backoff שבו הספק של pin במטמון ההקשר (context-cache) נחשב לא תקין באופן מתמשך, וה-pin מושמט לצורך failover. | | `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | חלון מניעת ריצוד (anti-flap) ב-ms, הסובל צינונים חולפים קצרים לפני השמטת pin של מטמון ההקשר. | ### תרחישים | תרחיש | תצורה | | ---------------------------------- | --------------------------------------------------- | | **יצירת קוד ממושכת** | `REQUEST_TIMEOUT_MS=900000` (15 דקות) | | **הגבלת משך החיים הכולל של הזרם** | `STREAM_ACTIVE_TIMEOUT_MS=1260000` (21 דקות) | | **כשל מהיר עבור API בסביבת ייצור** | `API_BRIDGE_PROXY_TIMEOUT_MS=10000` | | **מודלים עם חשיבה מורחבת** | `STREAM_IDLE_TIMEOUT_MS=300000` (5 דקות בין מקטעים) | --- ## 16. רישום לוגים מערכת רישום הלוגים כותבת הן ל-stdout והן לקובצי לוג מתחלפים. כל ההגדרות נקראות על-ידי `src/lib/logEnv.ts`. | משתנה | ברירת מחדל | תיאור | | ----------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `APP_LOG_LEVEL` | `info` | רמת הלוג המינימלית: `debug`, `info`, `warn`, `error`. | | `APP_LOG_FORMAT` | `text` | פורמט הפלט: `text` (קריא לבני אדם) או `json` (מובנה). | | `APP_LOG_TO_FILE` | `true` | כתיבת לוגים לקובץ לצד stdout. | | `APP_LOG_FILE_PATH` | `logs/application/app.log` | נתיב קובץ הלוג (יחסית לשורש הפרויקט או ל-`DATA_DIR`). | | `APP_LOG_MAX_FILE_SIZE` | `50M` | גודל הקובץ המרבי לפני תחלופה. ערכים נתמכים: `50M`, `1G`, `512K`, או מספר בתים רגיל. | | `APP_LOG_RETENTION_DAYS` | `7` | מספר הימים לשמירת קובצי לוג יישום שהוחלפו. | | `APP_LOG_MAX_FILES` | `20` | המספר המרבי של גיבויי קובצי לוג שהוחלפו. | | `CALL_LOG_RETENTION_DAYS` | `7` | מספר הימים לשמירת רשומות לוג של בקשות/קריאות במסד הנתונים. | | `CALL_LOG_MAX_ENTRIES` | `10000` | המספר המרבי של רשומות לוג קריאות במאגר שבזיכרון. | | `CALL_LOGS_TABLE_MAX_ROWS` | `100000` | מספר השורות המרבי בטבלת SQLite בשם `call_logs` לפני צמצומה. | | `ENABLE_REQUEST_LOGS` | _(לא מוגדר)_ | כפיית הפעלה או השבתה של רישום בקשות מפורט, תוך עקיפת ההגדרה בלוח הבקרה. | | `MAX_PENDING_REQUEST_AGE_MS` | `3600000` (שעה אחת) | הגיל המרבי של רשומות לוג פעילות ויתומות של בקשות לפני ניקוי מהזיכרון. | | `CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS` | `false` | שמירת מקטעי זרם בתוצרי ה-pipeline כאשר `call_log_pipeline_enabled=true`. דורש הסכמה מפורשת (`true`) — מושבת כברירת מחדל כדי לחסוך מקום בדיסק. | | `CALL_LOG_PIPELINE_MAX_SIZE_KB` | `512` | הגודל המרבי ב-KB של תוצר לוג קריאת pipeline כאשר `call_log_pipeline_enabled=true`. | | `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | מספר השורות המרבי בטבלת SQLite בשם `proxy_logs` לפני צמצומה. | | `PROXY_LOG_INCLUDE_IPS` | `false` | הכללת כתובות IP של הלקוח/היציאה וקידומות חשבון בלוגי המסוף `[ProxyEgress]`. רשומות לוג ה-proxy בלוח הבקרה/מסד הנתונים שומרות את מלוא הפרטים. | | `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | יש להגדיר ל-`"true"` או ל-`"1"` כדי לתעד `first_chunk_ms` (מתחילת השליחה ועד לבית השימושי הראשון בגוף) בשורות לוג ה-proxy. עוטף כל גוף upstream בזרם passthrough עצל ומעדכן את השורה לאחר הגעת הבית; מושבת כברירת מחדל כדי שהתגובות יעברו ללא שינוי. | | `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` | גודל גוף הבקשה/התגובה הכולל (KB), שמעליו הוא מוחלף בסיכום בסיסי במקום בעותק המלא. הגדילו ערך זה אם שיחות סוכנית ארוכות מציגות מציין מיקום במקום ההודעות האמיתיות בלוח הבקרה. | | `CHAT_DEBUG_FILE` | `false` | כאשר הערך הוא true,‏ `serializeArtifactForStorage` מדלגת על קיצור המבוסס על גודל. לניפוי שגיאות בלבד. | --- ## 17. אופטימיזציה של זיכרון | משתנה | ברירת מחדל | תיאור | | ----------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_MEMORY_MB` | _אוטומטי_ (bare metal); **`1024` בתמונת ה-Docker** | **מומלץ** — מגבלת ה-heap של V8 עבור Docker/standalone (ב-MB). כשלא מוגדר, מכויל באופן דינמי (~35% מזיכרון ה-RAM של המערכת, מוגבל לטווח `[512, 4096]`); `512` הוא רק ערך הרצפה כאשר לא ניתן לקרוא את נפח הזיכרון הכולל. ב-`run-standalone.mjs` (ה-CMD של Docker), ערך **מפורש** מוצמד כ-`--max-old-space-size` ו**גובר** על דגל heap מתנגש ב-NODE_OPTIONS (הדגל האחרון של V8 מנצח). `omniroute serve` עדיין מעדיף heap קיים ב-NODE_OPTIONS (#5238). אל תגדירו את שניהם לערכים שונים — התהליך רושם אזהרה (warn) בלוג שמציינת את שני הערכים ואת הערך הזוכה. **תמונת ה-Docker הרשמית תמיד מגדירה `1024`, ולכן הכיול לעולם אינו רץ שם.** נקודת הקצה `/v1/responses` של coding-agent דורשת `8192`–`12288` בתוספת מרווח ביטחון של cgroup — ראו [מדריך Docker — זיכרון RAM בזמן ריצה](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). | | `OMNIROUTE_RSS_PRESSURE_MB` | _אוטומטי_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`; כבוי כאשר `OMNIROUTE_MEMORY_MB` אינו מוגדר) | `open-sse/utils/resourcePressure.ts` | נתיך (fuse) מוחלט של RSS של התהליך (ב-MB) עבור זיכרון native/חיצוני ש-`heapUsed` של V8 אינו רואה; מעליו בקשות חדשות מקבלות 503 `resource_pressure`. RSS לעיתים רחוקות יורד לאחר קפיצה, לכן שלבו אותו עם `OMNIROUTE_PRESSURE_SELF_RESTART`. | | `PROMPT_CACHE_MAX_SIZE` | `50` | מספר מקסימלי של רשומות system prompt שנשמרות במטמון. | | `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | גודל כולל מקסימלי של מטמון ה-prompt. | | `PROMPT_CACHE_TTL_MS` | `300000` (5 דקות) | TTL של רשומה במטמון ה-prompt. | | `SEMANTIC_CACHE_MAX_SIZE` | `100` | מספר מקסימלי של תגובות temperature=0 שנשמרות במטמון. | | `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | גודל כולל מקסימלי של המטמון הסמנטי. | | `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 דקות) | TTL של רשומה במטמון הסמנטי. | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | שורשי corpus מקומיים השומרים אינדקס חי בזיכרון בו-זמנית (`src/lib/localCorpus/configured.ts`). LRU: כשמגיעים לגבול, האינדקס של השורש שהשתמשו בו הכי מזמן מוסר ונבנה מחדש בשאילתה הבאה שלו. מוגבל למינימום של `1`; ערך לא-מספרי חוזר לברירת המחדל. | | `STREAM_HISTORY_MAX` | `50` | מספר מקסימלי של אירועי stream אחרונים בחוצץ התצוגה החיה של ה-Dashboard. | | `CONTEXT_LENGTH_DEFAULT` | _(לא מוגדר)_ | עקיפה גלובלית של אורך קונטקסט (בטוקנים) עבור כל ספק שאין לו משתנה `CONTEXT_LENGTH_`. כשמוגדר, הוא **מחליף** את ערכי הקטלוג, עקיפת ה-dashboard וערכי הרג'יסטרי עבור אותם ספקים; כשלא מוגדר, OmniRoute משתמש בשרשרת המובנית שלו, שהמוצא האחרון שלה הוא `128000`. ראו [אורך קונטקסט לפי ספק](#per-provider-context-length-context_length_provider). | | `USAGE_TOKEN_BUFFER` | `100` | מרווח ביטחון של טוקנים נוספים השמור בעת מעקב אחר מכסות שימוש. | ### אורך קונטקסט לפי ספק (`CONTEXT_LENGTH_`) `open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) קורא גם צורה **לפי ספק** ששמה נבנה מזהה הספק בזמן ריצה, ולכן לא ניתן לפרט אותה שורה אחר שורה בטבלה שלמעלה או ב-`.env.example`. **שם.** `CONTEXT_LENGTH_`, כאשר `` הוא מזהה הספק באותיות גדולות, וכל תו מחוץ ל-`A-Z` / `0-9` מוחלף ב-`_`. מזהה הספק הוא המזהה הקנוני לאחר פענוח כינויים (החלק `provider` במחרוזת `provider/model` לאחר שכינוי קצר פוענח). צמתים מותאמים אישית התואמים ל-OpenAI או ל-Anthropic משתמשים במזהה הצומת שנוצר עבורם, כך שה-UUID הוא חלק משם המשתנה. הערך הוא מספר שלם חיובי של טוקנים; כל דבר אחר (ריק, `0`, שלילי, לא מספרי) מתעלמים ממנו והפענוח עובר לשלב הבא. | מזהה ספק | שם המשתנה | | ----------------------------------------------------------- | -------------------------------------------------------------------------- | | agentrouter | CONTEXT_LENGTH_AGENTROUTER | | openrouter | CONTEXT_LENGTH_OPENROUTER | | openai-compatible-chat-0f8e2c1a-5b7d-4e3f-9a6c-2d1b8e4f7a90 | CONTEXT_LENGTH_OPENAI_COMPATIBLE_CHAT_0F8E2C1A_5B7D_4E3F_9A6C_2D1B8E4F7A90 | **קדימויות.** עבור צמד `provider/model`, השלב הראשון שמניב ערך מנצח: 1. `CONTEXT_LENGTH_` עבור אותו ספק. 2. `CONTEXT_LENGTH_DEFAULT` (עקיפת סביבה גלובלית). 3. חלון ההקשר לכל מודל: עקיפת הקשר שנשמרה (הוגדרה בדשבורד, או ננעצה אוטומטית על ידי ה-reconciler של מנגנון הגילוי, ראו `CONTEXT_WINDOW_RECONCILE_INTERVAL`), אחרת הערך מהקטלוג המסונכרן / models.dev. 4. ערך `defaultContextLength` ברישום (registry) של הספק. 5. היוריסטיקות לפי שם המודל (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` / `codex` 400000). 6. ברירות מחדל מובנות לפי ספק, ולאחר מכן `128000`. שני שלבי הסביבה חלים על **כל הספק**: כל מודל של אותו ספק מקבל את אותה מגבלה, והם גוברים על עקיפות לכל-מודל בדשבורד. כאשר רק מודל אחד של ספק זקוק לחלון שונה, השתמשו בעקיפה לכל-מודל בדשבורד במקום זאת. **היקף.** שרשרת זו מניעה את בדיקת חלון ההקשר בזמן הבקשה (דחיית `context_length_exceeded` / "Input exceeds context window" ב-`open-sse/handlers/chatCore.ts`), תקציבי דחיסת פרומפט ומגבלות הקשר של קומבו. ה-`context_length` שמפורסם על ידי `GET /v1/models` עדיין יכול להגיע ממטא-דאטה של קטלוג או רישום, ואין ערובה לכך שהוא משקף את עקיפת הסביבה. **דוגמה.** ספק שהמודל שלו מקבל חלון של 1,050,000 טוקנים בעוד שהקטלוג מדווח על 128,000: ```dotenv CONTEXT_LENGTH_AGENTROUTER=1050000 ``` יש להפעיל מחדש את השרת לאחר שינוי הערך: הערך נקרא מסביבת התהליך של השרת. ב**אפליקציית שולחן העבודה** השרת רץ כתהליך-בן ואינו רואה משתנה מערכת שהוגדר לאחר שהאפליקציה הופעלה; שימו את השורה בקובץ `.env` שהאפליקציה טוענת (סדר החיפוש ב-[מדריך Electron: חיפוש קובץ הסביבה](../guides/ELECTRON_GUIDE.md#environment-file-lookup)), ולאחר מכן צאו לגמרי מהאפליקציה והפעילו אותה מחדש. ### דחיסה | משתנה | ברירת מחדל | תיאור | | ------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | לא מוגדר | אמון בקובץ `.rtk/filters.json` של הפרויקט ללא גיבוב (hash) של `.rtk/trust.json`. יש להשתמש רק בפיתוח מקומי מבוקר. | ### מנוע זיכרון (תוכנית 21) ### עלות לולאת האירועים של זיכרון, כישורים ורענון טוקנים (#10349) OmniRoute הוא **תהליך Node יחיד**. חילוץ/שליפת זיכרון, הזרקת כישורים ורענון טוקנים של ספקים רצים על **אותה לולאת אירועים** כמו `GET /healthz` והדשבורד. הם אינם worker thread. | עבודה | קוד | ברירת מחדל | שליטת מפעיל | | -------------------- | ---------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | חילוץ / שליפת זיכרון | `src/lib/memory/` | דשבורד **memoryEnabled** (ברירת מחדל: פעיל) | כבו ב-**הגדרות → זיכרון**. אין מתג כיבוי נפרד במשתני סביבה מעבר להשבתת התכונה בהגדרות. | | הזרקת כישורים | `src/lib/skills/injection.ts` | דשבורד **skillsEnabled** (ברירת מחדל: פעיל) | כבו ב-**הגדרות → זיכרון/כישורים** (`skillsEnabled`). כפתורי ה-sandbox שלמטה רק מגבילים את הביצוע אחרי שההזרקה כבר פעילה. | | רענון טוקנים | `src/sse/services/tokenRefresh.ts` | פעיל עבור ספקי OAuth/web מחוברים | נתקו את הספק או תנו לטוקנים להישאר תקפים; כיום אין משתנה סביבה `TOKEN_REFRESH=0`. | אם `/healthz` איטי על מכונה רגועה, השביתו קודם זיכרון + כישורים, ואז בדקו עומס קטלוג/דחיסה (#10303, #9685). תכונות אלו משחררות את הביצוע בנקודות `await` אך עדיין מתחרות על אותו thread יחיד. כפתורי הכיוונון של שכבת ה-embedding, מאגר הווקטורים והדירוג מחדש (reranking) עבור תת-מערכת הזיכרון המתמיד (`src/lib/memory/`). | משתנה | ברירת מחדל | תיאור | | ------------------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 דקות) | TTL עבור מטמון ההטמעות (embedding) בזיכרון (לפי חתימת מקור/מודל/מימד). | | `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | מספר הרשומות המרבי מסוג LRU הנשמרות במטמון ההטמעות. | | `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | מזהה מאגר HF עבור צינור MiniLM מקומי בהפעלה יזומה (opt-in) של `@huggingface/transformers` (~23 MB int8, ~400 MB RAM). | | `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | מזהה מאגר HF עבור מוטמע (embedder) טבלת-חיפוש סטטי של potion/Model2Vec. מורד באופן עצל (lazily) לתיקיית המטמון. | | `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | תיקייה המשמשת לשמירת קבצי מודל ה-potion הסטטי במטמון. כברירת מחדל תחת `DATA_DIR` כאשר לא מוגדר. | | `HF_HUB_ENDPOINT` | `https://huggingface.co` | עקיפת כתובת הבסיס של Hugging Face Hub המשמשת את `staticPotion.ts` (למשל, נקודת קצה מראה (mirror) עבור סביבות מבודדות רשת). | | `MEMORY_VEC_TOP_K` | `20` | ערך top-K ברירת המחדל המשמש את חיפוש הווקטורים בכוח גולמי של `sqlite-vec` בתוך `src/lib/memory/vectorStore.ts`. | | `MEMORY_RRF_K` | `60` | הקבוע `k` של Reciprocal Rank Fusion עבור אחזור היברידי של FTS5 + וקטורים (מתכון sqlite-vec). | | `VECTOR_STORE_DISABLE_VEC` | `false` | נקודת בדיקה/אבחון ב-`getVectorStore()` (`src/lib/memory/vectorStore.ts`): כאשר `true`, מאלץ את מאגר הווקטורים ל-`null` (מדמה סביבת ענן/WASM ללא `sqlite-vec`), ומנמיך את אחזור הזיכרון לחיפוש מילות מפתח של FTS5. השאירו לא מוגדר בסביבת ייצור. | | `NOTION_API_KEY` | _(לא מוגדר)_ | מפתח API עבור backend של Notion (משמש את ה-preset המוכר של ה-backend ב-`genericBackend.ts`). | | `NOTION_API_URL` | `https://api.notion.com/v1` | כתובת בסיס עבור Notion API (ניתן לעקוף עבור חלופות Notion באירוח עצמי). | | `OBSIDIAN_API_KEY` | _(לא מוגדר)_ | מפתח API עבור backend של Obsidian Vault (משמש את ה-preset המוכר של ה-backend ב-`genericBackend.ts`). | | `OBSIDIAN_API_URL` | `http://localhost:27123` | כתובת בסיס עבור Obsidian Vault API (ניתן לעקוף עבור vault מרוחק). | | `MEMORY_TYPED_DECAY_ENABLED` | `false` | מתג ראשי לדעיכת זיכרון מסוננת-סוגים (typed) של TV6. **הפעלה יזומה (כבוי כברירת מחדל)** — הסריקה **מוחקת** זיכרונות שדעכו. כשהוא כבוי, `access_count`/`last_accessed_at` הם טלמטריה בלבד ושום דבר לעולם לא נמחק. | | `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (ימים) שלאחריו זיכרון `episodic` שאינו בשימוש דועך. `0` הופך גם את episodic לחסין. סוגים עמידים (`factual`/`procedural`/`semantic`) חסינים תמיד. שעון הדעיכה מתאפס על בסיס `last_accessed_at`. | | `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | זיכרון שהוזרק `>=` מספר פעמים זה הופך חסין לדעיכה ללא קשר לסוגו. `0` משבית את חסינות הגישה. | | `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (מושבת) | מרווח (שניות) לסריקת הדעיכה התקופתית האופציונלית ב-`src/lib/memory/typedDecay.ts`. `0`/לא מוגדר = אין סריקה תקופתית. הפעלה יזומה כפולה: דורש גם `MEMORY_TYPED_DECAY_ENABLED=true`. | | `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(לא מוגדר)_ | מזהי ספקים מופרדים בפסיקים (לא תלויי רישיות) שמקבלים הודעת `system` **רק באינדקס 0** (`src/lib/memory/injection.ts`). עבור אלה, שיבוץ הזיכרון הבטוח-למטמון באמצע המערך אינו בטוח בשיחות רב-תוריות, ולכן הזיכרון ממוזג/מוצמד במקום זאת כהודעת ה-system המובילה. ברירת המחדל היא רק `xiaomi-mimo`/`mimo`; הרחיבו עבור נקודות קצה תואמות-OpenAI באירוח עצמי (למשל Qwen3.5+/3.6) שתבנית הצ'אט שלהן אוכפת את אותו אילוץ של הודעת system מובילה יחידה. | ### דוגמת Docker עם RAM נמוך `128` מיועד לדשבורד בלבד. סוכני קוד על ערימה (heap) זו נתקלים ב-`FATAL ERROR` במהלך `/v1/responses` ארוכות. אל תשתמשו בדוגמה זו כ-gateway עבור 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` | מקורות נתונים מופרדים בפסיקים. | --- ## סנכרון ELO של Arena | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------- | ----------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | סנכרון ELO תקופתי של טבלת המובילים של Arena AI, הניתן להגדרה באמצעות דגלי התכונות בלוח הבקרה או לביטול באמצעות `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 Playground (לא רשמי/ניסיוני) גשר הפעלות GraphQL עבור prompt.ql.app, שנוצר באמצעות הנדסה לאחור (`src/shared/constants/providers/web-cookie.ts`). כל האפשרויות הן רשות — ברירות המחדל מפנות לנקודות הקצה הציבוריות של סביבת הניסוי; יש לעקוף אותן רק עבור פריסת PromptQL באירוח עצמי או חלופית. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------ | | `PROMPTQL_GRAPHQL_ENDPOINT` | `https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql` | `open-sse/executors/promptql.ts` | נקודת קצה של GraphQL המשמשת לפעולות צ'אט והפעלה. | | `PROMPTQL_CREDITS_ENDPOINT` | `https://data.pro.ql.app/v1/graphql` | `open-sse/executors/promptql.ts`, `open-sse/services/usage/promptql.ts` | נקודת קצה של GraphQL המשמשת לבדיקת יתרת אשראי ושימוש. | | `PROMPTQL_TOKEN_REFRESH_URL` | `https://auth.pro.ql.app/ddn/project/token` | `open-sse/executors/promptql.ts` | נקודת קצה המשמשת לניסיון מיטבי לרענון האסימון. | | `PROMPTQL_POLL_TIMEOUT_MS` | `180000` | `open-sse/executors/promptql.ts` | הזמן המרבי (באלפיות שנייה) לתשאול `thread_events` לפני פקיעת הזמן. | --- ## ספק האינטרנט של HyperAgent (לא רשמי/ניסיוני) גשר הפעלה שעבר הנדסה לאחור עבור hyperagent.com (`src/shared/constants/providers/web-cookie.ts`). אופציונלי — ברירת המחדל מצביעה על נקודת הקצה הציבורית לחיוב/שימוש; יש לעקוף אותה רק עבור פריסה באירוח עצמי או פריסה חלופית של HyperAgent. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------- | --------------------------------------------------- | --------------------------------------- | --------------------------------------------------- | | `HYPERAGENT_USAGE_URL` | `https://hyperagent.com/api/settings/billing/usage` | `open-sse/services/usage/hyperagent.ts` | נקודת הקצה המשמשת לאחזור מקטעי אשראי של חיוב/שימוש. | --- ## מכסות שימוש ב-Kilo Code בדיקת יתרת USD אישית ושימוש ב-Kilo Pass עבור ספק Kilo Code. אופציונלי — ברירת המחדל מצביעה על ה-API הציבורי של Kilo; יש לעקוף אותה רק עבור ממסר/התקן בדיקה. האימות משתמש באסימון הגישה הקיים של OAuth עבור החיבור. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | -------------- | --------------------- | ------------------------------------- | ------------------------------------------------------------------------- | | `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | כתובת URL בסיסית המשמשת לאחזור יתרת Kilo Code האישית והשימוש ב-Kilo Pass. | --- ## ספק האינטרנט של Adobe Firefly (לא רשמי/ניסיוני) רענון הפעלה מונחה-דפדפן עבור ספק האינטרנט של 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` | הפעלה/השבתה של חימום דפדפן יזום. `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` | מרווח הזמן המינימלי (באלפיות שנייה) הנאכף בין שליחות עוקבות, תוך עקיפת ברירת המחדל המובנית. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | _(לא מוגדר)_ | `open-sse/services/adobeFireflySession.ts` | מרווח זמן נוסף (באלפיות שנייה) המתווסף לאחר אצווה מוצלחת, תוך עקיפת ברירת המחדל המובנית. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | _(לא מוגדר)_ | `open-sse/services/adobeFireflyClient.ts` | השהיית בסיס (באלפיות שנייה) לפני שליחת בקשת יצירה, תוך עקיפת ברירת המחדל המובנית. | --- ## 19. סנכרון מודלים (פיתוח) | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------------------- | ----------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MODELS_DEV_SYNC_ENABLED` | _(לא מוגדר)_ | `src/lib/modelsDevSync.ts` | עקיפה קשיחה עבור סנכרון התמחור של models.dev. כאשר אינו מוגדר = כיבוד ההגדרה בהגדרות > AI‏ (`modelsDevSyncEnabled`). הערכים `0`/`false`/`off`/`no` **גוברים על מסד הנתונים** ומדלגים הן על הסנכרון התקופתי והן על סריקות SQL/JSON של `getModelsDevPricing()` (לצורך התאוששות כאשר לוח הבקרה תקוע באותה לולאת אירועים). הערכים `1`/`true`/`on`/`yes` כופים הפעלת סנכרון. שמירה/ניקוי של התמחור עדיין מפעילים את `backupDbFile("pre-write")`, שאינה מבצעת דבר תחת ההגבלה של 60 דקות או כאשר `DISABLE_SQLITE_AUTO_BACKUP` מוגדר. | | `MODELS_DEV_SYNC_INTERVAL` | `86400` (24 שעות) | `src/lib/modelsDevSync.ts` | מרווח סנכרון קטלוג המודלים בזמן פיתוח, בשניות. | | `CONTEXT_WINDOW_RECONCILE_INTERVAL` | `86400` (24 שעות) | `src/lib/contextWindowResolver.ts` | מרווח הזמן (בשניות) עבור מנגנון ההתאמה המתקן את עצמו של חלון ההקשר (5004): מקבע חלונות שהוגדרו על ידי הספק והתגלו באמצעות `/models` כדריסות `auto:discovery` כאשר הם שונים מהקטלוג. יש להגדיר ל-`0` כדי להשבית. עושה שימוש חוזר בנתונים שכבר סונכרנו (ללא אחזור חדש); לעולם אינו דורס דריסות `manual`. | --- ## 20. הגדרות ספציפיות לספק | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OPENROUTER_CATALOG_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterCatalog.ts` | זמן החיים (TTL) של מטמון קטלוג המודלים של OpenRouter. | | `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | הכללת שדות `name` ידידותיים לתצוגה בתגובות `/v1/models`. יש להשבית עבור לקוחות המצפים למזהים בלבד. | | `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8s) | `src/app/api/v1/models/catalogCache.ts` | גבול ההמתנה בנתיב הקר לבנייה מחדש מאוחדת (coalesced) של קטלוג `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` (60s) | `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` via `src/lib/usage/analyticsResponseCache.ts` | אופציונלי (#16361). כאשר מוגדר למספר שלם לא-שלילי N, החלק של היסטוריית השימוש של `GET /api/cache` (סיכומי מטמון-פרומפט + מגמה) מוגש ממטמון תגובות האנליטיקה המשותף כאשר בנייתו ארכה לפחות N אלפיות שנייה, לכל חלון `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` | תדירות הסקר (polling) של משימות NanoBanana. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | השהיית בסיס עבור ה-backoff האקספוננציאלי של ניסיונות-השליחה החוזרים של ה-upscale ב-Adobe Firefly. | | `AWS_REGION` | _(לא מוגדר)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | האזור המשמש לבניית נקודות קצה של AWS Bedrock (Kiro, שמע). | | `AWS_DEFAULT_REGION` | _(לא מוגדר)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | ערך גיבוי כאשר `AWS_REGION` אינו מוגדר. | | `CLOUDFLARE_ACCOUNT_ID` | _(לא מוגדר)_ | `open-sse/executors/cloudflare-ai.ts` | מזהה חשבון עבור Cloudflare Workers AI. | | `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(לא מוגדר)_ | `open-sse/executors/cloudflare-playground.ts` | נתיב מלא לבינארי של Chrome שולחני עבור מבצע Cloudflare AI Playground, בשימוש כאשר בדיקת טביעת האצבע של ה-headless חוסמת את ה-Chromium המצורף של Playwright. | | `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) — _(לא מוגדר = ללא מגבלת אורך)_ | `open-sse/executors/codebuddy/shared.ts` | מגבלת אורך אופציונלית עבור פרומפטי מערכת של מתקשרים הנשלחים ל-CodeBuddy (CN ובינלאומי). כברירת מחדל, רק פרומפט הנושא סמן זהות של סוכן קידוד מוחלף בפרומפט ניטרלי (מסנן התוכן של Tencent דוחה אותם); פרומפטים ארוכים נשמרים. מספר שלם > 0 מחליף גם כל פרומפט מערכת הארוך ממספר תווים זה; לא מוגדר, `0` או ערך לא-שלם משבית את המגבלה. כל החלפה מתעדת ביומן איזה כלל הופעל (סמן זהות או אורך). | | `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | עקיפת בסיס ה-REST API של Cloudflare המשמש את מפרס ממסר ה-Workers של מאגר ה-proxy (#4640 / 9router#1360). | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | שם פרויקט ה-worker המוגדר כברירת מחדל, המוצע בחלון "Deploy Relay" של מאגר ה-proxy. | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | הגדרו ל-`false` כדי להסתיר את אפשרות ה-relay של 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` של cloudflared המנוהל מקומית (עם `tunnel:`, `credentials-file:`, `ingress:`). כאשר הערך מוגדר, OmniRoute מריץ `tunnel --config run` (מנהרה בעלת שם) במקום מנהרת quick tunnel זמנית. | | `CLOUDFLARED_HOSTNAME` | _(מה-ingress של קובץ התצורה)_ | `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` | עקיפת כתובת הבסיס של ה-REST API של Deno Deploy המשמשת את כלי פריסת ה-relay של מאגר ה-proxy (#4643 / 9router#1437). | | `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | שם אפליקציית Deno Deploy המוגדר כברירת מחדל, המוצע בחלון "Deploy Relay" של מאגר ה-proxy. | | `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | הגדרו ל-`false` כדי להסתיר את אפשרות ה-relay של Deno Deploy מהכרטיסייה Proxy Pool. | | `SEARCH_CACHE_TTL_MS` | `300000` (5 דקות) | `open-sse/services/searchCache.ts` | TTL עבור שמירה במטמון של תגובות ממשקי החיפוש (Perplexity, Brave וכדומה). | | `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | חשיפת ממשק המשתמש הניסיוני של ספק תואם-CC עבור relays ייעודיים ל-Claude Code בלבד. | | `NINEROUTER_HOST` | `127.0.0.1` | `open-sse/executors/ninerouter.ts` | עקיפת המארח שבו מאזין מופע 9router המוטמע. | | `NINEROUTER_PORT` | `20130` | `open-sse/executors/ninerouter.ts` | עקיפת הפורט שבו מאזין מופע 9router המוטמע. | | `EMBED_WS_PROXY_HOST` | `127.0.0.1` | `src/lib/services/embedWsProxy.ts` | מארח ה-bind עבור ה-WebSocket proxy של השירות המוטמע (loopback בלבד כברירת מחדל). | | `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | הפורט עבור שרת ה-WebSocket proxy של השירות המוטמע. | | `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` | מפתח fallback למישור הנתונים כאשר ההגדרה `cliproxyapi_api_key` חסרה. | | `CLIPROXYAPI_MANAGEMENT_KEY` | _(ריק)_ | `src/lib/services/cliproxyAccountHealth.ts` | מפתח ניהול עבור קריאות account-health ממופע 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 מפרסם את ה-sidecar של `cliproxyapi` (#12578). כרך הנתונים שלו מחזיק אישורי OAuth/API של ספקים, ולאימג' הנעוץ אין דריסת `api-keys` מבוססת-משתני-סביבה למישור הנתונים (רק `config.yaml` ממופה), כך ש-`0.0.0.0` חושף שירות נושא-אישורים לכל ה-LAN. | | `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | דריסת הפורט שבו הדימון המוטמע של Mux (coder/mux) לתזמור סוכנים מאזין (תמיד 127.0.0.1). | | `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | דריסת הפורט שבו הדימון המוטמע של open-wa (אוטומציה של WhatsApp Web) מאזין (תמיד 127.0.0.1). | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | מארח ה-bind/connect של השירות המוטמע Dario (loopback בלבד כברירת מחדל). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | פורט השירות המוטמע Dario. | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | מארח ה-bind/connect של השירות המוטמע Dario (loopback בלבד כברירת מחדל). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | פורט השירות המוטמע Dario. | | `LOCAL_HOSTNAMES` | _(ריק)_ | `open-sse/config/providerRegistry.ts` | שמות מארחים נוספים מופרדים בפסיקים שייחשבו כ"מקומיים" (שמות שירותי Docker וכו'). | `ENABLE_CC_COMPATIBLE_PROVIDER` מיועד רק לממסרים (relays) של צד שלישי שמקבלים לקוחות Claude Code באופן בלעדי. OmniRoute משכתב בקשות כדי שאותם ממסרים יקבלו אותן. אם ברצונך להשתמש רק ב-Claude Code CLI, או שאינך בטוח מהם הממסרים האלה, השאר אפשרות זו מושבתת והוסף ספק תואם-Anthropic רגיל במקום. --- ## 21. תקינות פרוקסי | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | זמן קצוב לבדיקת תקינות מסוג כשל-מהיר (fast-fail). | | `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | חלון זמן (בשעות) לחישוב זמן ההשהיה הממוצע של פרוקסים מועמדים באסטרטגיית המאגר המותאמת להשהיה. | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL של מטמון תוצאות בדיקת התקינות. | | `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL של מטמון עבור בדיקות תקינות פרוקסי שנכשלו. יש לשמור על ערך זה קצר יותר מ-`PROXY_HEALTH_CACHE_TTL_MS` כדי שחריגות זמן קצוב זמניות של פרוקסי תחת מקביליות גבוהה יחזרו לניסיון במהירות, מבלי להשבית את הכשל-המהיר עבור פרוקסים שבאמת אינם פעילים. | | `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | הגדר `false` כדי להשבית את מתזמן תקינות הפרוקסי ברקע, הבודק מעת לעת פרוקסים רשומים. | | `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | מרווח הסריקה של מתזמן התקינות ברקע באלפיות שנייה (מינימום `60000`). | | `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | מרווח הבדיקה באלפיות שנייה עבור פרוקסיי edge-relay (`deno`/`vercel`/`cloudflare`), שהבדיקות שלהם מעירות מופע serverless מבודד (isolate) המחויב בתשלום (מינימום `60000`). | | `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | מרווח מעבר-השחזור ברקע באלפיות שנייה: באיזו תדירות נבדקים מחדש פרוקסים שהיו לא-תקינים בעבר, כך שפרוקסי שהתאושש חוזר לרוטציה ללא הפעלה מחדש. ערכים מתחת ל-`60000` חוזרים לברירת המחדל. | | `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | יעד בדיקת הנגישות המשמש את המתזמן ואת נקודת הקצה `/api/settings/proxies/auto-test`. הפנו אותו לכתובת URL פנימית או מתארחת-עצמית כדי להימנע מברירת המחדל הציבורית. | | `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | מספר הבדיקות המופעלות בו-זמנית בכל אצווה, משותף למתזמן ולנקודת הקצה `/api/settings/proxies/auto-test`. מוגבל מלמטה ב-1 ומלמעלה ב-50. | | `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | השהיה באלפיות שנייה בין שתי יציאות של בדיקות בתוך אצווה. בלעדיה כל האצווה יוצאת באותו הרגע וכתובת IP יציאה משותפת עלולה להפעיל הגבלת קצב ביעד. הגדירו `0` כדי לבטל את הריווח; מוגבל ב-5000. | | `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | הגדירו "false" כדי להפסיק לבדוק את המארח האמיתי של הספק המוקצה לפרוקסי (`GET /models`, ללא מפתח API) ולהשתמש תמיד ב-`PROXY_HEALTH_TEST_URL` במקום זאת. | | `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | כאשר `false` (ברירת מחדל), בדיקות הנגישות האוטומטיות (המתזמן + כפתור "Test All" ב-`/api/settings/proxies/auto-test`) הן **קריאה-בלבד** ואינן כותבות לעולם את סטטוס הפרוקסי — רק המפעיל מגדיר פעיל/לא-פעיל, כך שבדיקה לא-יציבה לא יכולה להשאיר פרוקסי מוקצה תקוע (#6246). הגדירו `true` כדי לשחזר את התנהגות ה-test-and-set הישנה. | | `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`, ללא cooldown או נעילת מודל. | | `STREAM_LATE_OUTPUT_PROBE_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונה אופציונלי (ראו [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); דריסת DB מלוח הבקרה גוברת). `true` (או `1`, `yes`) ממשיך לדגום chunk מועבר אחד מתוך 16 לאחר 64 הראשונים, כך שפלט נראה מאוחר עדיין מסמן את הסטרים כמי שהפיק פלט (5xx בודד שלאחר הפלט נשאר ברמת הבקשה במקום נעילה של המודל בלבד). | | `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונה מסוג הצטרפות (opt-in) (ראו [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); עקיפת DB מלוח הבקרה גוברת). `true` (או `1`, `yes`) מציג את תצפית ה-egress של המאגר לקריאה בלבד מתחת למאגר פרוקסי בלוח הבקרה (כתובות IP ייחודיות של egress, חיבורים, והמספר הגבוה ביותר שנצפה מאחורי IP אחד במהלך 24 השעות האחרונות, מתוך יומן הפרוקסי). לעולם לא משמש לניתוב. | | `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` | חלון תצפית בשעות עבור שורות egress שנדחפו על ידי המפעיל (נקרא מחדש בכל קריאה; לא נדרשת הפעלה מחדש). מוגבל ל-1..168; ערך מחוץ לטווח, לא מספרי או ריק חוזר ל-24 עם אזהרה יחידה ברמת כל התהליך, לעולם לא זריקת שגיאה. | | `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | הגדירו `true` כדי לאפשר ל-scheduler להסיר פרוקסים אוטומטית לאחר כשלונות רצופים חוזרים. | | `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | מספר הכשלונות הרצופים לפני שה-scheduler מסיר פרוקסי אוטומטית (כאשר `PROXY_AUTO_REMOVE=true`). | | `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | הגדירו `true` כדי לאפשר ל-scheduler להשבית פרוקסי באופן רך (סטטוס `dead`, לעולם לא נמחק) לאחר כשלונות רצופים חוזרים, במקום להסירו. חלופה לא הרסנית ל-`PROXY_AUTO_REMOVE`: הפרוקסי יוצא מיידית מפענוח המאגר/הרוטציה (מסנן סטטוס ה-alive המשמש בפענוח scope-pool כבר מחריג אותו) ומופעל מחדש אוטומטית ברגע שהוא מתחיל לעבור בדיקות (probes) שוב. חולק את סף `PROXY_AUTO_REMOVE_AFTER`. אם שני הדגלים הם `true`, `PROXY_AUTO_REMOVE` גובר. | | `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | דילוג פסיבי מסוג הצטרפות: כאשר `true`, ה-scheduler מדלג על הבדיקה החיה עבור נקודת קצה שתעבורת הפרודקשן האחרונה שלה כבר מוכיחה אותה (לפחות הצלחה אחת ואף כשל פרוקסי משויך בחלון, ונצפה בדיוק ספק אחד). כבוי כברירת מחדל: כל פרוקסי נבדק. | | `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | החלון במילישניות של תעבורת הפרודקשן שהדילוג הפסיבי בוחן (מוגבל ל-`60000..599999`). קצר ממרווח הסריקה של 10 הדקות, כך שכשל אחרון שולט במקום להתדלל. | | `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | מאפשר לזרימות OAuth ואימות ספק לעקוף פרוקסי מוצמד (pinned) ולהתחבר ישירות כאשר בדיקות מקדימות של זמינות הפרוקסי נכשלות. סדר העדיפות בפועל הוא: עקיפת DB של Feature Flags > משתנה סביבה > ברירת מחדל. | | `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 שניות) | `src/lib/resilience/settings.ts` | תקציב ברירת המחדל של **המתנה בתור**: כמה זמן בקשה רשאית להמתין לחריץ פנוי אצל הספק ולשבת בתור לפני שהיא נדחית, מבלי להגיע כלל ל-upstream. הטיימר מתאפס ברגע שהמשימה מתחילה להתבצע — הביצוע מוגבל בנפרד על ידי `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. משתנה הסביבה קובע רק את ברירת המחדל: ערך שמור `resilienceSettings.requestQueue.maxWaitMs`, ואחריו ערך ברמת-חיבור `rateLimitOverrides.maxWaitMs`, כל אחד מהם גובר עליו. | | `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 דקות) | `open-sse/services/rateLimitManager.ts` | תקרה למשך הזמן שבו בקשה שהתקבלה רשאית להישאר בביצוע לפני ששריון מגבלת הקצב שלה פג — מנותק מתקציב ההמתנה בתור, כדי ש-fetch-start איטי ב-gateways שאינם אינקרמנטליים לא יפוג בטיימאאוט (#12027). | | `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (מושבת) | `open-sse/services/rateLimitManager.ts` | תקרת קבלה לתור: דחייה עם 429 `queue_full` ברגע שמספר זה של בקשות כבר ממתין בתור. `0` = ללא הגבלה (ברירת מחדל). | | `RATE_LIMIT_AUTO_ENABLE` | _(לא הוגדר)_ | `open-sse/services/rateLimitManager.ts` | אילוץ הפעלה/כיבוי של רשת הביטחון להפעלה אוטומטית של מגבלת קצב, ללא קשר להגדרה השמורה ב-Dashboard (`resilienceSettings.requestQueue.autoEnableApiKeyProviders`). מקבל `true`/`1`/`on` לאילוץ הפעלה, `false`/`0`/`off` לאילוץ כיבוי. כשהיא פעילה (ברירת מחדל), חיבורי API-key פעילים מוגנים אוטומטית במגבלת קצב. הגדרת `rateLimitProtection: false` ברמת חיבור בודד מכבה את ההגנה המפורשת אך אינה מוציאה את החיבור מרשת ביטחון זו; הגדרת משתנה סביבה זה ל-`false` היא המנגנון הגלובלי להפעלת חיבורי API-key ללא תורי מגבלת קצב. | | `PROVIDER_COOLDOWN_ENABLED` | _(לא הוגדר → כבוי)_ | `open-sse/services/providerCooldownTracker.ts` | מעקב cooldown גלובלי מסוג opt-in של ספק/חיבור, חוצה-בקשות. כבוי כברירת מחדל (חופף ל-Connection Cooldown / Provider Circuit Breaker). מקבל `true`/`1`/`on` להפעלה. | | `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | cooldown מינימלי (ms) לפני ניסיון חוזר של ספק/חיבור שנכשל. גדל באופן מעריכי עם כשלונות רצופים. בשימוש רק כאשר `PROVIDER_COOLDOWN_ENABLED`. | | `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 דקות) | `open-sse/services/providerCooldownTracker.ts` | תקרת cooldown מקסימלית (ms) שאחריה ספק/חיבור שנכשל יתנסה מחדש בכל מקרה. בשימוש רק כאשר `PROVIDER_COOLDOWN_ENABLED`. | | `STREAM_RECOVERY_ENABLED` | _(לא הוגדר → כבוי)_ | `src/lib/resilience/settings.ts` (זריעה) → `open-sse/services/streamRecovery.ts` (לוגיקה) | **מה:** שחזור שקוף של זרמי upstream שנקטעו (פורט של free-claude-code). מחזיק את חלון ה-SSE הפתיחה עד `STREAM_RECOVERY.HOLDBACK_MS` (750 ms) כך שקיטוע _pre-commit_ — כזה שמתרחש לפני שבייט כלשהו מגיע ללקוח — נפתח מחדש ומתנסה מחדש באופן בלתי נראה. **מתי להפעיל:** upstreams לא יציבים שלעיתים קרובות נקטעים עם 0 בתים בתחילת הזרם; השאירו כבוי אם אינכם יכולים להרשות לעצמכם עד 750 ms נוספים של time-to-first-token בכל זרם. מקבל `true`/`1`/`on`. מזריע את הגדרת ה-Resilience השמורה; הגדרת ה-Dashboard גוברת לאחר שהוגדרה. | | `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/resilience/settings.ts` (זריעה) → `open-sse/services/streamRecovery.ts` (לוגיקה) | **מה:** המשכה באמצע הזרם (Fase 4.4) — לאחר קיטוע _post-commit_ (בייטים שכבר הגיעו ללקוח), שולח מחדש את הבקשה עם הטקסט החלקי כ-prefill של assistant ותופר את הסיומת החסרה. זרמים תואמי OpenAI בטקסט פשוט בלבד; לעולם לא מופעל כשקריאת כלי נמצאת בדרך. **מתי להפעיל:** יצירות ארוכות שנקטעות באמצע התשובה, כשאתה מוכן לקבל שהזנב המשוחזר יגיע כפרצוף אחד ולא טוקן-אחר-טוקן. בלתי תלוי ב-`STREAM_RECOVERY_ENABLED` (פרופיל סיכון שונה). מקבל `true`/`1`/`on`. | | `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | משגיח (watchdog) אופציונלי לפלט שימושי בזרם פעיל. מזהה זרמים שממשיכים לשלוח מקטעים אך נשארים מתחת לקצב פלט ה-assistant שהוגדר; פעימות חיים (heartbeats), אירועי שימוש, דלתות ריקות ושלבי כלים/היגיון אינם מתחפשים להתקדמות. נפרד מ-timeout-ים של חוסר פעילות (idle) ושל מועד סופי קשיח (hard deadline). | | `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` | קצב בייטים מינימלי של פלט assistant ב-UTF-8 (מדד מקורב שמרני לטוקנים), מוגבל ל-1–1000000. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | דגימת פלט שימושי מינימלית שאינה אפס הנחשבת מדידה, מוגבלת ל-1–1000000 בייטים. | | `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | מרווח פיזור (במילישניות) בין בדיקות תקינות של טוקנים של הספקים בעת ההפעלה. | | `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | רעידה (jitter) אקראית מינימלית (במילישניות) המתווספת על גבי `HEALTHCHECK_STAGGER_MS` בין בדיקות תקינות של טוקנים של הספקים, כדי למנוע פרצופים (בעיה #1220). | | `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | רעידה (jitter) אקראית מקסימלית (במילישניות) המתווספת על גבי `HEALTHCHECK_STAGGER_MS` בין בדיקות תקינות של טוקנים של הספקים, כדי למנוע פרצופים (בעיה #1220). | | `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | גודל אצווה של בדיקות במקביל עבור סריקת בדיקות תקינות הטוקנים בעת ההפעלה; ערכים גדולים יותר בודקים יותר חיבורים במקביל, ערכים קטנים יותר מפחיתים את עומס הפרצוף (בעיה #7875, רגרסיה של #7719). | | `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | מספר הניסיונות החוזרים האוטומטיים על תגובות cooldown ברמת המודל לפני החזרת שגיאה ללקוח. | | `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | מרווח backoff מרבי (בשניות) בין ניסיונות חוזרים של cooldown. מוגבל על ידי ערך זה ללא קשר ל-`Retry-After` שמגיע מה-upstream. | | `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | כתובת ה-URL של פרוקסי חיסכון הטוקנים של Headroom. מחזור החיים של הדשבורד (`api/headroom/*`) מפעיל כברירת מחדל CLI מקומי של `headroom-ai` על loopback; יש לעקוף רק כדי להצביע על פרוקסי sidecar חיצוני של Docker. | ### קבועי כוונון של שחזור סטרים התנהגות ה-holdback של השחזור מכווננת על ידי קבועים מקודדים קשיחות ב- `open-sse/config/constants.ts` (`STREAM_RECOVERY`), המוצגים כאן לעיון — שינוים דורש עריכת קוד, לא משתנה סביבה: - `STREAM_RECOVERY.HOLDBACK_MS = 750` — כמה זמן חלון ה-SSE הפותח מושהה, כדי שקיטוע מוקדם יוכל להיות מנוסה מחדש לפני שבייט כלשהו מחויב ללקוח. - `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — גבול עליון קשיח על החלון המושהה; ביצוע commit (flush + passthrough) ברגע שמספר הבייטים הזה נצבר, ללא קשר לטיימר. - `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — מספר מרבי של פתיחות-מחדש שקופות של סטרים ה-upstream בזמן שה-holdback עדיין לא בוצע לו commit. > **הגבלת קצב של חלון הזזה לפי ספק (ללא משתנה סביבה):** הגבלת הקצב של חלון > ההזזה לפי ספק, שהועברה מ-FCC, קיימת בקוד כ-_fallback_ > (`open-sse/services/providerDefaultRateLimit.ts`, מחוברת דרך > `open-sse/services/rateLimitManager.ts`) אך נשלחת עם **מפת ברירת מחדל ריקה** > ו**אין לה משתנה סביבה למפעיל** כיום — היא מופעלת רק דרך hook של בדיקות / > עריכת קוד. היא לא רשומה בטבלה למעלה בכוונה. מגביל ה-relay לפי `(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` | זמן קצוב לחוסר פעילות של הזרם (באלפיות השנייה) עבור מנגנון הביצוע של Cursor. | | `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | חלון חסד (באלפיות השנייה) לאחר מסיים רך מסוג composer kv_after_text, כאשר נותרו בתים במאגר — מאפשר לקריאת כלי עוקבת מסוג exec_mcp להשלים את המסגרת שלה. | | `CURSOR_TOOL_DIRECTIVE` | מופעל (`!== "0"`) | `open-sse/executors/cursor.ts` | הנחיית אישור כלי שגורמת ל-composer-2.5 לבצע קריאות לכלים באופן אמין. הגדירו `0` כדי להשבית. | | `OMNIROUTE_SYSTEM_INSTRUCTION_APPEND` | _(לא מוגדר)_ | `open-sse/translator/request/claude-to-openai.ts`, `open-sse/translator/response/openai-to-claude.ts` | טקסט הנחיית מערכת שהוגדר בידי המפעיל ומצורף להודעת המערכת לאחר התרגום (הזרקה לאחר תרגום), ומגיע לנתיבי codex/Responses ו-`/v1/messages`. משמש גם כקידומת ההנחיה שמוסרת מבלוקי מבוא מערכת שהוחזרו כהד. השאירו לא מוגדר כדי להשבית. | | `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (כבוי) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | הגדירו `1` כדי להסיר בלוקי מבוא של הנחיית המערכת שהוחזרו כהד מתחילתו של זרם openai→claude. כבוי כברירת מחדל — ההיוריסטיקות מותאמות לפרוזה באנגלית ומשנות את מטען התגובה, ולכן תשובה שמתחילה באופן לגיטימי במקטע כזה תאבד אותו. | | `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | זמן קצוב לאחזור כל תמונה (באלפיות השנייה) עבור קלט ראייה מרוחק מסוג `image_url`. | | `CURSOR_STATE_DB_PATH` | _(נבדק אוטומטית)_ | `open-sse/utils/cursorVersionDetector.ts` | דורס את איתור מסד נתוני המצב של Cursor IDE, המשמש לזיהוי גרסת ה-IDE. | | `CURSOR_AGENT_CLI_VERSION` | _(זיהוי / קיבוע)_ | `open-sse/utils/cursorAgentCliVersion.ts` | מזהה בנייה של Agent 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` | זמן שעון כולל לכל תמונה (באלפיות השנייה) עבור משימות תמונה של 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` | דורס את `--model` של Cursor CLI עבור משימות תמונה. | | `UC_IMAGE_POLL_INTERVAL_MS` | `2000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | תדירות תשאול תוצאות יצירת תמונות של UC‏ (uncensored.com), באלפיות השנייה. | | `UC_IMAGE_POLL_TIMEOUT_MS` | `60000` | `open-sse/handlers/imageGeneration/providers/ucImage.ts` | זמן שעון כולל לתשאול תוצאות יצירת תמונות של UC, באלפיות השנייה. | | `UC_VIDEO_POLL_INTERVAL_MS` | `3000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | תדירות תשאול תוצאות יצירת סרטונים של UC‏ (uncensored.com), באלפיות השנייה. | | `UC_VIDEO_POLL_TIMEOUT_MS` | `300000` | `open-sse/handlers/videoGeneration/providers/ucVideo.ts` | זמן שעון כולל לתשאול תוצאות יצירת סרטונים של UC, באלפיות השנייה. | | `CURSOR_DATA_DIR` | _(נבדק אוטומטית)_ | `open-sse/utils/cursorAgentCliVersion.ts` | דורס את ספריית הנתונים של Cursor Agent CLI‏ (`…/versions/`); זהו אותו משתנה שבו משתמש הסוכן הרשמי. | | `CURSOR_TOKEN` | _(לא מוגדר)_ | `scripts/ad-hoc/cursor-tap.cjs` | אסימון נושא ישיר של Cursor המשמש כלי פיתוח. | | `OMNIROUTE_LOG_REQUEST_SHAPE` | מושבת (הפעלה מפורשת באמצעות `"1"`) | `src/app/api/v1/chat/completions/route.ts` | רושם סמני סוג תוכן/אורך עבור מטעני צ׳אט גדולים כאשר מוגדר `"1"`. כבוי כברירת מחדל כדי להפחית רעש ביומנים. | | `DEBUG_RESPONSES_SSE_TO_JSON` | _(לא מוגדר)_ | `open-sse/handlers/responseTranslator.ts` | הגדירו `true` כדי לרשום פרטים על תרגום SSE→JSON של Responses API. | | `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 המשמש כחלופה עבור `GITHUB_ISSUES_TOKEN` ונצרך על ידי כלי העזר לסוכן הענן תחת `src/lib/cloudAgent/*`. | --- ## תרחישי פריסה להנחיות SRE עבור קצה עורפי של ממסר (התנהגות ts/bifrost/auto, מיקום 9router לעומת CLIProxyAPI ואסטרטגיית גיבוי לתפוקה גבוהה), ראו [אסטרטגיית קצה עורפי של ממסר](/docs/reference/RELAY_BACKEND_STRATEGY.md). ### פיתוח מקומי מינימלי ```bash JWT_SECRET=$(openssl rand -base64 48) API_KEY_SECRET=$(openssl rand -hex 32) INITIAL_PASSWORD=dev123 PORT=20128 NODE_ENV=development ``` ### סביבת ייצור ב-Docker ```bash JWT_SECRET=<נוצר> API_KEY_SECRET=<נוצר> INITIAL_PASSWORD=<נוצר> STORAGE_ENCRYPTION_KEY=<נוצר> DATA_DIR=/data PORT=20128 API_PORT=20129 NODE_ENV=production AUTH_COOKIE_SECURE=true REQUIRE_API_KEY=true NEXT_PUBLIC_BASE_URL=https://omniroute.example.com BASE_URL=http://localhost:20128 OMNIROUTE_MEMORY_MB=8192 CORS_ORIGIN=https://your-frontend.example.com ``` ### סביבה מבודדת מהרשת / 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. ארגז חול למיומנויות (v3.8.0+) מגבלות ובקרות בטיחות המוחלות כאשר מסגרת Skills‏ (`src/lib/skills/`) מפעילה אוטומציות שהוגדרו על ידי המשתמש בסביבה מבודדת. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | --------------------------------- | -------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SKILLS_SANDBOX_TIMEOUT_MS` | `10000` (10 שניות) | `src/lib/skills/builtins.ts` | מגבלת זמן שעון בפועל לכל הפעלה של קוד מיומנות בארגז החול. זוהי מגבלה קשיחה; כל פעולה ארוכה יותר מופסקת. | | `SKILLS_EXECUTION_TIMEOUT_MS` | _(חוזר ל-`SKILLS_SANDBOX_TIMEOUT_MS`)_ | `src/lib/skills/` | מגבלת הזמן לתזמור מיומנויות ברמה גבוהה. הגדירו ערך גבוה מ-`SKILLS_SANDBOX_TIMEOUT_MS` כדי לאפשר תהליכי עבודה מרובי שלבים. | | `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | מספר הבתים המרבי שמיומנות רשאית לקרוא מכל קובץ יחיד בארגז החול. | | `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | מספר הבתים המרבי שיילכד מכל תגובת HTTP יחידה בתוך מיומנות. | | `SKILLS_MAX_SANDBOX_OUTPUT_CHARS` | `100000` | `src/lib/skills/builtins.ts` | מגבלה קשיחה על מספר תווי stdout/stderr המוחזרים מהפעלת ארגז חול. | | `SKILLS_SANDBOX_NETWORK_ENABLED` | `false` | `src/lib/skills/builtins.ts` | הגדירו `1`/`true` כדי לאפשר גישה יוצאת לרשת מתוך ארגז החול. ברירת המחדל היא **מבודד** מטעמי בטיחות. | | `SKILLS_ALLOWED_SANDBOX_IMAGES` | _(ריק)_ | `src/lib/skills/builtins.ts` | רשימת תמונות קונטיינר מותרות להפעלה בארגז החול, המופרדת בפסיקים. ערך ריק מתיר רק את ברירת המחדל המובנית. | | `SKILLS_SANDBOX_DOCKER_IMAGE` | _(ברירת מחדל מובנית)_ | `src/lib/skills/` | תמונת הקונטיינר שבה נעשה שימוש בעת יצירת ארגז חול מבוסס Docker. דרסו ערך זה כדי לקבע תמונת בסיס מוקשחת מותאמת אישית. | | `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | סביבת הרצת הקונטיינרים עבור ארגז החול של המיומנויות: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. האפשרות `auto` בוחרת את סביבת ההרצה המותקנת המתאימה ביותר לכל מערכת הפעלה מארחת (Apple Container/OrbStack ב-macOS,‏ WSL Container ב-Windows ו-Podman ב-Linux), עם חזרה ל-Docker במקרה הצורך. | > [!CAUTION] > הפעלת `SKILLS_SANDBOX_NETWORK_ENABLED=true` פותחת נתיב תעבורה יוצאת עבור קוד מיומנות שרירותי. בפריסות משותפות, שלבו זאת עם `OUTBOUND_SSRF_GUARD_ENABLED=true` ועם מדיניות מחמירה עבור `CORS_ORIGIN`/הפרוקסי. --- ## 25. מכסות ספקים, מנהרות, גיבויים ושונות בזמן ריצה נקודות קצה של מכסות ספקים, מנהרות רשת (Tailscale, Ngrok, פרוקסי ניפוי שגיאות MITM), מאגר היציאה של 1Proxy, גיבויי מסדי נתונים ועקיפות קטנות לפי תכונה המופנות על ידי שכבת הביצוע או סקריפטים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | מחרוזת חיבור Redis עבור ה-backend של מגביל הקצב (rate limiter). | | `ALIBABA_CODING_PLAN_HOST` | _(מארח הייצור)_ | `open-sse/services/bailianQuotaFetcher.ts` | החלפת המארח המשמש לשליפת מכסות ה-coding-plan של Alibaba Bailian. | | `ALIBABA_CODING_PLAN_QUOTA_URL` | נגזר מהמארח | `open-sse/services/bailianQuotaFetcher.ts` | החלפת כתובת ה-URL המלאה של המכסה עבור Alibaba Bailian. | | `QWEN_CLOUD_COOKIE` | _(לא מוגדר)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | עוגיית session של המסוף עבור שער המכסות של ה-Token Plan האישי של Qwen Cloud / Model Studio (מפתח ה-API של ה-inference אינו יכול לקרוא אותה). העתיקו את כל כותרת הבקשה `Cookie` — היא מכילה את `login_qwencloud_ticket` — מכל קריאת `api.json` אל `cs-data.qwencloud.com` ב-home.qwencloud.com תחת חיוב (Billing) › מינוי (Subscription) (F12 › רשת (Network)). רגישה ומוגבלת ל-session; העדיפו את שדה ה-Dashboard `qwenCloudCookie` המוגדר לכל חיבור בנפרד. | | `QWEN_CLOUD_SEC_TOKEN` | _(לא מוגדר)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | החלפה ידנית של `sec_token` עבור שער המסוף של ה-Token Plan. רגיש; כאשר לא מוגדר, השולף מפענח אותו מתוך ה-HTML של הדשבורד באמצעות העוגייה. | | `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` | _(לא מוגדר)_ | `open-sse/services/usage/xiaomi-mimo.ts` | עוגיית session של המסוף עבור ה-API של מכסות ה-Token Plan של Xiaomi MiMo (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — מפתח ה-API של ה-inference אינו יכול לקרוא אותה). העתיקו את כל כותרת הבקשה `Cookie` — היא מכילה את `api-platform_serviceToken` ואת `userId` — מכל בקשה אל `platform.xiaomimimo.com` בדף ה-Token Plan (F12 › רשת (Network)). רגישה ומוגבלת ל-session; העדיפו את שדה ה-Dashboard `xiaomiMimoConsoleCookie` המוגדר לכל חיבור בנפרד. | | `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | תקציב חודשי (קרדיטים) עבור גיבוי ה-Xiaomi MiMo המנוטר על ידי OmniRoute, המשמש כאשר לא מוגדר cookie של מסוף. ברירת המחדל היא 4.1B של רמת Lite; הגדירו אותו לקרדיטים של התוכנית (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` | _(לא מוגדר)_ | `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`/`openai/gpt-oss-120b`. סדר הקדימות בפועל הוא דריסת DB של Feature Flags > משתנה סביבה > ברירת מחדל; אם הדריסה אינה זמינה, השירות חוזר לערך הגולמי של משתנה הסביבה. | | `COMMAND_CODE_CALLBACK_PORT` | _(לא מוגדר)_ | `src/app/api/providers/command-code/auth/shared.ts` | פורט מקומי המשמש לקריאות חוזרות (callbacks) בסגנון OAuth מכלי העזר של Command Code CLI. | | `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 של ניצול/מכסה (usage/quota) של 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 מול ה-upstream (לפיתוח בלבד). | | `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | זמן קצוב לסוקט בזמנות (במילישניות) עבור חיבורים העוברים דרך הפרוקסי; סוקטים בזמנים מעבר לערך זה מנותקים כדי למנוע דליפה של מנהרות חצי-פתוחות. | | `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` עבור התקנת leaf מדור קודם, אחרת `ca.crt`/`ca.key` (CA שורשי, ו-leaf לכל מארח מיורט; נאכף על ידי `MITM_ROOT_CA_ENABLED=true`). הגשר יוצא בעת ההפעלה אם הקבצים עבור המודל הפעיל חסרים. | | `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | רמת הפירוט של יומן החלטות הניתוב: `0` משתיק, ערכים גבוהים יותר מתעדים יותר החלטות bypass/ניתוב. | | `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | הגדר `true` כדי להצטרף למודל האישורים של CA שורשי + leaf לכל מארח (#6684). התקנות חדשות מקבלות זאת באופן אוטומטי; התקנות עם leaf מדור קודם מהימן קיים שומרות על אישור ה-SAN הקבוע המדור הקודם, אלא אם בחרו להצטרף. | | `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | נקבע על ידי מנהל ה-MITM עבור תהליך הפרוקסי שנוצר (`root-ca` \| `legacy`) — משקף את החלטת מיגרציית האישורים; לא מיועד להגדרה ידנית. | | `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | הגדירו `1` (ערך אמת) כדי להסיר את ה-`sudo` המוביל מפקודות אמון התעודות של MITM — עבור פריסות ללא root / מבוססות user-namespace שבהן המפעיל נותן אמון ב-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 — עבור סביבות בדיקה מבודדות (sandbox) או לקריאה בלבד. | | `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | מנגנון הגנה לבדיקות/CI בלבד: הגדירו `1` כדי להפוך את התקנת/הסרת אמון התעודות לפעולה ריקה (no-op), כך שחבילת הבדיקות לעולם לא תשנה את מאגר האמון של מערכת ההפעלה. מוגדר אוטומטית על ידי הגדרת הבדיקות ותהליכי ה-CI. | | `CHANGELOG_BASE_REF` | _(אוטומטי)_ | `scripts/check/check-changelog-integrity.mjs` | ref בסיס מפורש עבור שער ההגנה מפני "אכילת" CHANGELOG (ברירת המחדל היא ענף הבסיס של ה-PR ב-CI, או ה-`release/v*` הגבוה ביותר). | | `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | הגדירו `true` כדי להפעיל את מתזמן הסנכרון האוטומטי של מאגר הפרוקסים החינמיים ברקע. הפעלה יזומה (opt-in), כבוי כברירת מחדל. | | `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | מרווח הסנכרון האוטומטי במילישניות (ברירת מחדל: 30 דקות). | | `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | הפעלת מקור הפרוקסי החינמי 1proxy. הגדירו `false` כדי להשבית. | | `FREE_PROXY_1PROXY_API_URL` | _(ראו oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | דריסת כתובת ה-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. בהצטרפות אקטיבית (opt-in) בלבד. | | `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | דריסת כתובת ה-URL הבסיסית של רשימת הפרוקסים של IPLocate. | | `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | הפעלת מקור מאגר הפרוקסים Webshare. הגדירו ל-`false` כדי להשבית; דורש גם הגדרה של `FREE_PROXY_WEBSHARE_API_KEY`. | | `FREE_PROXY_WEBSHARE_API_KEY` | _(ללא)_ | `src/lib/freeProxyProviders/webshare.ts` | אסימון API של חשבון Webshare (`Authorization: Token `). חובה — הספק נשאר מושבת בלעדיו. | | `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | דריסת כתובת ה-URL של ה-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` | _(זיהוי אוטומטי)_ | `src/lib/tailscaleTunnel.ts` | נתיב מפורש לקובץ הבינארי `tailscale`. | | `TAILSCALED_BIN` | _(זיהוי אוטומטי)_ | `src/lib/tailscaleTunnel.ts` | נתיב מפורש לקובץ הבינארי של הדימון `tailscaled`. | | `TAILSCALE_AUTHKEY` | _(לא מוגדר)_ | `src/lib/tailscaleTunnel.ts` | מפתח אימות משותף מראש של Tailscale עבור `tailscale up` לא-אינטראקטיבי / headless (מועבר באמצעות `--auth-key=`). כאשר הוא לא מוגדר, ההתחברות חוזרת לכתובת האימות האינטראקטיבית בדפדפן. | | `NGROK_AUTHTOKEN` | _(לא מוגדר)_ | `src/lib/ngrokTunnel.ts` | מאמת מנהרות ngrok יוצאות. | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | מספר קבצי הגיבוי המרבי של SQLite הנשמרים על ידי ניקוי הגיבויים הידני/המתוזמן. תמונות המיגרציה (snapshots) ממוענות-תוכן ונעשה בהן שימוש חוזר עבור מצב DB זהה; הן אינן נמחקות בתוך חלון המיגרציה המקבילה. עוקף את הערך שנשמר מתוך Settings → Database backup retention. | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | הגיל המרבי (בימים) הנשמר על ידי ניקוי הגיבויים הידני/המתוזמן. `0` משבית מחיקה מבוססת-גיל. תמונות המיגרציה אינן נמחקות בתוך חלון המיגרציה המקבילה. עוקף את הערך שנשמר מתוך Settings → Database backup retention. | | `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | מרווח הפעולה (ב-ms) של המשימה בצד השרת שמבצעת את `backup-schedule.json`. חייב להישאר הרבה מתחת לרזולוציית ה-cron של דקה אחת; ערכים מתחת ל-`5000` או ערכים שלא ניתנים לניתוח חוזרים לברירת המחדל `30000`. | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | רמז של סביבת הרצת הקונטיינר עבור בדיקת ההרשאות של נקודת הכניסה (entrypoint). הגדירו `podman` עבור כל טופולוגיית Podman. מכיוון שהקונטיינר אינו יכול לקבוע אם המנוע מקומי או שהגישה אליו מתבצעת דרך Podman Machine, האזהרה נשארת ניטרלית מבחינת טופולוגיה ומפנה אל `contrib/podman/README.md`. | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | בסיס האחסון (backend) של צריכת חלק-המכסה: `sqlite` (ברירת מחדל) או `redis`. | | `QUOTA_STORE_REDIS_URL` | _(לא מוגדר)_ | `src/lib/quota/storeFactory.ts` | מחרוזת החיבור ל-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 כאשר ניתוק מכסת ה-preflight כבוי (#4540). | | `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | חלון השמירה (בימים) עבור ה-buckets של `quota_consumption` לפני GC (`gcQuotaConsumption`). | | `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | הפעלה יזומה (ברירת מחדל כבוי): מפעילה את ניתוק המכסה הקשיח של הניתוב האוטומטי, שמשמיט מועמדים עם מכסה נמוכה לפני הניקוד. | | `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | הפעלה יזומה (ברירת מחדל כבוי): כאשר מסנן `auto/:` אינו מתאים לאף מועמד מחובר, משחזרת את ההתנהגות הישנה (legacy) של נסיגה למאגר המלא (הלא מסונן) במקום להחזיר מאגר ריק. ברירת המחדל הכבויה גורמת ל-`:free` לקבל את המשמעות "רמת חינם בלבד". | | `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | תקרת גודל הפאנל (מוגבלת לטווח 1–10) עבור וריאנט השידור (broadcast) `auto/*:chaos` — בקשה אחת מתפצלת לכל היותר למספר זה של מודלים ממגוון ספקים. | | `OMNIROUTE_CHAOS_MIN_PANEL` | _(ברירת מחדל של המנוע)_ | `open-sse/services/autoCombo/virtualFactory.ts` | כיוונון גודל פאנל מינימלי המועבר למטפל השידור של הכאוס; אי-הגדרה משאירה את ברירת המחדל של המנוע. | | `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(ברירת מחדל של המנוע)_ | `open-sse/services/autoCombo/virtualFactory.ts` | פסק זמן קשיח (באלפיות שנייה) לכל פיזור הפאנל של הכאוס (fan-out); אי-הגדרה משאירה את ברירת המחדל של המנוע. | | `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 במעלה הזרם (upstream) של AgentBridge. | | `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | מספר הבקשות הנלכדות המרבי המוחזק בחוצץ הטבעתי (ring buffer) של Traffic Inspector. | | `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | גודל גוף הבקשה/תגובה הנלכד המרבי (KB) לפני קיטום. | | `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | פורט מקומי עבור פרוקסי ה-HTTP של Traffic Inspector. | | `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | הפעלה אוטומטית של פרוקסי ה-HTTP של ה-Inspector בעת עליית המערכת. | | `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` | מספר הדקות לפני שמנגנון ה-guard של system-proxy מחזיר אוטומטית את הגדרות ה-proxy של מערכת ההפעלה. | | `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(אוטומטי)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | טוקן המאמת ingest של capture פנימי אל תוך ה-inspector. | | `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | מספר העמודות המרבי זו לצד זו במצב ההשוואה (compare) של ה-Playground. | | `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(לא הוגדר)_ | `src/app/(dashboard)/dashboard/playground/` | מודל ברירת המחדל עבור פעולת ה-'improve prompt' ב-Playground (חוזר למודל הפעיל כאשר לא הוגדר). | | `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | מתג כיבוי ראשי עבור ה-bifrost sidecar proxy. כאשר מוגדר ל-`0`, ה-route מחזיר 503 עם כותרת ה-`X-Bifrost-Killswitch` והמפעיל מופנה מחדש לנתיב ה-TS. יש להשתמש כדי להשבית את ה-sidecar ללא פריסה מחדש (אירוע tier-1 router, החלפת מפתחות). | | `BIFROST_BASE_URL` | _(לא הוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כאשר מוגדר, ה-route של ה-Bifrost sidecar proxy מעביר את תעבורת `/v1/chat/completions` ל-Go gateway זה במקום ל-relay handler של ה-TS. לא מוגדר → החזרת 503 עם fallback. לוכסן מסיים מוסר. | | `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | הפורט שאליו נקשר שירות ה-Bifrost המוטמע המפוקח (`127.0.0.1:`) כאשר OmniRoute מנהל את מחזור החיים של ה-Bifrost sidecar. ברירת מחדל: `8080`. | | `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` | כתובת ה-URL הבסיסית עבור ה-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 שה-LLMLingua sidecar המפוקח טוען (מועבר ל-env של תהליך הבן). | | `BIFROST_API_KEY` | _(לא הוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | מפתח API עבור ה-Bifrost gateway (נשלח כ-`Authorization: Bearer ...`). אם לא הוגדר, ה-route מצפה שהבקשה תישא מפתח API תקף של OmniRoute; מפתח זה מיועד לאימות בצד ה-gateway בלבד. | | `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כאשר true, נתיב ה-sidecar של Bifrost מזרים תגובות בחזרה דרך SSE דרך ה-gateway במקום דרך ה-executor של הזרמת ה-TS. הגדר `0` כדי לאלץ תגובות JSON לא-מוזרמות דרך ה-gateway. | | `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Timeout לכל בקשה בעת ביצוע proxy אל ה-gateway של Bifrost (באלפיות שנייה). ב-timeout הנתיב מחזיר את נתיב ה-relay של TS באמצעות הכותרת `X-Bifrost-Fallback`. | | `OMNIROUTE_BIFROST_KEY` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כינוי עבור `BIFROST_API_KEY` (בשימוש על ידי סקריפטים שקוראים את ה-env דרך `OMNIROUTE_*`). `BIFROST_API_KEY` מקבל קדימות כאשר שניהם מוגדרים. | | `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | ה-backend של ה-relay עבור `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = relay של TypeScript (ברירת מחדל כאשר Bifrost אינו מוגדר); `auto` בוחר Bifrost כאשר `BIFROST_BASE_URL` מוגדר ו-`BIFROST_ENABLED` ≠ `0`, עם fallback אוטומטי ל-TS אם ה-sidecar אינו נגיש; `bifrost` מאלץ Bifrost (קפדני, ללא fallback). בדיקות Auth/rate-limit/injection-guard/allowlist תמיד רצות קודם בנתיב ה-Next. התגובות נושאות את הכותרות `X-Routing-Backend` / `X-Routing-Fallback` / `X-Routing-Fallback-Reason`. | | `RELAY_ROUTING_BACKEND` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | כינוי מקובל עבור `OMNIROUTE_RELAY_BACKEND` (אותם ערכים `ts \| bifrost \| auto`). `OMNIROUTE_RELAY_BACKEND` מקבל קדימות כאשר שניהם מוגדרים. | | `OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS` | `5000` | `src/app/api/v1/relay/chat/completions/bifrostCooldown.ts` | תקופת cooldown (באלפיות שנייה) לאחר שה-hop אל ה-sidecar של Bifrost נכשל במצב `auto`, לפני שה-relay מנסה שוב את ה-sidecar; הוא מנתב ישירות לנתיב ה-TS כל עוד ה-cooldown נמשך, ואז בודק שוב. `0` משבית. חל רק כאשר `OMNIROUTE_RELAY_BACKEND=auto`. | | `OMNIROUTE_TLS_CERT` | _(לא מוגדר)_ | `bin/cli/commands/serve.mjs` | נתיב לאישור TLS בפורמט PEM כדי להגיש את `omniroute serve` דרך HTTPS (שווה ערך ל-`--tls-cert`). חייב להיות משויך עם `OMNIROUTE_TLS_KEY`; השרת העצמאי מסיים אז את ה-TLS על אותו listener (`wss://` עובד ללא שינוי). לא מוגדר → HTTP פשוט. מתן רק אחד מבין cert/key, או נתיב שאינו ניתן לקריאה, רושם אזהרה ונשאר ב-HTTP. | | `OMNIROUTE_TLS_KEY` | _(לא מוגדר)_ | `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 בסביבת production. חייב להיות `1` בפריסות שאינן loopback כדי לאפשר את ה-launcher של Redis ומפעילי שירותים מקומיים דומים בלחיצה אחת. הגנה כפולה (belt-and-suspenders) עם סיווג ה-route-guard של `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` ב-`src/server/authz/routeGuard.ts`). | | `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(לא מוגדר)_ | `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 וגם את ממשק ה-GUI של `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 מפרסם את ה-sidecar של Redis (#9286). ה-Redis של compose רץ ללא `requirepass`; קונטיינרי האפליקציה מגיעים אליו דרך רשת ה-compose (`redis:6379`) — הפורט המפורסם קיים רק עבור כלים בצד המארח. `0.0.0.0` חושף Redis ללא אימות לכל ה-LAN. | | `REDIS_PORT` | `6379` | `docker-compose.yml` | פורט המארח עבור ה-sidecar של Redis ב-compose. | | `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | ממשק המארח שעליו docker-compose מפרסם את פורטי הדשבורד/API/live-WS של האפליקציה עצמה (#12568). כאשר `REQUIRE_API_KEY=false` נשלח כברירת המחדל של `.env.example`, קישור ל-`0.0.0.0` חושף את פרוקסי ה-LLM האנונימי `/v1` לכל ה-LAN/WAN — הרחיבו רק לאחר ש-`REQUIRE_API_KEY=true` או ש-reverse proxy לפניו אוכף אימות משלו. | | `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שעליו docker-compose מפרסם את ה-sidecar של זיכרון Qdrant (#12578). אותו שיקול של חשיפה ל-LAN כמו ב-`REDIS_BIND_HOST`. | | `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שעליו docker-compose מפרסם את ה-sidecar של נתב 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` | גרסת קובץ-סוד של טוקן השירות הפנימי: נתיב לקובץ שהתוכן שלו (לאחר חיתוך רווחים) הוא הטוקן. נבדק רק כאשר המשתנה המוטבע (inline) אינו מוגדר. | | `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` | TTL של המטמון עבור תמונת המצב של סטטיסטיקות הספקים של OpenRouter, באלפיות שנייה. | | `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | אימג' Redis המשמש את משגר ה-Redis בלחיצה אחת. ניתן לעקוף ל-`redis:8-alpine` או למראה (mirror) של רג'יסטרי פרטי לפי הצורך. | | `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` | _(לא מוגדר)_ | _(פרופיל אשכול אופציונלי)_ | מפתח API אופציונלי עבור Qdrant Cloud או מופע מקומי (on-prem) מאומת. ריק → לא נשלחת כותרת `api-key`. | | `QDRANT_COLLECTION` | `omniroute-memory` | _(פרופיל אשכול אופציונלי)_ | שם האוסף (collection) עבור ההטמעות (embeddings) של זיכרון השיחות של OmniRoute. נוצר בהרצה הראשונה עם `QDRANT_VECTOR_SIZE` ממדים. | | `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(פרופיל אשכול אופציונלי)_ | שם מודל ההטמעה ברירת המחדל הנרשם במטא-דאטה של אוסף ה-Qdrant. ההטמעות בפועל נוצרות על ידי הספק שאליו מצביע השדה `embeddingModel` בהגדרות של OmniRoute. | | `QDRANT_VECTOR_SIZE` | `1536` | _(פרופיל אשכולות אופציונלי)_ | ממד וקטור ההטמעה (embedding). חייב להתאים למודל שאיתו אתם מבצעים embedding ‏(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 המופעלות כברירת מחדל). מאפשר ל-front-end מפקח (למשל, אפליקציית שולחן העבודה 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` | שיקוף של העדפת ה-front-end "אל תסמן כמוגבל-קצב ללא זמן איפוס". | | `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` (bad gateway). כאשר `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` רגילה (bad request) מפעילה רוטציית חשבון. זוהי תוספת בלבד — היא לעולם אינה חוסמת את ההתנהגות הקיימת של המנוע, שבה `400` הנושא טקסט של rate-limit/quota עדיין גורם למעבר חשבון ללא קשר לדגל זה. | | `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 שהצטרפו לתוכנית, כך שחלון ה-rate-limit בן 5 השעות נפתח על ידי בקשה מתוזמנת טריוויאלית במקום על ידי הבקשה האמיתית הראשונה (#8848). המתזמן כבוי אלא אם `OMNIROUTE_WARMUP_ENABLED` מוערך כאמת (truthy) **וגם** החיבור מסומן ב-`settings.claudeWarmup.connections`; רשימת חיבורים ריקה פירושה ששום דבר לא מחומם גם כשמשתנה הסביבה מופעל. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------ | --------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_WARMUP_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/warmupScheduler.ts` | מתג ראשי עבור מתזמן ה-warmup. מקבל `1`/`true`/`yes`/`on` (לא תלוי רישיות, עם חיתוך רווחים). כל ערך אחר, או אי-הגדרה, משאיר את המתזמן כבוי. | | `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | ביטוי cron בן חמישה שדות עבור פעימת ה-warmup, המחושב באזור הזמן `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` | המודל המשמש לבקשת ה-warmup. יש לעקוף רק אם ברירת המחדל אינה זמינה בתוכנית שלך; בחר את המודל הזול ביותר שעדיין פותח את החלון. | ### סשני VNC לכניסה דרך דפדפן וכינוי ל-Data-Dir 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 Protocol בתוך המכולה. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | נתיב תיקיית הפרופיל של Chromium בתוך המכולה. | | `OMNIROUTE_VNC_PROFILE_DIR` | `$HOME/.omniroute/browser-login-profiles` | `src/lib/vncSession/manifest.ts` | תיקיית המארח המכילה פרופילי כניסה דרך דפדפן שנשמרו. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` (10 דקות) | `src/lib/vncSession/manifest.ts` | פסק זמן חוסר פעילות (באלפיות שנייה) לפני שסשן VNC לא פעיל מסולק. | | `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 דקות) | `src/lib/vncSession/manifest.ts` | גבול עליון קשיח (באלפיות שנייה) על משך החיים של סשן VNC יחיד. | | `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | מספר מקסימלי של סשני VNC במקביל. | | `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | פסק זמן (באלפיות שנייה) להמתנה עד שהדפדפן במכולה יהיה מוכן ל-CDP. | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | פסק זמן (באלפיות שנייה) לאיסוף הסשן/העוגיות שנלכדו לאחר השלמת ההתחברות. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | דגלים נוספים של שורת פקודה המועברים ל-Chromium במכולה. | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | רשת Docker ייעודית שאליה מצטרפת מכולת ההתחברות של VNC (#12571) במקום גשר ברירת המחדל, כך שמכולות אחות לא יכולות להגיע לפורט גשר ה-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. חוגר בדיקות ו-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` | מצב ה-bootstrap של E2E (`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`). חלופה ממוקדת להשבתה מלאה של בדיקת התקינות — ספקים עם TTL קצר ממשיכים להתרענן בעוד ספקי cascade נשארים תגובתיים בלבד. | | `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | השתקת רעשי בדיקת התקינות ב-stdout של Playwright. | | `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | דילוג על בניית הייצור של Next.js לפני תחילת Playwright (אופטימיזציה ל-CI). | | `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | דילוג על ה-hook של הסרת ההתקנה של OmniRoute (משמש את CI לשמירה על `node_modules` ללא שינוי). | | `ECOSYSTEM_SERVER_WAIT_MS` | `180000` | `scripts/dev/run-ecosystem-tests.mjs` | זמן המתנה (באלפיות שנייה) עד שהשרת הופך לתקין לפני הרצת בדיקות האקוסיסטם/הפרוטוקול. | | `ELECTRON_SMOKE_URL` | `http://127.0.0.1:20128/login` | `scripts/dev/smoke-electron-packaged.mjs` | כתובת ה-URL שחוגר ה-smoke של Electron מצפה שהאפליקציה הארוזה תגיש. | | `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | פסק זמן כולל (באלפיות שנייה) לפני שחוגר ה-smoke מוותר. | | `ELECTRON_SMOKE_SETTLE_MS` | `2000` | `scripts/dev/smoke-electron-packaged.mjs` | חלון התייצבות (באלפיות שנייה) לאחר טעינת העמוד. | | `ELECTRON_SMOKE_APP_EXECUTABLE` | _(אוטומטי)_ | `scripts/dev/smoke-electron-packaged.mjs` | נתיב מפורש לקובץ ההרצה הארוז של Electron. | | `ELECTRON_SMOKE_DATA_DIR` | _(ספרייה זמנית)_ | `scripts/dev/smoke-electron-packaged.mjs` | ספריית הנתונים עבור ריצת ה-smoke של Electron. | | `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | הגדר `1` כדי לשמור את תיקיית נתוני הבדיקה (smoke) לאחר הריצה. | | `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. | ### צנרת תרגום התיעוד בשימוש על ידי `scripts/i18n/run-translation.mjs` (הפקודה `npm run i18n:run`). כל ששת המשתנים אינם מוגדרים כברירת מחדל — הגדר אותם ב-`.env` רק במכונות שאמורות להיות מסוגלות להריץ את מתרגם התיעוד. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------- | ------------ | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_TRANSLATION_API_URL` | _(לא מוגדר)_ | `scripts/i18n/run-translation.mjs` | כתובת URL בסיסית תואמת OpenAI עבור שרת התרגום. | | `OMNIROUTE_TRANSLATION_API_KEY` | _(לא מוגדר)_ | `scripts/i18n/run-translation.mjs` | אסימון Bearer עבור שרת התרגום (לעולם לא נרשם ביומן). | | `OMNIROUTE_TRANSLATION_MODEL` | _(לא מוגדר)_ | `scripts/i18n/run-translation.mjs` | מזהה מודל, למשל `gpt-4o-mini` או `cx/gpt-5.4-mini`. | | `OMNIROUTE_TRANSLATION_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` | בקרת reasoning אופציונלית, הנשלחת כפי שהיא לשרת כאשר היא מוגדרת. | | `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | בקשות תרגום מקבילות בעת הרצה על מספר קבצים / שפות (locales). | --- ## 27. עדכון Radar (אירוח עצמי) תוסף אופציונלי המוגבל באמצעות דגל התכונה RADAR_ENABLED (כבוי כברירת מחדל — דגל תכונה המופעל או מושבת דרך ההגדרות/מסד הנתונים, ולא משתנה סביבה; ראו [docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)). ארבעת המשתנים הראשונים להלן הם דריסות אופציונליות עבור עדכון באירוח עצמי או מפוצל ועבור תהליכי מפתחות תומכים. החמישי, `RADAR_ADMIN_URL`, הוא קישור נפרד ללא ערך ברירת מחדל אל לוח התפעול הפרטי של הבעלים. לתיעוד המלא של המודול ולפרטים על [רצף ההפעלה מקצה לקצה וההגדרה המונחית](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup), ראו [docs/frameworks/RADAR.md](../frameworks/RADAR.md). קורא ההכרזות הכללי בדף הבית/יומן השינויים אינו מוגדר באמצעות משתנה סביבה ואינו תלוי בדגל התכונה RADAR_ENABLED. הוא קורא באמצעות GET בלבד את כתובת ה-URL הציבורית של `news.json` במאגר, המוצהרת בקובץ `src/shared/utils/releaseNotes.ts`; מזהי הסגירה נשארים באחסון המקומי של הדפדפן. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `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 ‏(SPKI בקידוד base64-DER או PEM), המשמש לאימות חתימות עדכון משירות עדכונים מותאם אישית. | | `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | כתובת ה-URL שנפתחת באמצעות הלחצן "אני תורם" בלוח הבקרה (תהליך בקשת מפתח תומך באמצעות GitHub OAuth). | | `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | כתובת ה-URL שנפתחת באמצעות הלחצן "תמיכה בפרויקט" בלוח הבקרה (דף תשלום/תוכניות). | | `RADAR_ADMIN_URL` | _(לא מוגדר)_ | `src/lib/radar/links.ts` | קישור פרטי, לבעלים בלבד, אל לוח התפעול. נדרש HTTPS, למעט העברת SSH בלולאה חוזרת באמצעות HTTP; ערכים לא מוגדרים או לא תקינים אינם יוצרים פריט ניווט. | --- ## ביקורת: משתנים שהוסרו / שאינם בשימוש המשתנים הבאים הופיעו בגרסאות קודמות של `.env.example`, אך **אין להם הפניות בזמן ריצה** בבסיס הקוד הנוכחי. הם הוסרו: | משתנה | סיבה | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `STORAGE_DRIVER=sqlite` | אינו נקרא על ידי אף קובץ מקור. SQLite הוא מנהל ההתקן היחיד הנתמך — אין צורך בבחירה. | | `INSTANCE_NAME=omniroute` | מופיע בתיעוד ישן ובתבניות env, אך אינו בשימוש בזמן ריצה. ייתכן שיוחזר בעתיד במסגרת תכונה לריבוי מופעים. | | `SQLITE_MAX_SIZE_MB=2048` | אין אליו הפניה בקוד המקור. גודל מסד הנתונים אינו מוגבל באופן מלאכותי. | | `SQLITE_CLEAN_LEGACY_FILES=true` | אין אליו הפניה בקוד המקור. סביר להניח שניקוי הקבצים הישנים הוסר. | | `CLI_ROO_BIN` | אינו רשום ב-`src/shared/services/cliRuntime.ts`. | | `CLI_KIMI_CODING_BIN` | אינו רשום ב-`src/shared/services/cliRuntime.ts` (Kimi Coding משתמש ב-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` | הוסרו ב-v3.8.0. סביבת זמן הריצה כבר אינה קוראת משתני env אלה — פרטי הגישה מגיעים מלוח הבקרה / `data/provider-credentials.json` / מסד הנתונים המוצפן. | | `CURSOR_PROTOBUF_DEBUG` | הוסר ב-v3.8.0. המבצע של Cursor משתמש ב-`CURSOR_DEBUG` / `CURSOR_STREAM_DEBUG` (ראו §22). | | `CLI_COMPAT_KIRO` | הוסר ב-v3.8.0. Kiro נמצא ב-`CLI_COMPAT_OMITTED_PROVIDER_IDS` — למתג שלו אין כל השפעה. | | `QIANFAN_API_KEY` | הוסר לצד שלדי מפתחות API אחרים של ספקים שלא היו בשימוש ב-v3.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 לאימות מול נקודת הקצה `/v1/models` של OmniRoute. אם אינו מוגדר, נעשה שימוש ב-`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`, ממשק שורת הפקודה להערכת דחיסה לא מקוונת. אינה נדרשת לפעולה רגילה — מיועדת לכלי פיתוח בלבד. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------- | ---------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (ריק) | `scripts/compression-eval/index.ts` | פרטי אימות בפורמט JSON שמספק המפעיל עבור הספק שנבדק באמצעות ממשק שורת הפקודה להערכת דחיסה לא מקוונת (מנותחים באמצעות `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` | ארגומנטים נוספים של CLI עבור Chromium, המועברים לדפדפן שבתוך הקונטיינר. | | `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | יציאת VNC בתוך הקונטיינר. | | `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | יציאת Chrome DevTools Protocol בתוך הקונטיינר. | | `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | ספריית הפרופיל בתוך הקונטיינר. | | `OMNIROUTE_VNC_PROFILE_DIR` | _(לא מוגדר)_ | `src/lib/vncSession/manifest.ts` | ספרייה בצד המארח עבור פרופילי דפדפן מתמידים. | | `OMNIROUTE_VNC_IDLE_MS` | `600000` | `src/lib/vncSession/manifest.ts` | זמן קצוב לחוסר פעילות (אלפיות שנייה) לפני איסוף הפעלת VNC. | | `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` | הזמן הקצוב למוכנות הדפדפן (אלפיות שנייה). | | `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | הזמן הקצוב לאיסוף/ניקוי (אלפיות שנייה). | | `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` | אורך חיי המטמון (אלפיות שנייה) עבור סטטיסטיקות ספקי 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` | המתנה מקסימלית לחריץ קבלה (admission) של צ'אט כבד לפני `503` הניתן לניסיון חוזר; המתנה קצרה ומוגבלת מסדרת פרצי סוכנים במקום `503` מיידי. `0` משחזר דחייה מיידית. | | `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | תקציב בתים ממתינים עבור המתנת הקבלה: מגביל את סך בתי גוף הבקשה המאוחסנים בחוצץ ברמת התהליך כך שההמתנה לא תוכל להגדיל את הערימה (heap) (#4380). המתנות החורגות מהתקציב מקבלות `503` הניתן לניסיון חוזר באופן מיידי. | | `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `src/shared/middleware/chatBodyAdmission.ts` | מיושן וחסר-פעולה מאז #10110: נתיבי קבלה לפי-סשן הוסרו לטובת תקציב אחד ברמת התהליך. מתקבל לצורך תאימות תצורה; מתעלמים ממנו. | | `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | מיושן וחסר-פעולה מאז #10110: נתיבי קבלה לפי-סשן הוסרו לטובת תקציב אחד ברמת התהליך. מתקבל לצורך תאימות תצורה; מתעלמים ממנו. | | `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (כבוי) | `open-sse/services/admission/runtime.ts` | נתיבי קבלה וירטואליים אדפטיביים בזמן ריצה (#9654): מתג ראשי עבור שער הבקרה האדפטיבי לפי-דייר (system 2). נבדל ממשתני הנתיבים המיושנים לפי-חיבור שלעיל (TTL_MS / MAX_SESSIONS, חסרי-פעולה מאז #10110). דגל תכונה בדשבורד באותו שם; משתנה הסביבה גובר על הדריסה מהדשבורד; דורש הפעלה מחדש. | | `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | מגביל כמה זמן קריאת run-now ממתינה לעבודה שבתהליך לפני שמתחילה את הריצה הממתינה בתור. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | מופעל | `open-sse/services/adobeFireflySession.ts` | שומר על עדכניות מצב ה-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` | מרווח מינימלי בין הגשות generate של Adobe Firefly. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | תקופת שקט נוספת לאחר כל הגשת Adobe מוצלחת שלישית. | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | מצב headless אמיתי לניפוי-שגיאות בלבד; Adobe colligo בדרך כלל דוחה את סשן הסיכון שנוצר. | | `CHROME_PATH` | זיהוי אוטומטי | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | קובץ הפעלה אופציונלי עם נתיב מוחלט של Chrome, המשמש את המבצעים המבוססי-דפדפן כאשר זיהוי אוטומטי של הפלטפורמה אינו מספיק. | | `TELEGRAM_BOT_TOKEN` | _(לא מוגדר)_ | `src/lib/telegram/config.ts` | טוקן BotFather המאפשר את ה-webhook הנכנס וחותם על `initData` של Mini App. | | `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_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | דריסת כתובת בסיס של Bot API עבור פרוקסי או שרתי Bot API עצמאיים. | | `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | פסק-זמן במילישניות עבור קריאות Bot API יוצאות. | | `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (מופעל) | `scripts/build/optionalPackStaging.mjs` | הגדר `0` כדי לדלג על הפקת קובצי `.tar.gz` בעת הכנת חבילות ML/דפדפן אופציונליות עבור עץ ה-standalone של 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` | דריסת מטפל-אותות פנימית של שרת ה-standalone; בדרך כלל מוגדרת ומנוקה על-ידי ה-launcher ולא מוגדרת על-ידי מפעילים. | ### ChatGPT Web (Codex) ברירות מחדל גלובליות עבור הדפדפן ה-headless ומנהרת הכלים היוצאת. ערכי חיבור שהוגדרו בדשבורד גוברים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CHATGPT_WEB_CODEX_CHROME_PATH` | _(זיהוי אוטומטי)_ | `open-sse/executors/chatgpt-web-codex.ts` | נתיב Chrome/Chromium מפורש עבור הרצה עם npm, systemd ו-PM2. | | `CHROME_PATH` | _(זיהוי אוטומטי)_ | `open-sse/executors/chatgpt-web-codex.ts` | נתיב גיבוי (fallback) משותף עבור נתיב Chrome/Chromium מפורש. | | `CHATGPT_WEB_CODEX_CDP_URL` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | נקודת קצה CDP פנימית; Docker משתמש ב-Sidecar בפורט `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` | כאשר מוגדר, כל בקשה ל-CDP-Proxy-Sidecar חייבת לשלוח ערך זה בכותרת `X-Omni-Cdp-Token` (#13679). ללא ערך, ה-proxy מעביר בקשות ללא אימות — ואז רק בידוד הרשת של רשת ה-Compose `chatgpt-web-codex-net` מגן. ניתן ליצור באמצעות `openssl rand -hex 32`. | | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | מזהה Tunnel גלובלי של OpenAI עבור סבבי כלי Codex מקומיים. | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | מפתח Runtime גלובלי של ה-Tunnel; לעולם לא להדפיס ללוגים. | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | השם המדויק של ה-Custom Connector החדש של ChatGPT שנוצר עבור גשר ה-MCP. | | `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | תיקייה ייעודית למצב הדפדפן, ה-Broker וה-Tunnel. | | `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | כאשר מוגדר `1`, תמונות אבחון של הדפדפן נאספות בכל נקודת ביקורת. | | `CODEX_CHATGPT_WEB_LAUNCHER` | _(לא מוגדר)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | נתיב מוחלט אופציונלי ל-binary של Launcher קבוע. | | `CODEX_CHATGPT_WEB_BUN` | _(זיהוי אוטומטי)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | נתיב מוחלט אופציונלי ל-binary של סביבת ההרצה Bun. | | `CODEX_WEB_GPT_BUN` | _(לא מוגדר)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | נתיב גיבוי מדור קודם (legacy) עבור `CODEX_CHATGPT_WEB_BUN`; התקנות חדשות משתמשות בשם הקנוני. | --- ## גשר OmniConductor צרכן SSE ארוך-חיים המשקף משימות מרכזת OmniConductor אל ה-TaskManager המקומי של A2A (`src/lib/conductor/`). מצב opt-in — הגשר מופעל רק כאשר `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 — הפק peer מסוג `spokesperson` ברכזת (`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 הבסיסית של שירות ה-spokesperson (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`, טבלה `provider_quota_state`) אינו מספיק לכסות את עלות הבקשה המשוערת לפני השיגור. כשל פתוח (fail-open) כאשר לא הוגדר תקציב. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(מופעל)_ | `open-sse/services/estimatorCalibration.ts` | כיול משוב של מעריך הטוקנים של context-guard (#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`. דגל תכונה (feature flag) של לוח הבקרה באותו השם; דריסה בבסיס הנתונים גוברת על ערך זה. |