# ЁЯУЦ 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) ┬╖ ЁЯЗоЁЯЗ│ [mr](../../../mr/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) ┬╖ ЁЯЗ│ЁЯЗ▒ [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 рдЖрдзрд╛рд░ URL: http://localhost:20128/v1 API рдХреБрдЮреНрдЬреА: [Endpoint рдкреГрд╖реНрдардмрд╛рдЯ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН] рдореЛрдбреЗрд▓: if/qwen3.8-max-preview (рд╡рд╛ рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рджрд╛рдпрдХ/рдореЛрдбреЗрд▓ рдкреНрд░рд┐рдлрд┐рдХреНрд╕) ``` рдпрджрд┐ рддрдкрд╛рдИрдВрдХреЛ рд╕рдореНрдкрд╛рджрдХрд▓реЗ `Authorization: Bearer ...` рдкрдард╛рдЙрди рд╕рдХреНрджреИрди рднрдиреЗ, рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ рдЯреЛрдХрдирдпреБрдХреНрдд рдЕрдиреБрдХреВрд▓рддрд╛ рдЖрдзрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН: ```txt рдЖрдзрд╛рд░ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/models рдЪреНрдпрд╛рдЯ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/chat/completions Ollama рдЯреНрдпрд╛рдЧ 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-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. MCP рд╕рд░реНрднрд░ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН omniroute --mcp # 2. рдЖрдлреНрдиреЛ MCP рдХреНрд▓рд╛рдЗрдиреНрдЯрдмрд╛рдЯ, рдпреА рдХрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН: omniroute_get_health # рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реНрдерд┐рддрд┐ рдлрд░реНрдХрд╛рдЙрдиреБрдкрд░реНрдЫ omniroute_list_combos # рд╕рдХреНрд░рд┐рдп рдХрдореНрдмреЛрд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдиреБрдкрд░реНрдЫ # 3. рд╡рд╛ рдкреВрд░реНрдг E2E рд╕реБрдЗрдЯ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН: npm run test:protocols:e2e ``` #### MCP рдХреНрд▓рд╛рдЗрдиреНрдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди **Claude Code:** ```bash claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/stream ``` **Cursor / Cline:** рдЖрдлреНрдиреЛ MCP рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдердкреНрдиреБрд╣реЛрд╕реН: ```json { "mcpServers": { "omniroute": { "command": "omniroute", "args": ["--mcp"], "env": {} } } } ``` **рдкреВрд░реНрдг MCP рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг:** [MCP рд╕рд░реНрднрд░ README](../../open-sse/mcp-server/README.md) тАФ 110 рдЙрдкрдХрд░рдгрд╣рд░реВ, IDE рдХрдиреНрдлрд┐рдЧрд╣рд░реВ, Python/TS/Go рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВред ### A2A рд╕реЗрдЯрдЕрдк (рдПрдЬреЗрдиреНрдЯ-рдЯреБ-рдПрдЬреЗрдиреНрдЯ рдкреНрд░реЛрдЯреЛрдХрд▓) Agent Card рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН: ```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 рдерд┐рдЩреНрдХрд┐рдЩ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдБрджрд╛ рдорд╛рддреНрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╕рдирдХреЛ "рд░рд┐рдбреНрдпрд╛рдХреНрдЯ-рдерд┐рдЩреНрдХрд┐рдЩ рдмрд┐рдЯрд╛ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН" рдЯрдЧрд▓ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реНред ### рдЙрдиреНрдирдд рдЯрд╛рдЗрдордЖрдЙрдЯ рдУрднрд░рд░рд╛рдЗрдбрд╣рд░реВ | рднреЗрд░рд┐рдПрдмрд▓ | рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд | рдЙрджреНрджреЗрд╢реНрдп | | ---------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------------- | | `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 рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд┐рдк-рдЕрд▓рд╛рдЗрдн рд╕рдХреЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `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 рдмреНрд░рд┐рдЬ рд╕рд░реНрднрд░рдХреЛ рдХрд┐рдк-рдЕрд▓рд╛рдЗрдн рдЯрд╛рдЗрдордЖрдЙрдЯ | | `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 рд░ Dashboard рд▓рд╛рдИ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН: ```bash PORT=20128 DASHBOARD_PORT=20129 omniroute # API: http://localhost:20128/v1 # Dashboard: http://localhost:20129 ``` --- ## Void Linux (`xbps-src`) рдЯреЗрдореНрдкреНрд▓реЗрдЯ Void Linux рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ `xbps-src` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдиреЗрдЯрд┐рдн рдкреНрдпрд╛рдХреЗрдЬ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпреЛ рдмреНрд▓рдХрд▓рд╛рдИ `srcpkgs/omniroute/template` рдХреЛ рд░реВрдкрдорд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН: ```bash # '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" # рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓рд┐рдЬрдХрд╛ рд▓рд╛рдЧрд┐ рдпрд╕рд░реА рдЪреЗрдХрд╕рдо рдкреБрдирдГ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реН: # 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) рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред