# 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` | משמש לחתימה ולאימות של כל קובצי ה-Cookie של הפעלות לוח הבקרה (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`, ולכן הן מתחילות עם ה-placeholder הידוע לציבור שלו `CHANGEME`: החליפו אותו לפני ההפעלה הראשונה, או הגדירו `INITIAL_PASSWORD=` (ריק) בקובץ `.env` זה כדי ליצור את הסיסמה באשף ההגדרה הראשונית בביקור הראשון, כפי שעושה ערך לא מוגדר (ברירת המחדל של דמות Docker). יש לשנות סיסמה שמורה בלוח הבקרה ← הגדרות ← אבטחה, או להריץ `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` | לא | _(SHA של git)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | מזהה מפורש לשבירת מטמון ה-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=…`; נגזר משני הערכים שלעיל, ולאחר מכן מה-SHA של git. | | `OMNIROUTE_PEER_STAMP_TOKEN` | לא (אוטומטי) | _(אוטומטי בכל אתחול)_ | `src/server/authz/policies/management.ts` | סוד ייחודי לתהליך, המוכיח שחותמת כתובת ה-IP של העמית המהימן הגיעה משרת ה-HTTP של OmniRoute עצמו (`scripts/dev/peer-stamp.mjs`). תווכת ה-authz נותנת אמון במקומיות הבקשה (חסימת נתיבי LOCAL_ONLY לפי loopback/LAN) רק כאשר החותמת מכילה אסימון זה. נוצר אוטומטית בכל אתחול — יש להשאירו לא מוגדר; יש לקבע אותו רק בתצורות מרובות תהליכים שחייבות לשתף את החותמת. | | `OMNIROUTE_TRUSTED_PROXIES` | לא | _(לא מוגדר)_ | `scripts/dev/peer-stamp.mjs` | כתובות IP או טווחי CIDR, מופרדים בפסיקים, של שרתי reverse proxy אשר רשימת ההרשאה/חסימה לפי IP רשאית לתת אמון בערכי `X-Forwarded-For` / `X-Real-IP` שלהם, נוסף על כתובות loopback, כתובות של רשתות פרטיות ונקודות קצה של Cloudflare, אשר תמיד נחשבות מהימנות. נדרש רק עבור proxy בכתובת ציבורית אחרת כלשהי; אחרת, הכתובת של ה-proxy עצמו היא זו שהמסנן בוחן. | ### פקודות יצירה ```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, גיבויים וקובצי נתונים. ניתן לעקוף אותה עבור אמצעי אחסון של Docker או נתיבים מותאמים אישית. | | `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(לא מוגדר)_ | `src/lib/dataPaths.ts` | מנגנון מילוט עבור הגנת DATA_DIR בבדיקות ובהערכות (#10428). בדיקות ופקודות הערכה/הדפסה של Node (`-e`/`--eval`/`-p`/`--print`, לרבות הצורות `--eval=`/`--print=`) ללא `DATA_DIR` מנותבות לספרייה זמנית חד-פעמית, כדי שלא יוכלו לפתוח את מסד הנתונים האמיתי של המפעיל; יש להגדיר ל-`1` כדי לחזור ולהשתמש בספרייה האמיתית. | | `OMNIROUTE_BUILD_SHA` | _(לא מוגדר)_ | `src/lib/monitoring/buildSha.ts` | ה-Git SHA של הארטיפקט הפעיל. מוטבע על ידי `npm run build:release`; ניתן להזרקה בקונטיינרים המופצים ללא הסמן `dist/BUILD_SHA`. נחשף בתור `system.buildSha` ב-`/api/monitoring/health`. | | `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | ה-ref שמולו שער מקור הארטיפקט הארוז בודק את ה-SHA של ה-build (#10427). | | `OMNIROUTE_ALLOW_CANARY_BUILD` | _(לא מוגדר)_ | `scripts/build/buildProvenance.ts` | יש להגדיר ל-`1` כדי לאפשר אריזת build שה-SHA שלו אינו נמצא בענף ההפצה, תוך רישומו כגרסת קנרי מכוונת במקום הכשלת השער (#10427). | | `OMNIROUTE_SMOKE_API_KEY` | _(לא מוגדר)_ | `scripts/ops/deploy-canary.mjs` | מפתח API עבור בדיקת העשן של פריסת הקנרי, הנשלח בתור `Authorization: Bearer` אל `/v1/chat/completions`. משמש רק את סקריפט הפריסה (#10429), ולעולם לא את השרת. אינו קשור למשתני `OMNIROUTE_SMOKE_*` של מסגרת בדיקות העשן האופציונלית ב-CLI (`RUN_CLI_SMOKE=1`,‏ `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` בתוך `tests/integration/upstream-cli-smoke.int.test.ts`) — ראו [שילובי CLI ← סריקת עשן אמיתית](../guides/CLI-INTEGRATIONS.md). | | `OMNIROUTE_BUILDING` | _(לא מוגדר)_ | `src/lib/buildPhase.ts` | אות לשלב ה-build (#10060): מוגדר ל-`1` על ידי `scripts/build/build-next-isolated.mjs` ועובר בירושה לכל תהליך build שנוצר, כדי ששכבת מסד הנתונים תחזיר stub שאינו מבצע פעולה במקום לטעון את התוסף המקורי better-sqlite3 (שגורם לתהליך להיסגר באופן חריג בעת היציאה). לעולם אינו מוגדר עבור השרת הפעיל. | | `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | יש להגדיר ל-`1` כדי לדלג על בדיקת ה-prebuild האופציונלית של תלויות מקוריות עבור עצי קוד חריגים שסופקו כחלק מהחבילה. הדבר אינו מאפשר לבצע build כאשר תלות חסרה; יש להשתמש בכך רק כאשר התלויות המקוריות מסופקות מחוץ למנגנון הרגיל. | | `OMNIROUTE_DATA_DIR` | _(לא מוגדר)_ | `open-sse/executors/promptql/threadSticky.ts` | **כינוי גיבוי** עבור `DATA_DIR`, הנבדק רק כאשר `DATA_DIR` אינו מוגדר. משמש לאיתור מטמון הסשנים הדביקים לשרשור של מבצע PromptQL בדיסק (`/promptql-thread-sessions.json`); אם אף אחד מהמשתנים אינו מוגדר, המטמון נשאר בזיכרון בלבד (ואינו נשמר בין הפעלות מחדש). | | `OMNIROUTE_PLUGINS_DIR` | _(לא מוגדר)_ | `src/lib/plugins/scanner.ts` | הספרייה שסורק התוספים **בזמן ריצה** קורא — וגם ספריית הבסיס שבה מנהל התוספים מתקין — תוך עקיפת ברירת המחדל הנגזרת מספריית הבית (#11827). ב-Docker/K8s יש להפנות אותה אל עץ התוספים המעוגן באמצעות bind mount, במקום לשנות את HOME רק כדי להעביר את נתיב הסריקה (HOME שולט גם בכל התנהגות אחרת התלויה בספריית הבית). כאשר אינו מוגדר = `~/.omniroute/plugins`, או `/tmp/.omniroute/plugins` כאשר התהליך אינו מייצא כלל ספריית בית — ובכך נמנע מצב של אי-גילוי שקט. הספרייה שנקבעה נרשמת פעם אחת בעת האתחול בתור `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 דקות. ניתן להשבית בנפרד גיבוי אוטומטי שגרתי דרך **הגדרות → אחסון** בלוח הבקרה. | | `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 מתוחזק באמצעות נקודות ביקורת מסוג PASSIVE (להלן) ומקוצץ באמצעות נקודת הביקורת בעת הכיבוי. | | `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 דקות) | `src/lib/db/walMaintenance.ts` | שינוי המרווח התכוף של `wal_checkpoint(PASSIVE)` (באלפיות שנייה). שומר על מספר קטן של מסגרות WAL ממתינות, כדי שנקודות הביקורת יישארו מהירות ושגודל קובץ ה־WAL יישאר מוגבל בין קיצוצים בעת כיבוי. `0` משבית. | | `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | כאשר מחזור PASSIVE מגלה שקובץ ה־WAL חורג מגודל זה, מופעל `wal_checkpoint(RESTART)` כדי שה־WAL יתחיל מחדש בלי לשכתב את ה־wal-index הממופה. נקודות ביקורת במצב קיצוץ בזמן אמת הוסרו (ראו את השורה `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). | | `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | יש להגדיר כ־`1`/`true`/`yes`/`on` כדי לסיים את התהליך לאחר שלחץ משאבים קריטי נמשך במשך `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, ולאפשר למפקח (systemd עם `Restart=always`, מדיניות הפעלה מחדש של Docker) להעלות תהליך נקי במקום להחזיר שגיאות 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 נשארים פעילים. בנוסף, 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` | מספר הימים שבהם נשמרים נקודות הביקורת, קובצי הקלט/הפלט/השגיאה המופנים והרשומה של משימת Batch API סופית (הושלמה/נכשלה/בוטלה/פג תוקפה), לפני מחיקתם בסריקת הניקוי האוטומטית. נכנס לתוקף רק לאחר הפעלת `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` ← זמן ריצה. | | `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | הגדירו ל-`1` כדי לדלג לחלוטין על בדיקת תקינות מסד הנתונים בעת ההפעלה. שימושי למשימות קצרות-חיים ולבדיקות אינטגרציה. | | `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | הגדירו ל-`1` כדי לאלץ את הפעלת לולאת בדיקת תקינות מסד הנתונים, גם כאשר בדרך כלל היו מדלגים עליה (למשל, במשימות קצרות-חיים). | | `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | הגדירו ל-`1` כדי לדלג על החימום המקדים של סביבת הריצה המקומית במהלך `npm install`. שימושי בהתקנות CI/נטולות ממשק, שבהן sqlite כבר בנוי. | | `OMNIROUTE_MIGRATIONS_DIR` | _(זיהוי אוטומטי)_ | `src/lib/db/migrationRunner.ts` | דרסו את הספרייה שסורק מריץ המיגרציות. שימושי כאשר מפיצים מיגרציות מאוגדות בגרסאות מותאמות אישית. | | `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(לא מוגדר)_ | `src/lib/db/migrationRunner/extraDirs.ts` | ספריות מיגרציה נוספות כרשומות `namespace=dir`, המופרדות באמצעות תו הפרדת הנתיבים של הפלטפורמה (למשל `ee=/opt/app/enterprise/db/migrations`). קבצים שנמצאו בהן נרשמים בתור `-`, כך שהפצה הכוללת מיגרציות משלה לעולם אינה מתנגשת במשבצות המספריות של המקור. רשומה פגומה, מרחב שמות לא תקין או ספרייה חסרה גורמים לשגיאה בעת ההפעלה במקום לדלג בשקט על הסכימה. | | `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | סף בטיחות למספר רב של מיגרציות ממתינות (#3416). ההפעלה מבוטלת אם במסד נתונים קיים ממתינות יותר ממספר זה של מיגרציות (כהגנה מפני טבלת מעקב שנמחקה). הגדילו אותו כדי לשחזר גיבוי ישן יותר; הגדירו ל-`0` כדי להשבית את הבדיקה. | | `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | ספריית העבודה עבור שער ההפצה `check:install-upgrade`. היא זקוקה לכ-12 GB (שני עצי התקנה של כ-3 GB כל אחד, בנוסף לקובץ ה-tarball), ולכן אין להפעיל אותה על tmpfs קטן — במריץ באירוח עצמי, `/tmp` הוא tmpfs מבוסס-RAM בגודל 12 GB, והשער מיצה אותו וגרם לקיטוע החבילה. | | `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(ברירת המחדל בקוד)_ | `src/lib/spend/batchWriter.ts` | מרווח הריקון (באלפיות שנייה) עבור כותב ההוצאות/עלויות המקובץ. ערכים נמוכים יותר מצמצמים את איחוד הכתיבות; ערכים גבוהים יותר מפחיתים עומס תחרות על מסד הנתונים. | | `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(ברירת המחדל בקוד)_ | `src/lib/spend/batchWriter.ts` | המספר המרבי של רשומות הוצאה שיישמרו במאגר לפני ריקון מאולץ. הגדילו בפריסות בעלות QPS גבוה; הקטינו כאשר הגבלת הזיכרון חשובה יותר. | | `OMNIROUTE_PROXY_FETCH_DEBUG` | _(לא מוגדר)_ | `open-sse/utils/proxyFetch.ts` | הגדירו ל-`"true"` כדי להפיק יומני ניפוי שגיאות של `[ProxyFetch]` בנתיב הממסר של Vercel. מושבת כברירת מחדל כדי למנוע חשיפת רמזי ניתוב. | | `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(לא מוגדר)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | הנתיב המוחלט לקובץ הבינארי המקומי של ליבת ה-proxy (קובץ בשם `sing-box`), שבודק תצורת ליבה שנוצרה לפני שהיא מחליפה את הקובץ שאומץ. כאשר אינו מוגדר, נכתב רק `.generated` לצד הקובץ שאומץ. סביבת המארח בלבד: הערך לעולם אינו נשמר במסד הנתונים ואינו מתקבל דרך ה-API לניהול, משום שהקובץ הבינארי מופעל. | | `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(לא מוגדר)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | האופן שבו ליבת ה-proxy המקומית נטענת מחדש לאחר החלפה מאומתת של התצורה: מערך ארגומנטים בפורמט JSON המופעל ללא מעטפת, או בדיוק `external` כאשר צופה חיצוני מחיל את הקובץ. הערך לעולם אינו נשמר במסד הנתונים ואינו נחשף דרך ה-API. | | `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | הגדירו ל-`"true"` או ל-`"1"` כדי לכלול כתובות IP של הלקוח/היציאה ואת קידומת החשבון בשורת יומן התהליך המפורטת `[ProxyEgress]`. האפשרות נשארת כבויה כברירת מחדל, כדי שיומן התהליך לא ידליף כתובות IP או את קידומת החשבון. | | `OMNIROUTE_DEBUG` | _(לא מוגדר)_ | `bin/cli/commands/quota.mjs` | הגדירו ל־`1` כדי להדפיס אל stderr אבחוני תזמון לכל בקשה (`[omniroute] GET completed in Nms`) מפקודות המכסה של ה־CLI. | | `OMNIROUTE_HEALTHCHECK_PATH` | _(אוטומטי)_ | `scripts/dev/healthcheck.mjs` | נתיב מפורש שנבדק על־ידי בדיקת התקינות של הקונטיינר. כאשר אינו מוגדר, הבדיקה גוזרת אותו מתוך `OMNIROUTE_BASE_PATH`; הגדרתו מחזירה את השימוש בנקודת הקצה לניטור מעמיק. | | `OMNIROUTE_DEBUG_COMPLETION` | _(לא מוגדר)_ | `bin/cli/commands/completion.mjs` | הגדירו לערך כלשהו שאינו ריק כדי להפיק אבחוני `[omniroute completion]` מנתיבי המטמון של ההשלמה האוטומטית במעטפת דרך ה־CLI (קריאה/רענון/כתיבה). מושבת כברירת מחדל — כשלים במטמונים אלה מתרחשים בשקט, כך שמטמון חסר/פגום לעולם אינו משבש השלמה באמצעות Tab. | | `BATCH_RETRY_DURATION_MS` | `86400000` (24 שעות) | `open-sse/services/batchProcessor.ts` | חלון הניסיונות החוזרים המרבי עבור פריטים בודדים באצווה (מ״ש). פריטים החורגים ממשך זמן זה מסומנים ככושלים. | | `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | השהיית הבסיס (מ״ש) להשהיה מעריכית בניסיונות חוזרים של פריטי אצווה. | | `BATCH_BACKOFF_MAX_MS` | `3600000` (שעה אחת) | `open-sse/services/batchProcessor.ts` | התקרה (מ״ש) להשהיה מעריכית בין ניסיונות חוזרים של פריטי אצווה. | | `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | מספר האצוות המרבי המעובד במקביל. הגדילו כדי לשפר את התפוקה; השאירו נמוך כדי להימנע מהצפה של מגבלות קצב. | > [!IMPORTANT] > לפני שינוי מסד נתונים מתמיד קיים, מפעיל ההעברה מפרסם תמונת מצב מלאה, > ממוענת־תוכן תחת `DATA_DIR/db_backups/`. הפרסום דורש מערכת קבצים > התומכת בקישורים קשיחים ללא דריסה באותה מערכת קבצים ובסנכרון קבצים עמיד. מארחי POSIX דורשים גם > סנכרון תיקיות; ב־Windows, ‏Node עשוי לדחות מזהי תיקיות, ולכן OmniRoute מסנכרן את > הקובץ שפורסם ומתייחס לסנכרון רשומת התיקייה כמאמץ מיטבי. > אם `DATA_DIR` המעוגן אינו יכול לספק ערבויות אלה, האתחול נכשל באופן בטוח לפני החלת > העברה. העבירו את `DATA_DIR` לאמצעי אחסון המספק יכולות בסיסיות אלה; אין להשתמש ב־ > `DISABLE_SQLITE_AUTO_BACKUP` כדי לעקוף את בטיחות ההעברה. ### תרחישים | תרחיש | תצורה | | ---------------- | -------------------------------------------------------------------------------- | | **פיתוח מקומי** | השאירו את כל ברירות המחדל. מסד הנתונים נמצא ב־`~/.omniroute/omniroute.db`. | | **Docker** | `DATA_DIR=/data` + עגנו אמצעי אחסון ב־`/data`. | | **מוצפן במנוחה** | הגדירו `STORAGE_ENCRYPTION_KEY` + שמרו גיבויים של המפתח! אובדנו = אובדן הנתונים. | | **CI/בדיקות** | `DATA_DIR=/tmp/omniroute-test` — זמני, ללא צורך בהצפנה. | --- ## 3. רשת ויציאות | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | היציאה הראשית הן עבור ממשק המשתמש של לוח הבקרה והן עבור נקודות הקצה של ה-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`); תמונות שורש שנבנו מראש יכולות להחיל ערך שונה בזמן ריצה פעם אחת בעת הפעלת הקונטיינר, לפני ש-Next.js עולה. יש להגדיר את `NEXT_PUBLIC_BASE_URL` למקור הציבורי, כולל אותו נתיב משנה. | | `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(ריק = שורש)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | עותק של `OMNIROUTE_BASE_PATH` הנגיש לדפדפן, שמוטמע בזמן הבנייה כדי שתצוגת נקודת הקצה בלוח הבקרה תציג `https://host/omniroute/v1` במקום `https://host/v1`. אם אינו מוגדר, נעשה שימוש ב-`OMNIROUTE_BASE_PATH`. יש לבנות מחדש לאחר שינוי (ה-`basePath` של Next מוגדר בזמן הבנייה). | | `DASHBOARD_ALLOW_EMBED` | _(לא מוגדר = לעולם לא ניתן למסגור)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | מאפשר במפורש הטמעה של דפי ה-HTML ב-iframe. כאשר אינו מוגדר, כל נתיב נשלח עם `frame-ancestors 'none'` וגם עם `X-Frame-Options: DENY`. יש להגדיר ל-`vscode` כדי להגיש את הדפים (לוח הבקרה, ההתחברות, התיעוד ודף הנחיתה) עם `frame-ancestors 'self' vscode-webview:` וללא `X-Frame-Options`, כך ש-VS Code Simple Browser יוכל להציג אותם (מצב `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` | כאשר מוגדר, מגיש את API ה-proxy של `/v1/*` ביציאה נפרדת זו. | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | כתובת ההאזנה עבור יציאת ה-API. | | `DASHBOARD_PORT` | _(לא מוגדר)_ | `src/lib/runtime/ports.ts` | כאשר מוגדר, מגיש את ממשק המשתמש של לוח הבקרה ביציאה נפרדת זו. | | `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(מושבת)_ | `src/sse/utils/backpressure.ts` | מגביל את מספר חיבורי הצ'אט הפעילים במקביל; בקשות מעבר למגבלה מקבלות `503` עם `Retry-After`. מספר שלם חיובי מפעיל את מנגנון ההגנה; ערך לא מוגדר או `0` משבית אותו. | | `OMNIROUTE_INSTANCE_ID` | _(לא מוגדר)_ | `src/shared/resilience/peerRouting.ts` | מזהה יציב וייחודי עבור שער זה בעת שרשור מופעי OmniRoute. מאפשר בדיקות נכנסות לאיתור לולאות בין עמיתים. תווים מותרים: אותיות, ספרות, `.`, `_`, `:` ו-`-`; לכל היותר 64 תווים. | | `OMNIROUTE_PEER_URLS` | _(לא מוגדר)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | כתובות URL בסיסיות של OmniRoute, מופרדות בפסיקים, שעשויות לקבל `X-OmniRoute-Peer-Trace`. רק כתובות URL של שירותים במעלה הזרם שהותרו במפורש מקבלות מטא-נתוני עמית; כל שאר הספקים נותרים ללא שינוי. | | `OMNIROUTE_PEER_MAX_HOPS` | `4` | `src/shared/resilience/peerRouting.ts` | המספר המרבי של מופעי OmniRoute שבהם ביקרה הבקשה קודם לכן ושמתקבל בבקשה משורשרת (`1`-`32`). מופעים חוזרים או מיצוי המכסה מחזירים HTTP `508 Loop Detected`. | | `PROD_DASHBOARD_PORT` | `20130` | `docker-compose.prod.yml` | הפורט בצד המארח שמתפרסם עבור לוח הבקרה במצב ייצור של Docker. | | `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | הפורט בצד המארח שמתפרסם עבור ה-API במצב ייצור של Docker. | | `OMNIROUTE_PORT` | _(לא מוגדר)_ | `src/lib/runtime/ports.ts` | מקבל עדיפות על פני `PORT` בעת הפעלה בתוך Electron או מעטפות אחרות. | | `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | הפורט עבור שרת הניטור החי בזמן אמת של WebSocket. | | `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | כתובת האיגוד עבור שרת ה-WebSocket החי. הגדירו ל-`0.0.0.0` כדי לחשוף אותו ברשת המקומית (יש להגדיר גם את `LIVE_WS_ALLOWED_ORIGINS`). | | `LIVE_WS_ALLOWED_ORIGINS` | _(לא מוגדר)_ | `src/server/ws/liveServer.ts` | מקורות נוספים, מופרדים בפסיקים, שמורשים לפתוח WebSocket חי. מקורות לוח הבקרה בכתובות loopback כבר מורשים כברירת מחדל. | | `LIVE_WS_ALLOWED_HOSTS` | _(לא מוגדר)_ | `src/server/ws/liveServerAllowList.ts` | שמות מארחים נוספים, מופרדים בפסיקים, שמורשים עבור מקורות WebSocket חי. בניגוד ל-`LIVE_WS_ALLOWED_ORIGINS` (כתובות URL מלאות של מקור), ההתאמה מתבצעת רק מול חלק המארח — שימושי עבור הגדרות 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`. חלק הנתיב משמש גם כנתיב השדרוג של WebSocket (ברירת מחדל: `/live-ws`). | | `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` וגם `scripts/start-ws-server.mjs` | הגדירו ל-`0` או ל-`false` כדי להשבית את שרת ה-WebSocket בזמן אמת (מופעל כברירת מחדל ומאוגד ל-loopback). מתג CI/רתמת בדיקה שמשבית את סקריפט העזר העצמאי של WebSocket חי. | | `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | מגבלת קצב הממסר לכל (אסימון, IP), בבקשות לדקה. נשמרת בזיכרון ונפרדת לכל מופע. `0` או ערך שלילי משביתים את השער לפי ממד ה-IP (המגבלה במסד הנתונים לכל אסימון עדיין חלה). | | `NODE_ENV` | `production` | ליבת Next.js | שולט ברמת הפירוט של הרישום ביומן, בשמירה במטמון, בחשיפת פרטי שגיאות ובאופטימיזציות של Next.js. | | `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — ברירת המחדל בקוד) | `package.json` / Next.js 16 | Turbopack הוא מאגד ברירת המחדל עבור `npm run dev` ועבור `npm run build` (בניות מהירות פי 2–3, לפי בדיקות ביצועים). הגדירו ל־`0` כדי לחזור ל-webpack ב-Windows, בעת היתקלות באי־תאימויות של קישור מקורי / תאימות מאגד, **או במחשבים עם זיכרון RAM מוגבל** — ידוע במעלה הזרם שבניות production של Turbopack בסדרת גרסאות זו של Next.js‏ (16.2.x) מגיעות לשיאי שימוש גבוהים בהרבה בזיכרון לעומת webpack בגרפי מודולים גדולים (תיקון פינוי הזיכרון של Turbopack ב-Next 16.3 עדיין אינו יציב); חלופת webpack מגיעה לשיא נמוך בהרבה. ראו #6409. **בניות של תמונת Docker משתמשות כברירת מחדל ב־`0` (webpack)**: הקובץ `Dockerfile` מצהיר על `ARG OMNIROUTE_USE_TURBOPACK=0`, כך שהרצת `docker build .` ללא אפשרויות נוספות (Railway ומארחים אחרים בהפעלה בלחיצה אחת, וכן אירוח עצמי אד־הוק) לא תופסק עקב OOM בבונה בעל מגבלת זיכרון; העבירו `--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 כאשר התהליך פועל תחת יחידת שירות עם שילוב sd_notify;‏ OmniRoute קורא אותו (ראו `OMNIROUTE_DISABLE_SD_NOTIFY`) כדי לשלוח התראות READY/WATCHDOG. לעולם אינו מוגדר על ידי המשתמש. | | `OMNIROUTE_DISABLE_SD_NOTIFY` | _(לא מוגדר)_ | `scripts/dev/systemd-notify.mjs` | הגדירו ל־`1` כדי להשבית את sd_notify של systemd‏ (Type=notify / WatchdogSec=), גם בעת הפעלה תחת יחידת systemd. בכל מקרה, מחוץ ל-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`) תמיד מוחרגים מהסריקה — ה"אימות" שלהם הוא שאילתה אמיתית במעלה הזרם הכרוכה בחיוב, ולכן הם לעולם אינם עוברים בדיקת תקינות מתוזמנת (#9970). | | `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | הגדירו ל־`1` כדי לאפשר לגורם קורא מאומת לבקש את `/api/monitoring/health?deep=1`, אשר דוגם את ממשק ההשלמות פעם אחת בכל TTL. קוראים אנונימיים לעולם אינם מפעילים את בדיקת הגישוש. | | `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | כתובת האזנה עבור שרת הפיתוח/ההפעלה של Next.js. כאשר מוגדרת, היא דורסת את ברירת המחדל `0.0.0.0`. | | `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | כתובת האזנה המשמשת את מריץ Playwright בעת הפעלת Next.js. ברירת המחדל היא `127.0.0.1` עבור בדיקות הרמטיות. **אל תשתמשו בה עבור `omniroute serve`** — השתמשו במקום זאת ב־`OMNIROUTE_SERVER_HOST` (מעטפות POSIX מגדירות אוטומטית את `HOSTNAME` לשם המחשב; `.env` אינו יכול לדרוס אותו). | | `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | כתובת האזנה עבור `omniroute serve`. מונעת התנגשות עם המשתנה `HOSTNAME` של מעטפת POSIX (שמוגדר תמיד לשם המכונה על־ידי bash/zsh). חוזרת ל־`0.0.0.0` כאשר אינו מוגדר. (#6194) | ### מצבי יציאות ``` ┌─────────────────────────── יציאה יחידה (ברירת מחדל) ───────────────────────┐ │ PORT=20128 │ │ → לוח בקרה: http://localhost:20128 │ │ → API: http://localhost:20128/v1/chat/completions │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── יציאות מפוצלות ─────────────────────────────────┐ │ DASHBOARD_PORT=20128 │ │ API_PORT=20129 │ │ API_HOST=0.0.0.0 │ │ → לוח בקרה: http://localhost:20128 │ │ → API: http://0.0.0.0:20129/v1/chat/completions │ │ מקרה שימוש: חשיפת ה־API לרשת המקומית תוך הגבלת לוח הבקרה ל־localhost. │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── Docker בסביבת ייצור ────────────────────────────┐ │ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │ │ → ממפה יציאות קונטיינר ליציאות מארח ב־docker-compose.prod.yml. │ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 4. אבטחה ואימות | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | מלח המשולב עם מזהי חומרה לצורך יצירת טביעת אצבע של המכונה. יש לשנות אותו בכל פריסה לשם בידוד. | | `OMNIROUTE_CLI_SALT` | _(לא מוגדר = מלח אקראי לכל התקנה, הנשמר ב-`/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | מלח HMAC לגזירת אסימון האימות המקומי של CLI. הגדרת ערך זה מחליפה את כל אסימוני ה-CLI במכונה ותמיד מקבלת עדיפות על פני המלח השמור. ראו `docs/security/CLI_TOKEN.md`. | | `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | מגדיר את הדגל `Secure` בקובצי Cookie של הפעלה. **חייב להיות `true`** בעת הפעלה מאחורי HTTPS. | | `REQUIRE_API_KEY` | `false` | תווכת API | כאשר הערך הוא `true`, כל בקשות ה-Proxy אל `/v1/*` חייבות לכלול מפתח API תקף. **דגל זה אינו מגביל את `GET /v1/models`**, אשר פועל בהתאם למדיניות ההתחברות של לוח הבקרה (`requireAuthForModels`) — לכן תגובת `401` מ-`/v1/models` אינה מעידה שההסקה מוגנת. ראו `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). | | `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | מאפשר לחשוף את הערכים המלאים של מפתחות API בממשק המשתמש של לוח הבקרה. ניתן להגדרה באמצעות דגלי התכונות בלוח הבקרה; מהווה סיכון אבטחה במופעים משותפים. | | `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` | הגודל המרבי המותר לגוף בקשה. דוחה מטענים החורגים ממגבלה זו. | | `OMNIROUTE_CHAT_LARGE_BODY_BYTES` | `262144` (256 KB) | `src/shared/middleware/chatBodyAdmission.ts` | גופי בקשות בפועל בגודל השווה לסף זה או גדול ממנו מקבלים, באופן אטומי, את נעילת הקבלה המקומית לתהליך עבור עומס כבד לפני ניתוח JSON (נתיב BYTE, לרבות `POST /v1/responses`). אותו מנגנון יציאה כאשר יש מרווח קיבולת תקין מ-[#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437), כמו במקרה של עומס מבני כבד; עדיין מוגבל על ידי `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), כדי ש-[#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) לא יחזור. | | `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | תקרה קשיחה לנתיבי צ'אט, הנאכפת לפי הבתים שנקראו במהלך קליטה מוגבלת, כולל בקשות שבהן `Content-Length` חסר, לא תקין או כוזב; חריגה מקבלת `413`. | | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(לא מוגדר — אין מגבלה על מספר הבקשות)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** מגבלת ספירת הבקשות הישנה הזו חלה כעת רק כשהיא מוגדרת במפורש. כאשר היא אינה מוגדרת (ברירת המחדל), קבלת בקשות צ'אט כבדות מוגבלת במקום זאת באמצעות `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — תקציב בתים הנגזר אוטומטית ומתבסס על תקרת הזיכרון האמיתית של התהליך ב**תהליך אחד** (ערימת V8 אחת). שתי בקשות `/v1/responses` חופפות של כ־750 אלף טוקנים גורמות לקריסת ערימות של כ־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` עצמאיות** (#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` הניתן לניסיון חוזר רק כאשר הערימה נמצאת גם היא ביחס זה או מעליו; בערימה תקינה היא מתקבלת במקום זאת דרך מרווח הקיבולת הבריאה. | | `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`). ללא מגבלה זו, כל בקשה עמוסה אך בעלת ערימה תקינה הייתה עוקפת את בקרת הקבלה ללא תקרה. לאחר שמספר זה של הקצאות מקבילות פעילות דרך נתיב הערימה התקינה, בקשות עמוסות נוספות ממשיכות לאותו נתיב המתנה מוגבלת/השלה המשמש תחת לחץ ערימה אמיתי. `0` משבית את המעקף לחלוטין. | | `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | מספר ההודעות שמסווג בקשת צ'אט ככבדה גם כאשר גופה קטן מסף הבתים. | | `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | מספר הכלים שמסווג בקשת צ'אט ככבדה גם כאשר גופה קטן מסף הבתים. | | `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | אומדן טוקנים שמרני המבוסס על גודל מחרוזת ומסווג בקשה ככבדה; זהו מדד עקיף לעלות הקבלה, ולא טוקניזציה לצורכי חיוב של הספק. | | `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (מושבת) | `src/shared/middleware/chatBodyAdmission.ts` | תקרה אופציונלית להצטרפות מפורשת עבור היסטוריית הצ'אט. מושבתת כברירת מחדל: מספר הודעות הוא מדיניות פריסה, ולא מאפיין אוניברסלי של בקשה, והגבלה כאן דוחה שיחות עם `413` סופי לפני שצינור הדחיסה יכול להפוך אותן לניתנות לשירות. גידול הערימה מוגבל באמצעות `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` וההשלה עקב לחץ ערימה. הגדירו ערך חיובי בפריסות מוגבלות זיכרון שזקוקות לתקרה קשיחה; חריגה תקבל אז `413` מובנה המציין שנדרש צמצום. | | `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | תקרה קשיחה לתגובת upstream שאינה מוזרמת ונאגרת במלואה בזיכרון. מעבר לכך, קורא ה־upstream מבוטל והבקשה נכשלת במהירות במקום להגדיל מחרוזת ללא גבול עד למיצוי הערימה. | | `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | המספר המרבי של בתים בתעבורה המועברים מכותרות התגובה של שרת המקור. כאשר חורגים מהמכסה, כותרות בעדיפות נמוכה יותר (למשל, `x-codex-*`,‏ `x-oai-request-id`) מושמטות כדי להישאר בגבולות המקובלים של כותרות בפרוקסי הפוך. הגדירו ערך גבוה יותר כדי להעביר יותר מטא-נתונים משרת המקור, במחיר של הגדלת כותרות התגובה. | | `CORS_ORIGIN` | _(לא מוגדר)_ | `src/server/cors/origins.ts` | רשימת היתרים ישנה של מקור יחיד עבור CORS. בפריסות חדשות עדיף להשתמש ב-`CORS_ALLOWED_ORIGINS`. ‏CORS מיועד רק ללקוחות API בדפדפן ממקור שונה; פעולות כתיבה מאומתות בלוח הבקרה משתמשות במקום זאת בבקשות מאותו מקור ובהגנת CSRF הקשורה להפעלה. | | `CORS_ALLOWED_ORIGINS` | _(לא מוגדר)_ | `src/server/cors/origins.ts` | רשימת היתרים של CORS המופרדת בפסיקים. תו כללי אינו נשלח, אלא אם `CORS_ALLOW_ALL=true` הוגדר במפורש. | | `CORS_ALLOW_ALL` | `false` | `src/server/cors/origins.ts` | מנגנון מילוט לפיתוח בלבד, שמחזיר כל `Origin` של דפדפן. אין להפעיל אותו בפריסות משותפות או בסביבת ייצור. | | `OUTBOUND_SSRF_GUARD_ENABLED` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | כינוי ישן. המתג שלו בלוח הבקרה (דריסה במסד הנתונים) נקרא לפני ערך סביבה זה; `false`,‏ `0`,‏ `no` או `off` בכל אחד מהם משביתים את בדיקות המארחים באותו אופן כמו `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, גם כאשר המתג של דגל זה בלוח הבקרה נשמר ככבוי; ערכים אחרים משאירים את ההגנה בשליטת שני הדגלים שלהלן. | | `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | משבית את בדיקות המארחים של הגנת כתובות ה-URL היוצאות, לרבות חסימת מטא-נתוני הענן (כל הטווח 169.254.0.0/16,‏ metadata.google.internal), בנתיבי הספק שפועלים בהתאם למצב ההגנה: אימות כתובות URL, גילוי מודלים, כתובות URL בסיסיות של צומתי ספק (לרבות צומתי דירוג מחדש מרוחקים) ובדיקת הנסיגה לפרוקסי, לצד נתיבים יוצאים נוספים הקשורים לספק, כגון שליפה מרחוק של תמונות/מדיה. הוא מאפשר גם יעדי webhook פרטיים, למעט נקודות קצה של מטא-נתוני ענן/קישור מקומי, שנותרות חסומות גם כאשר דגל זה מופעל. בקשות צ'אט הנשלחות דרך `BaseExecutor.execute()` שומרות על בדיקת מטא-נתוני הענן שלהן. ספקים מקומיים פועלים עם ברירות המחדל: `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (ברירת המחדל היא `true`) כבר מאפשר כתובות URL מקומיות וברשת LAN בנתיבי האימות, הגילוי וצומתי הספק; בדיקת הנסיגה לפרוקסי ויעדי webhook פרטיים בודקים רק דגל זה וחוסמים מארחי 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`** (גישה מקומית תחילה): במצב זה ההגנה חוסמת נקודות קצה של מטא-נתוני ענן — כל הטווח 169.254.0.0/16 וכן שמות המארחים המוכרים של מטא-נתונים (metadata.google.internal,‏ metadata.goog,‏ Alibaba/Azure/Oracle IMDS,‏ fd00:ec2::254). הגדירו `false` למצב ציבורי בלבד, שחוסם גם מארחים פרטיים ומארחי loopback. ההגנה בודקת את שם המארח או את כתובת ה-IP המפורשת כפי שנכתבו, לפני כל חיפוש DNS; במצב ציבורי בלבד, מעטפת השליפה הבטוחה גם פותרת את שם המארח ודוחה כל תשובה פרטית. `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` משבית את הבדיקות הללו בנתיבים המפורטים בשורה שלו. ספקים מקומיים מובנים, כגון LM Studio,‏ Ollama,‏ vLLM,‏ Llamafile ו-Triton, מדלגים על כל בדיקות המארחים בעת אימות מפתח ובצ'אט. ערך שנשמר באמצעות המתג בלוח הבקרה מקבל עדיפות על פני משתנה זה. (#5066) | | `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | מאפשר לנתיבי `/v1/audio/*` (תמלולים, דיבור, תרגומים) להשתמש בצומת ספק תואם OpenAI המתארח מחוץ ל-localhost. כבוי כברירת מחדל — ניתוב שמע למארח מרוחק משנה את זהות התעבורה היוצאת ומחייב החלטה מפורשת של המפעיל. צומתי loopback/צמתים פרטיים (localhost,‏ 127.0.0.1,‏ 172.16-31.x) מותרים תמיד ואינם מושפעים. (#3963) | | `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | מאפשר ל-`POST /v1/rerank` (ולשלב הדירוג מחדש ב-loopback של מנוע הזיכרון) להשתמש בצומת ספק תואם OpenAI המתארח מחוץ ל-localhost — מחשב ברשת LAN או עמית Tailscale שמריץ TEI,‏ Infinity,‏ vLLM וכו'. כבוי כברירת מחדל — ניתוב למארח מרוחק משנה את זהות התעבורה היוצאת ומחייב החלטה מפורשת של המפעיל. צומתי loopback (localhost,‏ 127.0.0.1,‏ 172.16-31.x) מותרים תמיד ואינם מושפעים. כתובת ה-URL הבסיסית של צומת מרוחק חייבת גם לעבור את מדיניות כתובות ה-URL היוצאות של הספק (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). | | `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(ריק)_ | `src/shared/network/localNodeHosts.ts` | שמות מארחים (מופרדים בפסיקים או ברווחים) שניתוב צומתי הספק מתייחס אליהם כמקומיים — בדרך כלל שם השירות של Docker/Compose עבור reranker,‏ TEI או שירות נלווה לטיפול באודיו ברשת Docker של OmniRoute עצמו (`http://reranker:8080/v1`), כך שהצומת אינו זקוק לכתובת IP מקודדת מראש של קונטיינר. המארחים הרשומים כשירים עבור `/v1/rerank`,‏ `/v1/audio/*` ובדיקת התקינות המקומית, ללא הפעלת `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` עבור כל צומת מרוחק, והקריאה אליהם מתבצעת ישירות — לעולם לא דרך `HTTP(S)_PROXY` או דרך שרת proxy מוצמד של חיבור. הם עדיין שולחים את מפתח ה-API של החיבור. מתקבלים רק שמות בעלי תווית יחידה ושמות המסתיימים ב-`.internal`/`.local`; שמות FQDN ציבוריים, כתובות IP מילוליות ושמות מטא-נתונים של שירותי ענן אינם נלקחים בחשבון, ומוצגת אזהרה. (#14635) | | `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | כאשר OIDC מופעל, השבתת התחברות באמצעות סיסמה כדי שמשתמשים יוכלו לבצע אימות רק באמצעות כניסה יחידה של OIDC. מתקבל גם הכינוי המקוצר `OIDC_DISABLE_PASSWORD_LOGIN`; דגל התכונה בלוח הבקרה בעל אותו מפתח מקבל עדיפות. (#10889) | | `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | כינוי מקוצר של `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). | ### רשימת תיוג להקשחה ```bash # דרישות אבטחה מינימליות לסביבת ייצור: AUTH_COOKIE_SECURE=true # דורש HTTPS REQUIRE_API_KEY=true # אימות כל קריאות ה-proxy 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. מדיניות כלים וניתוב | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------------------------------------------- | ---------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TOOL_POLICY_MODE` | `disabled` | `src/lib/toolPolicy.ts` | שולט בגישה של ה-LLM לכלים/קריאות לפונקציות. `allowlist` = רק הכלים שצוינו, `denylist` = הכול למעט אלה שצוינו, `disabled` = ללא הגבלות. | | `OMNIROUTE_PAYLOAD_RULES_PATH` | `./config/payloadRules.json` | `open-sse/services/payloadRules.ts` | נתיב לקובץ JSON של כללי מניפולציה על המטען (התאמות לספק במעלה הזרם לפי מודל/פרוטוקול). | | `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | מרווח הטעינה מחדש (מ״ש) לטעינה חמה מחדש של קובץ כללי המטען. מינימום `1000`. | | `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | הצטרפות אופציונלית: ניתוב מזהי מודלים חשופים מסוג `claude-*` מלקוחות Claude Code דרך חשבון ה-OAuth של Claude Code, במקום לדרוש קידומת ספק. לקידומות ספק מפורשות עדיין יש עדיפות. ניתן להגדרה גם באמצעות מתג בלוח הבקרה בדף של ספק Claude. | | `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` | אפשרות הצטרפות מסוכנת המדלגת על בדיקת חלון ההקשר / מספר אסימוני הקלט המרבי המקומית של OmniRoute עבור בקשות ישירות למודל יחיד. ספקים במעלה הזרם עדיין אוכפים את המגבלות בפועל; דחיסת הפרומפט ומגבלת אסימוני הפלט של המודל עצמו נשארות פעילות. סדר הקדימויות בפועל הוא דריסת מסד הנתונים של דגלי התכונות > משתנה סביבה > ברירת מחדל; אין צורך בהפעלה מחדש. | | `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 `. כאשר אינו מוגדר, הנתיב פתוח, בהתאם לדפוס הקיים של ספק מקומי המתארח עצמאית (פריסה ברשת לולאה חוזרת/מהימנה). | | `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(לא מוגדר)_ | `open-sse/services/routingStrategies.ts` | מסמך YAML מוטמע מסוג `strategy:` עבור מנוע הניתוב הדטרמיניסטי (M2/RIC-740, D3) — רשימה שחורה/לבנה, מפסק תקופת צינון, עדיפות עלות, מודעות להשהיה ושרשרת גיבוי. דורס בלוק `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 או מנתחת את היסטוריית ההודעות, וגם מזהי הפעלה שסופקו על ידי הלקוח כלולים בכך. הטיפול בהפעלות ניתוב נותר ללא שינוי ורשומות קיימות אינן נמחקות. מיועד לפריסות שאינן משתמשות בתצוגת השיחות של לוח הבקרה ורוצות שטבלת התורות תפסיק לגדול. | | `OMNIROUTE_NADIR_API_KEY` | _(לא מוגדר)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | מפתח API עבור אסטרטגיית הנתב המשולב האוטומטי `nadir`, שנעשה בה שימוש בהסכמה מפורשת כאשר `config.nadir.apiKey` של השילוב עצמו אינו מוגדר. אופציונלי: קריאות ללא מפתח מועברות למסלול האנונימי של Nadir, המוגבל לפי קצב לכל כתובת IP ולכן אינו מתאים לשימוש מאחורי שער משותף. רגיש; העדיפו את השדה הייעודי לכל שילוב כאשר שילובים משתמשים בחשבונות שונים. | | `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | כתובת המקור הבסיסית של API ההחלטות של Nadir, שבה נעשה שימוש כאשר `config.nadir.baseUrl` של השילוב עצמו אינו מוגדר. נדרש רק עבור Nadir באירוח עצמי, השומר את תחילות הפרומפטים בתוך הרשת שלכם. הסיומת `/v1` מותרת ומוסרת. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | חלון שבועי עבור מגבלות שימוש בדולר ארה״ב לכל מפתח API (אכיפת בקשות, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: השבוע מסתיים באיפוס השבועי המוקדם ביותר מבין החיבורים לשירותים שבמעלה הזרם שאליהם המפתח יכול להגיע, או שהוא חלון מתגלגל של 7 ימים כאשר לא ידוע על איפוס כזה. `calendar`: השבוע המקומי מיום שני בשעה 00:00 ועד יום שני הבא בשעה 00:00, באופן זהה עבור כל המפתחות. `calendar` מומלץ כאשר מאגר אחד של חשבונות במעלה הזרם משותף למפתחות רבים שלכל אחד מהם תקציב נפרד. ערכים לא חוקיים חוזרים לברירת המחדל `provider`. | | `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(אזור הזמן של התהליך)_ | `src/lib/usage/apiKeyUsageLimits.ts` | אזור זמן של IANA (לדוגמה `Asia/Shanghai`) המגדיר את יום שני בשעה 00:00 עבור החלון השבועי `calendar`. אם לא מוגדר או שאינו חוקי: אזור הזמן של תהליך OmniRoute (ה-`TZ` של המארח או הקונטיינר, שלעיתים קרובות אינו מוגדר בתמונות קונטיינר, כלומר זמן אוניברסלי מתואם). המערכת מתעלמת ממנו במצב `provider`. | | `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | מספר הכלים המרבי המוגדר כברירת מחדל ומותר בבקשה (ברירת המחדל של OpenAI). מספרים שלמים חיוביים בלבד; ערכים שאינם מוגדרים או שאינם חוקיים משאירים את `128`. ספק עם מגבלה ידועה או יזומה (`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/קונטיינר גם כאשר היישום נגיש לציבור דרך proxy. | | `CLOUD_URL` | _(ריק)_ | `src/lib/cloudSync.ts` | כתובת ה-URL של נקודת הקצה לממסר הענן (תכונת פרימיום). | | `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | הזמן הקצוב לבקשות HTTP של סנכרון הענן. | | `OMNIROUTE_BUILD_PROFILE` | `full` | תצורת build של Webpack | פרופיל בזמן build (יש להגדיר ל-`minimal` כדי להחריג פיזית מודולים בעלי הרשאות מה-bundle). | | `OMNIROUTE_STANDALONE_DIR` | _פלט standalone של ‎.build/‎_ | `scripts/build/colocate-standalone.mjs` | דריסה בזמן build עבור ספריית הפלט standalone המשמשת את שלב המיקום המשותף שלאחר ה-build. זו אינה הגדרת זמן ריצה. | | `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` מאחורי פרוקסי ציבורי המסיים TLS, כאשר לא מוגדר `OMNIROUTE_PROVIDER_MANIFEST_URL` מפורש. | | `OMNIROUTE_TRUST_PROXY` | _(לא מוגדר)_ | `src/server/origin/publicOrigin.ts` | מצב אמון אופציונלי עבור כותרות מקור ציבורי שהועברו. לא מוגדר = אין לתת אמון ב־`Forwarded` / `X-Forwarded-*` לצורך החלטות אבטחה. `true` / `loopback` נותן אמון במארח/פרוטוקול שהועברו רק מפרוקסי loopback המסומן באסימון. `private` / `lan` נותן אמון גם בעמיתי פרוקסי ברשת 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` | נקודת קצה של ClinePass למכסות של 5 שעות / שבועיות / חודשיות, המשמשת את דף השימוש. ניתן לדרוס עבור ממסרים / התקני בדיקה. | | `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | נקודת הקצה הרשמית של OpenCode Go לשימוש, המאומתת באמצעות מפתח API ומשמשת את דף השימוש. ניתן לדרוס עבור ממסרים / התקני בדיקה. | | `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | יוצר כותרות זהות של OpenCode CLI ‏(User-Agent, x-opencode-client/project, מזהי UUID של בקשה/הפעלה) עבור בקשות upstream של 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). | | `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 המשמשת לאיסוף נתוני מכסה. ניתן לדרוס עבור ממסרים / התקני בדיקה. | | `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` | משתנה סביבה חלופי עבור קובץ ה-cookie מסוג `__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 חיצוניים דרך פרוקסי HTTP או SOCKS5 לצורך בקרת תעבורה יוצאת, ניתוב גאוגרפי או הסוואת כתובת IP. ערך ברירת המחדל של `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` הוא `true`. הגדירו אותו כ־`false`,‏ `0`,‏ `no` או `off` כדי לאלץ שימוש ב־HTTP/1.1 ב־Undici dispatchers שב־`open-sse/utils/proxyDispatcher.ts` וב־`open-sse/utils/proxyFetch.ts`: תעבורה יוצאת ישירה, פרוקסי HTTP(S)/SOCKS, ממסרים וניסיונות חוזרים באמצעות socket חדש. הגדרה זו משמרת את אימות אישור ה־TLS, אימות הפרוקסי, מגבלות החיבור והגדרות keep-alive. הפעילו מחדש את OmniRoute לאחר שינוי ההגדרה, מכיוון שה־dispatchers נשמרים במטמון וסוכני הממסר נוצרים בעת ההפעלה. המתג אינו שולט ב־TLS fingerprinting של wreq או בתעבורות ייעודיות לספקים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------- | ------------ | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | הפעלת סוכן פרוקסי SOCKS5 עבור קריאות למקורות במעלה הזרם. ניתן להשבית באמצעות `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` | רשימת היתרים ליעדי בקרת בורר בליבה המקומית מעבר ל-loopback (מארחים או כתובות IP המופרדים בפסיקים/רווחים; `*` מאפשר LAN/כתובות פרטיות, אך לעולם לא מטא-נתונים/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` | דגל תכונה להצטרפות מפורשת (ראו [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); דריסה ממסד הנתונים של לוח הבקרה גוברת). עבור ספקים שהמכסה שלהם מקובצת לפי כתובת היציאה, חבר במאגר החולק את כתובת היציאה שנצפתה של חבר שנדחה לאחרונה מדורג מיד מתחת לחברים תקינים. משפיע על הסדר בלבד ולעולם אינו גורם להחרגה. דורש את `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 עבור קריאות למקורות במעלה הזרם. | | `HTTPS_PROXY` | _(לא מוגדר)_ | תקן Node.js | פרוקסי HTTPS עבור קריאות למקורות במעלה הזרם. | | `ALL_PROXY` | _(לא מוגדר)_ | תקן Node.js | פרוקסי אוניברסלי (תומך ב-`socks5://`). | | `OMNIROUTE_PROXY_ECHO_URL` | _(לא מוגדר)_ | `src/lib/proxyEchoTarget.ts` | מקבע את יעד ה-IP החוזר, המשמש בדיקות יציאה דרך proxy, ל-URL יחיד. כאשר אינו מוגדר, הבדיקה מנסה תחילה את `api64.ipify.org` ולאחר מכן את `api4.ipify.org`, כדי שמנהרות התומכות ב-IPv4 בלבד לא ידווחו כבלתי פעילות (#9694). | | `NO_PROXY` | _(לא מוגדר)_ | תקן Node.js | שמות מארחים/כתובות IP, מופרדים בפסיקים, שיש לעקוף עבורם את ה-proxy. | | `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | המספר המרבי של חיבורים מקביליים לכל מנגנון ניתוב HTTP/SOCKS proxy שנשמר במטמון. זרמי SSE ארוכי-חיים, כגון Codex `/v1/responses`, זקוקים ליותר מחיבור אחד כאשר מספר בקשות חולקות אותו proxy ברמת החשבון. ערכים מעל `256` מוגבלים. | | `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | זמן קצוב ללחיצת היד (חיבור) של SOCKS5, באלפיות שנייה. יש להגדיל אותו כאשר מארח יחיד של שער ביתי נתון לעומס מקבילי גבוה (למשל, 100 בקשות בו-זמניות) — לחיצת היד בפועל עשויה להימשך יותר מ-10 שניות כאשר המאגר רווי, אף שה-proxy נגיש; אחרת הדבר יוצג בטעות בתור `[Proxy Fast-Fail] Proxy unreachable`. מוגבל ל-`120000`. | | `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | כאשר הערך הוא `false` (ברירת המחדל), בקשה שה-proxy שהוקצה לה אינו ניתן לפתרון **נדחית (fail-closed)** במקום לעבור לחיבור ישיר — וכך נמנעת דליפה של כתובת ה-IP האמיתית. יש להגדיר `true` כדי לשחזר את מנגנון הנסיגה הישן ל-DIRECT. | | `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | זיוף טביעת האצבע של TLS באמצעות wreq-js (מחקה את Chrome 124). מסכל חסימות JA3/JA4. | | `TLS_FINGERPRINT_PROVIDERS` | _(לא מוגדר)_ | `open-sse/utils/proxyFetch.ts` | רשימת ספקים מורשים, מופרדים בפסיקים, עבור ניתוב TLS החדש דרך proxy (`open-sse/utils/proxyFetch.ts`). כאשר הערך אינו מוגדר, TLS ישיר שומר על ההתנהגות הישנה שלו; רק ספקים אלה מנותבים דרך גשר טביעת האצבע של Chrome 124. Groq (`api.groq.com`) מוחרג גם כאשר רשימת ההרשאות אינה מוגדרת, משום ש-Chrome JA3 מפעיל את Cloudflare 1010, בעוד undici מקורי מצליח להגיע ל-API. | | `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | מאפשר להקשר הדפדפן Playwright של Claude Turnstile להתעלם משגיאות אישורי HTTPS. | ### תרחישים | תרחיש | תצורה | | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | **SOCKS5 דרך מנהרת SSH** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` | | **HTTP proxy ארגוני** | `HTTP_PROXY=http://proxy.corp.com:3128`, `HTTPS_PROXY=http://proxy.corp.com:3128`, `NO_PROXY=localhost,internal.corp.com` | | **מניעת זיהוי טביעת אצבע** | `ENABLE_TLS_FINGERPRINT=true` — דורש את `wreq-js` (כלול) | | **יציאה מבוקרת / ללא גישה ישירה** | יש להשאיר את `PROXY_FAIL_OPEN=false` (ברירת המחדל). בקשות נכשלות לחלוטין כאשר ה-proxy אינו זמין, במקום לדלוף דרך חיבור ישיר. | | **מערכת ישנה / פיתוח — מתן אפשרות לנסיגה לחיבור ישיר** | `PROXY_FAIL_OPEN=true`. משחזר את ההתנהגות שלפני ההקשחה: נעשה שימוש בחיבור ישיר כאשר פתרון ה-proxy נכשל. | > **הערה (עקיפת אימות NVIDIA — #3226):** נקודת הקצה לאימות מפתח ה-API של NVIDIA > נתקעת כאשר היא מנותבת דרך ה-fetch הגלובלי שעבר תיקון proxy/TLS (מנגנון ניתוב undici ← 504). > `src/lib/providers/validation.ts::directHttpsRequest()` עוקפת במכוון את > תיקון ה-proxy עבור קריאת האימות היחידה הזו באמצעות `safeOutboundFetch({ bypassProxyPatch: true })`. > זהו חריג מתועד ומוגבל בהיקפו — הוא **אינו** משפיע על יציאת תעבורת צ'אט/שימוש. > היקף העקיפה מקובע באמצעות `tests/unit/proxy-bypass-scope-guard-3226.test.ts`. --- ## 9. שילוב כלי CLI קובע כיצד OmniRoute מאתר ומפעיל תהליכי עזר של CLI ‏(Claude Code, Codex וכו'). | משתנה | ברירת מחדל | קובץ מקור | תיאור | | --------------------------------- | -------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = חיפוש ב-PATH של המערכת; `manual` = שימוש בנתיבים מפורשים בלבד. | | `CLI_EXTRA_PATHS` | _(לא מוגדר)_ | `src/shared/services/cliRuntime.ts` | רשומות 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 תיכשל עם שגיאת "הכתיבה מושבתת" מפורשת. | | `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). משמש את המפעיל של 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/שרת השפה המצורף, הנבדל מ-`ide_version` של Desktop. ערכים דורסים חייבים להיות בתבנית `x.y.z`; עבור ערכים לא תקינים נעשה שימוש בברירת המחדל המצורפת. | | `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | דריסת Devin CLI עבור הגשר הסוכני בלבד. המפעיל מקבל רק את מקור ה-ACP stdio המקומי. | | `DEVIN_AGENTIC_HOME` | _(נדרש)_ | `open-sse/executors/devin-cli-agentic.ts` | ספריית בית מוחלטת ומבודדת עבור תהליך המשנה הסוכני של Devin; נתיבי הגשר המתקבלים הם `/home/bridge` ונתיבי `.sandbox` מקומיים למשימה (ב-Windows,‏ `C:\...\.sandbox\...`). | | `DEVIN_AGENTIC_ACP_TIMEOUT_MS` | `120000` | `open-sse/executors/devin-cli-agentic.ts` | משך הזמן המרבי לסבב Devin ACP אחד לפני שהגשר מסיים את תהליך הבן ומחזיר שגיאת זמן קצוב מפורשת. | | `DEVIN_BRIDGE_MODEL` | `devin-cli-agentic/swe-1-7` | `docker/devin-bridge/compose.yml` | כינוי המודל הראשי של Claude Code עבור הגשר המבודד. רתמת הבדיקה הפעילה מחליפה את הדוגמה במודל שמוחזר על ידי חשבון Devin הנוכחי. | | `DEVIN_BRIDGE_SONNET_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי הגשר המבודד המשמש כאשר Claude Code מבקש את ברירת המחדל שלו עבור Sonnet. | | `DEVIN_BRIDGE_OPUS_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי הגשר המבודד המשמש כאשר Claude Code מבקש את ברירת המחדל שלו עבור Opus. | | `DEVIN_BRIDGE_HAIKU_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי הגשר המבודד המשמש כאשר Claude Code מבקש את ברירת המחדל שלו עבור Haiku. | | `DEVIN_BRIDGE_SUBAGENT_MODEL` | `DEVIN_BRIDGE_MODEL` | `docker/devin-bridge/compose.yml` | כינוי הגשר המבודד המשמש עבור סוכני המשנה של Claude Code. | | `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | דריסה אופציונלית עבור API ניהול המושבים של Codeium, המשמשת למכסת Devin CLI (`GetUserStatus`). | | `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | דריסה באמצעות נתיב מוחלט לקובץ הבינארי של Augment (Auggie) CLI, המשמש את הספק המקומי `auggie`. אם אינו זמין, נעשה שימוש ב-`CLI_AUGGIE_BIN`, ולאחר מכן חיפוש ב-PATH. | | `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | דריסת כינוי עבור נתיב הקובץ הבינארי של Augment (Auggie) CLI (נבדקת לאחר `AUGGIE_BIN`). | | `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | הקובץ הבינארי המשמש את לקוח ה-stdio של הספק המקומי `zcode`. אם אינו זמין, נעשה שימוש ב-`zcode` מתוך PATH. | | `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | מערך JSON (עד 16 מחרוזות) של ארגומנטים נוספים המועברים לקובץ הבינארי `zcode` בעת הפעלתו באמצעות `cliTools`. | | `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | ספריית העבודה עבור תהליך המשנה של שרת היישום של ZCode. | | `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 דגלי תכונות אלה מופעלים לפי בחירה וכבויים כברירת מחדל. ניתן גם לשנות את מצבם מתוך לוח הבקרה של 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 mount מהמארח — יש לשלב אותו עם מיפויים כגון `~/.codex:/host-home/.codex:rw` (ראו את הפרופיל `host` בקובץ `docker-compose.yml`). נתיב שאינו נמצא בתוך תיקיית הבית של משתמש הקונטיינר ואינו bind mount זוכה להתעלמות, משום שכל מידע שייכתב בו יימחק כאשר הקונטיינר ייווצר מחדש. ה-image פועל בתור `USER node`, ולכן `/root` שאינו ממופה **אינו** override תקין. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------------- | ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_CONTAINER` | _(אוטומטי)_ | `src/shared/utils/containerEnv.ts` | כופה הפעלה (`1`/`true`) או השבתה (`0`/`false`) של זיהוי קונטיינר. נדרש רק בסביבות הרצה שהזיהוי האוטומטי אינו מזהה. | | `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | מאפשר בכל זאת כתיבת תצורה של כלי CLI לנתיב לא ממופה בקונטיינר. האפשרות המקבילה ב-CLI היא `--allow-container-write`. | ### כלי עזר עבור קובץ ההרצה של ה-CLI (`omniroute`) משתנים אלה מכווננים את ההתנהגות של קובץ ההרצה `omniroute` עצמו (ולא את זיהוי ה-sidecar שלעיל). | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------- | --------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_LANG` | _(מערכת)_ | `bin/cli/i18n.mjs` | כופה את שפת הפלט של ה-CLI. אזור BCP-47 (למשל `en`, `pt-BR`). דורס את משתני הסביבה של אזור המערכת (LC_ALL, LC_MESSAGES). | | `OMNIROUTE_SHOW_LOG` | _(לא מוגדר)_ | `bin/cli/runtime/processSupervisor.mjs` | יש להגדיר כ-`1` כדי להעביר את stdout/stderr של השרת למסוף במצב מפוקח. מקביל לדגל `--log` של `omniroute serve`. | | `OMNIROUTE_CLI_TOKEN` | _(לא מוגדר)_ | `bin/cli/api.mjs` | אסימון אימות מכונה המוזרק ככותרת `x-omniroute-cli-token`. נוצר אוטומטית במשימה 8.12. | | `GEMINI_CLI_HOME` | _(לא מוגדר)_ | `bin/cli/commands/setup-gemini.mjs` | שורש בית קבוע של Gemini; הרצה חד-פעמית משתמשת בתיקיית בית זמנית ומבודדת. | | `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | תקופת חסד באלפיות השנייה לפני סגירה כפויה של תהליך CLI צאצא שנשלח אליו 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` | זמן קצוב ל-HTTP לכל ניסיון (באלפיות השנייה) עבור בקשות CLI ← שרת. | | `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | הזמן המרבי (באלפיות השנייה) שה-CLI ממתין לנקודת הקצה של תקינות השרת לפני הצגת אזהרת זמן קצוב. שימושי עבור הפעלות ראשוניות איטיות (למשל Windows). ניתן להגדיר גם באמצעות `--ready-timeout`. | | `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | יש להגדיר כ-`1` כדי להדפיס אבחוני ניסיונות חוזרים/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` | כתובת URL לחיוּת שנבדקת על ידי `omniroute doctor`. האפשרות התכנותית `livenessUrl` מקבלת עדיפות; אחרת, ערך זה משמש כפי שהוא. כאשר אינו מוגדר, ה-CLI גוזר את נקודת הקצה `/api/health/degradation` של לוח הבקרה המקומי. | | `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | נתיב קטלוג הספקים המשמש את פקודות הספקים של ה-CLI. האפשרות התכנותית `catalogPath` מקבלת עדיפות. נתיבים מוחלטים משמשים כפי שהם; נתיבים יחסיים נפתרים משורש הפרויקט. כאשר אינו מוגדר, ה-CLI משתמש בתיקיית קבועי הספקים, עם הקובץ הישן `providers.ts` כאפשרות גיבוי. | | `OMNIROUTE_PROVIDER_TEST_MODEL` | _(ברירת המחדל של הספק)_ | `bin/cli/provider-test.mjs` | מודל חלופי גלובלי לבדיקות חיבור לספק דרך ה-CLI. סדר העדיפויות הוא מודל החיבור שהוגדר, override של המודל הספציפי לספק, ערך זה, ולאחר מכן מודל הבדיקה המובנה של הספק. | --- ## 10. אינטגרציות פנימיות של סוכנים ו-MCP | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_BASE_URL` | זיהוי אוטומטי | `open-sse/mcp-server/server.ts` | כתובת URL מפורשת המאפשרת לכלי MCP/A2A לגשת אל OmniRoute. עוקפת את הזיהוי האוטומטי של localhost. | | `OMNIROUTE_API_KEY` | _(לא מוגדר)_ | מודולי MCP/A2A | מפתח API עבור קריאות פנימיות לכלי MCP ולמיומנויות A2A. | | `OMNIROUTE_API_KEY_ID` | _(לא מוגדר)_ | `open-sse/mcp-server/audit.ts` | מזהה מפתח לצורך שיוך רשומות ביומן הביקורת של MCP. | | `ROUTER_API_KEY` | _(לא מוגדר)_ | מיושן | כינוי מיושן עבור `OMNIROUTE_API_KEY`. | | `OMNIROUTE_A2A_HISTORY_RETENTION_DAYS` | `30` | `src/lib/a2a/taskManager.ts` | מספר הימים שבהם היסטוריית משימות A2A נשמרת במסד הנתונים המקומי לפני שהניקוי היומי מוחק שורה. ערך לא מוגדר, שאינו מספרי או `<= 0` חוזר ל-`30`. | | `OMNIROUTE_A2A_MEMORY_HITS` | `1` | `src/lib/a2a/taskExecution.ts` | מתג השבתה עבור תכונת התצפיתיות של התאמות זיכרון ב-A2A. הגדירו ל-`0` כדי לדלג לחלוטין על חיפוש האחזור מהזיכרון עבור משימה; כל ערך אחר (כולל ערך לא מוגדר) משאיר אותה פעילה. | | `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | מפעיל את נקודת הקצה המקומית/לא מקוונת של Issue Agent למיון מתועד. השאירו אותה מושבתת אלא אם מפעילים במפורש תהליכי עבודה מקומיים של מיון מתועד. | | `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(לא מוגדר)_ | `src/lib/issueAgent/execution.ts` | פסק זמן (באלפיות שנייה) להרצה יחידה של מיון מתועד ב-Issue Agent. מוגבל לערך מרבי פנימי; חוזר לברירת המחדל המובנית כאשר אינו מוגדר או אינו תקין. | | `OMNIROUTE_CONTEXT` | _(הקשר פעיל)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | הקשר/פרופיל של מצב מרוחק ב-CLI עבור פקודות `omniroute`; עוקף את ההקשר הפעיל במאגר ההקשרים המקומי. שקול ל-`--context `. | | `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | משבית את מנגנון ה-keychain האופציונלי של מערכת ההפעלה, `keytar`, עבור פרטי הזדהות של הקשרי CLI. כאשר הוא מופעל, פרטי ההזדהות נשארים ב-`config.json` במצב `0600`, וה-CLI מציג אזהרת מעבר חד-פעמית; מיועד להפעלה מכוונת בסביבה ללא ממשק או בקונטיינר. | | `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | אוכף בקרת גישה מבוססת תחומים על קריאות לכלי MCP. | | `OMNIROUTE_MCP_SCOPES` | _(הכול)_ | `open-sse/mcp-server/server.ts` | תחומים מופרדים בפסיקים: `admin`, `combos`, `health`, `models`, `routing`, `budget`, `metrics`, `pricing`, `memory`, `skills`. | | `OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS` | `false` | `open-sse/mcp-server/descriptionCompressor.ts` | דוחס את תיאורי כלי MCP לפני סריאליזציה של המניפסט. ערכים להפעלה: `1`, `true`, `on`. | | `OMNIROUTE_MCP_DESCRIPTION_COMPRESSION` | `rtk` | `open-sse/mcp-server/descriptionCompressor.ts` | אלגוריתם/פרופיל דחיסה. ערכים להשבתה: `0`, `false`, `off`. | | `OMNIROUTE_MCP_FETCH_TIMEOUT_MS` | `10000` | `open-sse/mcp-server/fetchTimeout.ts` | מגבלת זמן לביטול (באלפיות שנייה) עבור קריאות ניהול פנימיות של שרת MCP (תקינות, עמידות, שילובים, מכסה, שימוש). | | `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | תקציב ביטול (מ״ש) עבור דילוגי MCP הממתינים לספק (`route_request`, `web_search`, `web_fetch`). | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | המספר המרבי של מופעי אינדקס הקורפוס המקומי הנשמרים בזיכרון המטמון (LRU, אחד לכל ספריית שורש שנוספה לאינדקס). מוגבל לערך מזערי של `1`. | | `MODEL_SYNC_INTERVAL_HOURS` | `6` | `src/shared/services/modelSyncScheduler.ts` | מרווח סנכרון קטלוג המודלים בשעות. | | `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | `src/lib/usage/providerLimits.ts` | מרווח התשאול של מגבלות הקצב והמכסות של הספק. | | `PROVIDER_LIMITS_SYNC_SPACING_MS` | `1500` | `src/lib/usage/providerLimits.ts` | ההשהיה (מ״ש) בין אחזורים עוקבים של מכסות OAuth בסנכרון מרוכז; חיבורי OAuth מאוחזרים בזה אחר זה כדי למנוע עומס פתאומי על השירות במעלה הזרם. `0` מבטל זאת (במקביל). | | `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | המרווח המזערי (מ״ש) בין אחזורים עוקבים של מכסות מהשירות במעלה הזרם בנתיב הבדיקה המקדימה/ניטור לכל בקשה; מרווח קריאות רשת מקבילות כדי שחשבונות רבים בכתובת IP אחת לא ייצרו עומס פתאומי על השירות במעלה הזרם. משולב במנגנוני אחזור המכסות של Codex (`/wham/usage`),‏ DeepSeek,‏ Bailian (בשני אתרי האחזור),‏ OpenCode ו-Crof (#6009, #6911). נתיב הניתוב הכללי `usage.ts::getUsageForProvider` ‏(github/glm/minimax/nanogpt/xai/וכו׳) עדיין אינו מכוסה — הוא נמצא במעקב נפרד. פגיעות במטמון אינן מושפעות. `0` משבית; מוגבל לטווח `0..5000`. | | `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | השהיה (מ״ש) לפני רענון מגבלות הספק לאחר אירוע שימוש אמיתי, כדי לאפשר ל-API המכסות של השירות במעלה הזרם זמן לרשום את הצריכה. | | `OMNIROUTE_LOGIN_BROWSER_PATH` | זיהוי אוטומטי | `open-sse/services/adobeFireflyBrowserLogin.ts` | נתיב מוחלט לקובץ ההפעלה של Chrome או Edge במערכת, המשמש לכניסה אינטראקטיבית ל-Adobe Firefly ולחידוש מחוץ למסך. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | מופעל | `open-sse/services/adobeFireflySession.ts` | שומר על עדכניות מצב IMS ומצב הסיכון של הדפדפן באמצעות הפעלות Chrome CDP המוגדרות לפי חשבון. יש להגדיר `0` כדי להשבית חידוש באמצעות הדפדפן. | | `ADOBE_FIREFLY_SESSION_DISK` | מופעל | `open-sse/services/adobeFireflySession.ts` | משמר הפעלות Adobe שתוקנו תחת `DATA_DIR` בין הפעלות מחדש של התהליך. יש להגדיר `0` כדי לשמור הפעלות בזיכרון בלבד. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | המרווח המזערי באלפיות שנייה בין שליחות יצירה של Adobe Firefly;‏ `0` משבית את המרווח. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | פרק שקט נוסף באלפיות שנייה לאחר כל שליחת Adobe שלישית שהצליחה. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyClient.ts` | השהיית נסיגה בסיסית באלפיות שנייה לאחר תגובות Adobe 408 זמניות; משולבת עם המרווח בין שליחות לאורך חמישה ניסיונות לכל היותר. | | `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | משבית את כל שירותי הרקע (סנכרון, תמחור, רענון מודלים). שימושי עבור CI/בדיקות. | | `OMNIROUTE_HEADLESS` | _(לא מוגדר)_ | `src/lib/system/headless.ts` | אתחול של מנוע ה-Proxy בלבד: מדלג על תתי-מערכות אופציונליות, `/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` | תדירות בדיקת איפוס התקציב (מ״ש). ערך מינימלי `10000`. | | `OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS` | `60000` | `src/lib/quota/connectionRecovery.ts` | תדירות שחזור יזום מהשהיית חיבור (מ״ש): מאמתת מחדש חיבורים שהערך הזמני `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` | תדירות ניקוי מטמון ההסקה (מ״ש). ערך מינימלי `60000`. | | `OMNIROUTE_REASONING_MIN_BUDGET` | _לא מוגדר_ (מושבת) | `open-sse/services/reasoningTokenBuffer.ts` | ערך סף אופציונלי לתקציבי פלט של מודלי חשיבה: `max_tokens` של הקורא בטווח `[256, floor)` מועלה לערך הסף (עד לתקרת הפלט של המודל). לא מוגדר = תקציבי הלקוח לעולם אינם מוגדלים (#9507). | | `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _לא מוגדר_ (מושבת) | `open-sse/services/learnedReasoningEffortCaps.ts` | רשימה אופציונלית מופרדת בפסיקים של מזהי ספקים (או `*`): כאשר שגיאת 400/422 עבור `reasoning_effort` אינה מציינת קבוצה קבילה, מתבצע ניסיון חוזר פעם אחת ברמה אחת נמוכה יותר (לעולם לא מתחת ל-`low`), ורמה זו נלמדת רק אם הגשושית נענית (#14895). | | `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | ביטוי Cron‏ (UTC) עבור משימת ייצוא יומן השיחות, שמרוקנת כל יעד מופעל לייצוא יומנים. | | `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | מרווח התשאול (מ״ש) לטעינה חמה מחדש של התצורה. ערך נמוך מ-`1000` נדחה. | | `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(מופעל)_ | `src/lib/db/apiKeys.ts` | יש להגדיר `1` כדי לעקוף את מטמון האימות של מפתחות API המבוסס על Redis (מאלץ קריאות ממסד הנתונים). | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | `0` | `open-sse/services/compression/engines/rtk/filterLoader.ts` | מתן אמון בכללי סינון של פרויקט RTK המנוהלים בידי המשתמש, ללא בדיקות חתימה מחמירות. | | `OMNIROUTE_LITE_MAX_TOOL_LENGTH` | `2000` | `open-sse/services/compression/lite.ts` | מגבלת תווים לקיטוע יזום של תוצאות כלים ב-Lite כאשר `lite.maxToolLength` אינו מוגדר. טווח 256–1000000. הגדרת לוח הבקרה גוברת על משתנה סביבה זה. | | `OMNI_COMPRESSION_WORKERS` | `2` | `open-sse/services/compression/compressionWorkerPool.ts` | מספר מרבי של עובדי RTK/Caveman סינכרוניים הפועלים במקביל; משימות עודפות ממתינות לפי FIFO. | | `OMNI_COMPRESSION_WORKER_TIMEOUT_MS` | `120000` | `open-sse/services/compression/compressionWorkerPool.ts` | זמן קצוב לכל משימה באלפיות שנייה. עובדים שחורגים מהזמן הקצוב מופסקים והבקשה ממשיכה ללא דחיסה וללא שינוי. | | `OMNI_COMPRESSION_WORKER_IDLE_MS` | `60000` | `open-sse/services/compression/compressionWorkerPool.ts` | משך חוסר פעילות באלפיות שנייה לפני שעובד דחיסה שאינו בשימוש מופסק. | | `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | תקרת ערימת הדור הישן של V8 ב-MB לכל עובד דחיסה, בכל המצבים (ערך מינימלי `128`). משימה שחורגת ממנה ממשיכה ללא דחיסה במקום להגדיל את ערימת הזיכרון של השער. | | `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | מתג ראשי למפסק המעגלים ברמת מנוע של צינור T02 משולב. **אופציונלי (מושבת כברירת מחדל)** — כאשר הוא מופעל, מנוע שזורק חריגות שוב ושוב בין בקשות מדולג (המשך פעולה בעת כשל) למשך תקופת צינון; מושבת = התנהגות ישנה זהה ברמת הבתים. | | `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | מספר כשלים רצופים בין בקשות לפני שמפסק המעגלים של מנוע נפתח. | | `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | מספר אלפיות השנייה שבהן מנוע שנפתח נשאר במצב דילוג לפני בדיקת חצי-פתוח. | | `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | רמפת משוב האחזור של T08/H8 CCR: כל אחזור קודם של בלוק מאוחסן מגדיל באופן ליניארי את ערך ה-`minChars` האפקטיבי שלו (תוכן שנאחזר לעיתים קרובות נדחס פחות; `>=3` אחזורים = לעולם אינו נדחס). `1` משבית את הרמפה (דילוג בינארי בסף בלבד). | | `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | מאגר הבלוקים המתמיד של CCR‏ (#9061). מגבה את המאגר שבזיכרון באמצעות SQLite, כך שבלוק שורד פינוי LRU, את ה-TTL, הפעלה מחדש או בקשת אחזור שמגיעה למופע אחר. הגדירו `false` כדי לשמור בלוקים בזיכרון בלבד. בלוקים מעל 512KB וסביבות זמן ריצה בענן נשארים בזיכרון בלבד בכל מקרה. | | `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | מתג ראשי להקפאת קידומת שנצפתה בשימוש של T08/H5. **הצטרפות מפורשת (כבוי כברירת מחדל)** — כאשר הוא מופעל, הנחיית מערכת שנצפתה `>=` הסף נחשבת לקידומת יציבה הניתנת לשמירה במטמון ונשמרת מפני דחיסה, גם עבור ספקים שהיוריסטיקת המטמון הסטטית אינה מזהה (הקפאה רק _משמרת_, ולעולם אינה משנה). | | `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | מספר התצפיות בהנחיית מערכת לפני שהיא נחשבת לקידומת יציבה וקפואה. | | `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | מוגדר ל-`true` בידי סקריפט האתחול לאחר ההגדרה הראשונית. שולט בנראות של אשף ההגדרה. | | `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | פתח מילוט: מאפשר לגוף הבקשה לדרוס את שדה הפרויקט של Antigravity. | | `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | מדיניות נקודות הזכות של Google One AI:‏ `off` לעולם אינו מזריק נקודות זכות, `retry` מזריק פעם אחת לאחר שגיאת מכסה מתאימה מסוג 429, ו-`always` מזריק בבקשה הראשונה. | | `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | מאפשר למתרגם הבקשות של Antigravity לדלג על האימות המחמיר של חתימת בקשת CLI כאשר השירות במעלה הזרם מסרב לחתימות אמיתיות (מצב ניפוי שגיאות/CLI מיושן). ערך שאינו אפס מפעיל את העקיפה. | | `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | דורס את נתיב קובץ האסימון של Antigravity CLI‏ (agy) עבור ייבוא כניסה מקומית בזיהוי אוטומטי. | ### גשר OAuth ל-CLI (פנימי) | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------- | ------------- | ------------------------------- | -------------------------------------------------- | | `OMNIROUTE_SERVER` | זיהוי אוטומטי | `src/lib/oauth/config/index.ts` | כתובת ה-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) | עקיפה אופציונלית עבור מזהה הלקוח הציבורי של Muse CLI device-flow. השאר ריק כדי להשתמש בלקוח הציבורי המובנה. | | `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | דורש `_SECRET` תואם. | | `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — | | `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | לקוח ציבורי. | | `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | עקיפה אופציונלית עבור מזהה לקוח OAuth של GitHub Enterprise Copilot. חוזר לברירת המחדל הציבורית של `GITHUB_OAUTH_CLIENT_ID` כאשר לא מוגדר. | | `COPILOT_INTEGRATION_ID` | GitHub Copilot | עקיפה אופציונלית עבור מזהה אינטגרציית הלקוח של GitHub Copilot הנשלח בכותרות `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 | מזהה סביבת עבודה עבור Qoder CLI. | | `OMNIROUTE_QODER_WORKSPACE` | Qoder | כינוי עבור `QODER_CLI_WORKSPACE`. | | `QODER_CLI_CONFIG_DIR` | Qoder | עקיפת ספריית התצורה של Qoder CLI (הפעלת PAT מבודדת, מונעת דריסה של התחברות דפדפן). | | `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | אסימון `tk` של ה-Frontend לשליחה כ-`validated` ב-`/api/chat`. נדרש כאשר Blackbox אוכף התאמת אסימונים; אחרת OmniRoute חוזר ל-UUID אקראי. ראה בעיה #2252. | | `VISION_BRIDGE_BASE_URL` | Vision Bridge guardrail | כתובת URL בסיסית תואמת OpenAI עבור קריאות vision-bridge שאינן Anthropic. ברירת המחדל היא משתנה הסביבה של כתובת ה-URL הישנה של OpenAI או api.openai.com. הצבע על לולאת ה-`/v1` העצמית של OmniRoute או על כל נקודת קצה תואמת OpenAI (Gemini OpenAI-compat, OpenRouter). בעיה #2232. כאשר כתובת ה-URL היא `/v1` של OmniRoute עצמה, בקשת המשנה 'describe' שולחת `x-omniroute-admission-bypass: internal` ומאמתת עם אישור הלולאה העצמית שנפתר (סמן `sk_omniroute` במצב מקומי, או `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350) כך שפריסות `REQUIRE_API_KEY=true` יעבדו. | | `VISION_BRIDGE_API_KEY` | Vision Bridge guardrail | מפתח API עבור כתובת ה-URL לעיל. עוקף משתני סביבה של OpenAI / Google לכל ספק עבור קריאות vision-bridge שאינן Anthropic. מודלים של Anthropic שומרים על נתיב המפתח הייעודי שלהם. בעיה #2232. | | `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Vision Bridge guardrail | כמה זמן תוצאת ניתוב של "אין מועמד שמיש" נשמרת במטמון, באלפיות שנייה (ברירת מחדל `30000`). ערכים לא חוקיים או שליליים חוזרים לברירת המחדל; `0` משבית את המטמון השלילי. מקור: `src/lib/guardrails/visionBridgeRouter.ts`. | > [!אזהרה] > > 1. עבור אל [Google Cloud Console → Credentials](https://console.cloud.google.com/apis/credentials) > 2. צור מזהה לקוח OAuth 2.0 (סוג: "יישום אינטרנט") > 3. הוסף את כתובת ה-URL של השרת שלך כ-Authorized redirect URI > 4. החלף את ערכי האישורים בקובץ `.env`. --- ## 12. דריסת User-Agent עבור ספקים ניתן לדרוס את כותרת ה-`User-Agent` הנשלחת לכל ספק במעלה הזרם. הערך נפתר באופן דינמי בזמן ריצה על ידי מחלקת הבסיס של המבצע: ``` process.env[`${PROVIDER_ID}_USER_AGENT`] ``` > **מקור:** `open-sse/executors/base.ts` → `buildHeaders()` | משתנה | ערך ברירת מחדל | מתי לעדכן | | -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | כאשר Anthropic משחררת גרסת CLI חדשה | | `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | יש להגדיר ל-`1`/`true` כדי להעביר ל-Anthropic את שמות הכלים של רתמות צד שלישי ללא שינוי בשני הנתיבים המובילים ל-Anthropic (OAuth מקורי ו-CLIProxyAPI). כברירת מחדל, המבצע מגדיר באופן דטרמיניסטי כינויים לשמות כלים שאינם של Claude Code (מיפוי קנוני של Claude Code, כאשר קיים כזה, ואחרת PascalCase) והופך אותם בחזרה בתגובה באמצעות `_toolNameMap`, כך שרתמות עם כלים בעלי שמות בתבנית snake_case אינן נדחות כלקוחות צד שלישי שזוהו לפי טביעת אצבע. לניפוי שגיאות בלבד. | | `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | כאשר OpenAI מעדכנת את Codex CLI | | `CODEX_CLIENT_VERSION` | `0.155.0` | דריסת גרסת לקוח Codex בנפרד ממחרוזת ה-UA המלאה | | `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` (מזהה ציבורי) של קוד המכשיר החברתי של Kiro | | `KIRO_VERIFY_FULL_CRC` | `false` | הצטרפות אופציונלית: אימות CRC מלא לכל מסגרת בזרם האירועים של Kiro (לניפוי שגיאות בזרמים פגומים) | | `QODER_USER_AGENT` | `Qoder-Cli` | כאשר Qoder CLI מתעדכן | | `CURSOR_USER_AGENT` | `Cursor/3.3` | כאשר Cursor מתעדכן | > [!TIP] > ניתן להוסיף דריסות User-Agent עבור **כל** ספק באמצעות התבנית `{PROVIDER_ID}_USER_AGENT`. המבצע בונה באופן דינמי את שם משתנה הסביבה. --- ## 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 (דריסה גלובלית) ├─→ FETCH_TIMEOUT_MS (קריאות לספק במעלה הזרם, ברירת מחדל: 600000) │ ├─→ FETCH_HEADERS_TIMEOUT_MS (יורש מ-FETCH_TIMEOUT_MS) │ ├─→ FETCH_BODY_TIMEOUT_MS (יורש מ-FETCH_TIMEOUT_MS) │ ├─→ TLS_CLIENT_TIMEOUT_MS (יורש מ-FETCH_TIMEOUT_MS) │ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (בלתי תלוי, ברירת מחדל: 10000) │ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (בלתי תלוי, ברירת מחדל: 15000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (בלתי תלוי, ברירת מחדל: 0 = כבוי, ערך מוצע: 30000) │ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (בלתי תלוי, ברירת מחדל: 2) │ ├── FETCH_CONNECT_TIMEOUT_MS (בלתי תלוי, ברירת מחדל: 30000) │ └── FETCH_KEEPALIVE_TIMEOUT_MS (בלתי תלוי, ברירת מחדל: 4000) ├─→ STREAM_IDLE_TIMEOUT_MS (יורש מ-REQUEST_TIMEOUT_MS, ברירת מחדל: 600000) ├─→ STREAM_ACTIVE_TIMEOUT_MS (בלתי תלוי, ברירת מחדל: 1260000; 0 משבית) ├─→ STREAM_READINESS_TIMEOUT_MS (יורש מ-REQUEST_TIMEOUT_MS, ברירת מחדל: 80000) ├─→ STREAM_READINESS_MAX_TIMEOUT_MS (מגביל הרחבות מוכנות אדפטיביות, ברירת מחדל: 180000) └─→ API_BRIDGE_PROXY_TIMEOUT_MS (יורש מ-REQUEST_TIMEOUT_MS, ברירת מחדל: 30000) ├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (נגזר, ברירת מחדל: 300000) ├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (ברירת מחדל: 60000) ├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (ברירת מחדל: 5000) └── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (ברירת מחדל: 0 = מושבת) ``` | משתנה | ברירת מחדל | תיאור | | ----------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `REQUEST_TIMEOUT_MS` | _(לא מוגדר)_ | קיצור דרך גלובלי — דורס את ערכי ברירת המחדל של `FETCH_TIMEOUT_MS` ושל `STREAM_IDLE_TIMEOUT_MS`. | | `FETCH_TIMEOUT_MS` | `600000` | הזמן הקצוב הכולל לבקשת HTTP עבור קריאות לספק במעלה הזרם. | | `STREAM_IDLE_TIMEOUT_MS` | `600000` | משך השתיקה המרבי בין בתים גולמיים ממעלה הזרם לפני ביטול. מודלים עם חשיבה מורחבת עוצרים לעיתים רחוקות ליותר מ־90 שניות. | | `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | משך החיים הפעיל הכולל המרבי של זרם SSE; לעולם אינו מתאפס בעקבות בתים ממעלה הזרם ואינו תלוי ב־`REQUEST_TIMEOUT_MS`. נגזר מערך `timeoutMs` הגדול ביותר לכל מודל במאגר (1200000, Codex), בתוספת מרווח של 60000, כך שמודל שמורשה לנצל את מלוא מכסת הזמן שלו לעולם לא יופסק באמצע תשובה. יש להגדיר `0` כדי להשבית. | | `OMNIROUTE_SSE_COMMENTS` | _(מושבת)_ | האם OmniRoute רשאי לפלוט שורות הערת SSE מסוג `:` (לדוגמה, פעימת `: keepalive` וסיומות המטא־נתונים `x-omniroute-*`). מושבת כברירת מחדל (#10524), מכיוון שלקוחות מחמירים התואמים ל־OpenAI מפעילים JSON.parse על כל שורת SSE וקורסים עקב הערות `:`; פעימות `data:` אינן מושפעות. יש להגדיר `on`/`true`/`1`/`yes` כדי להצטרף מחדש. משמש את `open-sse/utils/sseHeartbeat.ts`. | | `SSE_COALESCE_MS` | `0` (כבוי) | הצטרפות אופציונלית: מיזוג אירועי Claude עוקבים מסוג `content_block_delta` (עם אותו אינדקס בלוק ואותו סוג דלתא) הנשלחים ללקוחות Claude, תוך ריקון לפחות כל N אלפיות שנייה. ללא אובדן; אירועי `signature_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` | מימוש מנגנון פיקוח על תקיעת בתים עבור תגובות מוזרמות. `timer` דורך מחדש טיימר אחד לכל מקטע ממעלה הזרם (ומופעל בדיוק בתום מכסת זמן התקיעה); `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` | חלון המוכנות ההסתגלותי המרבי לאירוע הראשון עבור בקשות הזרמה גדולות, עתירות כלים או בעלות רמת הסקה גבוהה. | | `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | מתג השבתה עבור היוריסטיקת `/goal`. יש להגדיר `false`/`0`/`off` כדי להשבית לחלוטין את הזיהוי — זמני הקצוב למוכנות ושחזור הזרם לעולם אינם מוגדלים בעקבות גוף הבקשה או הכותרות, ובכך מצטמצמת הגברה של זמני קצוב הנשלטת בידי הלקוח. | | `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | חלון המוכנות המרבי לאירוע הראשון עבור הרצות סוכן `/goal` שזוהו או בקשות שנכפו באמצעות `x-omniroute-agent-goal`. | | `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | הפעלה אוטומטית של שחזור זרם מוקדם עבור הרצות סוכן `/goal` שזוהו. יש להגדיר `false`/`0`/`off` כדי להשבית את ההצטרפות הספציפית ליעד. אפשרות זו יכולה רק להוסיף שחזור מעבר לברירת המחדל של המפעיל — היא לעולם אינה דורסת ביטול מפורש באמצעות `STREAM_RECOVERY_ENABLED` או הגדרות מסד הנתונים. | | `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | הסרת אירועי SSE לא תקניים מסוג `codex.*` (לדוגמה, `codex.rate_limits`) שגורמים לכשל ב־`responses.stream()` של OpenAI SDK עם 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` | _(לא מוגדר)_ | אסימון יכולת/bearer המוגדר בתוך השורה ומוצג ל־app-server. דריסה לכל חיבור: `providerSpecificData.codexAppServerToken`. | | `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(לא מוגדר)_ | נתיב לקובץ המכיל את אסימון היכולת של app-server (מתוך `codex app-server --ws-token-file`). משמש כאשר `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` אינו מוגדר. דריסה לכל חיבור: `providerSpecificData.codexAppServerTokenFile`. | | `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | ספריית העבודה שבה פועל סבב ה-app-server. דריסה לכל חיבור: `providerSpecificData.codexAppServerCwd`. | | `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(לא מוגדר)_ | מדיניות האישור המועברת לסבב ה-app-server (למשל `never`,‏ `on-request`). דריסה לכל חיבור: `providerSpecificData.codexAppServerApprovalPolicy`. | | `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(לא מוגדר)_ | מדיניות ארגז החול המועברת לסבב ה-app-server (למשל `read-only`,‏ `workspace-write`,‏ `danger-full-access`). כאשר אינה מוגדרת, ברירת המחדל של המבצע היא `workspace-write` (מוקשחת; בעבר `danger-full-access`). דריסה לכל חיבור: `providerSpecificData.codexAppServerSandbox`. | | `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | אישור אוטומטי של בקשות האישור של ה-app-server עצמו (ביצוע פקודה/קובץ/הרשאה במארח). מושבת כברירת מחדל — הבקשות נדחות אוטומטית; קריאות לכלי הרתמה אינן מושפעות (הן עוברות דרך תמסורת ה-`item/tool/call` הנפרדת). מקבל `true`/`1`/`yes`. דריסה לכל חיבור: `providerSpecificData.codexAppServerAutoApprove`. | | `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הזמן לקבלת כותרות התגובה. | | `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | זמן ההמתנה המרבי לכותרות תגובה בבקשות זורמות (מ״ש). `0` משבית תקרה זו; הגדרת `fetchStartTimeoutCapMs` מפורשת של הספק מקבלת עדיפות. | | `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30 שנ׳) | זמן ההמתנה המרבי לתחילת תגובה (מ״ש) עבור כל ניסיון ישיר ללא proxy. במקרה של פסק זמן, יתבצע ניסיון חוזר פעם אחת דרך socket חדש; הגדירו `0` כדי להשבית את הגבול ולשמר את ההתנהגות הקודמת. | | `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 דק׳) | רף תחתון לזמן תחילת התגובה (מ״ש) עבור ניסיונות ישירים ללא 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 דק׳) | תקרה (מ״ש) לניסיון ה-RETRY באמצעות socket חדש לאחר פסק זמן בהתחלת תגובה בניסיון מאוגד לעיל (#13703). חל רק כאשר הקורא כבר צירף אות מועד אחרון משלו (שרשרת החיבור/המודל/הספק/`FETCH_TIMEOUT_MS` שנפתרה); אות זה הוא הגבול האמיתי ומופעל ראשון בנתיב המיועד, ולכן זוהי הגנת גיבוי נדיבה ולא תקרה קבועה — בלעדיה, הניסיון החוזר השתמש שוב באותו חלון קצר של `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` כמו הניסיון המאוגד, וגרם לשגיאת 504 במודלי חשיבה תקינים בעלי TTFB איטי. לעולם לא יורשה להיות נמוך מהרף הקבוע לעיל; כאשר הקורא אינו מספק כלל אות מועד אחרון, הניסיון החוזר משאיר את הרף הקבוע ללא שינוי. | | `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | הזמן לקבלת גוף התגובה המלא. | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | פסק הזמן ליצירת חיבור TCP. | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | פסק הזמן לחוסר פעילות של socket מסוג keep-alive. | | `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | פסק הזמן של proxy טביעת האצבע של TLS‏ (wreq-js). | | `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | מגביל באופן ייעודי את זמן ההמתנה לבית הראשון בגוף התגובה של תעבורת טביעת האצבע של TLS באמצעות wreq-js;‏ `TLS_CLIENT_TIMEOUT_MS` לבדו אינו יכול לזהות גוף שנתקע, משום שהוא מסתיים בהצלחה ברגע שהכותרות מגיעות (#12656). פסק זמן מבטל את קורא wreq ועובר בחזרה אל מנתב ה-direct/proxy;‏ `0` משבית את מנגנון המעקב. | | `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | עבור מבצע OpenCode בלבד, ורק כאשר דגל התכונה `OPENCODE_RESPONSES_STALL_ROTATION` מופעל (מושבת כברירת מחדל): מגביל את זמן ההמתנה לבית הראשון בגוף של תשובת Responses מוזרמת לאחר קבלת הכותרות שלה (#13484). זרם Responses נפתח עם `response.created`, ולכן דממה מעבר לחלון זה היא תקיעה: החשבון מועבר לתקופת צינון והבקשה מועברת פעם אחת לחשבון הבא; תקיעה שנייה נכשלת מיד. `0` משבית את ההגנה גם כשהדגל מופעל. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= מושבת) | עבור מבצע OpenCode בלבד: מגביל את זמן ההמתנה לכותרות תגובה מהמערכת במעלה הזרם בקריאת Responses מוזרמת כאשר חשבון אחר עדיין זמין — בקשה שבתור מפסיקה להמתין וממשיכה הלאה במקום להחזיק את חלון הכותרות המלא. רק קריאות Responses מוזרמות מושפעות (זרם Responses נפתח עם `response.created`, ולכן דממה שם מצביעה על תור ולא על יצירה); השלמות צ׳אט וקריאות שאינן מוזרמות אינן משתנות, והחלון רק מקצר את תקרת תחילת האחזור בפועל ולעולם אינו מאריך אותה. ערך מוצע בעת הפעלה: `30000`.‏ `0` משבית. | | `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | מבצע OpenCode בלבד: מספר הפעמים המרבי בכל בקשה שבהן גבול ההמתנה לכותרות שלעיל עשוי לעבור לחשבון הבא. החשבון האחרון שנותר מקבל תמיד את מלוא חלון הזמן לכותרות. | | `OPENCODE_PARK_AND_RESUME` | `false` | מבצע OpenCode בלבד: השהיית הבקשה עם פעימת חיים לאחר שגיאות 429 זמניות חוזרות (או סמן עומס מאגר עדכני), ולאחר מכן הפעלה מחדש של מקטע מוגבל אחד הכולל עד 3 חשבונות עוקבים, במקום פיזור על פני כלל החשבונות (#13924). מושבת כברירת מחדל: כל שגיאת 429 גורמת למעבר לחשבון הבא בדיוק כמו קודם. | | `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | מבצע OpenCode בלבד: כאשר כל החשבונות שמוכנים לאחר תקופת הצינון במקטע ההפעלה מחדש של ההשהיה וההמשך הוצאו הצידה על ידי זיכרון סירוב ה-proxy, להשתמש בהם בכל זאת במקום שלא להפעיל דבר מחדש (#14851, המשך ל-#14750). מושבת כברירת מחדל: מקטע ההפעלה מחדש ריק במקרה זה, כפי שהיה לפני #14750. | | `STREAM_READINESS_STALL_RETRY` | `false` | צ'אט בסטרימינג בלבד: כאשר גוף התגובה הראשון מהשרת במעלה הזרם נתקע לפני הפקת אירוע שמיש, לבצע ניסיון שני מוגבל דרך אותו נתיב ניתוב, עם אותה מכסת זמן למוכנות וללא קנס לחשבון. מושבת כברירת מחדל: גוף תגובה ראשון שנתקע מכשיל את הבקשה ללא ניסיון חוזר. | | `OPENCODE_POOL_RESELECT` | `false` | מבצע OpenCode בלבד: לאחר שגיאת 429 מספק המקובץ לפי כתובת יציאה, בחשבון ללא proxy ובהקשר מאגר סביבתי, לבקש ממאגר החיבורים חבר אחר לניסיון הבא במקום לנסות שוב את אותה כתובת יציאה. קובע סדר, ולעולם אינו מחריג: מאגר שמוצה שומר על ההתנהגות הנוכחית. מושבת כברירת מחדל: כל שגיאת 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` | זמן קצוב (באלפיות שנייה) עבור ההגדרות הקבועות מראש `validationRead` ו-`modelsProbe` ב-`src/shared/network/safeOutboundFetch.ts`. יש להגדיל עבור נקודות קצה איטיות (Cerebras, Cloudflare AI, Groq) כדי למנוע תנודות בין מצב פעיל למצב שגיאה בלוח הבקרה. עבור ערכים לא תקינים (<1000) או לא מספריים, נעשה שימוש חלופי ב-8000 אלפיות שנייה. | | `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | זמן קצוב לאחזור, הייחודי ל-relay, ב-`open-sse/utils/proxyFetch.ts`‏ (#9158). relay שנתקע חייב להיכשל לפני הזמן הקצוב של הלקוח/הסוכן (כ-30 שניות), כדי שהקוראים יראו כשל ייחודי ל-relay במקום זמן קצוב כללי של השרת במעלה הזרם. מוגבל ל-`29000` כדי שיופעל תמיד ראשון. | | `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | השהיה משותפת בין ניסיונות עבור נתיבי הניסיון החוזר היחיד בחיבור ישיר/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` (כבוי) | מוסיף את המשפט "יש לך חיפוש אינטרנט מובנה. השב על שאלות ישירות באמצעות תוצאות החיפוש." להודעת המערכת של הקורא (`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 משותף לצ'אט עם קובצי Cookie מהאינטרנט המגובה בדפדפן (`browserPool.ts`); הגדירו `off` כדי להשביתו. | | `OBSCURA_BIN` | `auto-detect` | הנתיב לקובץ הבינארי `obscura`, המשמש כמנוע הראשי של מאגר הדפדפנים ושל מבצע Cloudflare Playground (`open-sse/services/obscura.ts`); מזוהה אוטומטית מתוך PATH של המערכת כאשר אינו מוגדר. | | `OBSCURA_CDP_ENDPOINT` | _(לא מוגדר)_ | הצבעה אל מופע Obscura שכבר פועל (`http://host:port`) במקום להפעיל מופע חדש; המודול אינו הבעלים של תהליך זה (`open-sse/services/obscura.ts`). | | `OBSCURA_PORT` | `יציאה פנויה אקראית` | יציאה מפורשת עבור `obscura serve` שיופעל; יציאה פנויה נבחרת אוטומטית כאשר הערך אינו מוגדר (`open-sse/services/obscura.ts`). | | `WEB_COOKIE_USE_BROWSER` | `0` | בחירה להעביר בקשת צ'אט עם קובצי Cookie מהאינטרנט דרך הנתיב המגובה בדפדפן (`browserBackedChat.ts`);‏ `1` כדי להפעיל. | | `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | כתובת ה-URL הבסיסית עבור מבצע Kimi Web (‏Connect-RPC הבינלאומי של kimi.ai) (`kimi-web.ts`); יש לדרוס רק עבור נקודות קצה של מראה/Proxy. | | `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | נקודת הקצה המלאה לצ'אט עבור מבצע Kimi Web (`kimi-web.ts`). | | `OMNIROUTE_LOGIN_BROWSER_PATH` | _(מזוהה אוטומטית)_ | נתיב לקובץ הפעלה של Chrome/Edge במערכת עבור כניסה אינטראקטיבית באמצעות דפדפן אל Adobe Firefly (`adobeFireflyBrowserLogin.ts`); דורס את הזיהוי האוטומטי לפי מערכת הפעלה. | | `OMNIROUTE_STANDALONE_DIR` | _פלט עצמאי של ‎.build/_ | דריסה בזמן הבנייה של ספריית הפלט העצמאי, המשמשת בשלב האיסוף לאחר הבנייה (`scripts/build/colocate-standalone.mjs`); כלי בנייה, לא זמן ריצה. | ניסיונות של יעד משולב יורשים את הזמן הקצוב שנקבע לבקשה במעלה הזרם (`FETCH_TIMEOUT_MS`, או `REQUEST_TIMEOUT_MS` כאשר הוא מספק את ברירת המחדל לאחזור). הגדירו `targetTimeoutMs` בשילוב, בברירות המחדל של השילוב או בדריסה של ספק, רק כדי להאיץ את המעבר ליעד חלופי בשילוב; ערכים הגבוהים מהזמן הקצוב הנוכחי במעלה הזרם מוגבלים לזמן הקצוב במעלה הזרם. `comboTimeoutMs` הוא תקציב זמן נפרד לפי שעון קיר עבור השילוב כולו, על פני יעדי מעבר לכשל. השאירו אותו לא מוגדר או הגדירו `0` כדי לאפשר איטרציה ללא הגבלה (מנגנון עצירת תקיעה של 10 דקות, המקודד באופן קשיח ב-`comboPredicates.ts`, עדיין חל). ערך חיובי מחליף את רשת הביטחון הזו עבור השילוב. הקפידו ש-`comboTimeoutMs` יהיה ארוך מ-`targetTimeoutMs`, כדי שלאחר יעד ראשון איטי עדיין יישאר זמן למעבר לכשל. ### ספי מנתק מעגל כוונון מנתק מעגל ברמת הספק. ברירות המחדל משקפות את הערכים המותאמים לקנה מידה הנמצאים בשימוש מאז v3.6 עבור יותר מ-500 חיבורים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------------------------- | ---------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD` | `8` | `open-sse/config/constants.ts` | סף הכשלונות הרצופים עבור ספקי OAuth לפני שמפסק המעגל מופעל. | | `OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS` | `60000` | `open-sse/config/constants.ts` | חלון האיפוס (מ״ש) של מפסק המעגל עבור ספקי 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` | חלון האיפוס (מ״ש) של מפסק המעגל עבור ספקים המשתמשים במפתח 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` | חלון האיפוס (מ״ש) של מפסק המעגל עבור ספקים מקומיים. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD` | `10` | `open-sse/config/constants.ts` | מפסק ברמת הספק: מספר הכשלונות בתוך החלון לפני שספק OAuth כולו נכנס לתקופת צינון. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS` | `900000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: חלון מתגלגל לספירת כשלונות (מ״ש) עבור ספקי OAuth. | | `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: תקופת צינון (מ״ש) לאחר הגעה לסף של ספק 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` | מפסק ברמת הספק: חלון מתגלגל לספירת כשלונות (מ״ש) עבור ספקים המשתמשים במפתח API. | | `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: תקופת צינון (מ״ש) לאחר הגעה לסף של הספק המשתמש במפתח 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` | מפסק ברמת הספק: חלון מתגלגל לספירת כשלונות (מ״ש) עבור ספקים מקומיים. | | `OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS` | `60000` | `open-sse/config/constants.ts` | מפסק ברמת הספק: תקופת צינון (מ״ש) לאחר הגעה לסף של הספק המקומי. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | תקופת צינון לכל מפתח (מ״ש), המוחלת בסבב רוטציה בין מפתחות API מרובים כאשר תגובת 429 מהשרת במעלה הזרם אינה כוללת `Retry-After` (#14573). ערכים שאינם חיוביים או אינם מספריים חוזרים לברירת המחדל. | | `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | עומק ההשהיה שבו הספק של נעיצת מטמון הקשר נחשב לבלתי תקין באופן מתמשך, והנעיצה מוסרת לצורך מעבר בעת כשל. | | `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | חלון למניעת תנודות (מ״ש), המאפשר תקופות צינון ארעיות קצרות לפני הסרת נעיצת מטמון הקשר. | ### תרחישים | תרחיש | תצורה | | --------------------------------- | --------------------------------------------------- | | **יצירת קוד ממושכת** | `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` | _אוטומטי_ (שרת פיזי); **`1024` בתמונת Docker** | מגבלת heap מומלצת של V8 (ב-MB) עבור Docker/מצב עצמאי. כאשר המשתנה אינו מוגדר, המגבלה מכוילת באופן דינמי (כ-35% מזיכרון ה-RAM של המערכת, מוגבל לטווח `[512, 4096]`); הערך `512` משמש כרף תחתון רק כאשר לא ניתן לקרוא את כמות הזיכרון הכוללת. ב-`run-standalone.mjs` (ה-CMD של Docker), ערך **מפורש** מצורף בתור `--max-old-space-size` ו**גובר** על דגל heap סותר ב-NODE_OPTIONS (הדגל האחרון של V8). הפקודה `omniroute serve` עדיין מעדיפה דגל heap קיים ב-NODE_OPTIONS‏ (#5238). אין להגדיר את שניהם למספרים שונים — התהליך רושם אזהרה המציינת את שני הערכים ואת הערך שגבר. **תמונת Docker הרשמית תמיד מגדירה `1024`, ולכן הכיול לעולם אינו פועל בה.** נקודת הקצה `/v1/responses` של סוכן הקידוד זקוקה ל-`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` | נתיך מוחלט עבור ה-RSS של התהליך (ב-MB), המיועד לזיכרון מקורי/חיצוני ש-`heapUsed` של V8 אינו יכול לזהות; מעליו, בקשות חדשות מקבלות 503 עם `resource_pressure`. לעיתים נדירות ה-RSS יורד לאחר זינוק, ולכן יש להשתמש בו יחד עם `OMNIROUTE_PRESSURE_SELF_RESTART`. | | `PROMPT_CACHE_MAX_SIZE` | `50` | המספר המרבי של רשומות הנחיית מערכת במטמון. | | `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | הגודל הכולל המרבי של מטמון ההנחיות. | | `PROMPT_CACHE_TTL_MS` | `300000` (5 דקות) | משך החיים של רשומת מטמון הנחיות. | | `SEMANTIC_CACHE_MAX_SIZE` | `100` | המספר המרבי של תגובות עם temperature=0 במטמון. | | `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | הגודל הכולל המרבי של המטמון הסמנטי. | | `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 דקות) | משך החיים של רשומת מטמון סמנטי. | | `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | שורשי קורפוס מקומי שמחזיקים בו-זמנית אינדקס פעיל בזיכרון (`src/lib/localCorpus/configured.ts`). לפי LRU: בהגעה למגבלה, האינדקס של השורש שהיה בשימוש לפני הזמן הרב ביותר מפונה ונבנה מחדש בשאילתה הבאה שלו. מוגבל לערך מזערי של `1`; ערך שאינו מספרי חוזר לברירת המחדל. | | `STREAM_HISTORY_MAX` | `50` | המספר המרבי של אירועי זרם אחרונים במאגר התצוגה החיה של לוח המחוונים. | | `CONTEXT_LENGTH_DEFAULT` | _(לא מוגדר)_ | עקיפה גלובלית של אורך ההקשר (בטוקנים) עבור כל ספק שאין לו משתנה `CONTEXT_LENGTH_`. כאשר הוא מוגדר, הוא **מחליף** את ערכי הקטלוג, העקיפה בלוח המחוונים והרישום עבור ספקים אלה; כאשר אינו מוגדר, OmniRoute משתמש בשרשרת המובנית שלו, שאפשרות המפלט האחרונה בה היא `128000`. ראו [אורך הקשר לפי ספק](#per-provider-context-length-context_length_provider). | | `USAGE_TOKEN_BUFFER` | `100` | מרווח ביטחון נוסף של טוקנים הנשמר בעת מעקב אחר מכסות שימוש. | ### אורך הקשר לפי ספק (`CONTEXT_LENGTH_`) `open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) קורא גם תצורה **לפי ספק**, ששמה נבנה ממזהה הספק בזמן ריצה, ולכן לא ניתן לפרט אותה שורה אחר שורה בטבלה שלעיל או ב-`.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. חלון לפי מודל: דריסת הקשר שמורה (שהוגדרה בלוח הבקרה, או ננעלה אוטומטית על ידי מתאם הגילוי, ראו `CONTEXT_WINDOW_RECONCILE_INTERVAL`), ואחרת הערך מהקטלוג המסונכרן / models.dev. 4. `defaultContextLength` ממרשם הספק. 5. כללי אצבע המבוססים על שם המודל (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` / `o4` / `codex` 400000). 6. ברירות מחדל מובנות לפי ספק, ולאחר מכן `128000`. שני שלבי הסביבה חלים על **הספק כולו**: כל מודל של אותו ספק מקבל את אותה מגבלה, והם מקבלים קדימות על פני דריסות לפי מודל בלוח הבקרה. כאשר רק מודל אחד של ספק זקוק לחלון שונה, השתמשו במקום זאת בדריסה לפי מודל בלוח הבקרה. **תחולה.** שרשרת זו קובעת את בדיקת חלון ההקשר בזמן הבקשה (הדחייה `context_length_exceeded` / "הקלט חורג מחלון ההקשר" בתוך `open-sse/handlers/chatCore.ts`), את תקציבי דחיסת הפרומפט ואת מגבלות ההקשר המשולבות. הערך `context_length` שמפורסם על ידי `GET /v1/models` עדיין עשוי להגיע ממטא-נתונים של הקטלוג או המרשם, ולא מובטח שישקף את דריסת הסביבה. **דוגמה.** ספק שהמודל שלו מקבל חלון של 1,050,000 טוקנים, בעוד שהקטלוג מדווח על 128,000: ```dotenv CONTEXT_LENGTH_AGENTROUTER=1050000 ``` הפעילו מחדש את השרת לאחר שינוי הערך: הערך נקרא מסביבת התהליך של השרת. ב**יישום שולחן העבודה** השרת פועל כתהליך בן ואינו רואה משתנה מערכת שהוגדר לאחר הפעלת היישום; הוסיפו את השורה לקובץ `.env` שהיישום טוען (סדר החיפוש מופיע ב[מדריך Electron: חיפוש קובץ הסביבה](../guides/ELECTRON_GUIDE.md#environment-file-lookup)), ולאחר מכן צאו לחלוטין מהיישום והפעילו אותו מחדש. ### דחיסה | משתנה | ברירת מחדל | תיאור | | ------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------- | | `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | לא מוגדר | מתן אמון ב-`.rtk/filters.json` של הפרויקט ללא גיבוב `.rtk/trust.json`. השתמשו רק בפיתוח מקומי מבוקר. | ### מנוע זיכרון (תוכנית 21) ### עלות לולאת האירועים של זיכרון, מיומנויות ורענון טוקנים (#10349) OmniRoute הוא **תהליך Node יחיד**. חילוץ/אחזור זיכרון, הזרקת מיומנויות ורענון טוקנים של ספקים פועלים באותה **לולאת אירועים** שבה פועלים `GET /healthz` ולוח הבקרה. הם אינם תהליכון עובד. | עבודה | קוד | ברירת מחדל | בקרת מפעיל | | -------------------- | ---------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | | חילוץ / אחזור זיכרון | `src/lib/memory/` | **memoryEnabled** בלוח הבקרה (מופעל כברירת מחדל) | כבו את **הגדרות → זיכרון**. אין מתג השבתה נפרד במשתני הסביבה מעבר להשבתת התכונה בהגדרות. | | הזרקת מיומנויות | `src/lib/skills/injection.ts` | **skillsEnabled** בלוח הבקרה (מופעל כברירת מחדל) | כבו את **הגדרות → זיכרון/מיומנויות** (`skillsEnabled`). אפשרויות ארגז החול שלהלן רק מגבילות את הביצוע לאחר שההזרקה כבר הופעלה. | | רענון טוקנים | `src/sse/services/tokenRefresh.ts` | מופעל עבור ספקי OAuth/אינטרנט מחוברים | נתקו את הספק או אפשרו לטוקנים להישאר בתוקף; כיום אין משתנה סביבה `TOKEN_REFRESH=0`. | אם `/healthz` איטי במחשב שאינו עמוס, השביתו תחילה את הזיכרון ואת המיומנויות, ולאחר מכן בדקו את עומס הקטלוג/הדחיסה (#10303, #9685). תכונות אלה מפנות שליטה בנקודות `await`, אך עדיין מתחרות על התהליכון היחיד. אפשרויות שכבת ההטמעות, מאגר הווקטורים והדירוג מחדש עבור תת-מערכת הזיכרון המתמיד (`src/lib/memory/`). | משתנה | ברירת מחדל | תיאור | | ------------------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 דקות) | משך החיים של מטמון ההטמעות בזיכרון (לפי חתימת מקור/מודל/ממד). | | `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | המספר המרבי של רשומות LRU הנשמרות במטמון ההטמעות. | | `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | מזהה מאגר HF עבור צינור MiniLM מקומי אופציונלי של `@huggingface/transformers` (כ־23 MB ב־int8, כ־400 MB של RAM). | | `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | מזהה מאגר HF עבור מטמיע טבלת החיפוש הסטטי potion/Model2Vec. מורד באופן עצל לתיקיית המטמון. | | `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | התיקייה המשמשת לשמירת קובצי מודל potion הסטטי במטמון. כאשר אינו מוגדר, ברירת המחדל היא תחת `DATA_DIR`. | | `HF_HUB_ENDPOINT` | `https://huggingface.co` | החלפת כתובת ה־URL הבסיסית של Hugging Face Hub שבה משתמש `staticPotion.ts` (למשל, נקודת קצה של מראה עבור סביבות מבודדות). | | `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 עבור הקצה האחורי של Notion (בשימוש הגדרת הקצה האחורי המוכרת של `genericBackend.ts`). | | `NOTION_API_URL` | `https://api.notion.com/v1` | כתובת URL בסיסית עבור API של Notion (ניתן להחליף עבור חלופות Notion באירוח עצמי). | | `OBSIDIAN_API_KEY` | _(לא מוגדר)_ | מפתח API עבור הקצה האחורי של Obsidian Vault (בשימוש הגדרת הקצה האחורי המוכרת של `genericBackend.ts`). | | `OBSIDIAN_API_URL` | `http://localhost:27123` | כתובת URL בסיסית עבור API של Obsidian Vault (ניתן להחליף עבור כספת מרוחקת). | | `MEMORY_TYPED_DECAY_ENABLED` | `false` | המתג הראשי לדעיכת זיכרון לפי סוג של TV6. **הפעלה מפורשת (כבוי כברירת מחדל)** — הסריקה **מוחקת** זיכרונות שדעכו. כאשר הוא כבוי, `access_count`/`last_accessed_at` הם נתוני טלמטריה בלבד ושום דבר אינו נמחק לעולם. | | `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | משך החיים (בימים) שאחריו זיכרון `episodic` שלא נעשה בו שימוש דועך. `0` הופך גם זיכרון אפיזודי לחסין. סוגים עמידים (`factual`/`procedural`/`semantic`) תמיד חסינים. שעון הדעיכה מתבסס מחדש על `last_accessed_at`. | | `MEMORY_TYPED_DECAY_ACCESS_IMMUNITY` | `3` | זיכרון שהוזרק `>=` מספר פעמים זה נעשה חסין לדעיכה ללא קשר לסוגו. `0` משבית חסינות המבוססת על גישה. | | `MEMORY_TYPED_DECAY_SWEEP_INTERVAL` | `0` (מושבת) | מרווח הזמן (בשניות) עבור סריקת הדעיכה המחזורית האופציונלית ב־`src/lib/memory/typedDecay.ts`. `0`/לא מוגדר = ללא סריקה מחזורית. דורש הפעלה מפורשת כפולה: נדרש גם `MEMORY_TYPED_DECAY_ENABLED=true`. | | `OMNIROUTE_STRICT_SYSTEM_PROVIDERS` | _(לא מוגדר)_ | מזהי ספקים מופרדים בפסיקים (ללא תלות ברישיות) המקבלים הודעת `system` **רק באינדקס 0** (`src/lib/memory/injection.ts`). עבורם, שילוב הזיכרון באמצע המערך, הבטוח למטמון, אינו בטוח בשיחות מרובות תורות, ולכן הזיכרון ממוזג/נוסף בתחילה כהודעת המערכת המובילה. ברירת המחדל כוללת רק את `xiaomi-mimo`/`mimo`; ניתן להרחיב עבור נקודות קצה תואמות OpenAI באירוח עצמי (למשל Qwen3.5+/3.6), שתבנית הצ'אט שלהן אוכפת את אותה מגבלה של הודעת מערכת מובילה יחידה. | ### דוגמת Docker עם מעט RAM הערך `128` מיועד ללוח המחוונים בלבד. סוכני תכנות עם ערימת זיכרון זו נתקלים ב־`FATAL ERROR` במהלך קריאות ארוכות אל `/v1/responses`. אין להשתמש בדוגמה זו כשער Claude/Codex/Grok. ```bash OMNIROUTE_MEMORY_MB=128 PROMPT_CACHE_MAX_SIZE=20 PROMPT_CACHE_MAX_BYTES=524288 # 512 KB SEMANTIC_CACHE_MAX_SIZE=25 SEMANTIC_CACHE_MAX_BYTES=1048576 # 1 MB STREAM_HISTORY_MAX=10 ``` --- ## 18. סנכרון תמחור סנכרון אוטומטי של נתוני תמחור מודלים ממקורות חיצוניים. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ----------------------- | ----------------- | ------------------------ | -------------------------------- | | `PRICING_SYNC_ENABLED` | `false` | `src/lib/pricingSync.ts` | הפעלת סנכרון תמחור תקופתי. | | `PRICING_SYNC_INTERVAL` | `86400` (24 שעות) | `src/lib/pricingSync.ts` | מרווח הזמן בין סנכרונים, בשניות. | | `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | מקורות נתונים מופרדים בפסיקים. | --- ## סנכרון 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` (24 שעות) | `src/lib/catalog/openrouterCatalog.ts` | משך החיים של מטמון קטלוג המודלים של OpenRouter. | | `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | הכללת שדות `name` ידידותיים לתצוגה בתגובות `/v1/models`. יש להשבית עבור לקוחות שמצפים למזהים בלבד. | | `CATALOG_BUILD_TIMEOUT_MS` | `8000` (8 שניות) | `src/app/api/v1/models/catalogCache.ts` | מגבלת ההמתנה במסלול הקר לבנייה מחדש מאוחדת של קטלוג `GET /v1/models`‏ (#12627). במקרה של חריגה מהזמן, מוחזרת תגובת 200 תקינה אחרונה, אם קיימת. | | `OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS` | `2592000000` (30 ימים) | `src/lib/db/models/activeSyncedCatalog.ts` | הזמן שאחריו רשימת המודלים המסונכרנת של חיבור מפסיקה להיחשב מוסמכת לצורך ניתוב, ובמקרה של כשל נעשה שימוש ברישום (#12849). שורות שמעולם לא קיבלו חותמת זמן נחשבות למיושנות. | | `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 שניות) | `src/lib/usage/analyticsResponseCache.ts` | משך הזמן שבו נעשה שימוש חוזר בתגובה איטית של `GET /api/usage/analytics` עבור אותה מחרוזת שאילתה (#15629). הערך `0` משבית את המטמון. | | `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (שנייה אחת) | `src/lib/usage/analyticsResponseCache.ts` | רק תגובות ניתוח שבנייתן ארכה לפחות זמן זה נשמרות במטמון, כך שמופעים קטנים תמיד מקבלים נתונים עדכניים. | | `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | זמן ההמתנה המרבי למשימות יצירת תמונות של NanoBanana. | | `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | תדירות התשאול של משימות NanoBanana. | | `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | השהיית הבסיס להשהיה המעריכית בין ניסיונות חוזרים של שליחת בקשת הגדלת תמונה אל Adobe Firefly. | | `AWS_REGION` | _(לא מוגדר)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | האזור המשמש לבניית נקודות קצה של AWS Bedrock‏ (Kiro, שמע). | | `AWS_DEFAULT_REGION` | _(לא מוגדר)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | ערך חלופי כאשר `AWS_REGION` אינו מוגדר. | | `CLOUDFLARE_ACCOUNT_ID` | _(לא מוגדר)_ | `open-sse/executors/cloudflare-ai.ts` | מזהה החשבון עבור Cloudflare Workers AI. | | `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(לא מוגדר)_ | `open-sse/executors/cloudflare-playground.ts` | הנתיב המלא לקובץ הבינארי של Chrome למחשב שולחני עבור המבצע של Cloudflare AI Playground, המשמש כאשר בדיקת טביעת האצבע במצב ללא ממשק גרפי חוסמת את Chromium המצורף ל-Playwright. | | `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) | `open-sse/executors/codebuddy/shared.ts` | מגבלת אורך אופציונלית להנחיות המערכת של המתקשר הנשלחות אל CodeBuddy‏ (סין ובינלאומי). כברירת מחדל, רק הנחיה הכוללת סמן זהות של סוכן תכנות מוחלפת בהנחיה ניטרלית (מסנן התוכן של Tencent דוחה הנחיות כאלה); הנחיות ארוכות נשמרות. מספר שלם > 0 מחליף גם כל הנחיית מערכת שאורכה עולה על מספר התווים הזה; ערך לא מוגדר, `0` או ערך שאינו מספר שלם משביתים את המגבלה. כל החלפה מתעדת ביומן איזה כלל הופעל (סמן זהות או אורך). | | `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | דריסת בסיס ה-API מסוג REST של Cloudflare המשמש את כלי הפריסה של ממסר Workers במאגר שרתי ה-Proxy‏ (#4640 / 9router#1360). | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | שם ברירת המחדל של פרויקט העובד המוצע בחלון "פריסת ממסר" של מאגר שרתי ה-Proxy. | | `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | יש להגדיר כ-`false` כדי להסתיר את אפשרות הממסר של Cloudflare Workers מהכרטיסייה מאגר שרתי ה-Proxy. | | `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` (מנהרה בעלת שם) במקום מנהרה מהירה זמנית. | | `CLOUDFLARED_HOSTNAME` | _(מ־config 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` | דריסת כתובת הבסיס של Deno Deploy REST API שבה משתמש מנגנון הפריסה של ממסר מאגר שרתי ה־proxy‏ (#4643 / 9router#1437). | | `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | שם ברירת המחדל ליישום Deno Deploy המוצע בחלון "Deploy Relay" של מאגר שרתי ה־proxy. | | `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | יש להגדיר כ־`false` כדי להסתיר את אפשרות הממסר של Deno Deploy מהכרטיסייה Proxy Pool. | | `SEARCH_CACHE_TTL_MS` | `300000` (5 דקות) | `open-sse/services/searchCache.ts` | TTL לשמירת תגובות של ממשק ה־API לחיפוש (Perplexity,‏ Brave וכו׳) במטמון. | | `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | הצגת ממשק המשתמש הניסיוני של ספק תואם CC עבור ממסרים המיועדים ל־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` | מארח האיגוד של שרת ה־proxy מסוג WebSocket עבור השירות המוטמע (לולאה מקומית בלבד כברירת מחדל). | | `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | היציאה של שרת ה־proxy מסוג WebSocket עבור השירות המוטמע. | | `CLIPROXYAPI_HOST` | `127.0.0.1` | `open-sse/executors/cliproxyapi.ts` | המארח של גשר CLIProxyAPI (שילוב מדור קודם). | | `CLIPROXYAPI_PORT` | `5544` | `open-sse/executors/cliproxyapi.ts` | היציאה של גשר CLIProxyAPI. | | `CLIPROXYAPI_API_KEY` | _(ריק)_ | `open-sse/handlers/chatCore/cliproxyapiCredentials.ts` | מפתח גיבוי למישור הנתונים כאשר ההגדרה `cliproxyapi_api_key` חסרה. | | `CLIPROXYAPI_MANAGEMENT_KEY` | _(ריק)_ | `src/lib/services/cliproxyAccountHealth.ts` | מפתח ניהול לקריאת תקינות חשבונות ממופע CLIProxyAPI המנוהל חיצונית. | | `CLIPROXYAPI_CONFIG_DIR` | `~/.cli-proxy-api` | `src/lib/versionManager/processManager.ts` | ספריית התצורה של CLIProxyAPI. | | `CLIPROXY_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שעליו docker-compose מפרסם את שירות הצד `cliproxyapi`‏ (#12578). אמצעי האחסון שלו מכיל פרטי אימות OAuth/API של ספקים, ולתמונה המוצמדת אין דריסה מבוססת משתני סביבה עבור `api-keys` של מישור הנתונים (רק `config.yaml` מעוגן), ולכן `0.0.0.0` חושף שירות המכיל פרטי אימות לכל הרשת המקומית. | | `MUX_SERVICE_PORT` | `8322` | `src/lib/services/bootstrap.ts` | דריסת היציאה שבה מאזין תהליך הרקע המוטמע Mux‏ (coder/mux) לתזמור סוכנים (תמיד 127.0.0.1). | | `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | דריסת היציאה שבה מאזין תהליך הרקע המוטמע open-wa‏ (אוטומציה של WhatsApp Web) (תמיד 127.0.0.1). | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | מארח הקישור/ההתחברות של השירות המוטמע Dario (כברירת מחדל, ממשק loopback בלבד). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | יציאת השירות המוטמע Dario. | | `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | מארח הקישור/ההתחברות של השירות המוטמע Dario (כברירת מחדל, ממשק loopback בלבד). | | `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | יציאת השירות המוטמע Dario. | | `LOCAL_HOSTNAMES` | _(ריק)_ | `open-sse/config/providerRegistry.ts` | שמות מארחים נוספים, מופרדים בפסיקים, המטופלים כ"מקומיים" (שמות שירותי Docker וכדומה). | `ENABLE_CC_COMPATIBLE_PROVIDER` מיועד רק לממסרים של צד שלישי שמקבלים לקוחות Claude Code באופן בלעדי. OmniRoute משכתב בקשות כדי שממסרים אלה יקבלו אותן. אם ברצונכם להשתמש רק ב-Claude Code CLI, או שאינכם בטוחים מהם ממסרים אלה, השאירו אפשרות זו מושבתת והוסיפו במקום זאת ספק רגיל התואם ל-Anthropic. --- ## 21. תקינות ה-Proxy | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | זמן קצוב לבדיקת תקינות בכשל מהיר. | | `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | חלון הזמן (בשעות) לחישוב זמן ההשהיה הממוצע של שרתי Proxy מועמדים באסטרטגיית מאגר הממוטבת לזמן השהיה. | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | משך החיים (TTL) של מטמון תוצאות בדיקת התקינות. | | `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | משך החיים (TTL) במטמון עבור בדיקות תקינות Proxy שנכשלו. יש להגדיר ערך קצר יותר מ-`PROXY_HEALTH_CACHE_TTL_MS`, כדי שזמנים קצובים זמניים של Proxy בעומס מקבילי גבוה ינוסו מחדש במהירות, מבלי להשבית את מנגנון הכשל המהיר עבור שרתי Proxy שאינם פעילים בפועל. | | `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | יש להגדיר `false` כדי להשבית את מתזמן תקינות ה-Proxy ברקע, שבודק מעת לעת שרתי Proxy רשומים. | | `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | מרווח הזמן באלפיות שנייה בין סבבי הסריקה של מתזמן התקינות ברקע (מינימום `60000`). | | `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | מרווח הבדיקה באלפיות שנייה עבור שרתי proxy מסוג edge-relay (`deno`/`vercel`/`cloudflare`), שהבדיקות שלהם מעירות מופע serverless הכרוך בתשלום (מינימום `60000`). | | `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | מרווח באלפיות שנייה בין סבבי שחזור ברקע: התדירות שבה שרתי proxy שסומנו בעבר כלא תקינים נבדקים מחדש, כך ששרת proxy שהתאושש חוזר לסבב השימוש ללא הפעלה מחדש. ערכים הנמוכים מ־`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" כדי להפסיק לבדוק את המארח האמיתי של הספק שהוקצה לשרת proxy (`GET /models`, ללא מפתח API), ולהשתמש תמיד במקום זאת ב־`PROXY_HEALTH_TEST_URL`. | | `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | כאשר הערך הוא `false` (ברירת המחדל), בדיקות נגישות אוטומטיות (המתזמן + הלחצן "בדיקת הכול" של `/api/settings/proxies/auto-test`) הן **לקריאה בלבד** ולעולם אינן משנות את הסטטוס של שרת proxy — רק המפעיל מגדיר פעיל/לא פעיל, כך שבדיקה לא יציבה אינה יכולה להשאיר שרת proxy מוקצה תקוע (#6246). הגדירו ל־`true` כדי לשחזר את התנהגות הבדיקה וההגדרה הקודמת. | | `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונה להפעלה מפורשת (ראו [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); דריסה ממסד הנתונים של לוח המחוונים גוברת). הערך `true` (או `1`, `yes`) גורם לניסיון חוזר של תורות streaming מתורגמים וריקים דרך נתיב פרטי הכניסה הרגיל (עד `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` ניסיונות חוזרים), במקום לחשוף תגובת 200 ריקה או תגובת 502 עם תוכן ריק. | | `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונה להפעלה מפורשת (ראו [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); דריסה ממסד הנתונים של לוח המחוונים גוברת). הערך `true` (או `1`, `yes`) מציג את תצפית היציאה לקריאה בלבד תחת מאגר proxy בלוח המחוונים (כתובות IP ייחודיות ליציאה, חיבורים והמספר הרב ביותר שנצפה מאחורי כתובת IP אחת במהלך 24 השעות האחרונות, מתוך יומן ה־proxy). לעולם אינו משמש לניתוב. | | `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | דגל תכונה המחייב הצטרפות מפורשת (ראו [FEATURE_FLAGS.md](./FEATURE_FLAGS.md); דריסה ממסד הנתונים של לוח הבקרה גוברת). `true` (או `1`, `yes`) מאפשר קבלת כתובות נצפות מתוארכות שנשלחו על ידי המפעיל עבור כל חבר במאגר, וממזג אותן עם קריאת היומן לצורך תצוגה וסדר המאגר. | | `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | חלון התצפית בשעות עבור רשומות יציאה שנשלחו על ידי המפעיל (נקרא בכל קריאה; אין צורך בהפעלה מחדש). מוגבל לטווח 1..168; ערך מחוץ לטווח, שאינו מספרי או ריק חוזר ל-24 עם אזהרה יחידה לכל התהליך, ולעולם אינו זורק חריגה. | | `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | הגדירו `true` כדי לאפשר למתזמן להסיר שרתי proxy באופן אוטומטי לאחר כשלים רצופים חוזרים. | | `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | מספר הכשלים הרצופים לפני שהמתזמן מסיר שרת proxy באופן אוטומטי (כאשר `PROXY_AUTO_REMOVE=true`). | | `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | הגדירו `true` כדי לאפשר למתזמן להשבית באופן רך (סטטוס `dead`, ללא מחיקה) שרת proxy לאחר כשלים רצופים חוזרים, במקום להסיר אותו. זוהי חלופה שאינה הרסנית ל-`PROXY_AUTO_REMOVE`: שרת ה-proxy יוצא מיד מפתרון המאגר/הסבב (מסנן הסטטוס הפעיל המשמש לפתרון מאגר התחום כבר מחריג אותו), ומופעל מחדש באופן אוטומטי ברגע שהוא חוזר לעבור את בדיקות הגישוש. חולק את סף `PROXY_AUTO_REMOVE_AFTER`. אם שני הדגלים הם `true`, ‏`PROXY_AUTO_REMOVE` גובר. | | `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | דילוג פסיבי המחייב הצטרפות מפורשת: כאשר הערך הוא `true`, המתזמן מדלג על בדיקת הגישוש החיה עבור נקודת קצה שתעבורת הייצור האחרונה שלה כבר מוכיחה את תקינותה (לפחות הצלחה אחת וללא כשל המיוחס לשרת ה-proxy בחלון, כאשר נצפה ספק אחד בלבד). מושבת כברירת מחדל: כל שרת proxy נבדק. | | `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 ואימות ספקים לעקוף שרת proxy מוצמד ולהתחבר ישירות כאשר בדיקות זמינות מקדימות של שרת ה-proxy נכשלות. סדר הקדימות בפועל הוא דריסה ממסד הנתונים של דגלי התכונות > משתנה סביבה > ברירת מחדל. | | `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 שניות) | `src/lib/resilience/settings.ts` | תקציב ברירת המחדל ל**המתנה בתור**: משך הזמן שבו בקשה רשאית להמתין למשבצת אצל ספק ולהישאר בתור לפני שהיא נדחית, מבלי להגיע כלל לשירות במעלה הזרם. הטיימר מנוקה ברגע שהמשימה מתחילה להתבצע — משך הביצוע מוגבל בנפרד על ידי `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. משתנה הסביבה מגדיר את ברירת המחדל בלבד: `resilienceSettings.requestQueue.maxWaitMs` שנשמר, ולאחר מכן `rateLimitOverrides.maxWaitMs` לכל חיבור, גוברים עליו לפי הסדר. | | `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 דקות) | `open-sse/services/rateLimitManager.ts` | הגבול העליון למשך הזמן שבו בקשה שהתקבלה רשאית להישאר בביצוע לפני שהקצאת הגבלת הקצב שלה פגה — מופרד מתקציב ההמתנה בתור, כדי שהתחלה איטית של אחזור בשערים שאינם הדרגתיים לא תסתיים בפסק זמן (#12027). | | `RATE_LIMIT_MAX_QUEUE_DEPTH` | `0` (מושבת) | `open-sse/services/rateLimitManager.ts` | מגבלת קבלה לתור: דחייה עם 429 `queue_full` כאשר מספר זה של בקשות כבר נמצא בתור. `0` = ללא הגבלה (ברירת מחדל). | | `RATE_LIMIT_AUTO_ENABLE` | _(לא מוגדר)_ | `open-sse/services/rateLimitManager.ts` | כפיית הפעלה או השבתה של רשת הביטחון להפעלה אוטומטית של הגבלת קצב, ללא תלות בהגדרה השמורה בלוח הבקרה. מקבל `true`/`1`/`on` לכפיית הפעלה, ו-`false`/`0`/`off` לכפיית השבתה. | | `PROVIDER_COOLDOWN_ENABLED` | _(לא מוגדר → כבוי)_ | `open-sse/services/providerCooldownTracker.ts` | מעקב גלובלי, בין בקשות, אחר תקופת צינון של ספק/חיבור, בהצטרפות מפורשת. כבוי כברירת מחדל (חופף לתקופת הצינון של החיבור / מפסק המעגל של הספק). מקבל `true`/`1`/`on` להפעלה. | | `PROVIDER_COOLDOWN_MIN_MS` | `5000` | `open-sse/services/providerCooldownTracker.ts` | תקופת הצינון המינימלית (במילישניות) לפני ניסיון חוזר עם ספק/חיבור שנכשל. גדלה באופן מעריכי בהתאם למספר הכשלים הרצופים. משמש רק כאשר `PROVIDER_COOLDOWN_ENABLED`. | | `PROVIDER_COOLDOWN_MAX_MS` | `300000` (5 דקות) | `open-sse/services/providerCooldownTracker.ts` | הגבול המרבי לתקופת הצינון (במילישניות), שאחריו מתבצע ניסיון חוזר עם ספק/חיבור שנכשל בכל מקרה. משמש רק כאשר `PROVIDER_COOLDOWN_ENABLED`. | | `STREAM_RECOVERY_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/resilience/settings.ts` (אתחול) → `open-sse/services/streamRecovery.ts` (לוגיקה) | **מה:** שחזור שקוף של זרמים קטועים במעלה הזרם (הסבה של free-claude-code). משהה את חלון ה-SSE הפותח למשך עד `STREAM_RECOVERY.HOLDBACK_MS` (750 מילישניות), כך שקטיעה _לפני התחייבות_ — כזו שמתרחשת לפני שבית כלשהו מגיע ללקוח — נפתחת מחדש ומתבצע ניסיון חוזר באופן בלתי נראה. **מתי להפעיל:** עבור שירותים לא יציבים במעלה הזרם, שלעתים קרובות קוטעים את הזרם ללא בתים בתחילתו; יש להשאיר כבוי אם לא ניתן להרשות תוספת של עד 750 מילישניות לזמן עד האסימון הראשון בכל זרם. מקבל `true`/`1`/`on`. מאתחל את הגדרת העמידות השמורה; לאחר שההגדרה בלוח הבקרה נקבעת, היא גוברת עליו. | | `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/resilience/settings.ts` (אתחול) → `open-sse/services/streamRecovery.ts` (לוגיקה) | **מה:** המשך באמצע הזרם (שלב 4.4) — לאחר קטיעה _אחרי commit_ (בתים כבר הגיעו ללקוח), שליחה חוזרת של הבקשה עם הטקסט החלקי כ-prefill של assistant וחיבור הסיומת החסרה. עבור זרמים תואמי-OpenAI בטקסט פשוט בלבד; לעולם אינו מופעל כאשר קריאת כלי מתבצעת. **מתי להפעיל:** עבור יצירות ארוכות שנקטעות באמצע התשובה, כאשר מקובל עליכם שהסיומת המשוחזרת תגיע כפעימה אחת במקום token אחר token. בלתי תלוי ב-`STREAM_RECOVERY_ENABLED` (פרופיל סיכון שונה). מקבל `true`/`1`/`on`. | | `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | מנגנון watchdog אופציונלי לפלט שימושי בזרם פעיל. מזהה זרמים שממשיכים לשלוח מקטעים אך נותרים מתחת לקצב הפלט המוגדר של ה-assistant; פעימות חיים, אירועי שימוש, הפרשים ריקים ושלבי כלים/הסקה אינם מתחזים להתקדמות. נפרד מפסקי זמן של חוסר פעילות וממגבלות זמן קשיחות. | | `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | תקופת חסד לפני הערכת התפוקה, מוגבלת ל-0–600000 ms. | | `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | חלון מתגלגל של פלט שימושי, מוגבל ל-1000–600000 ms; נדרש חלון מלא אחד לפני ביטול. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | קצב הבתים המזערי של פלט assistant ב-UTF-8 (אומדן שמרני ל-token), מוגבל ל-1–1000000. | | `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | דגימת הפלט השימושי המזערית שאינה אפס ונחשבת ניתנת למדידה, מוגבלת ל-1–1000000 בתים. | | `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | מרווח ההשהיה (ms) בין בדיקות תקינות של אסימוני ספק בעת ההפעלה. | | `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | ריצוד אקראי מזערי (ms) שנוסף על `HEALTHCHECK_STAGGER_MS` בין בדיקות תקינות של אסימוני ספק, כדי למנוע עומס מתפרץ (בעיה #1220). | | `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | ריצוד אקראי מרבי (ms) שנוסף על `HEALTHCHECK_STAGGER_MS` בין בדיקות תקינות של אסימוני ספק, כדי למנוע עומס מתפרץ (בעיה #1220). | | `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | גודל אצוות הבדיקות המקבילות עבור סריקת תקינות האסימונים בעת ההפעלה; ערכים גדולים יותר בודקים יותר חיבורים במקביל, וערכים קטנים יותר מפחיתים עומס מתפרץ (בעיה #7875, רגרסיה של #7719). | | `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | מספר הניסיונות החוזרים האוטומטיים בתגובות צינון ברמת המודל לפני החזרת שגיאה ללקוח. | | `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | מרווח ההשהיה המרבי (בשניות) בין ניסיונות חוזרים לאחר צינון. מוגבל לערך זה ללא תלות ב-`Retry-After` שמתקבל מהשירות במעלה הזרם. | | `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | כתובת ה-URL של פרוקסי Headroom לחיסכון בטוקנים. מחזור החיים של לוח הבקרה (`api/headroom/*`) מפעיל כברירת מחדל CLI מקומי של `headroom-ai` בממשק loopback; יש לדרוס ערך זה רק כדי להפנות לפרוקסי sidecar חיצוני של Docker. | ### קבועים לכוונון שחזור זרמים התנהגות ההשהיה של השחזור מכווננת באמצעות קבועים המקודדים ישירות ב-`open-sse/config/constants.ts` (`STREAM_RECOVERY`), המוצגים כאן לעיון — שינוים דורש עריכת קוד, ולא משתנה סביבה: - `STREAM_RECOVERY.HOLDBACK_MS = 750` — משך הזמן שבו חלון ה-SSE הפותח מושהה, כדי שניתן יהיה לנסות שוב לאחר קטיעה מוקדמת לפני שמועבר בייט כלשהו ללקוח. - `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — מגבלה קשיחה על החלון המושהה; יש לבצע commit (ריקון + העברה ישירה) ברגע שמספר זה של בייטים מצטבר, ללא תלות בקוצב הזמן. - `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — המספר המרבי של פתיחות חוזרות ושקופות של הזרם במעלה הזרם, כל עוד טרם בוצע commit להשהיה. > **הגבלת קצב בחלון נע לכל ספק (ללא משתנה סביבה):** מנגנון ה-_fallback_ להגבלת קצב > בחלון נע לכל ספק, שהוסב מ-FCC, קיים בקוד > (`open-sse/services/providerDefaultRateLimit.ts`, ומחובר דרך > `open-sse/services/rateLimitManager.ts`), אך מופץ עם **מפה ריקה כברירת מחדל** > וכיום **אין לו משתנה סביבה למפעיל** — הוא מופעל רק באמצעות hook לבדיקות / > עריכת קוד. במכוון הוא אינו מופיע בטבלה שלעיל. מגביל הממסר לכל `(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 עבור מנגנון הגבלת הקצב. | | `ALIBABA_CODING_PLAN_HOST` | _(מארח הייצור)_ | `open-sse/services/bailianQuotaFetcher.ts` | החלפת המארח המשמש לאחזור מכסות תוכנית הקידוד של Alibaba Bailian. | | `ALIBABA_CODING_PLAN_QUOTA_URL` | נגזרת מהמארח | `open-sse/services/bailianQuotaFetcher.ts` | החלפה של כתובת ה-URL המלאה למכסה עבור Alibaba Bailian. | | `QWEN_CLOUD_COOKIE` | _(לא מוגדר)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | קובץ Cookie של הפעלת המסוף עבור שער המכסות האישי של Token Plan ב-Qwen Cloud / Model Studio (מפתח ה-API להסקה אינו יכול לקרוא אותו). העתיקו את כל כותרת הבקשה `Cookie` — היא מכילה את `login_qwencloud_ticket` — מכל קריאת `api.json` אל `cs-data.qwencloud.com` ב-home.qwencloud.com › חיוב › מינוי (F12 › רשת). מידע רגיש ומוגבל להפעלה; מומלץ להשתמש בשדה `qwenCloudCookie` בלוח המחוונים עבור כל חיבור. | | `QWEN_CLOUD_SEC_TOKEN` | _(לא מוגדר)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | החלפה ידנית של `sec_token` עבור שער המסוף של Token Plan. מידע רגיש; כאשר אינו מוגדר, מנגנון האחזור מחלץ אותו מה-HTML של לוח המחוונים באמצעות קובץ ה-Cookie. | | `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | החלפת מארח השער עבור מנגנון אחזור המכסות האישי של Token Plan (לדוגמה, `bailian-singapore-cs.alibabacloud.com` עבור מסוף Model Studio). | | `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | כתובת ה-URL של לוח המחוונים המשמשת לחילוץ `sec_token` מה-HTML של המשתמש המחובר. | | `XIAOMI_MIMO_CONSOLE_COOKIE` | _(לא מוגדר)_ | `open-sse/services/usage/xiaomi-mimo.ts` | קובץ Cookie של הפעלת המסוף עבור API המכסות של Xiaomi MiMo Token Plan ‏(`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — מפתח ה-API להסקה אינו יכול לקרוא אותו). העתיקו את כל כותרת הבקשה `Cookie` — היא מכילה את `api-platform_serviceToken` ואת `userId` — מכל בקשה אל `platform.xiaomimimo.com` בדף Token Plan ‏(F12 › רשת). מידע רגיש ומוגבל להפעלה; מומלץ להשתמש בשדה `xiaomiMimoConsoleCookie` בלוח המחוונים עבור כל חיבור. | | `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | תקציב חודשי (Credits) עבור חלופת Xiaomi MiMo במעקב OmniRoute, המשמשת כאשר לא מוגדרת עוגיית מסוף. ברירת המחדל היא 4.1B של מסלול Lite; יש להגדיר לערך ה-Credits של המסלול (Standard 11B / Pro 38B / Max 82B). דריסה ברמת החיבור באמצעות `providerSpecificData.monthlyTokenLimit` מקבלת עדיפות על פני משתנה סביבה זה. | | `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | דריסת נתיב ממשק המשתמש של המסוף לאחזור מכסת הראייה/מדיה של המסלול החינמי ב-Alibaba Model Studio. | | `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | דריסת נתיב ממשק המשתמש של המסוף לאחזור המכסה הרב־אופנית של המסלול החינמי ב-Alibaba Model Studio. | | `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | דריסת נתיב ממשק המשתמש של המסוף לאחזור מכסת השמע של המסלול החינמי ב-Alibaba Model Studio. | | `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(לא מוגדר)_ | `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`. סדר הקדימות בפועל הוא דריסת מסד הנתונים Feature Flags > משתנה סביבה > ברירת מחדל; אם אינו זמין, השירות חוזר לערך הגולמי של משתנה הסביבה. | | `COMMAND_CODE_CALLBACK_PORT` | _(לא מוגדר)_ | `src/app/api/providers/command-code/auth/shared.ts` | יציאה מקומית המשמשת לקריאות חוזרות בסגנון OAuth מכלי העזר Command Code CLI. | | `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | הערך שנשלח בכותרת `x-command-code-version` לשירות Command Code שבמעלה הזרם. ניתן לדרוס כדי להעלות את גרסת ה-CLI. | | `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | כתובת ה-URL הבסיסית של שירות השימוש/המכסה של Command Code שבמעלה הזרם, המשמשת את הטלמטריה לאחזור המכסה של הטלפון החכם. ניתן לדרוס לצורך שימוש ב-API של Command Code באירוח עצמי או חלופי. | | `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | יציאת האיגוד המקומית עבור פרוקסי ניפוי השגיאות מסוג MITM. | | `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | יש להגדיר `1` כדי להשבית אימות TLS במעלה הזרם (לפיתוח בלבד). | | `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | זמן קצוב לחוסר פעילות של שקע (במילישניות) עבור חיבורים המועברים דרך הפרוקסי; שקעים שאינם פעילים מעבר לזמן זה נסגרים כדי למנוע דליפה של מנהרות פתוחות למחצה. | | `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | היציאה שבה מאזין גשר ה-MITM של Antigravity. | | `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | נקודת הקצה של הנתב שאליה הגשר מעביר את תעבורת Antigravity. | | `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | דורס את הספרייה שממנה הגשר קורא את חומרי ה-TLS שלו. מודל האישורים נבחר כפי שהוא נבחר בשרת AgentBridge:‏ `server.crt`/`server.key` עבור התקנת אישור קצה מדור קודם, ואחרת `ca.crt`/`ca.key` (רשות אישורים בסיסית ואישור קצה לכל מארח שיורט; נכפה באמצעות `MITM_ROOT_CA_ENABLED=true`). הגשר יוצא בעת האתחול אם הקבצים הנדרשים למודל הפעיל חסרים. | | `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | רמת הפירוט של יומן החלטות הניתוב: `0` משתיק את היומן, וערכים גבוהים יותר מתעדים יותר החלטות עקיפה/ניתוב. | | `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | יש להגדיר `true` כדי להצטרף למודל של רשות אישורים בסיסית ואישור קצה לכל מארח (#6684). התקנות חדשות מקבלות אותו אוטומטית; התקנות שבהן כבר קיים אישור קצה מהימן מהדור הקודם ממשיכות להשתמש באישור ה-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 / בעלות מרחב שמות של משתמש, שבהן המפעיל נותן אמון ב-CA באופן ידני (למשל באמצעות מנגנון אישורי ה-CA הנוספים של Node). | | `SKIP_ANTIGRAVITY_DNS` | _(לא מוגדר)_ | `src/mitm/dns/provision.ts` | יש להגדיר ל-`true` כדי לדלג לחלוטין על הקצאת רשומות DNS ב-`/etc/hosts` עבור שמות המארחים של פרוקסי Antigravity — עבור קונטיינרים שבהם sudo/root אינם זמינים. | | `OMNIROUTE_SKIP_DNS_WRITE` | _(לא מוגדר)_ | `src/mitm/dns/dnsConfig.ts` | יש להגדיר ל-`1` כדי לדלג על כתיבה לקובץ hosts בעת הוספה/הסרה של רשומות DNS — עבור סביבות בדיקה מבודדות או לקריאה בלבד. | | `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | מנגנון הגנה לבדיקות/CI בלבד: יש להגדיר ל-`1` כדי שהתקנה/הסרה של אמון באישור לא תבצע כל פעולה, כך שחבילת הבדיקות לעולם לא תשנה את מאגר האמון של מערכת ההפעלה. מוגדר אוטומטית על ידי הגדרת הבדיקות ותהליכי העבודה של CI. | | `CHANGELOG_BASE_REF` | _(אוטומטי)_ | `scripts/check/check-changelog-integrity.mjs` | הפניית בסיס מפורשת עבור שער מניעת מחיקת CHANGELOG (ברירת המחדל היא ענף הבסיס של ה-PR ב-CI, או `release/v*` הגבוה ביותר). | | `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | יש להגדיר ל-`true` כדי להפעיל את מתזמן הסנכרון האוטומטי ברקע של מאגר שרתי הפרוקסי החינמיים. דורש הפעלה מפורשת ומושבת כברירת מחדל. | | `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | מרווח הסנכרון האוטומטי במילישניות (ברירת המחדל היא 30 דקות). | | `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | הפעלת מקור שרתי הפרוקסי החינמיים 1proxy. יש להגדיר ל-`false` כדי להשביתו. | | `FREE_PROXY_1PROXY_API_URL` | _(ראו oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | דריסת כתובת ה-API של 1proxy. | | `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | המספר המרבי של שרתי פרוקסי שיאוחזרו בכל סנכרון מ-1proxy. | | `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | סף ציון האיכות המינימלי לייבוא מ-1proxy. | | `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | הפעלת מקור הפרוקסי החינמי Proxifly. יש להגדיר ל-`false` כדי להשביתו. | | `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | מספר שרתי הפרוקסי לאחזור בכל סנכרון של Proxifly. | | `FREE_PROXY_PROXIFLY_ANONYMITY` | `elite` | `src/lib/freeProxyProviders/proxifly.ts` | מסנן רמת האנונימיות עבור Proxifly‏ (`elite`,‏ `anonymous`,‏ `transparent`). | | `FREE_PROXY_IPLOCATE_ENABLED` | `false` | `src/lib/freeProxyProviders/iplocate.ts` | הפעלת מקור הפרוקסי החינמי IPLocate. נדרשת הצטרפות מפורשת. | | `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | כתובת 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` | הצגה/הסתרה של הלחצן לפריסת Vercel Relay בלשונית מאגר ה-Proxy. | | `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | דריסת כתובת ה-URL הבסיסית של Vercel API (לצורכי בדיקות). | | `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` לא אינטראקטיבי / ללא ממשק משתמש (מועבר באמצעות `--auth-key=`). כאשר אינו מוגדר, הכניסה חוזרת לכתובת ה-URL האינטראקטיבית לאימות בדפדפן. | | `NGROK_AUTHTOKEN` | _(לא מוגדר)_ | `src/lib/ngrokTunnel.ts` | מאמת מנהרות ngrok יוצאות. | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | המספר המרבי של קובצי גיבוי SQLite הנשמרים באמצעות ניקוי גיבויים ידני/מתוזמן. תמונות מצב של מיגרציות ממוענות לפי תוכן ונעשה בהן שימוש חוזר עבור מצב DB זהה; הן אינן נמחקות במהלך חלון המיגרציה המקבילי. דורס את הערך שנשמר דרך הגדרות ← שמירת גיבויי מסד נתונים. | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | הגיל המרבי (בימים) של קבצים הנשמרים באמצעות ניקוי גיבויים ידני/מתוזמן. `0` משבית מחיקה לפי גיל. תמונות מצב של מיגרציות אינן נמחקות במהלך חלון המיגרציה המקבילי. דורס את הערך שנשמר דרך הגדרות ← שמירת גיבויי מסד נתונים. | | `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | מרווח הפעימות (באלפיות שנייה) של המשימה בצד השרת שמפעילה את `backup-schedule.json`. עליו להישאר נמוך משמעותית מרמת הדיוק של דקה אחת ב-cron; ערכים הנמוכים מ-`5000` או שאינם ניתנים לפענוח חוזרים ל-`30000`. | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | רמז לזמן הריצה של הקונטיינר עבור בדיקת ההרשאות של נקודת הכניסה. יש להגדיר ל־`podman` עבור כל טופולוגיית Podman. מכיוון שהקונטיינר אינו יכול לקבוע אם המנוע מקומי או שהגישה אליו מתבצעת דרך Podman Machine, האזהרה נשארת ניטרלית ביחס לטופולוגיה ומפנה אל `contrib/podman/README.md`. | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | מנגנון האחסון לצריכת נתחי מכסה: `sqlite` (ברירת המחדל) או `redis`. | | `QUOTA_STORE_REDIS_URL` | _(לא מוגדר)_ | `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`) בשקלול המשולב האוטומטי כאשר סף המכסה המקדים כבוי (#4540). | | `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | חלון השמירה (בימים) עבור מקטעי `quota_consumption` לפני איסוף אשפה (`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/:` אינו תואם לאף מועמד מחובר, משחזר את ההתנהגות הקודמת של מעבר למאגר המלא (ללא סינון), במקום להחזיר מאגר ריק. כאשר האפשרות כבויה כברירת מחדל, המשמעות של `:free` היא "הרמה החינמית בלבד". | | `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | מגבלת גודל הקבוצה (מוגבלת לטווח 1–10) עבור וריאציית השידור `auto/*:chaos` — בקשה אחת מתפצלת לכל היותר למספר זה של מודלים מספקים מגוונים. | | `OMNIROUTE_CHAOS_MIN_PANEL` | _(ברירת המחדל של המנוע)_ | `open-sse/services/autoCombo/virtualFactory.ts` | כוונון גודל הפאנל המינימלי שמועבר למטפל בשידור הכאוס; אם אינו מוגדר, ברירת המחדל של המנוע נשמרת. | | `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(ברירת המחדל של המנוע)_ | `open-sse/services/autoCombo/virtualFactory.ts` | פסק זמן קשיח (באלפיות שנייה) עבור הפצת פאנל הכאוס כולה; אם אינו מוגדר, ברירת המחדל של המנוע נשמרת. | | `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | הנתיב לקובץ `auth.json` של Grok CLI, המשמש לאחזור המכסה השבועית של grok-web; ניתן לעקוף אותו לצורך בדיקות או התקנת CLI לא סטנדרטית. | | `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(לא מוגדר)_ | `src/mitm/manager.ts` | אישור CA נוסף (PEM) שניתן בו אמון עבור חיבורי TLS במעלה הזרם של AgentBridge. | | `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | מספר הבקשות המרבי שנלכדו ונשמרות במאגר הטבעתי של 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_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` | מספר הדקות לפני שמנגנון ההגנה של פרוקסי המערכת משחזר אוטומטית את הגדרות הפרוקסי של מערכת ההפעלה. | | `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(אוטומטי)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | אסימון המאמת קליטה פנימית של לכידות אל המפקח. | | `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | מספר העמודות המרבי זו לצד זו במצב ההשוואה של Playground. | | `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(לא מוגדר)_ | `src/app/(dashboard)/dashboard/playground/` | מודל ברירת המחדל עבור פעולת 'שיפור הפרומפט' של Playground (חוזר למודל הפעיל כאשר אינו מוגדר). | | `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | מתג השבתה ראשי עבור פרוקסי ה-sidecar של Bifrost. כאשר הוא מוגדר ל-`0`, הנתיב מחזיר 503 עם הכותרת `X-Bifrost-Killswitch` והמפעיל מופנה לנתיב TS. השתמשו בו כדי להשבית את ה-sidecar ללא פריסה מחדש (תקרית בנתב tier-1, החלפת מפתחות). | | `BIFROST_BASE_URL` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כאשר הוא מוגדר, נתיב פרוקסי ה-sidecar של Bifrost מעביר תעבורת `/v1/chat/completions` לשער Go זה במקום למטפל הממסר של TS. לא מוגדר → 503 עם מעבר לגיבוי. הלוכסן הסופי מוסר. | | `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | הפורט שאליו נקשר השירות המוטמע והמנוהל של Bifrost (`127.0.0.1:`) כאשר OmniRoute מנהל את מחזור החיים של ה-sidecar של Bifrost. ברירת המחדל היא `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 הבסיסית עבור תהליך הרקע המקומי של שירות המיקרו לדחיסת HTTP של LLMLingua. ברירת המחדל היא `http://127.0.0.1:20135`. | | `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | מזהה המודל של Hugging Face שה-sidecar המנוהל של LLMLingua טוען (מועבר לסביבת תהליך הבן). | | `BIFROST_API_KEY` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | מפתח API עבור שער Bifrost (נשלח בתור `Authorization: Bearer ...`). אם אינו מוגדר, הנתיב מצפה שהבקשה תכיל מפתח API תקף של OmniRoute; מפתח זה מיועד לאימות בצד השער בלבד. | | `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כאשר הערך הוא true, נתיב ה-sidecar של Bifrost מזרים תגובות בחזרה באמצעות SSE דרך ה-gateway, במקום דרך מנגנון ההזרמה של TS. הגדירו ל-`0` כדי לאלץ תגובות JSON שאינן מוזרמות דרך ה-gateway. | | `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | פסק הזמן לכל בקשה בעת ביצוע proxy ל-gateway של Bifrost (במילישניות). במקרה של פסק זמן, הנתיב מחזיר את נתיב הממסר של TS באמצעות הכותרת `X-Bifrost-Fallback`. | | `OMNIROUTE_BIFROST_KEY` | _(לא מוגדר)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | כינוי עבור `BIFROST_API_KEY` (משמש סקריפטים שקוראים את משתני הסביבה באמצעות `OMNIROUTE_*`). כאשר שניהם מוגדרים, ל-`BIFROST_API_KEY` יש עדיפות. | | `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | מנגנון הממסר עבור `/api/v1/relay/chat/completions`:‏ `ts \| bifrost \| auto`.‏ `ts` = ממסר TypeScript (ברירת המחדל כאשר Bifrost אינו מוגדר); `auto` בוחר ב-Bifrost כאשר `BIFROST_BASE_URL` מוגדר ו-`BIFROST_ENABLED` ≠ `0`, עם מעבר אוטומטי ל-TS אם ה-sidecar אינו נגיש; `bifrost` כופה שימוש ב-Bifrost (מצב מחמיר, ללא חלופה). אימות/הגבלת קצב/הגנה מפני הזרקה/רשימת היתרים מופעלים תמיד תחילה בנתיב 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` | תקופת צינון (במילישניות) לאחר שמעבר דרך ה-sidecar של Bifrost נכשל במצב `auto`, לפני שהממסר מנסה שוב את ה-sidecar; כל עוד תקופת הצינון נמשכת, הוא מנתב ישירות לנתיב TS, ולאחר מכן בודק שוב. `0` משבית תכונה זו. חל רק כאשר `OMNIROUTE_RELAY_BACKEND=auto`. | | `OMNIROUTE_TLS_CERT` | _(לא מוגדר)_ | `bin/cli/commands/serve.mjs` | נתיב לאישור TLS בפורמט PEM לצורך הפעלת `omniroute serve` באמצעות HTTPS (שווה ערך ל-`--tls-cert`). יש להשתמש בו יחד עם `OMNIROUTE_TLS_KEY`; לאחר מכן השרת העצמאי מסיים את חיבור ה-TLS באותו מאזין (`wss://` ממשיך לפעול ללא שינוי). לא מוגדר → HTTP רגיל. אספקת אישור או מפתח בלבד, או נתיב שאינו קריא, גורמת לרישום אזהרה ולהמשך שימוש ב-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 בסביבת הייצור. יש להגדירו כ-`1` בפריסות שאינן loopback כדי להפעיל את משגר Redis ומפעילים דומים של שירותים מקומיים בלחיצה אחת. שכבת הגנה נוספת לצד סיווג הנתיבים של `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 והן את ממשק המשתמש `RedisLauncherPanel`. | | `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | פורט המארח עבור מפעיל Redis בלחיצה אחת. יש לשנותו אם המארח כבר מאזין בפורט 6379. הפורט הפנימי של הקונטיינר נשאר 6379. | | `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | ממשק המארח שבו מפעיל Redis בלחיצה אחת מפרסם את השירות. המפעיל מפעיל את Redis ללא סיסמה, ולכן קישור אל `0.0.0.0` מעניק לכל מארח ב-LAN שלכם גישה בלתי מאומתת ל-Redis — יש להרחיב זאת רק אם אתם גם מגדירים בעצמכם סיסמה למופע. | | `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שבו docker-compose מפרסם את שירות העזר Redis‏ (#9286). Redis של compose פועל ללא `requirepass`; קונטיינרי היישום ניגשים אליו דרך רשת compose‏ (`redis:6379`) — הפורט המפורסם קיים רק עבור כלי עבודה בצד המארח. `0.0.0.0` חושף Redis בלתי מאומת לכל ה-LAN. | | `REDIS_PORT` | `6379` | `docker-compose.yml` | פורט המארח עבור שירות העזר Redis של compose. | | `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | ממשק המארח שבו docker-compose מפרסם את פורטי לוח הבקרה/API/live-WS של היישום עצמו (#12568). כאשר `REQUIRE_API_KEY=false` מופץ כברירת המחדל ב-`.env.example`, הערך `0.0.0.0` חושף את פרוקסי ה-LLM האנונימי `/v1` לכל ה-LAN/WAN — יש להרחיב זאת רק לאחר הגדרת `REQUIRE_API_KEY=true` או כאשר פרוקסי הפוך בחזית אוכף אימות משלו. | | `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שבו docker-compose מפרסם את שירות העזר Qdrant לזיכרון (#12578). אותם שיקולי חשיפה ל-LAN כמו עבור `REDIS_BIND_HOST`. | | `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | ממשק המארח שבו docker-compose מפרסם את שירות העזר Bifrost לניתוב (#12578). אותם שיקולי חשיפה ל-LAN כמו עבור `REDIS_BIND_HOST`. | | `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | קידומת מרחב שמות המוחלת על כל מפתח Redis של OmniRoute (מגביל קצב, מטמון אימות, מאגר מכסות, מפסק מעגלים לחימום מקדים). מונעת התנגשויות מפתחות כאשר מופע Redis משותף עם יישומים אחרים (#11042). | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN` | _(לא מוגדר — המנגנון מושבת)_ | `src/lib/api/internalServiceAuth.ts` | סוד משותף עבור מעברי REST פנימיים המשמרים זהות (#9260): רכיבי OmniRoute הקוראים לנתיבי OmniRoute מקומיים אחרים שולחים אותו בתור `x-omniroute-internal-service-token`, כך שזהות הפונה המקורי נשמרת. ההשוואה מתבצעת באמצעות `timingSafeEqual`. | | `OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE` | _(לא מוגדר)_ | `src/lib/api/internalServiceAuth.ts` | גרסת הקובץ הסודי של אסימון השירות הפנימי: נתיב לקובץ שהתוכן שלו, לאחר הסרת רווחים מיותרים, הוא האסימון. נבדק רק כאשר המשתנה המוטמע אינו מוגדר. | | `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | מעשיר את רשימת הספקים בלוח הבקרה בנתוני הדירוג השבועיים של OpenRouter‏ (#9324). מופעל כברירת מחדל; הגדירו `false` כדי לדלג לחלוטין על האחזור ברקע (לא חוסם ולעולם אינו גורם לכשל קריטי). | | `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24 שעות) | `src/lib/catalog/openrouterProviderStats.ts` | משך החיים במטמון של תמונת המצב של נתוני ספקי OpenRouter, באלפיות שנייה. | | `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | תמונת Redis המשמשת את מפעיל Redis בלחיצה אחת. לפי הצורך, שנו ל-`redis:8-alpine` או למראה של מאגר רישום פרטי. | | `QDRANT_HOST` | `qdrant` | _(פרופיל אשכול אופציונלי)_ | שם המארח של שירות הצד Qdrant כאשר `--profile memory` פעיל. ברירת המחדל מצביעה לשם שירות qdrant בתוך הרשת; שנו זאת עבור פריסה חיצונית. נצרך רק כאשר `qdrantEnabled` הוא `true` בקוד (`src/lib/memory/vectorStore.ts:108`). | | `QDRANT_PORT` | `6333` | _(פרופיל אשכול אופציונלי)_ | יציאת REST של שירות הצד Qdrant. | | `QDRANT_GRPC_PORT` | `6334` | _(פרופיל אשכול אופציונלי)_ | יציאת gRPC של שירות הצד Qdrant. משמשת ספריות לקוח המעדיפות gRPC על פני REST עבור פעולות הזרמה. | | `QDRANT_API_KEY` | _(לא מוגדר)_ | _(פרופיל אשכול אופציונלי)_ | מפתח API אופציונלי עבור Qdrant Cloud או מופע מקומי מאומת. ריק ← לא נשלחת כותרת `api-key`. | | `QDRANT_COLLECTION` | `omniroute-memory` | _(פרופיל אשכול אופציונלי)_ | שם האוסף עבור הטמעות זיכרון השיחות של OmniRoute. נוצר בהפעלה הראשונה עם מספר הממדים המוגדר ב-`QDRANT_VECTOR_SIZE`. | | `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(פרופיל אשכול אופציונלי)_ | שם מודל ההטמעה המוגדר כברירת מחדל ונרשם במטא-נתונים של אוסף Qdrant. ההטמעות בפועל נוצרות על ידי הספק שאליו מצביע השדה `embeddingModel` בהגדרות של OmniRoute. | | `QDRANT_VECTOR_SIZE` | `1536` | _(פרופיל אשכול בהצטרפות מפורשת)_ | ממד וקטור ההטמעה. חייב להתאים למודל שבאמצעותו מתבצעת ההטמעה (text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). | | `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(פרופיל אשכול בהצטרפות מפורשת)_ | דיוק בניית אינדקס HNSW. ערך גבוה יותר = בנייה איטית יותר, חיפוש מהיר יותר. | | `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | מתג ראשי לסבב חשבונות הניתן להגדרת המפעיל. כאשר הערך הוא `false`, אף אחת מקבוצות `OMNIROUTE_ROTATE_*` שלהלן אינה מפעילה מעבר לחשבון חלופי (מצב השבתה ראשי זה חוסם גם את קבוצות 429/500/502 המופעלות כברירת מחדל). מאפשר לממשק קדמי מפקח (למשל, אפליקציית שולחן העבודה VibeProxy) לשקף את כללי הסבב שלו במנגנון המעבר לחשבון חלופי של הקצה האחורי. | | `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | זמן צינון (בשניות) המוחל על חשבון שהוגבל עקב מגבלת קצב כאשר השירות במעלה הזרם אינו מספק רמז מפורש לזמן האיפוס. `0` = שימוש בזמן הצינון המוגדר כברירת מחדל במנוע במקום בדריסה קבועה. | | `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | שיקוף של העדפת הממשק הקדמי "לא לתייג כמוגבל עקב מגבלת קצב ללא זמן איפוס". | | `OMNIROUTE_ROTATE_ON_429` | `true` | `open-sse/services/rotationConfig.ts` | הפעלה לפי קוד מצב של מעבר לחשבון חלופי עבור שגיאות `429`. כאשר הערך הוא `false` (ו-`OMNIROUTE_ROTATION_ENABLED=true`), שגיאת `429` אינה מפעילה עוד סבב חשבונות ובמקום זאת מוחזרת ללקוח. | | `OMNIROUTE_ROTATE_429_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | מספר שגיאות `429` בתוך `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` הנדרש לפני שמתבצע סבב חשבון. `1` (ברירת המחדל) מבצע סבב מיידי, תוך שמירה על ההתנהגות ההיסטורית. | | `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | חלון נע (בשניות) שבו נספרות שגיאות `429` לצורך הגעה אל `OMNIROUTE_ROTATE_429_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_500` | `true` | `open-sse/services/rotationConfig.ts` | הפעלה לפי קוד מצב של מעבר לחשבון חלופי עבור שגיאות שרת `5xx` (למעט `502`, שלה יש קבוצה משלה). כאשר הערך הוא `false`, שגיאות אלה אינן מפעילות עוד סבב חשבונות. | | `OMNIROUTE_ROTATE_500_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | מספר שגיאות `5xx` בתוך `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` הנדרש לפני שמתבצע סבב חשבון. `1` (ברירת המחדל) מבצע סבב מיידי. | | `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | חלון נע (בשניות) שבמהלכו שגיאות `5xx` נספרות לצורך `OMNIROUTE_ROTATE_500_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_502` | `true` | `open-sse/services/rotationConfig.ts` | הפעלת מנגנון גיבוי לפי קוד סטטוס עבור שגיאות `502` (שער לא תקין). כאשר הערך הוא `false`, שגיאות `502` אינן מפעילות עוד החלפת חשבון. | | `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | מספר שגיאות `502` בתוך `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` הנדרש לפני החלפת החשבון. הערך `1` (ברירת המחדל) מבצע החלפה מיידית. | | `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | חלון נע (בשניות) שבמהלכו שגיאות `502` נספרות לצורך `OMNIROUTE_ROTATE_502_THRESHOLD`. | | `OMNIROUTE_ROTATE_ON_400` | `false` | `open-sse/services/rotationConfig.ts` | הפעלה יזומה (כבוי כברירת מחדל): כאשר הערך הוא `true`, גם שגיאת `400` רגילה (בקשה לא תקינה) מפעילה החלפת חשבון. אפשרות זו היא תוספת בלבד — היא לעולם אינה חוסמת את ההתנהגות הקיימת של המנוע, שבה שגיאת `400` המכילה טקסט של מגבלת קצב/מכסה עדיין עוברת לחשבון חלופי ללא תלות בדגל זה. | | `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | מספר שגיאות `400` בתוך `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` הנדרש לפני החלפת החשבון (נבדק רק כאשר `OMNIROUTE_ROTATE_ON_400=true`). | | `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | חלון נע (בשניות) שבמהלכו שגיאות `400` נספרות לצורך `OMNIROUTE_ROTATE_400_THRESHOLD`. | ### מתזמן החימום המקדים של Claude חימום מקדים המופעל באמצעות Cron עבור חיבורי Anthropic OAuth שהופעלו במפורש, כך שחלון מגבלת הקצב בן 5 השעות נפתח באמצעות בקשה מתוזמנת פשוטה במקום באמצעות הבקשה האמיתית הראשונה (#8848). המתזמן כבוי אלא אם `OMNIROUTE_WARMUP_ENABLED` מכיל ערך אמת **וגם** החיבור מסומן ב-`settings.claudeWarmup.connections`; רשימת חיבורים ריקה פירושה שלא מתבצע חימום מקדים כלל, גם כאשר משתנה הסביבה מופעל. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------ | --------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_WARMUP_ENABLED` | _(לא מוגדר → כבוי)_ | `src/lib/warmupScheduler.ts` | מתג ראשי עבור מתזמן החימום. מקבל `1`/`true`/`yes`/`on` (ללא תלות ברישיות ולאחר הסרת רווחים). כל ערך אחר, או ערך לא מוגדר, משאיר את המתזמן כבוי. | | `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | ביטוי cron בן חמישה שדות עבור פעימת החימום, המחושב באזור הזמן `America/Los_Angeles` (אזור הזמן לאיפוס של Anthropic) ללא תלות בשעון המארח. | | `OMNIROUTE_WARMUP_CONCURRENCY` | `3` | `src/lib/warmupScheduler.ts` | מספר החיבורים המחוממים במקביל בכל פעימה. מוגבל לטווח `1`-`10`; ערך שאינו מספרי חוזר לברירת המחדל `3`. | | `OMNIROUTE_WARMUP_MODEL` | `claude-3-5-haiku-20241022` | `src/lib/warmupScheduler.ts` | המודל המשמש לבקשת החימום. יש לעקוף את ברירת המחדל רק אם היא אינה זמינה בתוכנית שלכם; בחרו במודל הזול ביותר שעדיין פותח את החלון. | ### הפעלות VNC לכניסה בדפדפן וכינוי לתיקיית הנתונים 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` | פסק זמן (באלפיות שנייה) לאיסוף ההפעלה/קובצי ה-Cookie שנלכדו לאחר השלמת הכניסה. | | `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | דגלי שורת פקודה נוספים המועברים ל-Chromium שבקונטיינר. | | `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | רשת Docker ייעודית שאליה מצטרף קונטיינר הכניסה של VNC (#12571) במקום גשר ברירת המחדל, כך שקונטיינרים מקבילים אינם יכולים לגשת לפורט גשר ה-CDP שלו. | | `VIBEPROXY_DATA_DIR` | _(לא מוגדר)_ | `open-sse/services/notionThreadSessions.ts` | **כינוי ישן** עבור `DATA_DIR`, שנבדק רק לאחר שגם `DATA_DIR` וגם `OMNIROUTE_DATA_DIR` אינם מוגדרים. מאתר את מטמון הפעלות שרשורי האינטרנט של Notion (`/notion-web-thread-sessions.json`). | --- ## 26. מערך בדיקות ו-E2E משמש את `scripts/dev/run-next-playwright.mjs`,‏ `scripts/dev/smoke-electron-packaged.mjs`, ‏`scripts/dev/run-ecosystem-tests.mjs` ו-`scripts/build/uninstall.mjs`. יש להשאיר את כל הערכים שלהלן לא מוגדרים בפריסות ייצור. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | -------------------------------------- | ------------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_E2E_BOOTSTRAP_MODE` | `auth` | `scripts/dev/run-next-playwright.mjs` | מצב האתחול של 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 שמערך בדיקות העשן של Electron מצפה שהיישום הארוז ישרת. | | `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | הזמן הקצוב הכולל (במילישניות) לפני שמערך בדיקות העשן מוותר. | | `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` | _(tmpdir)_ | `scripts/dev/smoke-electron-packaged.mjs` | ספריית הנתונים עבור הרצת בדיקת העשן של Electron. | | `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | יש להגדיר `1` כדי לשמר את ספריית נתוני בדיקת העשן לאחר ההרצה. | | `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | יש להגדיר `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_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | מגבלת הזמן לכל בקשה, באלפיות שנייה. | | `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | בקשות תרגום מקבילות בעת עיבוד של מספר קבצים / אזורים. | --- ## 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` | זמן ההמתנה המרבי למשבצת קבלה של צ'אט כבד לפני החזרת `503` המאפשר ניסיון חוזר; המתנה קצרה ומוגבלת מסדרת התפרצויות של סוכנים במקום להחזיר `503` מיידי. `0` משחזר דחייה מיידית. | | `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | תקציב הבתים שבתור עבור המתנת הקבלה: מגביל את סך בתי גוף הבקשה המאוחסנים במאגר ומושהים בכלל התהליך, כך שההמתנה לא תגדיל את הערימה (#4380). המתנות החורגות מהתקציב מקבלות מייד `503` המאפשר ניסיון חוזר. | | `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 שניות) | `src/shared/middleware/chatBodyAdmission.ts` | פעולה ריקה שהוצאה משימוש מאז #10110: נתיבי קבלה לפי הפעלה הוסרו לטובת תקציב יחיד לכל התהליך. מתקבל לצורך תאימות תצורה; המערכת מתעלמת ממנו. | | `OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | פעולה ריקה שהוצאה משימוש מאז #10110: נתיבי קבלה לפי הפעלה הוסרו לטובת תקציב יחיד לכל התהליך. מתקבל לצורך תאימות תצורה; המערכת מתעלמת ממנו. | | `OMNIROUTE_CHAT_VIRTUAL_LANES` | `0` (כבוי) | `open-sse/services/admission/runtime.ts` | נתיבי קבלה וירטואליים אדפטיביים בזמן ריצה (#9654): מתג ראשי עבור שער אדפטיבי לפי דייר (מערכת 2). נבדל ממשתני הנתיבים שהוצאו משימוש לעיל ושפעלו לפי חיבור (TTL_MS / MAX_SESSIONS, פעולות ריקות מאז #10110). דגל תכונה בלוח הבקרה הנושא את אותו שם; משתנה הסביבה גובר על הדריסה מלוח הבקרה; דורש הפעלה מחדש. | | `OMNIROUTE_RUNNOW_TIMEOUT_MS` | `30000` | `src/app/api/jobs/[id]/run-now/route.ts` | מגביל את משך ההמתנה של קריאת הפעלה מיידית למשימה שכבר מתבצעת, לפני התחלת ההפעלה שבתור. | | `ADOBE_FIREFLY_BROWSER_REFRESH` | מופעל | `open-sse/services/adobeFireflySession.ts` | שומר על עדכניות מצב IMS וסיכוני הדפדפן באמצעות הפעלות Chrome CDP בהיקף החשבון; הגדירו `0` כדי להשבית. | | `ADOBE_FIREFLY_SESSION_DISK` | מופעל | `open-sse/services/adobeFireflySession.ts` | שומר בדיסק הפעלות Adobe שתוקנו תחת `DATA_DIR`; הגדירו `0` כדי להשתמש במצב בזיכרון בלבד. | | `ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS` | `12000` | `open-sse/services/adobeFireflySession.ts` | מרווח הזמן המזערי בין שליחות בקשות יצירה אל Adobe Firefly. | | `ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS` | `15000` | `open-sse/services/adobeFireflySession.ts` | תקופת שקט נוספת לאחר כל שליחת Adobe שלישית שהצליחה. | | `ADOBE_FIREFLY_CHROME_HEADLESS` | `0` | `open-sse/services/adobeFireflyBrowserLogin.ts` | מצב ללא ממשק גרפי אמיתי המיועד לניפוי שגיאות בלבד; Adobe colligo דוחה בדרך כלל את הפעלת הסיכון שנוצרת כתוצאה מכך. | | `CHROME_PATH` | זיהוי אוטומטי | `open-sse/executors/cloudflare-playground.ts`, `open-sse/executors/chatgpt-web-codex.ts` | נתיב מוחלט אופציונלי לקובץ ההפעלה של Chrome, המשמש את המפעילים מבוססי הדפדפן כאשר הזיהוי האוטומטי של הפלטפורמה אינו מספיק. | | `TELEGRAM_BOT_TOKEN` | _(לא מוגדר)_ | `src/lib/telegram/config.ts` | אסימון BotFather שמפעיל את ה-webhook הנכנס וחותם על `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. | | `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | דריסת כתובת ה-URL הבסיסית של Bot API עבור שרתי proxy או שרתי 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/דפדפן אופציונליות עבור עץ Electron העצמאי (ספריות החבילות ו-`optional-packs.index.json` עדיין נוצרים). משמש את תהליך העבודה של מהדורת שולחן העבודה לצמצום גודל פריטי הבנייה המועלים. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | מאפשר רישום של נתיבי התמונות למינוי xAI; מושבת כברירת מחדל כדי שנתיב התמונות המבוסס על מפתח API יישאר ללא שינוי. | | `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | תקופת צינון לפי מפתח, באלפיות שנייה, כאשר לתגובת `429` אין רמז `Retry-After` שמיש. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | מופעל | `open-sse/services/estimatorCalibration.ts` | הגדירו `off`,‏ `0` או `false` כדי להשבית רישום והחלה של כיול האומדן בזיכרון. | | `NEXT_MANUAL_SIG_HANDLE` | _(פנימי)_ | `scripts/dev/standalone-server-ws.mjs` | דריסה פנימית של מטפל האותות בשרת העצמאי; בדרך כלל מוגדר ומנוקה על ידי המפעיל במקום להיות מוגדר בידי מפעילי המערכת. | ### ChatGPT Web (Codex) ברירות מחדל גלובליות עבור הדפדפן ללא ממשק גרפי ומנהרת הכלים היוצאת. ערכי Connection שהוגדרו בלוח הבקרה מקבלים עדיפות. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | --------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `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` | נתיב גיבוי משותף עבור נתיב מפורש ל-Chrome/Chromium. | | `CHATGPT_WEB_CODEX_CDP_URL` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | נקודת קצה פנימית של CDP;‏ Docker משתמש ב-sidecar ביציאה `9223`. | | `CDP_PROXY_TOKEN` | _(לא מוגדר)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | אם מוגדר, כל בקשה אל ה-sidecar של פרוקסי ה-CDP חייבת לכלול ערך זה בכותרת `X-Omni-Cdp-Token`‏ (#13679). ללא ערך, הפרוקסי מעביר בקשות ללא אימות — במקרה כזה רק בידוד הרשת של רשת ה-Compose‏ `chatgpt-web-codex-net` מספק הגנה. ניתן ליצור באמצעות `openssl rand -hex 32`. | | `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | מזהה מנהרה גלובלי של OpenAI עבור סבבים מקומיים של כלי Codex. | | `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(לא מוגדר)_ | `open-sse/executors/chatgpt-web-codex.ts` | מפתח Runtime גלובלי של המנהרה; לעולם אין להציגו ביומנים. | | `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | `OmniRoute Codex v2` | `open-sse/executors/chatgpt-web-codex.ts` | השם המדויק של מחבר ה-ChatGPT המותאם אישית שנוצר זה עתה עבור גשר ה-MCP. | | `CODEX_CHATGPT_WEB_HOME` | `/chatgpt-web-codex` | `open-sse/vendor/codex-chatgpt-web/config.ts` | ספרייה ייעודית למצב הדפדפן, הברוקר והמנהרה. | | `CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS` | `0` | `open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts` | כאשר הערך הוא `1`, תמונות אבחון של הדפדפן נשמרות בכל נקודת ביקורת. | | `CODEX_CHATGPT_WEB_LAUNCHER` | _(לא מוגדר)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | נתיב מוחלט אופציונלי לקובץ הפעלה קבוע של Launcher. | | `CODEX_CHATGPT_WEB_BUN` | _(זיהוי אוטומטי)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | נתיב מוחלט אופציונלי לקובץ ההפעלה של סביבת Runtime מסוג Bun. | | `CODEX_WEB_GPT_BUN` | _(לא מוגדר)_ | `open-sse/vendor/codex-chatgpt-web/config.ts` | חלופת Legacy עבור `CODEX_CHATGPT_WEB_BUN`; התקנות חדשות משתמשות בשם הקנוני. | --- ## גשר OmniConductor צרכן SSE ארוך־חיים המשקף משימות ממרכזת OmniConductor אל ה־A2A TaskManager המקומי (`src/lib/conductor/`). אופציונלי — הגשר מתחיל לפעול רק כאשר `CONDUCTOR_HUB_URL` מוגדר. צד שרת בלבד: אסור שאסימון המרכזת יגיע אי פעם לדפדפן. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ------------------------------ | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | `CONDUCTOR_HUB_URL` | _(ריק)_ | `src/lib/conductor/boot.ts` | כתובת ה־URL הבסיסית של מרכזת OmniConductor (לדוגמה, `http://127.0.0.1:7910`). אם אינו מוגדר = הגשר מושבת. | | `CONDUCTOR_HUB_TOKEN` | _(ריק)_ | `src/lib/conductor/boot.ts` | פרטי ההזדהות של המרכזת עבור הזנת ה־SSE — יש ליצור במרכזת עמית מסוג `spokesperson` (`POST /v1/peers`, מנהל מערכת). | | `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(ריק)_ | `src/lib/conductor/hubProxy.ts` | פרטי הזדהות עבור האצלת משימות נכנסות מ־A2A למרכזת (`POST /v1/tasks`); אם אינו מוגדר, נעשה שימוש ב־`CONDUCTOR_HUB_TOKEN`. | | `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | כתובת ה־URL הבסיסית של שירות הדובר (Faro) שמאחורי פרוקסי הצ'אט של לוח המחוונים (`/api/conductor/ask`). | ### תזמון מודע למכסות משמש את `open-sse/services/combo.ts` ואת `src/lib/quota/quotaScheduler.ts` לבדיקות תקציב אסימונים לפני בקשה. אופציונלי — התנהגות הניתוב המוגדרת כברירת מחדל אינה משתנה כאשר אינו מוגדר. | משתנה | ברירת מחדל | קובץ מקור | תיאור | | ---------------------------------- | ---------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | כאשר הערך הוא `1`, מדלג על חיבורים שתקציב האסימונים שלהם לכל חלון (`rateLimitOverrides.tpm`, הטבלה `provider_quota_state`) אינו מספיק לכיסוי העלות המשוערת של הבקשה לפני השיגור. מאפשר את הבקשה כאשר לא מוגדר תקציב. | | `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(פעיל)_ | `open-sse/services/estimatorCalibration.ts` | כיול משוב של אומדן האסימונים של שומר ההקשר (#14931): EMA לכל שילוב של (ספק, מודל, נוכחות כלים) עבור `usage.prompt_tokens` / אומדן, מוגבל לטווח 0.15–2.0, בזיכרון בלבד. הערכים `off`, `0` או `false` משביתים את הרישום ואת ההחלה. | | `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | רושם את נתיבי התמונות `xai-oauth` (`xao`) ו־`grok-cli`. דגל תכונה בלוח המחוונים הנושא את אותו שם; דריסה במסד הנתונים גוברת על ערך זה. |