# CLI Tools — OmniRoute (עברית) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/CLI-TOOLS.md) · 🇪🇹 [am](../../../am/docs/reference/CLI-TOOLS.md) · 🇸🇦 [ar](../../../ar/docs/reference/CLI-TOOLS.md) · 🇦🇿 [az](../../../az/docs/reference/CLI-TOOLS.md) · 🇧🇬 [bg](../../../bg/docs/reference/CLI-TOOLS.md) · 🇧🇩 [bn](../../../bn/docs/reference/CLI-TOOLS.md) · 🇧🇦 [bs](../../../bs/docs/reference/CLI-TOOLS.md) · 🇨🇿 [cs](../../../cs/docs/reference/CLI-TOOLS.md) · 🇩🇰 [da](../../../da/docs/reference/CLI-TOOLS.md) · 🇩🇪 [de](../../../de/docs/reference/CLI-TOOLS.md) · 🇬🇷 [el](../../../el/docs/reference/CLI-TOOLS.md) · 🇪🇸 [es](../../../es/docs/reference/CLI-TOOLS.md) · 🇪🇪 [et](../../../et/docs/reference/CLI-TOOLS.md) · 🇮🇷 [fa](../../../fa/docs/reference/CLI-TOOLS.md) · 🇫🇮 [fi](../../../fi/docs/reference/CLI-TOOLS.md) · 🇫🇷 [fr](../../../fr/docs/reference/CLI-TOOLS.md) · 🇮🇪 [ga](../../../ga/docs/reference/CLI-TOOLS.md) · 🇮🇳 [gu](../../../gu/docs/reference/CLI-TOOLS.md) · 🇳🇬 [ha](../../../ha/docs/reference/CLI-TOOLS.md) · 🇮🇳 [hi](../../../hi/docs/reference/CLI-TOOLS.md) · 🇭🇷 [hr](../../../hr/docs/reference/CLI-TOOLS.md) · 🇭🇺 [hu](../../../hu/docs/reference/CLI-TOOLS.md) · 🇦🇲 [hy](../../../hy/docs/reference/CLI-TOOLS.md) · 🇮🇩 [id](../../../id/docs/reference/CLI-TOOLS.md) · 🇳🇬 [ig](../../../ig/docs/reference/CLI-TOOLS.md) · 🇮🇹 [it](../../../it/docs/reference/CLI-TOOLS.md) · 🇯🇵 [ja](../../../ja/docs/reference/CLI-TOOLS.md) · 🇬🇪 [ka](../../../ka/docs/reference/CLI-TOOLS.md) · 🇰🇭 [km](../../../km/docs/reference/CLI-TOOLS.md) · 🇮🇳 [kn](../../../kn/docs/reference/CLI-TOOLS.md) · 🇰🇷 [ko](../../../ko/docs/reference/CLI-TOOLS.md) · 🇱🇹 [lt](../../../lt/docs/reference/CLI-TOOLS.md) · 🇱🇻 [lv](../../../lv/docs/reference/CLI-TOOLS.md) · 🇮🇳 [ml](../../../ml/docs/reference/CLI-TOOLS.md) · 🇮🇳 [mr](../../../mr/docs/reference/CLI-TOOLS.md) · 🇲🇾 [ms](../../../ms/docs/reference/CLI-TOOLS.md) · 🇲🇹 [mt](../../../mt/docs/reference/CLI-TOOLS.md) · 🇲🇲 [my](../../../my/docs/reference/CLI-TOOLS.md) · 🇳🇵 [ne](../../../ne/docs/reference/CLI-TOOLS.md) · 🇳🇱 [nl](../../../nl/docs/reference/CLI-TOOLS.md) · 🇳🇴 [no](../../../no/docs/reference/CLI-TOOLS.md) · 🇮🇳 [or](../../../or/docs/reference/CLI-TOOLS.md) · 🇮🇳 [pa](../../../pa/docs/reference/CLI-TOOLS.md) · 🇵🇭 [phi](../../../phi/docs/reference/CLI-TOOLS.md) · 🇵🇱 [pl](../../../pl/docs/reference/CLI-TOOLS.md) · 🇵🇹 [pt](../../../pt/docs/reference/CLI-TOOLS.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/CLI-TOOLS.md) · 🇷🇴 [ro](../../../ro/docs/reference/CLI-TOOLS.md) · 🇷🇺 [ru](../../../ru/docs/reference/CLI-TOOLS.md) · 🇱🇰 [si](../../../si/docs/reference/CLI-TOOLS.md) · 🇸🇰 [sk](../../../sk/docs/reference/CLI-TOOLS.md) · 🇸🇮 [sl](../../../sl/docs/reference/CLI-TOOLS.md) · 🇷🇸 [sr](../../../sr/docs/reference/CLI-TOOLS.md) · 🇸🇪 [sv](../../../sv/docs/reference/CLI-TOOLS.md) · 🇰🇪 [sw](../../../sw/docs/reference/CLI-TOOLS.md) · 🇮🇳 [ta](../../../ta/docs/reference/CLI-TOOLS.md) · 🇮🇳 [te](../../../te/docs/reference/CLI-TOOLS.md) · 🇹🇭 [th](../../../th/docs/reference/CLI-TOOLS.md) · 🇹🇷 [tr](../../../tr/docs/reference/CLI-TOOLS.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/CLI-TOOLS.md) · 🇵🇰 [ur](../../../ur/docs/reference/CLI-TOOLS.md) · 🇺🇿 [uz](../../../uz/docs/reference/CLI-TOOLS.md) · 🇻🇳 [vi](../../../vi/docs/reference/CLI-TOOLS.md) · 🇳🇬 [yo](../../../yo/docs/reference/CLI-TOOLS.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/CLI-TOOLS.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/CLI-TOOLS.md) --- עדכון אחרון: 2026-08-23 OmniRoute משתלב עם שלוש קטגוריות של כלי CLI, המחולקות בין שלושה דפי לוח מחוונים ייעודיים: | דף | נתיב | רעיון | כמות | | -------------- | ----------------------- | ------------------------------------------------------------------ | ------------ | | **CLI Code's** | `/dashboard/cli-code` | כלי פיתוח שמופנים ל-OmniRoute (לקוח → CLI → OmniRoute → ספק) | 26 | | **CLI Agents** | `/dashboard/cli-agents` | סוכנים אוטונומיים שמופנים ל-OmniRoute (אותו תהליך, היקף רחב יותר) | 10 | | **ACP Agents** | `/dashboard/acp-agents` | כלי CLI ש-OmniRoute מפעיל כתשתית עורפית דרך stdio/ACP (תהליך הפוך) | ראו registry | נתיבים ישנים מופנים באמצעות 308:‏ `/dashboard/cli-tools` → `/dashboard/cli-code`,‏ `/dashboard/agents` → `/dashboard/acp-agents`. --- ## איך זה עובד ``` קוד CLI / סוכני CLI (זרימת צריכה): Claude / Codex / OpenCode / Cline / KiloCode / Continue / Hermes Agent / Goose / ... │ ▼ (כולם מפנים ל-OmniRoute) http://YOUR_SERVER:20128/v1 │ ▼ (OmniRoute מפנה לספק הנכון) Anthropic / OpenAI / Gemini / DeepSeek / Groq / Mistral / ... סוכני ACP (זרימת הפעלה הפוכה): בקשת לקוח → OmniRoute → מפעיל CLI דרך stdio/ACP → תגובה ``` **יתרונות:** - מפתח API אחד לניהול כל הכלים - מעקב על עלויות בכל ה-CLIs בלוח המחוונים - החלפת מודלים ללא צורך בהגדרת כל כלי מחדש - עובד מקומית ובשרתים מרוחקים (VPS, Docker, Akamai, Cloudflare Tunnel) --- ## הגדרה אוטומטית עם `setup-*` אינך צריך לכתוב את קובץ התצורה של כל כלי באופן ידני. OmniRoute מספק פקודת `setup-*` לכל CLI נתמך, אשר קוראת את קטלוג המודלים ה**חי** מ-OmniRoute פועל (מקומי או מרוחק) וכותבת את קובץ התצורה של הכלי במחשב שלך: ```bash omniroute setup-codex omniroute setup-claude omniroute setup-opencode omniroute setup-cline omniroute setup-kilo omniroute setup-continue omniroute setup-cursor omniroute setup-roo omniroute setup-crush omniroute setup-goose omniroute setup-qwen omniroute setup-aider omniroute setup-5dive ``` כל אחת מהן מקבלת את האפשרויות `--remote --api-key ` (להגדיר כלי מקומי מול OmniRoute מרוחק), `--dry-run` (תצוגה מקדימה ללא כתיבה), ו-`--port`. כלים ללא גילוי מודלים אוטומטי (Cline, Kilo, Roo, Goose, Aider, Qwen, 5dive) מקבלים את האפשרות `--model ` (ו-`--yes` להרצות לא אינטראקטיביות). `setup-5dive` הוא המתכון היחיד שאינו כותב תחת `$HOME`: הוא מגדיר צי סוכני 5dive על ידי כתיבת פרופיל אימות בבעלות root במארח הצי, ולכן הוא מופעל מחדש באמצעות `sudo` ואין לו מצב מרוחק משלו. כדי להפעיל CLI עם הסביבה הנכונה מוזרקת וללא כתיבת קובץ תצורה כלל, השתמש במפעיל הגנרי `omniroute run ` (claude, codex, aider, goose, opencode, qwen, gemini — יעדים וכינויים מגיעים מ-`bin/cli/cli-manifest.mjs`); מפעילים מדור קודם לכל כלי, `omniroute launch` (Claude Code) ו-`omniroute launch-codex` (Codex), נשארים זמינים. Gemini CLI הוא להפעלה בלבד: הוא יעד של `omniroute run` אך אין לו מתכון `setup-*`/`configure`. > **הפניה מלאה:** טבלת המאסטר — מה כל פקודה כותבת, כל דגל, מקומי לעומת מרוחק, ואילו כלים דורשים סיומת `/v1` — נמצאת ב-**[שילובי CLI](../guides/CLI-INTEGRATIONS.md)**. ### הרצת אלה בתוך קונטיינר פקודת `setup-*` המבוצעת בתוך קונטיינר OmniRoute כותבת לתיקיית הבית של הקונטיינר עצמו, שאף CLI מארח אינו קורא ושנעלמת עם הקונטיינר. OmniRoute מזהה זאת ויוצא עם קוד `2` והוראות במקום לכתוב. שתי דרכים נתמכות קדימה — התקן את ה-CLI במארח והתחבר ל-`omniroute connect` לקונטיינר, או בצע bind-mount לתיקיות התצורה והגדר את `CLI_CONFIG_HOME` (פרופיל ה-`host` של ה-compose). כל פקודת `setup-*`, בתוספת `omniroute configure` ו-`omniroute config set`, מקבלת את האפשרות `--allow-container-write` כאשר התכוונת באמת להגדיר את ה-CLIs של הקונטיינר עצמו; `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE=true` עושה את אותו הדבר עבור השרת. ראה [מדריך Docker ← הגדרת כלי CLI מארחים](../guides/DOCKER_GUIDE.md#configuring-host-cli-tools-when-omniroute-runs-in-docker). **נקודת הקצה apply** של לוח המחוונים (`POST /api/cli-tools/apply`) אוכפת את אותה הגנה: בקונטיינר, כתיבה שיעדה אינו מחובר באמצעות bind-mount מהמארח מחזירה **`422`** עם `containerEphemeralTarget: true`, טקסט השגיאה הבטוח ו — עבור הכלים עם מתכון מארח (claude, codex, opencode, cline, kilo, continue) — פקודת `hostSetupCommand` (לדוגמה `omniroute setup-opencode`) להרצה במארח במקום; שום דבר לא נכתב. `dryRun: true` ממשיך לעבוד במצב קונטיינר ומחזיר תצוגה מקדימה מצונזרת + נתיב יעד מבלי לגעת בדיסק. תוכן התצוגה המקדימה אינו תצורת אישורים שניתן להעתיק או לייבא. החל עם הכלי המקורי/כתובת ה-URL הבסיסית/מפתח ה-API/קלט המודל במארח, או השתמש בפקודת ההגדרה בצד המארח המצוינת. ראה [אבטחת תצורת CLI](../security/CLI-CONFIGURATION.md) עבור כותרת התצוגה המקדימה וחוזה הבקשה. התנהגות זו מכוונת ומוגנת מפני רגרסיה על ידי `tests/unit/api/cli-tools/apply-container-guard.test.ts` — לעולם אל "תתקן" שגיאת `422` על ידי הסרת ההגנה. --- ## מקור האמת הקטלוג המאוחד נמצא ב-`src/shared/constants/cliTools.ts` כ-`CLI_TOOLS: Record`. כל רשומה מכילה את השדות הבאים (מוגדרים ב-`src/shared/schemas/cliCatalog.ts`): | שדה | סוג | תיאור | | ----------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- | | `category` | `"code" \| "agent"` | באיזו דף הכלי מופיע | | `vendor` | `string` | מקור הכלי ("Anthropic", "OSS (P. Gauthier)") | | `acpSpawnable` | `boolean` | ניתן גם להשתמש בו כ-Agent של ACP (סמל מוצג) | | `baseUrlSupport` | `"full" \| "partial" \| "none"` | רמת תמיכה בנקודת קצה מותאמת. `"none"` = MITM backlog | | `configType` | `"env" \| "custom" \| "guide" \| "custom-builder" \| "mitm"` | מנגנון קונפיגורציה | | `id`, `name`, `color`, `description`, `docsUrl` | סטנדרטי | שדות תצוגה מרכזיים | רשומות עם `baseUrlSupport: "none"` **אינן מוצגות** בדפי הלוח — הן רשומות ב-MITM backlog עבור תכנית 11 (ראה `_tasks/features-v3.8.6/refactorpages/_orchestration/_plan11-mitm-backlog.md`). ### רמות יכולת (מקטלגות × ניתנות לזיהוי × ניתנות לקונפיגורציה × ניתנות להשקה) לא כל כלי מקטלגי ניתן לזיהוי, קונפיגורציה או השקה. כל רמה יש לה מקור המצהיר, ובדיקת סטייה שומרת עליהם מסונכרנים: | רמה | משמעות | מצהיר ב | | --------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------- | | **מקטלג** | מופיע בקטלוג הלוח (שם, ספק, מסמכים, סוג קונפיגורציה) | `src/shared/constants/cliTools.ts` (`CLI_TOOLS`) | | **ניתן לזיהוי** | זיהוי בינארי/קונפיגורציה, בדיקות בריאות, נתיבי קונפיגורציה | `src/shared/services/cliRuntime.ts` (`CLI_TOOLS` runtime catalog) | | **ניתן לקונפיגורציה** | נתמך על ידי `omniroute configure ` (מתכון הגדרה קיים) | `bin/cli/cli-manifest.mjs` (`configure: true`) | | **ניתן להשקה** | נתמך על ידי `omniroute run ` (הזרקת env/args מוגדרת) | `bin/cli/cli-manifest.mjs` (`run: true`) | `bin/cli/cli-manifest.mjs` הוא המניפסט ההפעלה הקנוני עבור פקודת ה-CLI: `run`, `configure` ומחוללי השלמת-shell כולם שואבים את רשימות היעדים שלהם, פתרון כינויים (למשל `kilocode`/`kilo-code`/`kilo_cli` → `kilo`) וחיווט דגל `--model` ממנו. שומר הסטייה `tests/unit/cli/cli-manifest-drift.test.ts` מאמת שהמניפסט, הקטלוג בזמן ריצה, הקטלוג של ה-UI וכל משטח צרכן נשארים מסונכרנים — יעד שנוסף למשטח אחד ללא האחרים נכשל את המבחן במקום לסטות בשקט. ## 1. קטלוג קוד CLI (26 כלים) כל הכלים שמופיעים ב-`/dashboard/cli-code`. אלו עם `baseUrlSupport: none` מחוברים דרך MITM או מדריך ידני במקום כתובת URL מותאמת אישית: | id | שם | ספק | תמיכה בכתובת בסיס | סוג קונפיגורציה | acpSpawnable | | ------------ | ------------------------ | ------------------- | ----------------- | --------------- | ------------ | | claude | קוד קלוד | אנתרופיק | מלא | env | true | | codex | CLI של OpenAI Codex | OpenAI | מלא | מותאם אישית | true | | zcode | ZCode (תוכנית קידוד GLM) | Z.ai | אין | מותאם אישית | false | | cline | קלין | OSS (מפתחי קלוד) | מלא | מותאם אישית | true | | kilo | קוד קילו | Kilo-Org | מלא | מותאם אישית | false | | roo | קוד Roo | Roo (OSS) | מלא | מדריך | false | | continue | Continue | continue.dev | מלא | מדריך | false | | aider | Aider | OSS (פ. גוטייה) | מלא | מדריך | true | | forge | ForgeCode | Antinomy HQ | מלא | מותאם אישית | true | | jcode | jcode | 1jehuang (OSS) | מלא | מותאם אישית | false | | deepseek-tui | DeepSeek TUI | האנטר בואן (OSS) | מלא | מותאם אישית | false | | codewhale | CodeWhale | Hmbown (OSS) | מלא | מותאם אישית | false | | opencode | OpenCode | Anomaly (לשעבר SST) | מלא | מדריך | true | | droid | Factory Droid | Factory AI | חלקי | מדריך | false | | copilot | CLI של GitHub Copilot | GitHub/MS | מלא | מותאם אישית | false | | cursor-cli | CLI של Cursor | Anysphere | חלקי | מדריך | true | | smelt | Smelt | leonardcser (OSS) | מלא | מותאם אישית | false | | pi | Pi (סוכן קידוד pi) | M. Zechner (OSS) | מלא | מותאם אישית | false | | grok-build | Grok Build | xAI | מלא | מותאם אישית | false | | crush | Crush | OSS (Charm) | מלא | מותאם אישית | false | | qwen | קוד Qwen | Alibaba | מלא | מדריך | true | | cursor | Cursor | Anysphere | אין | מדריך | false | | antigravity | אנטיגרביטי | Google | אין | mitm | false | | hermes | הרמס | Nous Research | אין | מדריך | false | | kiro | Kiro AI | Amazon | אין | mitm | false | | custom | CLI מותאם אישית | — | מלא | custom-builder | false | כלים עם `baseUrlSupport: "partial"` מציגים תג "⚠ כתובת בסיס חלקית" בכרטיס הלוח. ## 2. קטלוג סוכני CLI (8 כלים) סוכנים אוטונומיים המופיעים ב-`/dashboard/cli-agents`: | id | שם | ספק | תמיכה ב-BaseUrl | ניתן להפעיל ACP | | ------------ | ---------------- | ------------------------ | --------------- | --------------- | | hermes-agent | סוכן הרמס | Nous Research | מלא | false | | openclaw | OpenClaw | OSS (P. Steinberger) | מלא | true | | goose | Goose | Block / Linux Foundation | מלא | true | | interpreter | Open Interpreter | OSS | מלא | true | | warp | Warp AI | Warp Inc. | חלקי | true | | agent-deck | Agent Deck | asheshgoplani (OSS) | מלא | false | | omp | Oh My Pi | OSS | מלא | true | | letta | Letta CLI | Letta | מלא | false | --- ## 3. סוכני ACP (/dashboard/acp-agents) דף זה (ששונה מ-`/dashboard/agents`) מציג CLI ש-OminiRoute יכול **להפעיל** כמנועי ביצוע אחוריים דרך פרוטוקול stdio/ACP. הקטלוג מתוחזק בנפרד ב-`src/lib/acp/registry.ts` ואינו זהה ל-`CLI_TOOLS`. --- ## 4. backlog של MITM (לא מוצג בלוח המחוונים) ה-CLI הבאים אינם תומכים ב-Base URL מותאם אישית באופן מקורי ואינם **מופיעים** בדפי קוד CLI או דפי סוכני CLI. הם מועמדים להפרעה של MITM בתוכנית 11: | CLI | סיבה | | ------------------- | ------------------------------------------------------ | | windsurf | BYOK מוגבל למודלים נבחרים של Claude + URL/token ארגוני | | amp | אקוסיסטם סגור (Sourcegraph) | | amazon-q / kiro-cli | אימות AWS SSO, אין URL מותאם אישית | | cowork | Anthropic Desktop, אין נקודת קצה ניתנת להגדרה | ראה `_tasks/features-v3.8.6/refactorpages/_orchestration/_plan11-mitm-backlog.md` עבור הצלב המלא. --- ## 5. API לזיהוי קבוצות כל זיהוי הכלים מאוגד דרך נקודת קצה אחת: **`GET /api/cli-tools/all-statuses`** - Auth: `requireCliToolsAuth(request)` (כמו בשאר הנתיבים של `/api/cli-tools/`) - מחזיר: `Record` (סוג: `src/shared/types/cliBatchStatus.ts`) - אסטרטגיה: `Promise.all` על פני כל הכלים, 5 שניות זמן קצוב לכל כלי - מטמון: בזיכרון LRU ממוין לפי קובץ קונפיגורציה `mtime`. המטמון מתבטל כאשר mtime משתנה. מתאפס בהפעלה מחדש של השרת. צורת התגובה לכל כלי: ```ts interface ToolBatchStatus { detection: { installed: boolean; runnable: boolean; version?: string; command?: string; commandPath?: string; reason?: string; }; config: { status: "configured" | "not_configured" | "not_installed" | "unknown" | "other"; endpoint?: string | null; lastConfiguredAt?: string | null; }; error?: string; // מנוקה, ללא עקבות שגיאה } ``` ## 6. מנהלי הגדרות עבור כלים חדשים כלים חדשים עם `configType: "custom"` יש להם מסלולי API ייעודיים להגדרות: | מסלול | כלי | | ------------------------------------------- | ---------------------------------------------------------------- | | `POST /api/cli-tools/forge-settings` | ForgeCode (.forge.toml) | | `POST /api/cli-tools/jcode-settings` | jcode (--base-url flag) | | `POST /api/cli-tools/deepseek-tui-settings` | DeepSeek TUI (OPENAI_BASE_URL, legacy) | | `POST /api/cli-tools/codewhale-settings` | CodeWhale (OPENAI_BASE_URL, primary + legacy `~/.deepseek` sync) | | `POST /api/cli-tools/smelt-settings` | Smelt | | `POST /api/cli-tools/pi-settings` | Pi coding agent | | `POST /api/cli-tools/grok-build-settings` | Grok Build (~/.grok/config.toml, `[model.omniroute]`) | | `POST /api/cli-tools/qwen-settings` | Qwen Code (`~/.qwen/settings.json` + dedicated `.env` key) | כל המסלולים משתמשים ב-`sanitizeErrorMessage()` עבור תגובות שגיאה (כלל קשה #12). --- ## 7. ארכיטקטורת דפי לוח מחוונים ### קוד CLI (`/dashboard/cli-code`) - `src/app/(dashboard)/dashboard/cli-code/page.tsx` — רכיב שרת - `src/app/(dashboard)/dashboard/cli-code/CliCodePageClient.tsx` — רשת לקוח - `src/app/(dashboard)/dashboard/cli-code/[id]/page.tsx` — דף פרטי כלי - `src/app/(dashboard)/dashboard/cli-code/components/` — 12 כרטיסי כלי מיוחדים + `ToolDetailClient.tsx` ### סוכני CLI (`/dashboard/cli-agents`) - `src/app/(dashboard)/dashboard/cli-agents/page.tsx` — רכיב שרת - `src/app/(dashboard)/dashboard/cli-agents/CliAgentsPageClient.tsx` — רשת לקוח - `src/app/(dashboard)/dashboard/cli-agents/[id]/page.tsx` — עושה שימוש חוזר ב-`ToolDetailClient` ### סוכני ACP (`/dashboard/acp-agents`) - `src/app/(dashboard)/dashboard/acp-agents/page.tsx` — רכיב שרת (הועבר מ-`agents/`) ### רכיבי UI משותפים (`src/shared/components/cli/`) | קובץ | מטרה | | ----------------------- | --------------------------------------------- | | `CliToolCard.tsx` | כרטיס מצב חכם (זיהוי + הגדרה + נקודת קצה) | | `CliConceptCard.tsx` | כרטיס הסבר על מושג לדף | | `CliComparisonCard.tsx` | השוואה בשלוש עמודות בין סוגי CLI | | `BaseUrlSelect.tsx` | תפריט נפתח לנקודת קצה (מקומי/ענן/מותאם אישית) | | `ApiKeySelect.tsx` | בורר מפתח API | | `ManualConfigModal.tsx` | מודל קטע קוד שניתן להעתקה | ### חיבור משותף (`src/shared/hooks/cli/`) | קובץ | מטרה | | ------------------------- | ----------------------------------------------------------- | | `useToolBatchStatuses.ts` | מביא את `/api/cli-tools/all-statuses`, מנהל מצב טעינה/רענון | --- ## 8. i18n מרחבים חדשים נוספו בתוכנית 14 F9: | Namespace | מטרה | | ----------- | --------------------------------------------------------------------------- | | `cliCommon` | מיתוגים משותפים (תוויות כרטיסים, טקסטים של מושגים/השוואות, תוויות דף פרטים) | | `cliCode` | מיתוגים של דף CLI Code | | `cliAgents` | מיתוגים של דף CLI Agents | | `acpAgents` | מיתוגים של דף ACP Agents | תרגומים מלאים לפורטוגזית ברזילאית ואנגלית מסופקים. 39 מקומות אחרים נופלים חזרה לאנגלית אוטומטית דרך מיזוג ברמת המרחב ב- `src/i18n/request.ts`. --- ## 9. התחלה מהירה ### שלב 1 — קבלת מפתח API של OmniRoute 1. פתחו את `/dashboard/api-manager` → **צור מפתח API** 2. תן לו שם (למשל `cli-tools`) ובחר את כל ההרשאות 3. העתק את המפתח — תצטרך אותו עבור כל CLI למטה > המפתח שלך נראה כך: `sk-xxxxxxxxxxxxxxxx-xxxxxxxxx` --- ### שלב 2 — התקנת כלים של CLI כל הכלים המבוססים על npm דורשים Node.js 22.22.2+ או 24.x: ```bash # Claude Code (Anthropic) npm install -g @anthropic-ai/claude-code # OpenAI Codex npm install -g @openai/codex # OpenCode npm install -g opencode-ai # Cline npm install -g cline # KiloCode npm install -g kilocode # Qwen Code npm install -g @qwen-code/qwen-code # Google Gemini CLI (ניתן להשקה דרך `omniroute run gemini` → /v1beta surface) npm install -g @google/gemini-cli # Aider pip install aider-chat # Smelt cargo install smelt # מבוסס Rust # סוכן קידוד Pi # ראה https://github.com/zechnerj/pi-coding-agent להתקנה # jcode # ראה https://github.com/1jehuang/jcode להתקנה ``` --- ### שלב 3 — קונפיגורציה דרך לוח המחוונים 1. עבור ל- `http://localhost:20128/dashboard/cli-code` 2. מצא את הכלי שלך ברשת 3. לחץ על הכרטיס כדי לפתוח את דף פרטי הכלי 4. בחר את מפתח ה-API שלך ואת כתובת ה-URL הבסיסית 5. לחץ על **החל קונפיגורציה** או העתק את קטע הקונפיגורציה הידני --- ### שלב 4 — הגדרת משתני סביבה גלובליים ```bash # נקודת קצה אוניברסלית של OmniRoute export OPENAI_BASE_URL="http://localhost:20128/v1" export OPENAI_API_KEY="sk-your-omniroute-key" export ANTHROPIC_BASE_URL="http://localhost:20128" export ANTHROPIC_AUTH_TOKEN="sk-your-omniroute-key" # Gemini CLI קורא GOOGLE_GEMINI_BASE_URL ב- ROOT (ה-SDK שלו מוסיף /v1beta/... בעצמו) export GOOGLE_GEMINI_BASE_URL="http://localhost:20128" export GEMINI_API_KEY="sk-your-omniroute-key" ``` > עבור **שרת מרוחק** החלף `localhost:20128` עם כתובת ה-IP או הדומיין של השרת, > למשל `http://:20128`. --- ### שלב 4 — קונפיגורציה של כל כלי #### Claude Code ```bash # צור ~/.claude/settings.json: mkdir -p ~/.claude && cat > ~/.claude/settings.json << EOF { "env": { "ANTHROPIC_BASE_URL": "http://localhost:20128", "ANTHROPIC_AUTH_TOKEN": "sk-your-omniroute-key" } } EOF ``` השתמש בשורש שער אנתרופיק המאוחד עבור Claude Code. אל תוסיף `/v1` כאן. **בדיקה:** `claude "say hello"` --- #### OpenAI Codex Codex המודרני (v0.137+) קורא רק את `~/.codex/config.toml` — הישן `config.yaml` שייך ל-CLI npm הישן ומוזנח בשקט. מפתח ה-API נשאר במשתנה הסביבה `OMNIROUTE_API_KEY` (`env_key`), אף פעם לא בתוך הקובץ: ```bash mkdir -p ~/.codex && cat > ~/.codex/config.toml << EOF model_provider = "omniroute" [model_providers.omniroute] name = "OmniRoute" base_url = "http://localhost:20128/v1" env_key = "OMNIROUTE_API_KEY" requires_openai_auth = false EOF export OMNIROUTE_API_KEY="sk-your-omniroute-key" ``` הפניה מלאה (פרופילים, `wire_api`, חלונות הקשר): [CODEX-CLI-CONFIGURATION.md](../guides/CODEX-CLI-CONFIGURATION.md). **בדיקה:** `codex "what is 2+2?"` --- #### OpenCode ```bash mkdir -p ~/.config/opencode && cat > ~/.config/opencode/opencode.json << EOF { "\$schema": "https://opencode.ai/config.json", "provider": { "omniroute": { "npm": "@ai-sdk/openai-compatible", "name": "OmniRoute", "options": { "baseURL": "http://localhost:20128/v1", "apiKey": "sk-your-omniroute-key" }, "models": { "claude-sonnet-4-5": { "name": "claude-sonnet-4-5" }, "claude-sonnet-4-5-thinking": { "name": "claude-sonnet-4-5-thinking" }, "gemini-3-flash": { "name": "gemini-3-flash" } } } } } EOF ``` **בדיקה:** `opencode` > השתמש ב- `opencode run "your prompt" --model omniroute/claude-sonnet-4-5-thinking --variant high` > כדי לשלוח וריאנטים של חשיבה. --- #### Cline (CLI או VS Code) **מצב CLI:** ```bash mkdir -p ~/.cline/data && cat > ~/.cline/data/globalState.json << EOF { "apiProvider": "openai", "openAiBaseUrl": "http://localhost:20128/v1", "openAiApiKey": "sk-your-omniroute-key" } EOF ``` **מצב VS Code:** הגדרות הרחבת Cline → ספק API: `OpenAI Compatible` → כתובת URL בסיסית: `http://localhost:20128/v1` או השתמש בלוח המחוונים של OmniRoute → **כלי CLI → Cline → החל קונפיגורציה**. --- #### KiloCode (CLI או VS Code) **מצב CLI:** ```bash kilocode --api-base http://localhost:20128/v1 --api-key sk-your-omniroute-key ``` **הגדרות VS Code:** ```json { "kilo-code.openAiBaseUrl": "http://localhost:20128/v1", "kilo-code.apiKey": "sk-your-omniroute-key" } ``` או השתמש בלוח המחוונים של OmniRoute → **כלי CLI → KiloCode → החל קונפיגורציה**. --- #### Continue (הרחבת VS Code) ערוך את `~/.continue/config.yaml`: ```yaml models: - name: OmniRoute provider: openai model: auto apiBase: http://localhost:20128/v1 apiKey: sk-your-omniroute-key default: true ``` אתחל מחדש את VS Code לאחר העריכה. --- #### VS Code Insiders (`chatLanguageModels.json`) השתמש בזה כאשר VS Code Insiders מוגדר עבור מודלים של נקודות קצה מותאמות ואתה רוצה ש-OmniRoute יעבוד ללא שדה כותרת מותאם. **מיקום מומלץ:** - Linux: `~/.config/Code - Insiders/User/chatLanguageModels.json` - Windows: `%APPDATA%/Code - Insiders/User/chatLanguageModels.json` **דוגמה באמצעות הכינוי המוטבע של OmniRoute:** ```json [ { "vendor": "customendpoint", "id": "auto", "name": "OmniRoute Auto", "family": "gpt-4", "version": "1.0.0", "url": "http://localhost:20128/api/v1/vscode/sk-your-omniroute-key/chat/completions", "modelsUrl": "http://localhost:20128/api/v1/vscode/sk-your-omniroute-key/models", "requestFormat": "openai-chat-completions", "contextWindow": 256000, "maxOutputTokens": 32768, "auth": { "type": "none" } } ] ``` **הערות:** - החלף `sk-your-omniroute-key` עם מפתח API שנוצר ב-OmniRoute. - שדה ה-`url` צריך להצביע על `/api/v1/vscode/{token}/chat/completions`. - שדה ה-`modelsUrl` צריך להצביע על `/api/v1/vscode/{token}/models`. - העדף את הזרימה הרגילה של `/v1` + כותרת Bearer כאשר הלקוח תומך בכותרות מותאמות. - טוקנים מוטבעים ב-URL הם פתרון תאימות ועשויים להופיע ביומני עורך או בהיסטוריית פרוקסי. --- #### Kiro CLI (אמזון) ```bash # התחבר לחשבון AWS/Kiro שלך: kiro-cli login # ה-CLI משתמש באותנטיקציה משלו — OmniRoute לא נדרשת כ-backend עבור Kiro CLI עצמו. # השתמש ב-kiro-cli לצד OmniRoute עבור כלים אחרים. kiro-cli status ``` עבור אפליקציית שולחן העבודה **Kiro IDE**, השתמש בנקודת הקצה MITM שנחשפת על ידי OmniRoute מתחת ל- `/dashboard/cli-tools → Kiro`. --- ## 10. ממשק שורת הפקודה הפנימי של OmniRoute קובץ ההפעלה `omniroute` מספק פקודות לניהול מחזור חיי השרת, להגדרה, לאבחון ולניהול ספקים. נקודת כניסה: `bin/omniroute.mjs`. ```bash omniroute # הפעלת השרת (יציאה 20128 כברירת מחדל) omniroute setup # אשף הגדרה אינטראקטיבי omniroute doctor # בדיקת תצורה, מסד נתונים, יציאות וסביבת ריצה omniroute providers list # חיבורי ספקים שהוגדרו omniroute providers test-all # בדיקת כל חיבור פעיל omniroute reset-password # איפוס סיסמת מנהל המערכת omniroute logs # הזרמת יומני בקשות omniroute health # מצב תקינות מפורט (מנתקי מעגל, מטמון, זיכרון) omniroute --version # הצגת הגרסה omniroute --help # הצגת כל הפקודות ``` ### הגדרה ואתחול ```bash omniroute setup # אשף הגדרה אינטראקטיבי omniroute setup --non-interactive # מצב CI/אוטומציה (קורא משתני סביבה + דגלים) omniroute setup --password '' # הגדרת סיסמת מנהל המערכת ישירות omniroute setup --add-provider \ --provider openai \ --api-key '' \ --test-provider # הוספה ובדיקה של ספק בפעולה אחת ``` משתני סביבה מזוהים להגדרה לא אינטראקטיבית: | משתנה | מטרה | | ------------------- | ----------------------------------------------------------------- | | `OMNIROUTE_API_KEY` | מפתח API של הספק (מקושר אל `--api-key` דרך `.env()` של Commander) | | `DATA_DIR` | דריסת ספריית הנתונים של OmniRoute | כל שאר הקלטים הלא אינטראקטיביים מועברים כדגלים, ולא כמשתני סביבה: `--password`, `--provider`, `--provider-name`, `--provider-base-url`, `--default-model` (ראו את אפשרויות `omniroute setup` לעיל). ### אבחון ```bash omniroute doctor # בדיקת תצורה, מסד נתונים, יציאות, סביבת ריצה, זיכרון וחיוניות omniroute doctor --json # JSON קריא למכונה omniroute doctor --no-liveness # דילוג על בדיקת תקינות HTTP omniroute doctor --host 0.0.0.0 # דריסת מארח בדיקת החיוניות omniroute doctor --liveness-url # דריסת כתובת ה-URL המלאה של נקודת הקצה לבדיקת תקינות ``` פקודת doctor מריצה את הבדיקות הבאות: `Config`, `Database`, `Storage/encryption`, `Port availability`, `Node runtime`, `Native binary`‏ (better-sqlite3), `Memory` ו-`Server liveness`. היא מסתיימת עם קוד שאינו אפס אם בדיקה כלשהי היא `fail`. ### ניהול ספקים ```bash omniroute providers available # קטלוג הספקים של OmniRoute omniroute providers available --search openai # סינון הקטלוג לפי מזהה/שם/כינוי/קטגוריה omniroute providers available --category api-key # סינון לפי קטגוריה (api-key, oauth, free, ...) omniroute providers available --json # JSON קריא למכונה omniroute providers list # חיבורי ספקים שהוגדרו omniroute providers list --json omniroute providers test # בדיקת חיבור מוגדר אחד omniroute providers test-all # בדיקת כל חיבור פעיל omniroute providers validate # אימות מבני מקומי בלבד omniroute providers add --credential-env PROVIDER_KEY omniroute providers import ./providers.json --dry-run --json omniroute providers auth # תהליך OAuth קיים omniroute providers edit --default-model omniroute providers remove --yes ``` הפקודות `providers add/import/auth/edit/remove` פועלות בגישת API תחילה, ולכן פועלות מול ההקשר המקומי או המרוחק הפעיל. לצורך הזנת פרטי גישה יש להשתמש ב- `--credential-stdin` או ב-`--credential-env`; האפשרות `--dry-run --json` מדווחת רק על נוכחות/מבנה לאחר השחרה. `providers available` קוראת את קטלוג OmniRoute; הפקודות `providers list/test/test-all/validate` שומרות על התנהגות SQLite המקומית שלהן ואינן דורשות שהשרת יפעל. ### שחזור ואיפוס ```bash omniroute reset-password # איפוס סיסמת מנהל המערכת (זמין גם בשם: omniroute-reset-password) omniroute reset-encrypted-columns # הצגת אזהרה + הרצה יבשה לאיפוס פרטי גישה מוצפנים omniroute reset-encrypted-columns --force # איפוס בפועל של פרטי גישה מוצפנים ל-null ב-SQLite ``` ### ייצוא פרטי גישה (⚠ יש לטפל בזהירות) ```bash omniroute auth export # הצגת אזהרה + דרישת אישור — ללא גישה למסד הנתונים omniroute auth export --force # ייצוא פרטי הגישה המפוענחים של כל החיבורים ל-stdout כ-JSON omniroute auth export --force --id # ייצוא החיבור התואם בלבד omniroute auth export --force --format env # הפקת שורות OMNIROUTE__= omniroute auth export --force --out creds.json # כתיבה לקובץ (שנוצר עם הרשאות 0600) ``` `auth export` פועלת **באופן מקומי בלבד** (קריאה ישירה מ-SQLite, ללא נתיב HTTP) ומדפיסה/כותבת במכוון ערכי `apiKey`/`accessToken`/`refreshToken`/`idToken` ב**טקסט גלוי** — זו התכונה, ולא תקלה. ללא `--force`, דבר אינו נקרא ממסד הנתונים ודבר אינו מפוענח. כרזת אזהרה מודפסת תמיד אל stderr לפני הפקת טקסט גלוי כלשהו. נדרש להגדיר את `STORAGE_ENCRYPTION_KEY`. שדה שפענוחו נכשל (מפתח מיושן, טקסט מוצפן פגום) מדווח בתור `DecryptFailed: true`, במקום לבטל את הייצוא כולו או לחשוף את השגיאה הבסיסית. ### פקודות משנה נוספות אלה מניחות ששרת OmniRoute פועל, אלא אם צוין אחרת: ```bash omniroute status # מצב זמן ריצה מקיף omniroute logs # הזרמת יומני בקשות (--json, --search, --follow) omniroute config list # הצגת כלי CLI שהוגדרו omniroute provider list # הצגת ספקים זמינים (כינוי של providers list) omniroute provider add # רישום OmniRoute כספק בכלי omniroute keys add | list | remove # ניהול מפתחות API omniroute models [provider] # הצגת מודלים (--json, --search) omniroute combo list | switch | create | delete omniroute backup # יצירת תמונת מצב של התצורה ומסד הנתונים omniroute restore # שחזור מתמונת מצב קודמת omniroute health # מידע מפורט על התקינות (מפסקים, מטמון, זיכרון) omniroute quota # ניצול מכסת הספק omniroute cache # מצב המטמון omniroute cache clear # ניקוי המטמונים הסמנטיים ומטמוני החתימות omniroute mcp status | restart # מצב שרת MCP / הפעלה מחדש omniroute a2a status | card # מצב שרת A2A / כרטיס סוכן omniroute tunnel list | create | stop # ניהול מנהרות (cloudflare/tailscale/ngrok) omniroute env show | get | set # הצגה / הגדרה של משתני סביבה (זמניים) omniroute test # בדיקת עשן לקישוריות הספק omniroute update # בדיקת עדכונים omniroute completion # יצירת השלמה אוטומטית למעטפת ``` ### דגלים נפוצים | דגל | תיאור | | ------------------- | ---------------------------------------------------- | | `--no-open` | אין לפתוח אוטומטית את הדפדפן בעת ההפעלה | | `--port ` | דריסת יציאת ה-API (ברירת המחדל היא 20128) | | `--mcp` | הפעלה כשרת MCP דרך stdio (עבור סביבות פיתוח משולבות) | | `--non-interactive` | מצב CI (ללא הנחיות; קריאה מהסביבה/מהדגלים) | | `--json` | פלט JSON קריא למכונה (doctor, providers וכו׳) | | `--help`, `-h` | הצגת עזרה ספציפית לפקודה | | `--version`, `-v` | הדפסת הגרסה המותקנת | --- ## נקודות קצה זמינות של API | נקודת קצה | תיאור | שימוש עבור | | -------------------------- | ------------------------- | ------------------------------ | | `/v1/chat/completions` | צ'אט סטנדרטי (כל הספקים) | כל הכלים המודרניים | | `/v1/responses` | API תגובות (פורמט OpenAI) | Codex, זרימות עבודה אגנטיות | | `/v1/completions` | השלמות טקסט ישנות | כלים ישנים המשתמשים ב`prompt:` | | `/v1/embeddings` | הטמעות טקסט | RAG, חיפוש | | `/v1/images/generations` | יצירת תמונות | GPT-Image, Flux, וכו' | | `/v1/audio/speech` | טקסט לדיבור | ElevenLabs, OpenAI TTS | | `/v1/audio/transcriptions` | דיבור לטקסט | Deepgram, AssemblyAI | דוגמאות מוכנות להדבקה עם URL של OmniRoute עם טוקנים: ```txt Token example: sk-a3ab3c080beaee3a-69f4a4-070d71af Standard OpenAI base: http://localhost:20128/v1 VS Code models: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/models VS Code chat: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/chat/completions VS Code responses: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/responses Ollama tags: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/api/tags Ollama chat: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/api/chat ``` --- ## פתרון בעיות | שגיאה | סיבה | תיקון | | -------------------------------------------- | ------------------- | --------------------------------------------- | | `Connection refused` | OmniRoute לא פועל | `omniroute serve` | | `401 Unauthorized` | מפתח API שגוי | בדוק ב`/dashboard/api-manager` | | `No combo configured` | אין קומבינציה פעילה | הגדר ב`/dashboard/combos` | | CLI shows "not installed" | בינארי לא ב-PATH | בדוק `which ` | | Dashboard shows "not detected" after install | מטמון ישן | לחץ על "⟳ רענן גילוי" בלוח המחוונים | | Old link `/dashboard/cli-tools` | סימניה לפני v3.8.6 | מופנה אוטומטית ל`/dashboard/cli-code` (308) | | Old link `/dashboard/agents` | סימניה לפני v3.8.6 | מופנה אוטומטית ל`/dashboard/acp-agents` (308) |