# ЁЯУЦ Setup Guide тАФ OmniRoute (рдорд░рд╛рдареА) ЁЯМР **Languages:** ЁЯЗ║ЁЯЗ╕ [English](../../../../guides/SETUP_GUIDE.md) ┬╖ ЁЯЗкЁЯЗ╣ [am](../../../am/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗж [ar](../../../ar/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗжЁЯЗ┐ [az](../../../az/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗм [bg](../../../bg/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗй [bn](../../../bn/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗж [bs](../../../bs/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗиЁЯЗ┐ [cs](../../../cs/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗйЁЯЗ░ [da](../../../da/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗйЁЯЗк [de](../../../de/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗмЁЯЗ╖ [el](../../../el/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗкЁЯЗ╕ [es](../../../es/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗкЁЯЗк [et](../../../et/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ╖ [fa](../../../fa/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗлЁЯЗо [fi](../../../fi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗлЁЯЗ╖ [fr](../../../fr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗк [ga](../../../ga/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [gu](../../../gu/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [ha](../../../ha/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ▒ [he](../../../he/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [hi](../../../hi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗнЁЯЗ╖ [hr](../../../hr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗнЁЯЗ║ [hu](../../../hu/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗжЁЯЗ▓ [hy](../../../hy/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗй [id](../../../id/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [ig](../../../ig/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ╣ [it](../../../it/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗпЁЯЗ╡ [ja](../../../ja/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗмЁЯЗк [ka](../../../ka/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗн [km](../../../km/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [kn](../../../kn/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗ╖ [ko](../../../ko/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ╣ [lt](../../../lt/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ╗ [lv](../../../lv/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [ml](../../../ml/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ╛ [ms](../../../ms/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ╣ [mt](../../../mt/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ▓ [my](../../../my/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ╡ [ne](../../../ne/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ▒ [nl](../../../nl/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ┤ [no](../../../no/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [or](../../../or/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [pa](../../../pa/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗн [phi](../../../phi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ▒ [pl](../../../pl/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ╣ [pt](../../../pt/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗ╖ [pt-BR](../../../pt-BR/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ┤ [ro](../../../ro/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ║ [ru](../../../ru/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ░ [si](../../../si/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗ░ [sk](../../../sk/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗо [sl](../../../sl/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ╕ [sr](../../../sr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗк [sv](../../../sv/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗк [sw](../../../sw/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [ta](../../../ta/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [te](../../../te/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗн [th](../../../th/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗ╖ [tr](../../../tr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ║ЁЯЗж [uk-UA](../../../uk-UA/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ░ [ur](../../../ur/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ║ЁЯЗ┐ [uz](../../../uz/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╗ЁЯЗ│ [vi](../../../vi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [yo](../../../yo/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗиЁЯЗ│ [zh-CN](../../../zh-CN/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗ╝ [zh-TW](../../../zh-TW/docs/guides/SETUP_GUIDE.md) --- > OmniRoute рд╕рд╛рдареА рд╕рдВрдкреВрд░реНрдг рд╕реЗрдЯрдЕрдк рд╕рдВрджрд░реНрдн. рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЖрд╡реГрддреНрддреАрд╕рд╛рдареА, [README рдордзреАрд▓ рджреНрд░реБрдд рдкреНрд░рд╛рд░рдВрдн](../README.md#-quick-start) рдкрд╣рд╛. ## рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ - [рд╕реНрдерд╛рдкрдирд╛ рдкрджреНрдзрддреА](#install-methods) - [CLI рд╕рд╛рдзрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди](#cli-tool-configuration) - [рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗрдЯрдЕрдк (MCP + A2A)](#protocol-setup-mcp--a2a) - [рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди](#timeout-configuration) - [рд╕реНрдкреНрд▓рд┐рдЯ-рдкреЛрд░реНрдЯ рдореЛрдб](#split-port-mode) - [Void Linux (xbps-src)](#void-linux-xbps-src-template) - [рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ](#uninstalling) --- ## рд╕реНрдерд╛рдкрдирд╛ рдкрджреНрдзрддреА ### npm (рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реЗ) ```bash npm install -g omniroute omniroute ``` рдбреЕрд╢рдмреЛрд░реНрдб `http://localhost:20128` рдпреЗрдереЗ рдЙрдШрдбрддреЛ рдЖрдгрд┐ API рдЪрд╛ рдореВрд│ URL `http://localhost:20128/v1` рдЖрд╣реЗ. ### pnpm ```bash pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core omniroute ``` > **pnpm рд╡рд╛рдкрд░рдХрд░реНрддреЗ:** `better-sqlite3` рдЖрдгрд┐ `@swc/core` рд╕рд╛рдареА рдиреЗрдЯрд┐рд╡реНрд╣ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА `--allow-build` рдлреНрд▓реЕрдЧ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. pnpm v11 рд╡рд░реАрд▓ рдЧреНрд▓реЛрдмрд▓ рд╕реНрдерд╛рдкрдирд╛рдВрд╕рд╛рдареА `pnpm approve-builds -g` рдХрдорд╛рдВрдб рд╕рдорд░реНрдерд┐рдд рдирд╛рд╣реА. ### Arch Linux (AUR) ```bash yay -S omniroute-bin systemctl --user enable --now omniroute.service ``` [AUR рдкреЕрдХреЗрдЬ](https://aur.archlinux.org/packages/omniroute-bin) OmniRoute рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ systemd рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдкреБрд░рд╡рддреЗ. ### рд╕реНрд░реЛрддрд╛рдкрд╛рд╕реВрди ```bash npm install PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` > **Windows рдиреЛрдВрдж:** рдЬреБрдиреА `%USERPROFILE%\.omniroute` рдбрд┐рд░реЗрдХреНрдЯрд░реА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реНрдпрд╛рд╕, рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ OmniRoute `%APPDATA%\omniroute` рд╡рд╛рдкрд░рддреЗ. рд╡реЗрдЧрд│реЗ рдбреЗрдЯрд╛-рдбрд┐рд░реЗрдХреНрдЯрд░реА рд╕реНрдерд╛рди рдирд┐рд╡рдбрдгреНрдпрд╛рд╕рд╛рдареА `DATA_DIR` рд╕реЗрдЯ рдХрд░рд╛. > **рдиреЛрдВрдж:** рдкреНрд░рдердордЪ рдЪрд╛рд▓рд╡рддрд╛рдирд╛ `npm install`, `.env.example` рдкрд╛рд╕реВрди `.env` рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдХрд░рддреЗ. рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рджреНрдпрдорд╛рди `.env` рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рдХрд░рдгрд╛рд░ рдирд╛рд╣реАрдд, рддреНрдпрд╛рдореБрд│реЗ рд╕рд╛рдиреБрдХреВрд▓рдиреЗ рдЬрддрди рдХреЗрд▓реА рдЬрд╛рддрд╛рдд. рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпреЗ рднрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рдВрдб рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА `.env` рд╣рдЯрд╡рд╛. ### Docker Compose рдкреНрд░реЛрдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ Caddy HTTPS рд╕рд╣ рд╕рдВрдкреВрд░реНрдг Docker рд╕реЗрдЯрдЕрдкрд╕рд╛рдареА [Docker рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ](./DOCKER_GUIDE.md) рдкрд╣рд╛. ### рдбреЗрд╕реНрдХрдЯреЙрдк ре▓рдк (Electron) OmniRoute рдордзреНрдпреЗ Electron 41 + electron-builder 26.10 рд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдбреЗрд╕реНрдХрдЯреЙрдк рд░реЕрдкрд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдЙрдкрд▓рдмреНрдз рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ (рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рд░реВрдЯ): ```bash npm run electron:dev # рд╣реЙрдЯ-рд░рд┐рд▓реЛрдбрд╕рд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рдЪрд╛рд▓рд╡рд╛ npm run electron:build # рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ OS рд╕рд╛рдареА рдмрд┐рд▓реНрдб рдХрд░рд╛ (рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдУрд│рдЦрд▓реЗ рдЬрд╛рддреЗ) npm run electron:build:win # Windows рдЗрдВрд╕реНрдЯреЙрд▓рд░ (NSIS + рдкреЛрд░реНрдЯреЗрдмрд▓) npm run electron:build:mac # macOS (dmg + zip, arm64+x64) npm run electron:build:linux # Linux (AppImage + deb + rpm) npm run electron:smoke:packaged # рдкреЕрдХреЗрдЬ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд┐рд▓реНрдбрдЪреА рд╕реНрдореЛрдХ рдЪрд╛рдЪрдгреА рдХрд░рд╛ ``` рдбреЗрд╕реНрдХрдЯреЙрдк рдЗрдВрд╕реНрдЯреЙрд▓рд░реНрд╕рдЪреЗ рд░рд┐рд▓реАрдЬ GitHub Releases рд╢реА рд╕рдВрд▓рдЧреНрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдд. Electron рд╡рд┐рд╖рдпреА рд╕рдВрдкреВрд░реНрдг рд╕рдЦреЛрд▓ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА (рд╕рд╛рдЗрдирд┐рдВрдЧ, IPC рдмреНрд░рд┐рдЬ, рдбрд┐рд╕реНрдЯреНрд░реЛрдЬ), [`ELECTRON_GUIDE.md`](./ELECTRON_GUIDE.md) рдкрд╣рд╛ _(рдирдВрддрд░рдЪреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рдд рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ)_. ### рд╣реЗрдбрд▓реЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ (CI/рдСрдЯреЛрдореЗрд╢рди) рджреЗрдЦрд░реЗрдЦреАрд╢рд┐рд╡рд╛рдп рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рд╕реЗрдЯрдЕрдкрд╕рд╛рдареА (Docker, Kubernetes, CI), рд╣реЗ рд╡рд╛рдкрд░рд╛: ```bash omniroute setup --non-interactive omniroute providers test-batch ``` env vars (`INITIAL_PASSWORD`, `OMNIROUTE_WS_BRIDGE_SECRET`, рдЗрддреНрдпрд╛рджреА) рд╕реЛрдмрдд рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╕, рдпрд╛рджреНрд╡рд╛рд░реЗ рддреБрдореНрд╣реА рдкреВрд░реНрдгрдкрдгреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реЗ OmniRoute рдЗрдиреНрд╕реНрдЯрдиреНрд╕ рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛. ### CLI рдкрд░реНрдпрд╛рдп | рдХрдорд╛рдВрдб | рд╡рд░реНрдгрди | | ----------------------- | ------------------------------------------------------------------------------------- | | `omniroute` | рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░рд╛ (`PORT=20128`, API рдЖрдгрд┐ рдбреЕрд╢рдмреЛрд░реНрдб рдПрдХрд╛рдЪ рдкреЛрд░реНрдЯрд╡рд░) | | `omniroute setup` | рдкрд╛рд╕рд╡рд░реНрдб рдЖрдгрд┐ рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░рд╕рд╛рдареА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдд CLI рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ | | `omniroute doctor` | рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рди рдХрд░рддрд╛ рд╕реНрдерд╛рдирд┐рдХ рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреНрдпрд╛ рдЪрд╛рд▓рд╡рд╛ | | `omniroute providers` | CLI рдордзреВрди рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░реНрд╕ рд╢реЛрдзрд╛, рд╕реВрдЪреАрдмрджреНрдз рдХрд░рд╛, рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рддрдкрд╛рд╕рд╛ | | `omniroute config` | CLI рд╕рд╛рдзрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди тАФ рдХреЙрдиреНрдлрд┐рдЧреНрд╕ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рд╛, рдорд┐рд│рд╡рд╛, рд╕реЗрдЯ рдХрд░рд╛ рдЖрдгрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рд╛ | | `omniroute status` | рдСрдлрд▓рд╛рдЗрди рд╕реНрдерд┐рддреА рдбреЕрд╢рдмреЛрд░реНрдб тАФ рдЖрд╡реГрддреНрддреА, DB, рд╕рд╛рдзрдиреЗ, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди | | `omniroute logs` | API рдордзреВрди рд╡рд╛рдкрд░ рд▓реЙрдЧреНрд╕ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рд╛ (`--follow` рд╕рдорд░реНрдерд┐рдд) | | `omniroute update` | OmniRoute рдЕрджреНрдпрддрдиреЗ рддрдкрд╛рд╕рд╛ рдХрд┐рдВрд╡рд╛ рд▓рд╛рдЧреВ рдХрд░рд╛ | | `omniroute provider` | рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░ рдХрдиреЗрдХреНрд╢рдиреНрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛ тАФ рдЬреЛрдбрд╛, рд╕реВрдЪреАрдмрджреНрдз рдХрд░рд╛, рдХрд╛рдврд╛, рддрдкрд╛рд╕рд╛, рдбреАрдлреЙрд▓реНрдЯ рдард░рд╡рд╛ | | `omniroute --port 3000` | рдХреЕрдиреЙрдирд┐рдХрд▓/API рдкреЛрд░реНрдЯ 3000 рд╡рд░ рд╕реЗрдЯ рдХрд░рд╛ | | `omniroute --mcp` | MCP рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░рд╛ (stdio рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯ) | | `omniroute --no-open` | рдмреНрд░рд╛рдЙрдЭрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдЙрдШрдбреВ рдирдХрд╛ | | `omniroute --help` | рдорджрдд рджрд╛рдЦрд╡рд╛ | рд╣реЗрдбрд▓реЗрд╕ рд╕реЗрдЯрдЕрдк рдлреНрд▓реЕрдЧреНрд╕ рдХрд┐рдВрд╡рд╛ рдПрдиреНрд╡реНрд╣рд╛рдпрд░реНрдирдореЗрдВрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ: ```bash omniroute setup --non-interactive --password "$OMNIROUTE_PASSWORD" omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" --test-provider ``` рдбреЕрд╢рдмреЛрд░реНрдб рди рдЙрдШрдбрддрд╛ рд╕реНрдерд╛рдирд┐рдХ рдирд┐рджрд╛рди рдЪрд╛рд▓рд╡рд╛: ```bash omniroute doctor omniroute doctor --json omniroute doctor --no-liveness ``` рдбреЕрд╢рдмреЛрд░реНрдб рди рдЙрдШрдбрддрд╛ SSH рдХрд┐рдВрд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рдордзреВрди рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░реНрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛: ```bash omniroute providers available omniroute providers available --search openai omniroute providers available --category api-key omniroute providers list omniroute providers test omniroute providers test-all omniroute providers validate ``` --- ## CLI рд╕рд╛рдзрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди ### 1) рдкреНрд░рджрд╛рддреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рд╛ рдЖрдгрд┐ API рдХреА рддрдпрд╛рд░ рдХрд░рд╛ 1. Dashboard тЖТ `Providers` рдЙрдШрдбрд╛ рдЖрдгрд┐ рдХрд┐рдорд╛рди рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рд╛ (OAuth рдХрд┐рдВрд╡рд╛ API рдХреА). 2. Dashboard тЖТ `Endpoints` рдЙрдШрдбрд╛ рдЖрдгрд┐ API рдХреА рддрдпрд╛рд░ рдХрд░рд╛. 3. (рдкрд░реНрдпрд╛рдпреА) Dashboard тЖТ `Combos` рдЙрдШрдбрд╛ рдЖрдгрд┐ рддреБрдордЪреА рдлреЙрд▓рдмреЕрдХ рд╕рд╛рдЦрд│реА рд╕реЗрдЯ рдХрд░рд╛. ### 2) рддреБрдордЪреЗ рдХреЛрдбрд┐рдВрдЧ рд╕рд╛рдзрди рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рд╛ ```txt Base URL: http://localhost:20128/v1 API Key: [Endpoint рдкреГрд╖реНрдард╛рд╡рд░реВрди рдХреЙрдкреА рдХрд░рд╛] Model: if/qwen3.8-max-preview (рдХрд┐рдВрд╡рд╛ рдХреЛрдгрддрд╛рд╣реА provider/model рдЙрдкрд╕рд░реНрдЧ) ``` рддреБрдордЪрд╛ рдПрдбрд┐рдЯрд░ `Authorization: Bearer ...` рдкрд╛рдард╡реВ рд╢рдХрдд рдирд╕рд▓реНрдпрд╛рд╕, рддреНрдпрд╛рдРрд╡рдЬреА рдЯреЛрдХрдирдпреБрдХреНрдд рд╕реБрд╕рдВрдЧрддрддрд╛ рдмреЗрд╕ рд╡рд╛рдкрд░рд╛: ```txt Base URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/ Models URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/models Chat URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/chat/completions Ollama Tags URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/api/tags ``` Claude Code, Codex CLI, Cursor, Cline, OpenClaw, OpenCode рдЖрдгрд┐ OpenAI-рд╕реБрд╕рдВрдЧрдд SDK рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддреЗ. #### `setup-*` рд╡рд╛рдкрд░реВрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛ рдмреЗрд╕ URL рдЖрдгрд┐ рдХреА рд╣рд╛рддрд╛рдиреЗ рдкреЗрд╕реНрдЯ рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА, рдереЗрдЯ рдореЙрдбреЗрд▓ рдХреЕрдЯрд▓реЙрдЧрд╡рд░реВрди рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдзрдирд╛рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдХреЙрдиреНрдлрд┐рдЧ OmniRoute рд▓рд╛ рд▓рд┐рд╣реВ рджреНрдпрд╛. рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдзрдирд╛рд╕рд╛рдареА рдПрдХ рдХрдорд╛рдВрдб: ```bash omniroute setup-codex # ~/.codex/.config.toml рдкреНрд░реЛрдлрд╛рдЗрд▓реНрд╕ omniroute setup-claude # ~/.claude/profiles//settings.json omniroute setup-opencode # ~/.config/opencode/opencode.json (openai-рд╕реБрд╕рдВрдЧрдд) omniroute setup-cline # Cline CLI + VS Code рдПрдХреНрд╕реНрдЯреЗрдВрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ omniroute setup-kilo # Kilo Code omniroute setup-continue # ~/.continue/config.yaml (Continue / cn) omniroute setup-cursor # Cursor рдордзреАрд▓ рдЕреЕрдк-рдЕрдВрддрд░реНрдЧрдд рдкрд╛рдпрд▒реНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ omniroute setup-roo # Roo Code рдЗрдореНрдкреЛрд░реНрдЯ + autoImport рдкреЙрдЗрдВрдЯрд░ omniroute setup-crush # ~/.config/crush/crush.json omniroute setup-zed # ~/.config/zed/settings.json (openai_compatible) omniroute setup-goose # ~/.config/goose/config.yaml omniroute setup-aider # ~/.aider.conf.yml omniroute setup-qwen # ~/.qwen/settings.json + ~/.qwen/.env ``` рд╕реНрдерд╛рдирд┐рдХ рд╕рд╛рдзрди **рджреВрд░рд╕реНрде** OmniRoute рд╡рд┐рд░реБрджреНрдз рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб `--remote --api-key ` рд╕реНрд╡реАрдХрд╛рд░рддреЗ, рддрд╕реЗрдЪ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрдирд╛рд╕рд╛рдареА `--dry-run` рд╕реНрд╡реАрдХрд╛рд░рддреЗ. рдпреЛрдЧреНрдп env рдЕрдВрддрд░реНрднреВрдд рдХрд░реВрди рдЖрдгрд┐ рдХреЛрдгрддреЗрд╣реА рдХреЙрдиреНрдлрд┐рдЧ рди рд▓рд┐рд╣рд┐рддрд╛ CLI рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдг рд▓рд╛рдБрдЪрд░ `omniroute run ` (claude, codex, aider, goose, opencode, qwen, gemini) рд╡рд╛рдкрд░рд╛; рдкреВрд░реНрд╡реАрдЪреЗ рдкреНрд░рддреНрдпреЗрдХ-рд╕рд╛рдзрдирд╛рд╕рд╛рдареАрдЪреЗ рд▓рд╛рдБрдЪрд░ `omniroute launch` (Claude Code) рдЖрдгрд┐ `omniroute launch-codex` (Codex) рдЕрдЬреВрдирд╣реА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рд╕рдВрдкреВрд░реНрдг рддрдХреНрддреНрдпрд╛рд╕рд╛рдареА (рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХрд╛рдп рд▓рд┐рд╣рд┐рддреЗ, рдкреНрд░рддреНрдпреЗрдХ рдлреНрд▓реЕрдЧ, рд╕реНрдерд╛рдирд┐рдХ рд╡рд┐рд░реБрджреНрдз рджреВрд░рд╕реНрде, рдмреЗрд╕-URL `/v1` рдкрджреНрдзрддреА), **[CLI рдПрдХрддреНрд░реАрдХрд░рдгреЗ](./CLI-INTEGRATIONS.md)** рдкрд╣рд╛. рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдзрдирд╛рдЪреНрдпрд╛ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА (Claude Code, Codex CLI, Cursor, Cline, OpenClaw, Kilo Code, Copilot рдЖрдгрд┐ рдЗрддрд░), рд╕рдорд░реНрдкрд┐рдд **[CLI рд╕рд╛рдзрдиреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛](../reference/CLI-TOOLS.md)** рдкрд╣рд╛. --- ## рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗрдЯрдЕрдк (MCP + A2A) ### MCP рд╕реЗрдЯрдЕрдк (рдореЙрдбреЗрд▓ рд╕рдВрджрд░реНрдн рдкреНрд░реЛрдЯреЛрдХреЙрд▓) stdio рдореЛрдбрдордзреНрдпреЗ MCP рд╡рд╛рд╣рддреВрдХ рд╕реБрд░реВ рдХрд░рд╛: ```bash omniroute --mcp ``` рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╡рд╛рд╣: ```bash # 1. Start MCP server omniroute --mcp # 2. From your MCP client, call: omniroute_get_health # Should return system health omniroute_list_combos # Should return active combos # 3. Or run the full E2E suite: npm run test:protocols:e2e ``` #### MCP рдХреНрд▓рд╛рдпрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди **Claude рдХреЛрдб:** ```bash claude mcp add --transport http omniroute http://localhost:20128/api/mcp/stream ``` **Cursor / Cline:** рддреБрдордЪреНрдпрд╛ MCP рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдЬреЛрдбрд╛ (stdio, рдХреА рд╕рд╣ рдЬреЗрдгреЗрдХрд░реВрди рдХреЙрд▓рд░рдХрдбреЗ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдЕрд╕реЗрд▓): ```json { "mcpServers": { "omniroute": { "command": "omniroute", "args": ["--mcp"], "env": { "OMNIROUTE_API_KEY": "your-key", "OMNIROUTE_BASE_URL": "http://localhost:20128" } } } } ``` рдХрд┐рдВрд╡рд╛, рдЬреЗрд╡реНрд╣рд╛ `mcpTransport` `streamable-http` рдЕрд╕реЗрд▓ (рддреЗ `/dashboard/mcp` рд╡рд░ рд╕реЗрдЯ рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ `omniroute mcp enable --transport streamable-http` рд╕рд╣), рдХреНрд▓рд╛рдпрдВрдЯрдЪреА рд░рд┐рдореЛрдЯ MCP рд╕рд░реНрд╡реНрд╣рд░ рдПрдВрдЯреНрд░реА `http://localhost:20128/api/mcp/stream` рд╡рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рд╛. рдХреА `Authorization: Bearer ` рдореНрд╣рдгреВрди рдкреНрд░рд╡рд╛рд╕ рдХрд░рддреЗ (рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрд╕рд╛рдареА [MCP рд╕рд░реНрд╡реНрд╣рд░ тЖТ рд░рд┐рдореЛрдЯ рдНрдХреНрд╕реЗрд╕](../frameworks/MCP-SERVER.md#remote-access-manage-scope-bypass) рдкрд╣рд╛; рд░рд┐рдореЛрдЯ рдХреАрд▓рд╛ `mcp:connect` рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ read/write рд╕реНрдХреЛрдк рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд). **рд╕рдВрдкреВрд░реНрдг MCP рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг:** [MCP рд╕рд░реНрд╡реНрд╣рд░ README](../../open-sse/mcp-server/README.md) тАФ 110 рдЯреВрд▓реНрд╕, IDE рдХреЙрдиреНрдлрд┐рдЧреНрд╕, Python/TS/Go рдХреНрд▓рд╛рдпрдВрдЯ. рдХреЙрдореНрдкреНрд░реЗрд╢рди CCR/dedup рдЯреВрд▓реНрд╕рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рд╕рдВрджрд░реНрдн (рдорд╛рд░реНрдХрд░, рдкреВрд░реНрд╡рд╕реНрдерд┐рддреА, рдкреНрд░рддрд┐-рдЯреВрд▓ рд╕реНрдХреЛрдк, рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдкреГрд╖реНрдард╛рдВрдХрди, рдирд┐рджрд╛рди): [рдХреЙрдореНрдкреНрд░реЗрд╢рди рдЗрдВрдЬрд┐рди тЖТ рдкреВрд░реНрд╡рддрдпрд╛рд░реА / рдСрдкрд░реЗрдЯрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ](../compression/COMPRESSION_ENGINES.md#prerequisites--operator-guide-ccr--session-dedup). ### A2A рд╕реЗрдЯрдЕрдк (рдПрдЬрдВрдЯ-рдЯреВ-рдПрдЬрдВрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдПрдЬрдВрдЯ рдХрд╛рд░реНрдб рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рд╛: ```bash curl http://localhost:20128/.well-known/agent.json ``` рдХрд╛рд░реНрдп рдкрд╛рдард╡рд╛: ```bash curl -X POST http://localhost:20128/a2a \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' ``` **рд╕рдВрдкреВрд░реНрдг A2A рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг:** [A2A рд╕рд░реНрд╡реНрд╣рд░ README](../../src/lib/a2a/README.md) тАФ JSON-RPC 2.0, рдХреМрд╢рд▓реНрдпреЗ, рдкреНрд░рд╡рд╛рд╣, рдХрд╛рд░реНрдп рдЬреАрд╡рдирдЪрдХреНрд░. --- ## рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди ### рдореВрд▓рднреВрдд рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕ рдмрд╣реБрддреЗрдХ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЗрд╡рд│ рдпрд╛ рджреЛрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ: | рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ | рдбреАрдлреЙрд▓реНрдЯ | рдЙрджреНрджреЗрд╢ | | ------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | `600000` | рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░рддрд┐рд╕рд╛рдж рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ, рд▓рдкрд╡рд▓реЗрд▓реЗ Undici рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕, TLS рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рд╡рд┐рдирдВрддреНрдпрд╛ рдЖрдгрд┐ API рдмреНрд░рд┐рдЬ рд╡рд┐рдирдВрддреА/рдкреНрд░реЙрдХреНрд╕реА рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕ рдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдорд╛рдпрд┐рдХ рдЖрдзрд╛рд░рд░реЗрд╖рд╛ | | `STREAM_IDLE_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` рдХрдбреВрди рд╡рд╛рд░рд╢рд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд | OmniRoute рдиреЗ SSE рд╕реНрдЯреНрд░реАрдо рд░рджреНрдж рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЪрдВрдХреНрд╕рдордзреАрд▓ рдХрдорд╛рд▓ рдЕрдВрддрд░ | рдмреЕрдХрд╡рд░реНрдб рдХрдВрдкреЕрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдЬрддрди рдХреЗрд▓реА рдЬрд╛рддреЗ: рд╡рд┐рджреНрдпрдорд╛рди `FETCH_TIMEOUT_MS`, `API_BRIDGE_PROXY_TIMEOUT_MS` рдЖрдгрд┐ рдЗрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░рд╛рд╕рд╛рдареА рдЕрд╕рд▓реЗрд▓реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЕрдЬреВрдирд╣реА рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рдЖрдгрд┐ рд╕рд╛рдорд╛рдпрд┐рдХ рдЖрдзрд╛рд░рд░реЗрд╖реЗрд▓рд╛ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рддрд╛рдд. ### рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдВрджреА Claude Code-рд╕реБрд╕рдВрдЧрдд рдЕрдкрд╕реНрдЯреНрд░реАрдореНрд╕рд╕рд╛рдареА (`anthropic-compatible-cc-*`), OmniRoute рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдлреЗрдЪ рдЯрд╛рдЗрдордЖрдЙрдЯрд╡рд░реВрди рдЖрдЙрдЯрдмрд╛рдЙрдВрдб `X-Stainless-Timeout` рд╣реЗрдбрд░ рдорд┐рд│рд╡рддреЗ, рдЬреЗрдгреЗрдХрд░реВрди рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░рдЪреНрдпрд╛ рдмрд╛рдЬреВрдЪреЗ рд░реАрдб рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕ рддреБрдордЪреНрдпрд╛ env рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╢реА рд╕рдВрд░реЗрдЦрд┐рдд рд░рд╛рд╣рддреАрд▓. рддреГрддреАрдп-рдкрдХреНрд╖ Claude Code-рд╕реБрд╕рдВрдЧрдд рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реАрдВрд╕рд╛рдареА, OmniRoute рдбреАрдлреЙрд▓реНрдЯ `anthropic-beta` рд╕рдВрдЪ рдорд░реНрдпрд╛рджрд┐рдд рдареЗрд╡рддреЗ рдЖрдгрд┐ `Client Cache Control` рд╣реЗ `Auto` рд╡рд░ рдареЗрд╡рд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдирд╛, рдлрдХреНрдд рдХреНрд▓рд╛рдпрдВрдЯрдиреЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реЗ `cache_control` рдорд╛рд░реНрдХрд░реНрд╕ рдлреЙрд░рд╡рд░реНрдб рдХрд░рддреЗ. рдЕрдкрд╕реНрдЯреНрд░реАрдорд▓рд╛ рд╡рд┐рд╢реЗрд╖рддрдГ рд╕рдВрдкрд╛рджрд┐рдд Claude рд╡рд┐рдЪрд╛рд░рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛рдЪ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдЕрд╕рд▓реЗрд▓реЗ "Enable redact-thinking beta" рдЯреЙрдЧрд▓ рд╕рдХреНрд╖рдо рдХрд░рд╛. ### рдкреНрд░рдЧрдд рдЯрд╛рдЗрдордЖрдЙрдЯ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдбреНрд╕ | рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ | рдбреАрдлреЙрд▓реНрдЯ | рдЙрджреНрджреЗрд╢ | | ---------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | `FETCH_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` рдХрдбреВрди рд╡рд╛рд░рд╢рд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд | рдкреНрд░рддрд┐рд╕рд╛рдж рд╣реЗрдбрд░реНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдгрд╛рд░рд╛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░рддрд┐рд╕рд╛рдж рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `FETCH_HEADERS_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` рдХрдбреВрди рд╡рд╛рд░рд╢рд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд | рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░рддрд┐рд╕рд╛рдж рд╣реЗрдбрд░реНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Undici рдЪреА рдХрд╛рд▓рдорд░реНрдпрд╛рджрд╛ | | `FETCH_BODY_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` рдХрдбреВрди рд╡рд╛рд░рд╢рд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд | рдЕрдкрд╕реНрдЯреНрд░реАрдо рдмреЙрдбреА рдЪрдВрдХреНрд╕рдордзреАрд▓ Undici рдЪреА рдХрд╛рд▓рдорд░реНрдпрд╛рджрд╛ (`0` рддреА рдЕрдХреНрд╖рдо рдХрд░рддреЗ) | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Undici TCP рдХрдиреЗрдХреНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Undici рдирд┐рд╖реНрдХреНрд░рд┐рдп keep-alive рд╕реЙрдХреЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `TLS_CLIENT_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` рдХрдбреВрди рд╡рд╛рд░рд╢рд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд | `wreq-js` рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗрд▓реНрдпрд╛ TLS рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╛рдареА рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` рдХрд┐рдВрд╡рд╛ `600000` рдХрдбреВрди рд╡рд╛рд░рд╢рд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд | API рдкреЛрд░реНрдЯрд╡рд░реВрди рдбреЕрд╢рдмреЛрд░реНрдб рдкреЛрд░реНрдЯрдХрдбреЗ `/v1` рдкреНрд░реЙрдХреНрд╕реА рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧрд╕рд╛рдареА рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `max(API_BRIDGE_PROXY_TIMEOUT_MS, 300000)` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рдЗрдирдХрдорд┐рдВрдЧ рд╡рд┐рдирдВрддреА рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рдЗрдирдХрдорд┐рдВрдЧ рд╣реЗрдбрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ keep-alive рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рд╕реЙрдХреЗрдЯ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ (`0` рддреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ) | > **рдЯреАрдк:** рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╛рдареА, `FETCH_TIMEOUT_MS` рдлрдХреНрдд рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрдЕрдк / рдкрд╣рд┐рд▓реНрдпрд╛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХрд╛рд▓рд╛рд╡рдзреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ. рд╕реНрдЯреНрд░реАрдо рд╕рдХреНрд░рд┐рдп рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, OmniRoute рдлрдХреНрдд рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдбрдерд│рд╛ (`STREAM_IDLE_TIMEOUT_MS`) рдХрд┐рдВрд╡рд╛ Undici рдмреЙрдбреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ (`FETCH_BODY_TIMEOUT_MS`) рдЖрд▓реНрдпрд╛рд╡рд░рдЪ рддреЛ рд░рджреНрдж рдХрд░реЗрд▓. ### рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╕реБрд╕рдВрдЧрддрддрд╛ рддреБрдореНрд╣реА OmniRoute рд╣реЗ Nginx, Caddy, Cloudflare рдХрд┐рдВрд╡рд╛ рдЕрдиреНрдп рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реАрдорд╛рдЧреЗ рдЪрд╛рд▓рд╡рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреНрд░реЙрдХреНрд╕реА рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕рджреЗрдЦреАрд▓ рддреБрдордЪреНрдпрд╛ OmniRoute рд╕реНрдЯреНрд░реАрдо/рдлреЗрдЪ рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛. --- ## рд╕реНрдкреНрд▓рд┐рдЯ-рдкреЛрд░реНрдЯ рдореЛрдб рдкреНрд░рдЧрдд рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрд╕рд╛рдареА (рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА, рдХрдВрдЯреЗрдирд░ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ) API рдЖрдгрд┐ рдбреЕрд╢рдмреЛрд░реНрдб рд╕реНрд╡рддрдВрддреНрд░ рдкреЛрд░реНрдЯрд╡рд░ рдЪрд╛рд▓рд╡рд╛: ```bash PORT=20128 DASHBOARD_PORT=20129 omniroute # API: http://localhost:20128/v1 # рдбреЕрд╢рдмреЛрд░реНрдб: http://localhost:20129 ``` --- ## Void Linux (xbps-src) рдЯреЗрдореНрдкрд▓реЗрдЯ Void Linux рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА, рддреБрдореНрд╣реА `xbps-src` рд╡рд╛рдкрд░реВрди рдореВрд│ рдкреЕрдХреЗрдЬ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рд╣рд╛ рдмреНрд▓реЙрдХ `srcpkgs/omniroute/template` рдореНрд╣рдгреВрди рд╕реЗрд╡реНрд╣ рдХрд░рд╛: ```bash # Template file for 'omniroute' pkgname=omniroute version=3.8.0 revision=1 hostmakedepends="nodejs python3 make" depends="openssl" short_desc="Universal AI gateway with smart routing for multiple LLM providers" maintainer="zenobit " license="MIT" homepage="https://github.com/diegosouzapw/OmniRoute" distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" # Regenerate the checksum for each release with: # curl -L -o /tmp/omniroute.tar.gz "https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" && sha256sum /tmp/omniroute.tar.gz checksum=PLACEHOLDER_REGENERATE_PER_RELEASE system_accounts="_omniroute" omniroute_homedir="/var/lib/omniroute" export NODE_ENV=production export npm_config_engine_strict=false export npm_config_loglevel=error export npm_config_fund=false export npm_config_audit=false do_build() { local _gyp_arch case "$XBPS_TARGET_MACHINE" in aarch64*) _gyp_arch=arm64 ;; armv7*|armv6*) _gyp_arch=arm ;; i686*) _gyp_arch=ia32 ;; *) _gyp_arch=x64 ;; esac NODE_ENV=development npm ci --ignore-scripts npm run build cp -r .next/static .next/standalone/.next/static [ -d public ] && cp -r public .next/standalone/public || true local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js (cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch") local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release mkdir -p "$_bs3_release" cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/" rm -rf .next/standalone/node_modules/@img for _mod in pino-abstract-transport split2 process-warning; do cp -r "node_modules/$_mod" .next/standalone/node_modules/ done } do_check() { npm run test:unit } do_install() { vmkdir usr/lib/omniroute/.next vcopy .next/standalone/. usr/lib/omniroute/.next/standalone for _d in \ .next/standalone/.next/server/app/dashboard \ .next/standalone/.next/server/app/dashboard/settings \ .next/standalone/.next/server/app/dashboard/providers; do touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep" done cat > "${WRKDIR}/omniroute" <<'EOF' #!/bin/sh export PORT="${PORT:-20128}" export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}" export APP_LOG_TO_FILE="${APP_LOG_TO_FILE:-false}" mkdir -p "${DATA_DIR}" exec node /usr/lib/omniroute/.next/standalone/server.js "$@" EOF vbin "${WRKDIR}/omniroute" } post_install() { vlicense LICENSE } ``` --- ## рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ | рдХрдорд╛рдВрдб | рдХреГрддреА | | ------------------------ | ------------------------------------------------------------------------------------------ | | `npm run uninstall` | рд╕рд┐рд╕реНрдЯрдо рдЕреЕрдк рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ, рдкрд░рдВрддреБ `~/.omniroute` рдордзреАрд▓ **рддреБрдордЪрд╛ DB рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдиреНрд╕ рдЬрддрди рдХрд░рддреЗ**. | | `npm run uninstall:full` | рдЕреЕрдк рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ рдЖрдгрд┐ **рд╕рд░реНрд╡ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдиреНрд╕, рдХреАрдЬ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕реЗрд╕ рдХрд╛рдпрдорд╕реНрд╡рд░реВрдкреА рдорд┐рдЯрд╡рддреЗ**. | > рд╕рд░реНрд╡ рдкрджреНрдзрддреАрдВрд╕рд╛рдареА рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд┐рд╕реНрдерд╛рдкрди рд╕реВрдЪрдирд╛ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА [UNINSTALL.md](./UNINSTALL.md) рдкрд╣рд╛.