# ๐Ÿ“– 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) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [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) ยท ๐Ÿ‡ณ๐Ÿ‡ต [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 เชฎเชพเช‚ Quick Start](../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 ``` เชเชจเซเชตเชพเชฏเชฐเชฎเซ‡เชจเซเชŸ เชตเซ‡เชฐเชฟเชเชฌเชฒเซเชธ (`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-เชธเซเชธเช‚เช—เชค SDKs เชธเชพเชฅเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. #### `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. 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 เชฅเชฟเช‚เช•เชฟเช‚เช— เชธเซเชŸเซเชฐเซ€เชฎเซเชธเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชœ เชชเซเชฐเชคเชฟ-เช•เชจเซ‡เช•เซเชถเชจ "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 เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ เช•เซ€เชช-เช…เชฒเชพเช‡เชต เชธเซ‹เช•เซ‡เชŸ เชŸเชพเช‡เชฎเช†เช‰เชŸ | | `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) เชœเซเช“.