# Remote Mode (Oʻzbekcha) 🌐 **Languages:** 🇺🇸 [English](../../../../guides/REMOTE-MODE.md) · 🇪🇹 [am](../../../am/docs/guides/REMOTE-MODE.md) · 🇸🇦 [ar](../../../ar/docs/guides/REMOTE-MODE.md) · 🇦🇿 [az](../../../az/docs/guides/REMOTE-MODE.md) · 🇧🇬 [bg](../../../bg/docs/guides/REMOTE-MODE.md) · 🇧🇩 [bn](../../../bn/docs/guides/REMOTE-MODE.md) · 🇧🇦 [bs](../../../bs/docs/guides/REMOTE-MODE.md) · 🇨🇿 [cs](../../../cs/docs/guides/REMOTE-MODE.md) · 🇩🇰 [da](../../../da/docs/guides/REMOTE-MODE.md) · 🇩🇪 [de](../../../de/docs/guides/REMOTE-MODE.md) · 🇬🇷 [el](../../../el/docs/guides/REMOTE-MODE.md) · 🇪🇸 [es](../../../es/docs/guides/REMOTE-MODE.md) · 🇪🇪 [et](../../../et/docs/guides/REMOTE-MODE.md) · 🇮🇷 [fa](../../../fa/docs/guides/REMOTE-MODE.md) · 🇫🇮 [fi](../../../fi/docs/guides/REMOTE-MODE.md) · 🇫🇷 [fr](../../../fr/docs/guides/REMOTE-MODE.md) · 🇮🇪 [ga](../../../ga/docs/guides/REMOTE-MODE.md) · 🇮🇳 [gu](../../../gu/docs/guides/REMOTE-MODE.md) · 🇳🇬 [ha](../../../ha/docs/guides/REMOTE-MODE.md) · 🇮🇱 [he](../../../he/docs/guides/REMOTE-MODE.md) · 🇮🇳 [hi](../../../hi/docs/guides/REMOTE-MODE.md) · 🇭🇷 [hr](../../../hr/docs/guides/REMOTE-MODE.md) · 🇭🇺 [hu](../../../hu/docs/guides/REMOTE-MODE.md) · 🇦🇲 [hy](../../../hy/docs/guides/REMOTE-MODE.md) · 🇮🇩 [id](../../../id/docs/guides/REMOTE-MODE.md) · 🇳🇬 [ig](../../../ig/docs/guides/REMOTE-MODE.md) · 🇮🇹 [it](../../../it/docs/guides/REMOTE-MODE.md) · 🇯🇵 [ja](../../../ja/docs/guides/REMOTE-MODE.md) · 🇬🇪 [ka](../../../ka/docs/guides/REMOTE-MODE.md) · 🇰🇭 [km](../../../km/docs/guides/REMOTE-MODE.md) · 🇮🇳 [kn](../../../kn/docs/guides/REMOTE-MODE.md) · 🇰🇷 [ko](../../../ko/docs/guides/REMOTE-MODE.md) · 🇱🇹 [lt](../../../lt/docs/guides/REMOTE-MODE.md) · 🇱🇻 [lv](../../../lv/docs/guides/REMOTE-MODE.md) · 🇮🇳 [ml](../../../ml/docs/guides/REMOTE-MODE.md) · 🇮🇳 [mr](../../../mr/docs/guides/REMOTE-MODE.md) · 🇲🇾 [ms](../../../ms/docs/guides/REMOTE-MODE.md) · 🇲🇹 [mt](../../../mt/docs/guides/REMOTE-MODE.md) · 🇲🇲 [my](../../../my/docs/guides/REMOTE-MODE.md) · 🇳🇵 [ne](../../../ne/docs/guides/REMOTE-MODE.md) · 🇳🇱 [nl](../../../nl/docs/guides/REMOTE-MODE.md) · 🇳🇴 [no](../../../no/docs/guides/REMOTE-MODE.md) · 🇮🇳 [or](../../../or/docs/guides/REMOTE-MODE.md) · 🇮🇳 [pa](../../../pa/docs/guides/REMOTE-MODE.md) · 🇵🇭 [phi](../../../phi/docs/guides/REMOTE-MODE.md) · 🇵🇱 [pl](../../../pl/docs/guides/REMOTE-MODE.md) · 🇵🇹 [pt](../../../pt/docs/guides/REMOTE-MODE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/guides/REMOTE-MODE.md) · 🇷🇴 [ro](../../../ro/docs/guides/REMOTE-MODE.md) · 🇷🇺 [ru](../../../ru/docs/guides/REMOTE-MODE.md) · 🇱🇰 [si](../../../si/docs/guides/REMOTE-MODE.md) · 🇸🇰 [sk](../../../sk/docs/guides/REMOTE-MODE.md) · 🇸🇮 [sl](../../../sl/docs/guides/REMOTE-MODE.md) · 🇷🇸 [sr](../../../sr/docs/guides/REMOTE-MODE.md) · 🇸🇪 [sv](../../../sv/docs/guides/REMOTE-MODE.md) · 🇰🇪 [sw](../../../sw/docs/guides/REMOTE-MODE.md) · 🇮🇳 [ta](../../../ta/docs/guides/REMOTE-MODE.md) · 🇮🇳 [te](../../../te/docs/guides/REMOTE-MODE.md) · 🇹🇭 [th](../../../th/docs/guides/REMOTE-MODE.md) · 🇹🇷 [tr](../../../tr/docs/guides/REMOTE-MODE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/guides/REMOTE-MODE.md) · 🇵🇰 [ur](../../../ur/docs/guides/REMOTE-MODE.md) · 🇻🇳 [vi](../../../vi/docs/guides/REMOTE-MODE.md) · 🇳🇬 [yo](../../../yo/docs/guides/REMOTE-MODE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/guides/REMOTE-MODE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/guides/REMOTE-MODE.md) --- OmniRoute’ning oʻzi boshqa joyda (VPS, uy serveri yoki Tailnet’ingizdagi boshqa qurilmada) ishlayotgan paytda `omniroute` CLI’ni noutbukingizda ishga tushiring. Siz `omniroute connect` yordamida bir marta tizimga kirasiz va shundan keyin **har bir** CLI buyrugʻi oʻsha masofaviy serverga yoʻnaltiriladi — buyruqlar ham, chiqish natijalari ham bir xil, faqat masofaviy serverda bajariladi. Oʻrnatish uchun ikkinchi vosita yoʻq: masofaviy rejim — bu odatiy `omniroute` CLI va qamrovi belgilangan **kirish tokenlari**. ```bash npm install -g omniroute # odatiy CLI omniroute connect 192.168.0.15 # tizimga kirish (parol → qamrovli token) omniroute models list # ← endi MASOFAVIY server modellarini koʻrsatadi omniroute configure codex # ← masofaviy katalogdan mahalliy Codex profilini yaratadi ``` --- ## Bu qanday ishlaydi ``` noutbukingiz masofaviy OmniRoute (VPS) ┌────────────────────┐ ┌───────────────────────────────┐ │ omniroute CLI │ POST /api/cli/connect (parol → token) │ │ context: vps │ ───────────────► │ qamrovli kirish tokenini │ │ baseUrl, token │ Authorization: Bearer oma_live_… │ │ │ ───────────────► │ yaratadi; har bir boshqaruv │ │ konfiguratsiyalarni│ ◄─────────────── │ yoʻnalishi token qamroviga │ │ MAHALLIY yozadi │ │ muvofiq tekshiriladi │ └────────────────────┘ └───────────────────────────────┘ ``` - **Kontekstlar** har biri bittadan serverni saqlaydi (`~/.omniroute/config.json`, `chmod 600`). `omniroute contexts use ` faol serverni almashtiradi; `default` mahalliy serverdir. - **Kirish tokenlari** (`oma_live_…`) boshqaruv buyruqlariga ruxsat beradi. Ular inference API kalitlaridan (`sk-…`, `/v1/chat/completions` uchun ishlatiladi) farq qiladi. - Tokenning faqat SHA-256 xeshi server tomonida saqlanadi. Ochiq matn **faqat bir marta**, yaratilish vaqtida koʻrsatiladi. --- ## Ulanish ### Boshqaruv paroli bilan (dastlabki sozlash) ```bash omniroute connect 192.168.0.15 # http://192.168.0.15:20128 uchun boshqaruv paroli: ******** # ✔ http://192.168.0.15:20128 manziliga ulandi — kontekst: '192.168.0.15' (qamrov: admin) ``` Parol orqali ulanish jarayoni standart holatda **admin** tokenini yaratadi (parol sizda ekan, demak allaqachon toʻliq boshqaruvga egasiz). Qamrovni `--scope` bilan kamaytiring: ```bash omniroute connect 192.168.0.15 --scope write ``` Parametrlar: `--port

` (host’da port koʻrsatilmagan boʻlsa), `--name ` (kontekst nomi), `--scope read|write|admin`. Toʻliq URL oʻzgartirilmasdan ishlatiladi: `omniroute connect https://omni.example.com`. ### Oldindan yaratilgan token bilan Boshqaruv panelida (yoki `omniroute tokens create` yordamida) qamrovli token yarating va uni kiriting — parol talab qilinmaydi: ```bash omniroute connect 192.168.0.15 --key oma_live_xxxxxxxx ``` CLI uni `GET /api/cli/whoami` orqali tekshiradi va faol kontekst sifatida saqlaydi. --- ## Qamrovlar Ierarxik tuzilgan uchta daraja (`admin ⊃ write ⊃ read`): | Qamrov | Bajarishi mumkin | | ------- | --------------------------------------------------------------------------------------- | | `read` | roʻyxat/koʻrish — `models list`, `providers status`, `logs`, `usage`, `cost` | | `write` | read **+** sozlash/qoʻllash — `setup-codex`, `keys add`, `config set`, kombinatsiyalar | | `admin` | write **+** boshqarish — `tokens` CRUD, provayderlar qoʻshish, xizmatlar, policy, oauth | Server har bir yoʻnalish talab qiladigan qamrovni HTTP metodidan (`GET`→read, oʻzgartirishlar→write) hamda maxfiy boʻlimlar uchun admin ruxsat roʻyxatidan (`/api/cli/tokens`, `/api/providers` oʻzgartirishlari, `/api/oauth`, `/api/services`, …) kelib chiqib aniqlaydi. Qamrovi yetarli boʻlmagan token aniq xabar bilan `403` javobini oladi. > Jarayonlarni ishga tushiradigan yoʻnalishlar (`/api/services/*`, `/api/mcp/*`, …) > **faqat loopback orqali** ishlaydi — qamrovidan qat’i nazar, masofaviy token ularga hech qachon kira olmaydi. --- ## Antigravity’ni masofaviy o‘rnatmaga ulash Antigravity Google’ning firstparty/nativeapp rozilik ekranidan foydalanadi. Google avtorizatsiya kodini faqat **qayta yo‘naltiruvchi loopback manzil** (`http://127.0.0.1:/callback`) **kirishni tasdiqlayotgan brauzerdan ochiq bo‘lganda** beradi. Masofaviy VPS o‘rnatmasida bu loopback sizning kompyuteringizda emas, serverda joylashadi, shu sababli rozilik ekrani **abadiy qotib qoladi va hech qachon kod bermaydi** — odatiy «callback URL manzilini joylashtirish» muqobil usulida joylashtirish uchun hech narsa bo‘lmaydi. (Bu Google tomonidagi cheklov: xuddi shunday qotib qolish holati faqat OmniRoute’da emas, balki o‘rnatilgan Antigravity ish stoli mijozidan foydalanadigan har qanday proksida yuz beradi.) Boshqaruv paneli buni muammoga duch kelishingizdan oldin aniqlaydi: localhost bo‘lmagan manzildan **Providers → Antigravity → Connect** sahifasini ochsangiz, «callback URL manzilini nusxalash» haqidagi umumiy bildirishnoma quyidagi ikkita yechim bilan almashtiriladi va ularning har birida host hamda portingiz oldindan to‘ldirilgan bo‘ladi. (LAN manzili ham shunday hisoblanadi — ushbu callback nuqtayi nazaridan `192.168.x.x` localhost emas.) Antigravity’ni masofaviy OmniRoute’ga ulashning qo‘llab-quvvatlanadigan ikkita usuli mavjud. ### A variant — mahalliy kirish yordamchisi (tavsiya etiladi) OAuth jarayonini `127.0.0.1` ochiq bo‘lgan **o‘z kompyuteringizda** ishga tushiring. Yordamchi Google bilan bevosita aloqa qiladi, shu sababli rozilik jarayoni boshqaruv panelidagi versiya yakunlay olmaydigan joyda muvaffaqiyatli tugaydi. **Agar allaqachon ulangan bo‘lsangiz** (`omniroute connect `), hech narsani nusxalashingiz shart emas — yordamchi hisob ma’lumotini o‘sha o‘rnatmaga o‘zi yetkazadi: ```bash # MAHALLIY kompyuteringizda (Node.js va brauzer kerak): omniroute connect 192.168.0.15 # bir marta — administrator doirasidagi kontekst tokenini yaratadi npx omniroute login antigravity # ↳ Google rozilik sahifasini ochadi, callback’ni mahalliy loopback portida qabul qiladi, # uni almashtiradi va hisob ma’lumotini faol kontekstga POST orqali yuboradi: # # Antigravity http://192.168.0.15:20128 manzilida ulandi (ulanish abc123). # Hech narsani joylashtirish shart emas — bu terminalni yopishingiz mumkin. ``` Faol kontekst boshqa kompyuterga yo‘naltirilganida yuborish avtomatik ravishda amalga oshadi. Uni istalgan yo‘nalishda `--push` / `--no-push` yordamida majburan belgilang yoki `--context ` orqali muayyan kontekstni ko‘rsating. **Agar kompyuteringiz VPS’ga ulana olmasa** (fayervol bilan to‘silgan, SSH yo‘q yoki tarmoqdan uzilgan ish joyi), yordamchi baribir ishlaydi — unga faqat Google _kerak_. `--no-push` parametridan foydalaning yoki yuborish muvaffaqiyatsiz tugashiga yo‘l qo‘ying: u siz yakunlagan avtorizatsiyani bekor qilish o‘rniga blob’ni chiqarishga qaytadi. ```bash npx omniroute login antigravity --no-push # omniroute-cred-v1.eyJ2IjoxLCJ... ``` Keyin **masofaviy** boshqaruv panelida **Providers → Antigravity → Connect** bo‘limiga o‘ting va `omniroute-cred-v1.…` blob’ini **Step 2** maydoniga joylashtiring (u callback URL manzilini ham, hisob ma’lumotlari blob’ini ham qabul qiladi). OmniRoute uni dekodlaydi, Cloud Code dastlabki sozlash jarayonini server tomonida bajaradi va ulanishni saqlab qoladi. > Blob yangilash tokenini o‘z ichiga oladi — unga parol kabi munosabatda bo‘ling. > Yuborish usulida u kontekstingizning autentifikatsiyalangan ulanishi orqali bir > marta yuboriladi; joylashtirish usulida esa boshqaruv panelingiz ulanishi orqali > yuboriladi. Har ikki holatda ham u saqlash vaqtida shifrlanadi va muvaffaqiyatli > yuborilganda terminalingizda hech qachon ko‘rsatilmaydi. Bayroqlar: `--no-browser` (avtomatik ochish o‘rniga URL manzilini chiqarish), `--port ` (loopback portini belgilash), `--timeout `, `--push` / `--no-push` (avtomatik yetkazib berish sozlamasini bekor qilish), `--context ` (muayyan kontekstni tanlash). ### B variant — SSH local-forward tunneli Agar VPS’ga SSH orqali kirish huquqingiz bo‘lsa, loopback callback tunnel orqali serverga qaytib yo‘naltirilishi uchun boshqaruv paneli portini uzating: ```bash # MAHALLIY kompyuteringizda: ssh -L 20128:127.0.0.1:20128 user@your-vps # keyin MAHALLIY brauzeringizda http://localhost:20128 manzilini oching va Antigravity’ni # odatdagidek ulang — endi 127.0.0.1:20128/callback qayta yo‘naltirishi VPS’ga SSH orqali yetib boradi. ``` Boshqaruv paneliga `localhost:20128` orqali kirganingiz sababli Google rozilik jarayoni yakunlanadi va callback xuddi shu tunnel orqali serverga yetkaziladi — blob kerak emas. Ulanish faol holatda ko‘rsatilguncha tunnelni ochiq saqlang. Quyidagi qat’iy loopback’li provayderlardan farqli ravishda, bu yerda **bitta port uzatishning o‘zi yetarli**: Antigravity callback boshqaruv panelining o‘z portidan o‘tadi, shuning uchun provayderga xos ikkinchi portni tunnel orqali uzatish shart emas. > To‘liq brauzersiz muqobil usul sifatida (yordamchisiz va tunnelsiz) **o‘zingizning** > Google OAuth veb hisob ma’lumotlaringizni hamda ommaviy asosiy URL manzilini > sozlashingiz mumkin; provayderning OAuth muhit o‘zgaruvchilariga qarang. > Yuqoridagi ikki variant Google’da hech qanday qo‘shimcha sozlashni talab qilmaydi. --- ## Codex / Grok’ni masofaviy o‘rnatishga ulash (qat’iy loopback provayderlari) Codex, xAI (`xai-oauth`) va Grok CLI (`grok-cli`) o‘zlarining yuqori darajadagi OAuth ilovasida **qat’iy** loopback `redirect_uri` manzilini ro‘yxatdan o‘tkazadi. OmniRoute uni o‘zgartira olmaydi — provayder brauzerni har doim bir xil, kodga qat’iy kiritilgan manzilga qaytaradi: | Provayder | Provayder yo‘naltiradigan qat’iy callback manzili | | ----------- | ------------------------------------------------- | | `codex` | `http://localhost:1455/auth/callback` | | `xai-oauth` | `http://127.0.0.1:56121/callback` | | `grok-cli` | `http://127.0.0.1:56122/callback` | Bu yerda `localhost` **brauzer ishlayotgan kompyuter**ni anglatadi, OmniRoute’ning PKCE callback serveri esa **serverning** loopback interfeysida tinglaydi. Boshqaruv panelini `http://192.168.0.15:20128` kabi LAN manzilida ochsangiz, ular hech qachon uchrashmaydi: avtorizatsiya kodi o‘z noutbukingizdagi `localhost:1455` manziliga yetkaziladi, u yerda esa hech narsa tinglamaydi va provayder hech qanday xatoni ko‘rsatmasdan tizimga kirishni muvaffaqiyatsiz yakunlaydi. Boshqaruv paneli popup oynasini ochishdan oldin buni aniqlaydi va tizimga kirishning indamay muvaffaqiyatsiz tugashiga yo‘l qo‘yish o‘rniga tunnel buyrug‘ini ko‘rsatadi (#8046). ### Yechim — **ikkala** portni ham yo‘naltiring ```bash # BRAUZER ishlayotgan kompyuterda: ssh -L 20128:127.0.0.1:20128 -L 1455:127.0.0.1:1455 @192.168.0.15 # keyin http://localhost:20128 manzilini oching va Codex’ni shu yerdan ulang ``` Ikkita yo‘naltirish talab qilinadi va faqat bittasini yo‘naltirish hamon muvaffaqiyatsiz tugaydi: - **`20128`** (boshqaruv paneli porti) origin’ni haqiqiy localhost qiladi, aynan shu OmniRoute’ning PKCE callback serverini umuman ishga tushirishiga sabab bo‘ladi — LAN origin bu tarmoqqa hech qachon yetib bormaydi. - **`1455`** (provayderning qat’iy callback porti) — brauzer qaytarib yuboriladigan joy; u tunnel orqali serverning loopback interfeysigacha yetib borishi kerak. xAI yoki Grok CLI’ni ulashda `1455` o‘rniga `56121`/`56122`ni, `20128` o‘rniga esa boshqaruv panelingizning haqiqiy portini ishlating. Ulanish faol deb ko‘rsatilguncha tunnelni ochiq saqlang. > **SSH ruxsati yo‘qmi?** Codex va Grok CLI joylangan tokenni ham qabul qiladi — ulash > dialogidagi **API kalitini joylash** / **auth.json faylini import qilish** yorlig‘i. Bu yo‘lda > loopback callback mavjud emas, shuning uchun u istalgan origin’dan ishlaydi. Bundan tashqari, > Codex oddiy access token yoki `~/.codex/auth.json` sessiya blobini ham qabul qiladi. --- ## Tokenlarni boshqarish ```bash omniroute tokens create --name "laptop" --scope write [--expires 30] # ↳ sirni FAQAT BIR MARTA chop etadi — hozir nusxalang omniroute tokens list # maskalangan: identifikator, nom, doira, prefiks, holat, muddat omniroute tokens revoke # darhol bekor qiladi omniroute tokens scopes # uchta doirani tushuntiradi ``` `tokens` buyruqlari **admin** hisob ma’lumotini talab qiladi. Tokenlarni boshqaruv panelida **Sozlamalar → Kirish tokenlari** bo‘limida ham boshqarishingiz mumkin (yaratish, bekor qilish, bir martalik nusxalash). Token hech qachon yaratuvchisi egalagandan ko‘proq imtiyoz bilan chiqarilmaydi. `admin` tokenni faqat operator yaratishi mumkin: boshqaruv paneli seansi, serverning o‘zidagi mahalliy CLI yoki `omniroute connect` parol bilan. Mashina hisob ma’lumotlari (`admin` kirish tokeni yoki `manage`/`admin` doirali API kaliti) faqat `write` va `read` tokenlarini chiqarishi mumkin; ulardan `--scope admin` so‘ralsa, `403` qaytadi. Kirishni o‘chirish tokenlarni chiqarishni ochmaydi: istalgan doiradagi kirish tokeni doimo autentifikatsiyalangan marshrutlar qabul qiladigan hisob ma’lumotidir, shuning uchun anonim chaqiruv istalgan doirada `401` oladi. --- ## Masofaviy katalogdan kodlash CLI’sini sozlash `omniroute configure` **faol serverning** jonli model katalogini o‘qiydi va **sizning** kompyuteringizda konfiguratsiya yozadi. ```bash omniroute configure codex # Provayderlar: glm, kmc, ollamacloud, opencode-go, … # Provayder: glm # Model identifikatori: glm/glm-5.2 # ✔ Yozildi: ~/.codex/glm52.config.toml # Foydalanish: codex --profile glm52 # interaktiv bo‘lmagan rejim omniroute configure codex --provider glm --model glm/glm-5.2 --name glm52 # tez-tez ishlatiladigan modelni interaktiv tanlovchining yuqorisida saqlang omniroute configure codex --provider glm --model glm/glm-5.2 --favorite --yes ``` Tanlovchi mahalliy `model-preferences.json` faylida faqat model identifikatorlarini (hech qachon URL yoki hisob ma’lumotlarini emas) kontekst va CLI maqsadi bo‘yicha ajratilgan holda saqlaydi. Sevimlilar so‘nggi tanlovlardan oldin ko‘rsatiladi; tanlangan modelni o‘sha kontekst/maqsad ro‘yxatidan olib tashlash uchun `--unfavorite` dan foydalaning. Yozilgan profil inference kalitiga muhit o‘zgaruvchisi (`OMNIROUTE_API_KEY`) orqali murojaat qiladi — maxfiy kalit hech qachon diskka yozilmaydi. Bir martalik asosiy Codex sozlamasi (`[model_providers.omniroute]` bloki) uchun qarang: [CODEX-CLI-CONFIGURATION.md](./CODEX-CLI-CONFIGURATION.md). ### CLI’ni masofaviy server bilan ishga tushirish (konfiguratsiya yozilmaydi) `omniroute run ` ham faol kontekstni hisobga oladi: masofaviy asosiy URL va kontekst hisob ma’lumoti faqat ishga tushirilgan jarayonga kiritiladi. ```bash omniroute connect 192.168.0.15 omniroute run claude --model openai/gpt-5.4 # Claude Code → masofaviy omniroute run gemini --model glm/glm-5.2 -- --skip-trust -p "hello" omniroute run opencode --model glm/glm-5.2 -- run "reply OK" # Aniq nima ishga tushirilishini oldindan ko‘ring (faqat muhit o‘zgaruvchisi NOMLARI, hech qachon qiymatlari): omniroute run codex --dry-run --json ``` Maqsadlar: `claude`, `codex`, `aider`, `goose`, `opencode`, `qwen`, `gemini` (yagona manba: `bin/cli/cli-manifest.mjs`). Qwen va Gemini chiqishda o‘chiriladigan vaqtinchalik izolyatsiyalangan bosh katalog bilan ishlaydi, shuning uchun ishga tushirish shaxsiy vosita konfiguratsiyangizga hech qachon tegmaydi va unga oqib kirmaydi. ### CLI bo‘yicha sozlash buyruqlari Har bir qo‘llab-quvvatlanadigan CLI masofaviy serverni taniydigan sozlash buyrug‘iga ega (barchasi faol kontekstga yoki `--remote --api-key ` ga bo‘ysunadi): | CLI | Buyruq | Nimani yozadi | | ----------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Codex | `omniroute setup-codex` | `~/.codex/.config.toml` profillari (har bir model uchun) | | Claude Code | `omniroute setup-claude` | `~/.claude/profiles//settings.json` (har bir model uchun) | | OpenCode | `omniroute setup-opencode` | `~/.config/opencode/opencode.json` — barcha katalog modellari bilan `omniroute` openai-mos provayderi (`opencode -m omniroute/` bilan ishga tushiring) | | Cline | `omniroute setup-cline` | `~/.cline/data/{globalState,secrets}.json` (CLI rejimi) + joylashtirish uchun VS Code kengaytma sozlamalarini chop etadi (OpenAI-mos, Asosiy URL **`/v1` siz**) | | Kilo Code | `omniroute setup-kilo` | `~/.local/share/kilo/auth.json` (CLI) + VS Code `kilocode.*` sozlamalari — OpenAI-mos, Asosiy URL **`/v1` bilan** | | Continue | `omniroute setup-continue` | `~/.continue/config.yaml` (VS Code/JetBrains + `cn` CLI) — `provider: openai`, `apiBase` **`/v1` bilan**, kalit `${{ secrets.OMNIROUTE_API_KEY }}` orqali | | Cursor | `omniroute setup-cursor` | ilova ichidagi qadamlarni chop etadi (Sozlamalar → Modellar → OpenAI Base URL ni bekor qilish **`/v1` bilan** + kalit + model). Cursor konfiguratsiyasi shaffof bo‘lmagan SQLite — faqat chat paneli | | Roo Code | `omniroute setup-roo` | Roo import JSON faylini yozadi (`~/.omniroute/roo-settings.json`), `roo-cline.autoImportSettingsPath` ni o‘rnatadi va UI qadamlarini chop etadi (OpenAI-mos, Asosiy URL **`/v1` bilan**) | | Crush | `omniroute setup-crush` | `~/.config/crush/crush.json` — `openai-compat` provayderi, `base_url` **`/v1` bilan**, kalit `$OMNIROUTE_API_KEY` orqali | | Zed | `omniroute setup-zed` | `~/.config/zed/settings.json` — `language_models.openai_compatible.omniroute`, `api_url` **`/v1` bilan**, kalitni Zed `$OMNIROUTE_API_KEY` dan o‘qiydi (hech qachon yozilmaydi) | | Goose | `omniroute setup-goose` | `~/.config/goose/config.yaml` (`GOOSE_PROVIDER=openai` + `OPENAI_HOST` **`/v1` siz** + `GOOSE_MODEL`) + muhit retsepti | | Aider | `omniroute setup-aider` | `~/.aider.conf.yml` (`openai-api-base` **`/v1` siz** + `model: openai/`) + muhit retsepti (`aider --message --yes`) | | Qwen Code | `omniroute setup-qwen` | `~/.qwen/settings.json` V4 `modelProviders.openai` yozuvi + `~/.qwen/.env` da `OMNIROUTE_API_KEY` | ```bash # OpenCode (openai-mos provayder, barcha katalog modellari, masofaviy VPS) omniroute setup-opencode --remote http://192.168.0.15:20128 --api-key oma_live_xxx omniroute setup-opencode --only glm,kimi # faqat mos modellarni saqlaydi opencode -m omniroute/glm/glm-5.2 "..." # avval OMNIROUTE_API_KEY ni eksport qiling ``` > OpenCode’da boyroq **plagin** integratsiyasi ham bor: `omniroute setup opencode` (endi `--remote` orqali masofaviy serverni taniydi) `@omniroute/opencode-plugin` paketini o‘rnatadi. > > `setup-opencode` yengil, openai-mos muqobil variant hisoblanadi. API kaliti `{env:OMNIROUTE_API_KEY}` orqali havola qilinadi — hech qachon diskka yozilmaydi. > > OpenCode v2 da buning o‘rniga `@omniroute/opencode-plugin-v2` dan foydalaning: bir xil katalog, boshqacha yuklovchi shartnomasi. Integratsiya ulanganda kalitni OpenCode’ning o‘z hisob ma’lumotlari omboridan o‘qiydi, shuning uchun masofaviy shlyuzga `opencode.json` da umuman kalit kerak emas. --- ## Kontekstlarni boshqarish (serverlar orasida almashish) Bir **kontekst** saqlangan server (baseUrl + credential + scope) hisoblanadi. `omniroute connect` uni yaratadi va faollashtiradi; shundan so'ng har bir buyruq unga yo'naltiriladi. Ularni `omniroute contexts` yordamida boshqaring va ular orasida almashing: ```bash omniroute contexts list # barcha kontekstlar; faol bo'lgani ● bilan belgilangan omniroute contexts current # faol server, autentifikatsiya holati, doirasi ``` ```text | Name | Base URL | Auth | Scope | Description ● | vps | http://100.67.86.91:20128 | token | admin | Remote OmniRoute (…) | default | http://localhost:20128 | ✗ | | ``` **Serverlarni almashtirish** — har bir keyingi buyruq faol kontekstga amal qiladi: ```bash omniroute contexts use vps # → endi barcha buyruqlar masofaviy VPSga yuboriladi omniroute tokens list # (VPSga qarshi ishlaydi) omniroute contexts use default # → localhostga qaytish omniroute tokens list # (mahalliy serverga qarshi ishlaydi) ``` **Kontekstni qo'lda qo'shish** (`connect` o'rniga), tekshirish yoki qayta nomlash: ```bash omniroute contexts add staging --url https://staging.example.com:20128 \ --access-token oma_live_xxxx --scope write --description "staging qutisi" omniroute contexts show staging # bir kontekst uchun to'liq ma'lumotlar omniroute contexts rename staging stg ``` **Kontekstni o'chirish** — tasdiqlashni so'raydi; uni o'tkazib yuborish uchun `--yes` ni kiriting (skriptlar / interaktiv bo'lmagan qobiqlar uchun talab qilinadi, aks holda ular xavfsiz tarzda rad etiladi): ```bash omniroute contexts remove stg --yes ``` > `default` (localhost) o'chirilmaydi. Faol kontekstni o'chirish `default` ga qaytadi. Maslahat: kontekstni o'chirish faqat **mahalliy** saqlangan hisobga olish ma'lumotlarini o'chiradi — kirishni butunlay to'xtatish uchun serverdagi tokenni `omniroute tokens revoke ` yordamida bekor qiling. **Kontekstlarni eksport / import qilish** (masalan, ularni mashinalar orasida ko'chirish uchun). Eksportlar sukut bo'yicha hisobga olish ma'lumotlarini, shu jumladan fayl zaxirasi tomonidan saqlangan hisobga olish ma'lumotlarini ham o'tkazib yuboradi. Ko'chma, hisobga olish ma'lumotlarini o'z ichiga olgan zaxira nusxasi kerak bo'lganda `--include-secrets` dan aniq foydalaning: ```bash omniroute contexts export --out contexts.json # tahrirlangan; sukut bo'yicha manzil: stdout omniroute contexts export --include-secrets --out private-contexts.json omniroute contexts import contexts.json # ustiga yozish; mavjudlarini saqlash uchun --merge omniroute contexts migrate --yes # eski oddiy matnli tokenlarni kalit zanjiriga ko'chirish ``` `--include-secrets` eksport qilishdan oldin kalit zanjiri havolalarini hal qiladi va agar biron bir havolali hisobga olish ma'lumotlari o'qib bo'lmasa, xatolik yuz beradi. `--no-secrets` har doim ustunlik qiladi. Eksport fayllari `0600` rejimida atomik tarzda yoziladi. Aniqlangan sirni o'z ichiga olgan eksportni maxfiy material sifatida qabul qiling. Foydalanish mumkin bo'lgan OS kalit zanjiri bo'lmagan boshsiz tizimlarda, CLI `config.json` ga `0600` rejimida qaytadi va bir martalik ogohlantirishni chop etadi; sukut bo'yicha eksport bu rejimda tahrirlangan holda qoladi. --- ## Tezkor boshidan oxirigacha tekshiruv Masofaviy sozlamani boshidan tekshirish uchun nusxalab qoʻyish mumkin boʻlgan toʻliq jarayon — ulanish, muayyan qamrovli token yaratish, buyruqni yoʻnaltirish, ortga qaytish va sozlamalarni olib tashlash. `192.168.0.15` oʻrniga serveringiz hosti/IP manzilini (Tailscale, LAN yoki ommaviy `https://…` URL) kiriting. ```bash # 1. Ulanish (parol → admin tokeni, faol holatga keladigan kontekst sifatida saqlanadi) omniroute connect 192.168.0.15 # yoki: --key oma_live_xxxx (parolsiz) omniroute contexts current # masofaviy server + qamrovni koʻrsatadi # 2. Undan foydalanish — endi boshqaruv buyruqlari masofaviy serverga nisbatan bajariladi omniroute tokens create --name laptop --scope read # qamrovi torroq token yaratish omniroute tokens list # masofaviy serverdan niqoblangan roʻyxat # 3. Oldinga va ortga almashish omniroute contexts use default # → mahalliy omniroute contexts use 192-168-0-15 # → yana masofaviy (`contexts list`dagi nom) # 4. Olib tashlash. ESLATMA: `contexts remove` faqat MAHALLIY hisob maʼlumotlarini oʻchiradi — # u serverdagi tokenni bekor QILMAYDI. Kirish imkoniyatini amalda bekor qilmoqchi boʻlsangiz, # avval uni server tomonida bekor qiling. omniroute tokens revoke # serverdagi kirish imkoniyatini bekor qiladi omniroute contexts remove 192-168-0-15 --yes # mahalliy kontekstni olib tashlaydi (faol boʻlsa ham → defaultga qaytadi), soʻrov chiqarmaydi ``` > `--yes` parametri `contexts remove` buyrugʻini nointeraktiv qiladi (skriptlar/CI uchun talab qilinadi; usiz > nointeraktiv qobiq qotib qolish oʻrniga xavfsiz tarzda rad etadi). **Faol** kontekst olib tashlansa, > avtomatik ravishda `default` kontekstiga qaytiladi. --- ## Xavfsizlik bo‘yicha eslatmalar - Tokenning ochiq matni bir marta ko‘rsatiladi; faqat SHA-256 xeshi saqlanadi (API kalitlari kabi). - `omniroute connect` tizimga kirishda takroriy parol urinishlariga qarshi bloklash va audit jurnalini yuritish mexanizmlaridan foydalanadi. - Uzatish uchun HTTPS yoki Tailnet’dan foydalanish tavsiya etiladi; faqat xost ko‘rsatilsa, LAN/Tailscale’da foydalanishni qulaylashtirish uchun birlamchi qiymat sifatida `http://` qo‘llanadi — TLS uchun to‘liq `https://…` URL manzilini kiriting. - Afzal ko‘riladigan lokal kontekst fayli `~/.omniroute/config.json` (`chmod 600`) bo‘lib, u faqat `credentialRef` qiymatini o‘z ichiga oladi; tokenning o‘zi OT kalitlar omborida (`keytar`) saqlanadi va hech qachon jurnallarda chop etilmaydi. Ishlaydigan mahalliy kalitlar ombori mavjud bo‘lmagan interfeyssiz o‘rnatishlar aniq zaxira varianti sifatida o‘sha `0600` faylidan foydalanadi va bir marta ogohlantirish chiqaradi. Kalitlar ombori backend’i o‘rnatilgandan keyin `omniroute contexts migrate --yes` buyrug‘idan foydalaning. --- ## API endpointlari (ma’lumotnoma) | Usul | Yo‘nalish | Autentifikatsiya | Ruxsat doirasi | | ------ | --------------------- | ---------------- | ----------------------------------- | | POST | `/api/cli/connect` | boshqaruv paroli | — (ochiq, parol bilan himoyalangan) | | GET | `/api/cli/whoami` | kirish tokeni | o‘qish | | GET | `/api/cli/tokens` | kirish tokeni | administrator | | POST | `/api/cli/tokens` | kirish tokeni | administrator | | DELETE | `/api/cli/tokens/:id` | kirish tokeni | administrator | To‘liq sxemalar uchun [openapi.yaml](../openapi.yaml) fayliga qarang.