From d90f9ea587e6d6222b6cd42f3605f89049e0aedf Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sat, 25 Apr 2026 09:54:01 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/cli/models.md | 127 ++++++++----- docs/uk/concepts/models.md | 235 +++++++++++------------ docs/uk/web/control-ui.md | 372 ++++++++++++++++++------------------- 3 files changed, 383 insertions(+), 351 deletions(-) diff --git a/docs/uk/cli/models.md b/docs/uk/cli/models.md index 8797cac0e..095d012a1 100644 --- a/docs/uk/cli/models.md +++ b/docs/uk/cli/models.md @@ -2,25 +2,25 @@ read_when: - Ви хочете змінити моделі за замовчуванням або переглянути статус автентифікації провайдера - Ви хочете просканувати доступні моделі/провайдерів і налагодити профілі автентифікації -summary: Довідка CLI для `openclaw models` (status/list/set/scan, псевдоніми, резервні варіанти, автентифікація) +summary: Довідник CLI для `openclaw models` (`status`/`list`/`set`/`scan`, псевдоніми, резервні варіанти, автентифікація) title: Моделі x-i18n: - generated_at: "2026-04-25T07:01:56Z" + generated_at: "2026-04-25T09:52:27Z" model: gpt-5.4 provider: openai - source_hash: 2755657b334b8722da06e31fa1d69a5dced3d74e5aeadd38d625039f15911d69 + source_hash: 2c8040159e23789221357dd60232012759ee540ebfd3e5d192a0a09419d40c9a source_path: cli/models.md workflow: 15 --- # `openclaw models` -Виявлення моделей, сканування та конфігурація (модель за замовчуванням, резервні варіанти, профілі автентифікації). +Виявлення моделей, сканування та налаштування (модель за замовчуванням, резервні варіанти, профілі автентифікації). Пов’язане: - Провайдери + моделі: [Моделі](/uk/providers/models) -- Концепції вибору моделей + слеш-команда `/models`: [Концепція моделей](/uk/concepts/models) +- Концепції вибору моделі + слеш-команда `/models`: [Концепція моделей](/uk/concepts/models) - Налаштування автентифікації провайдера: [Початок роботи](/uk/start/getting-started) ## Поширені команди @@ -33,45 +33,73 @@ openclaw models scan ``` `openclaw models status` показує визначені модель за замовчуванням/резервні варіанти, а також огляд автентифікації. -Коли доступні знімки використання провайдера, розділ статусу OAuth/API-ключів містить -вікна використання провайдера та знімки квот. +Коли доступні знімки використання провайдерів, розділ статусу OAuth/API-ключів містить +вікна використання провайдерів і знімки квот. Поточні провайдери з вікнами використання: Anthropic, GitHub Copilot, Gemini CLI, OpenAI -Codex, MiniMax, Xiaomi і z.ai. Автентифікація використання надходить із хуків, -специфічних для провайдера, коли вони доступні; інакше OpenClaw використовує резервний варіант і підбирає OAuth/API-key -облікові дані з профілів автентифікації, змінних середовища або конфігурації. +Codex, MiniMax, Xiaomi і z.ai. Дані автентифікації для використання надходять із хуків, +специфічних для провайдера, коли вони доступні; інакше OpenClaw використовує резервний варіант і зіставляє облікові дані OAuth/API-ключів +із профілів автентифікації, змінних середовища або конфігурації. У виводі `--json` `auth.providers` — це огляд провайдера з урахуванням env/config/store, -тоді як `auth.oauth` — це лише стан профілів у сховищі автентифікації. +тоді як `auth.oauth` — це лише стан профілів сховища автентифікації. Додайте `--probe`, щоб виконати живі перевірки автентифікації для кожного налаштованого профілю провайдера. -Перевірки є реальними запитами (можуть витрачати токени та спричиняти обмеження швидкості). -Використовуйте `--agent `, щоб перевірити стан моделі/автентифікації налаштованого агента. Якщо цей параметр не вказано, -команда використовує `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`, якщо вони задані, інакше — +Перевірки — це реальні запити (можуть споживати токени та викликати обмеження частоти). +Використовуйте `--agent `, щоб перевірити стан моделі/автентифікації налаштованого агента. Якщо параметр не вказано, +команда використовує `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`, якщо їх задано, інакше — налаштованого агента за замовчуванням. -Рядки перевірок можуть надходити з профілів автентифікації, облікових даних середовища або `models.json`. +Рядки перевірок можуть надходити з профілів автентифікації, облікових даних env або `models.json`. Примітки: - `models set ` приймає `provider/model` або псевдонім. -- `models list` є лише для читання: команда читає конфігурацію, профілі автентифікації, наявний стан каталогу - та рядки каталогу, що належать провайдеру, але не перезаписує +- `models list` працює лише для читання: вона читає конфігурацію, профілі автентифікації, наявний + стан каталогу та рядки каталогу, що належать провайдеру, але не переписує `models.json`. - `models list --all` включає вбудовані статичні рядки каталогу, що належать провайдеру, навіть якщо ви ще не автентифікувалися в цього провайдера. Такі рядки все одно показуються як недоступні, доки не буде налаштовано відповідну автентифікацію. -- `models list` зберігає власні метадані моделі та обмеження середовища виконання окремо. У табличному +- `models list` зберігає відокремленими власні метадані моделі та фактичні обмеження середовища виконання. У табличному виводі `Ctx` показує `contextTokens/contextWindow`, коли ефективне обмеження середовища виконання - відрізняється від власного вікна контексту; рядки JSON містять `contextTokens`, - якщо провайдер надає це обмеження. + відрізняється від власного контекстного вікна; рядки JSON містять `contextTokens`, + коли провайдер надає це обмеження. - `models list --provider ` фільтрує за ідентифікатором провайдера, наприклад `moonshot` або - `openai-codex`. Команда не приймає відображувані мітки з інтерактивних засобів вибору провайдера, - такі як `Moonshot AI`. -- Посилання на моделі розбираються шляхом поділу за **першим** `/`. Якщо ідентифікатор моделі містить `/` (у стилі OpenRouter), додайте префікс провайдера (приклад: `openrouter/moonshotai/kimi-k2`). -- Якщо ви не вказали провайдера, OpenClaw спочатку визначає введення як псевдонім, потім — - як унікальний збіг налаштованого провайдера для цього точного ідентифікатора моделі, і лише потім - використовує резервний варіант — налаштованого провайдера за замовчуванням — із попередженням про застарілість. + `openai-codex`. Він не приймає відображувані мітки з інтерактивних засобів вибору провайдера, + наприклад `Moonshot AI`. +- Посилання на моделі розбираються шляхом розділення за **першим** `/`. Якщо ідентифікатор моделі містить `/` (у стилі OpenRouter), вкажіть префікс провайдера (приклад: `openrouter/moonshotai/kimi-k2`). +- Якщо ви пропускаєте провайдера, OpenClaw спочатку визначає вхідне значення як псевдонім, потім — + як унікальний збіг налаштованого провайдера для цього точного ідентифікатора моделі, і лише після цього + використовує резервний варіант — налаштованого провайдера за замовчуванням — із попередженням про застарівання. Якщо цей провайдер більше не надає налаштовану модель за замовчуванням, OpenClaw - використовує резервний варіант — перший налаштований провайдер/модель — замість показу - застарілого значення за замовчуванням для видаленого провайдера. -- `models status` може показувати `marker()` у виводі автентифікації для незасекречених заповнювачів (наприклад `OPENAI_API_KEY`, `secretref-managed`, `minimax-oauth`, `oauth:chutes`, `ollama-local`) замість маскування їх як секретів. + використовує резервний варіант — першу налаштовану пару провайдер/модель — замість того, щоб показувати + застаріле значення за замовчуванням для видаленого провайдера. +- `models status` може показувати `marker()` у виводі автентифікації для незасекречених заповнювачів (наприклад, `OPENAI_API_KEY`, `secretref-managed`, `minimax-oauth`, `oauth:chutes`, `ollama-local`) замість маскування їх як секретів. + +### `models scan` + +`models scan` читає публічний каталог OpenRouter `:free` і ранжує кандидатів для +використання як резервних варіантів. Сам каталог є публічним, тому сканування лише метаданих не потребує +ключа OpenRouter. + +За замовчуванням OpenClaw намагається перевірити підтримку інструментів і зображень за допомогою живих викликів моделей. +Якщо ключ OpenRouter не налаштовано, команда використовує резервний варіант — вивід лише метаданих — і пояснює, що для моделей `:free` усе одно потрібен `OPENROUTER_API_KEY` для +перевірок і висновування. + +Параметри: + +- `--no-probe` (лише метадані; без пошуку конфігурації/секретів) +- `--min-params ` +- `--max-age-days ` +- `--provider ` +- `--max-candidates ` +- `--timeout ` (тайм-аут запиту до каталогу та тайм-аут кожної перевірки) +- `--concurrency ` +- `--yes` +- `--no-input` +- `--set-default` +- `--set-image` +- `--json` + +`--set-default` і `--set-image` потребують живих перевірок; результати сканування +лише метаданих є інформаційними й не застосовуються до конфігурації. ### `models status` @@ -79,7 +107,7 @@ Codex, MiniMax, Xiaomi і z.ai. Автентифікація використа - `--json` - `--plain` -- `--check` (код виходу 1=прострочено/відсутнє, 2=скоро спливає) +- `--check` (код виходу 1=прострочено/відсутнє, 2=незабаром спливає) - `--probe` (жива перевірка налаштованих профілів автентифікації) - `--probe-provider ` (перевірити одного провайдера) - `--probe-profile ` (повторювані або розділені комами ідентифікатори профілів) @@ -88,7 +116,7 @@ Codex, MiniMax, Xiaomi і z.ai. Автентифікація використа - `--probe-max-tokens ` - `--agent ` (ідентифікатор налаштованого агента; перевизначає `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`) -Групи статусів перевірки: +Категорії статусу перевірки: - `ok` - `auth` @@ -99,15 +127,15 @@ Codex, MiniMax, Xiaomi і z.ai. Автентифікація використа - `unknown` - `no_model` -Варіанти detail/reason-code перевірки, яких варто очікувати: +Варіанти detail/reason-code перевірки, яких слід очікувати: - `excluded_by_auth_order`: збережений профіль існує, але явний `auth.order.` його пропустив, тому перевірка повідомляє про виключення замість спроби його використати. - `missing_credential`, `invalid_expires`, `expired`, `unresolved_ref`: - профіль присутній, але не є придатним/не може бути визначений. -- `no_model`: автентифікація провайдера існує, але OpenClaw не зміг визначити придатний для перевірки - кандидат моделі для цього провайдера. + профіль присутній, але не підходить/не може бути визначений. +- `no_model`: автентифікація провайдера існує, але OpenClaw не зміг визначити + придатного для перевірки кандидата моделі для цього провайдера. ## Псевдоніми + резервні варіанти @@ -126,10 +154,10 @@ openclaw models auth paste-token ``` `models auth add` — це інтерактивний помічник автентифікації. Він може запускати потік автентифікації провайдера -(OAuth/API key) або провести вас через ручне вставлення токена, залежно від -обраного провайдера. +(OAuth/API-ключ) або провести вас через ручне вставлення токена залежно від +вибраного провайдера. -`models auth login` запускає потік автентифікації плагіна провайдера (OAuth/API key). Використовуйте +`models auth login` запускає потік автентифікації плагіна провайдера (OAuth/API-ключ). Використовуйте `openclaw plugins list`, щоб побачити, які провайдери встановлено. Приклади: @@ -141,20 +169,21 @@ openclaw models auth login --provider openai-codex --set-default Примітки: - `setup-token` і `paste-token` залишаються універсальними командами для роботи з токенами для провайдерів, - які надають методи токен-автентифікації. -- `setup-token` вимагає інтерактивного TTY і запускає метод токен-автентифікації провайдера - (типово — метод `setup-token` цього провайдера, якщо він його надає). -- `paste-token` приймає рядок токена, згенерований деінде або засобами автоматизації. -- `paste-token` вимагає `--provider`, запитує значення токена й записує - його до ідентифікатора профілю за замовчуванням `:manual`, якщо ви не передали + які надають методи автентифікації через токен. +- `setup-token` вимагає інтерактивний TTY і запускає метод автентифікації через токен провайдера + (за замовчуванням використовується метод `setup-token` цього провайдера, якщо він + доступний). +- `paste-token` приймає рядок токена, згенерований в іншому місці або засобами автоматизації. +- `paste-token` вимагає `--provider`, запитує значення токена і записує + його до ідентифікатора профілю за замовчуванням `:manual`, якщо ви не передасте `--profile-id`. - `paste-token --expires-in ` зберігає абсолютний строк дії токена на основі - відносної тривалості, наприклад `365d` або `12h`. -- Примітка щодо Anthropic: співробітники Anthropic повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволене, тому OpenClaw вважає повторне використання Claude CLI та використання `claude -p` санкціонованими для цієї інтеграції, якщо Anthropic не опублікує нову політику. -- `setup-token` / `paste-token` Anthropic залишаються доступними як підтримуваний шлях роботи з токенами в OpenClaw, але тепер OpenClaw надає перевагу повторному використанню Claude CLI та `claude -p`, коли це можливо. + відносної тривалості, такої як `365d` або `12h`. +- Примітка щодо Anthropic: співробітники Anthropic повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволене, тому OpenClaw розглядає повторне використання Claude CLI та використання `claude -p` як санкціоновані для цієї інтеграції, якщо Anthropic не опублікує нову політику. +- Anthropic `setup-token` / `paste-token` залишаються доступними як підтримуваний шлях токена OpenClaw, але тепер OpenClaw надає перевагу повторному використанню Claude CLI і `claude -p`, коли це можливо. ## Пов’язане -- [Довідка CLI](/uk/cli) +- [Довідник CLI](/uk/cli) - [Вибір моделі](/uk/concepts/model-providers) -- [Відмовостійке перемикання моделей](/uk/concepts/model-failover) +- [Відмовостійкість моделей](/uk/concepts/model-failover) diff --git a/docs/uk/concepts/models.md b/docs/uk/concepts/models.md index f9f56840c..6ccb28d41 100644 --- a/docs/uk/concepts/models.md +++ b/docs/uk/concepts/models.md @@ -1,24 +1,24 @@ --- read_when: - - Додавання або зміна CLI моделей (models list/set/scan/aliases/fallbacks) - - Зміна поведінки резервних варіантів моделей або UX вибору моделей - - Оновлення перевірок сканування моделей (інструменти/зображення) -summary: 'CLI моделей: список, налаштування, псевдоніми, резервні варіанти, сканування, статус' + - Додавання або зміна CLI моделей (`models list/set/scan/aliases/fallbacks`) + - Зміна поведінки резервних варіантів моделі або UX вибору + - Оновлення перевірок сканування моделі (`tools/images`) +summary: 'CLI моделей: список, встановлення, псевдоніми, резервні варіанти, сканування, статус' title: CLI моделей x-i18n: - generated_at: "2026-04-25T01:53:14Z" + generated_at: "2026-04-25T09:52:32Z" model: gpt-5.4 provider: openai - source_hash: f6a98f44872d5de81f02dc7318bb8ecdff3860996d286b6aa9d42abbd8ce6670 + source_hash: 370453529596e87e724c4de7d2ae9d20334c29393116059bc01363b47c017d5d source_path: concepts/models.md workflow: 15 --- -Див. [/concepts/model-failover](/uk/concepts/model-failover) для ротації профілів автентифікації, cooldowns і того, як це взаємодіє з резервними варіантами. -Короткий огляд постачальників + приклади: [/concepts/model-providers](/uk/concepts/model-providers). -Посилання на моделі вибирають постачальника і модель. Зазвичай вони не вибирають +Див. [/concepts/model-failover](/uk/concepts/model-failover) щодо ротації профілів автентифікації, періодів охолодження та того, як це взаємодіє з резервними варіантами. +Короткий огляд провайдерів + приклади: [/concepts/model-providers](/uk/concepts/model-providers). +Посилання на моделі вибирають провайдера й модель. Зазвичай вони не вибирають низькорівневе середовище виконання агента. Наприклад, `openai/gpt-5.5` може працювати через -звичайний шлях постачальника OpenAI або через середовище виконання app-server Codex, залежно +звичайний шлях провайдера OpenAI або через середовище виконання застосунку-сервера Codex, залежно від `agents.defaults.embeddedHarness.runtime`. Див. [/concepts/agent-runtimes](/uk/concepts/agent-runtimes). @@ -28,25 +28,25 @@ OpenClaw вибирає моделі в такому порядку: 1. **Основна** модель (`agents.defaults.model.primary` або `agents.defaults.model`). 2. **Резервні варіанти** в `agents.defaults.model.fallbacks` (по порядку). -3. **Резервне перемикання автентифікації постачальника** відбувається всередині постачальника перед переходом до +3. **Резервне перемикання автентифікації провайдера** відбувається всередині провайдера перед переходом до наступної моделі. -Пов’язане: +Пов’язано: -- `agents.defaults.models` — це allowlist/каталог моделей, які OpenClaw може використовувати (плюс псевдоніми). +- `agents.defaults.models` — це список дозволених моделей/каталог моделей, які OpenClaw може використовувати (разом із псевдонімами). - `agents.defaults.imageModel` використовується **лише тоді**, коли основна модель не може приймати зображення. -- `agents.defaults.pdfModel` використовується інструментом `pdf`. Якщо його не вказано, інструмент - повертається до `agents.defaults.imageModel`, а потім до визначеної для сесії/типової - моделі. -- `agents.defaults.imageGenerationModel` використовується спільною можливістю генерації зображень. Якщо його не вказано, `image_generate` усе ще може визначити типовий постачальник із підтримкою автентифікації. Спочатку він пробує поточного типового постачальника, а потім решту зареєстрованих постачальників генерації зображень у порядку provider-id. Якщо ви встановлюєте конкретного постачальника/модель, також налаштуйте автентифікацію/API key цього постачальника. -- `agents.defaults.musicGenerationModel` використовується спільною можливістю генерації музики. Якщо його не вказано, `music_generate` усе ще може визначити типовий постачальник із підтримкою автентифікації. Спочатку він пробує поточного типового постачальника, а потім решту зареєстрованих постачальників генерації музики у порядку provider-id. Якщо ви встановлюєте конкретного постачальника/модель, також налаштуйте автентифікацію/API key цього постачальника. -- `agents.defaults.videoGenerationModel` використовується спільною можливістю генерації відео. Якщо його не вказано, `video_generate` усе ще може визначити типовий постачальник із підтримкою автентифікації. Спочатку він пробує поточного типового постачальника, а потім решту зареєстрованих постачальників генерації відео у порядку provider-id. Якщо ви встановлюєте конкретного постачальника/модель, також налаштуйте автентифікацію/API key цього постачальника. -- Типові значення для окремих агентів можуть перевизначати `agents.defaults.model` через `agents.list[].model` плюс прив’язки (див. [/concepts/multi-agent](/uk/concepts/multi-agent)). +- `agents.defaults.pdfModel` використовується інструментом `pdf`. Якщо не вказано, інструмент + переключається на `agents.defaults.imageModel`, а потім на визначену для сесії/типову + модель. +- `agents.defaults.imageGenerationModel` використовується спільною можливістю генерації зображень. Якщо не вказано, `image_generate` усе одно може вивести типовий провайдер із підтримкою автентифікації. Спочатку він пробує поточного типового провайдера, потім решту зареєстрованих провайдерів генерації зображень у порядку ідентифікаторів провайдерів. Якщо ви задаєте конкретного провайдера/модель, також налаштуйте автентифікацію/API-ключ цього провайдера. +- `agents.defaults.musicGenerationModel` використовується спільною можливістю генерації музики. Якщо не вказано, `music_generate` усе одно може вивести типовий провайдер із підтримкою автентифікації. Спочатку він пробує поточного типового провайдера, потім решту зареєстрованих провайдерів генерації музики в порядку ідентифікаторів провайдерів. Якщо ви задаєте конкретного провайдера/модель, також налаштуйте автентифікацію/API-ключ цього провайдера. +- `agents.defaults.videoGenerationModel` використовується спільною можливістю генерації відео. Якщо не вказано, `video_generate` усе одно може вивести типовий провайдер із підтримкою автентифікації. Спочатку він пробує поточного типового провайдера, потім решту зареєстрованих провайдерів генерації відео в порядку ідентифікаторів провайдерів. Якщо ви задаєте конкретного провайдера/модель, також налаштуйте автентифікацію/API-ключ цього провайдера. +- Типові значення для окремого агента можуть перевизначати `agents.defaults.model` через `agents.list[].model` разом із прив’язками (див. [/concepts/multi-agent](/uk/concepts/multi-agent)). -## Коротка політика щодо моделей +## Швидка політика щодо моделей -- Встановіть основною найсильнішу модель останнього покоління, яка вам доступна. -- Використовуйте резервні варіанти для чутливих до вартості/затримки завдань і менш критичних чатів. +- Встановіть як основну найсильнішу модель останнього покоління, доступну вам. +- Використовуйте резервні варіанти для завдань, чутливих до вартості/затримки, і для менш критичних чатів. - Для агентів з увімкненими інструментами або недовірених вхідних даних уникайте старіших/слабших рівнів моделей. ## Онбординг (рекомендовано) @@ -57,8 +57,8 @@ OpenClaw вибирає моделі в такому порядку: openclaw onboard ``` -Він може налаштувати модель + автентифікацію для поширених постачальників, включно з **підпискою OpenAI Code (Codex)** -(OAuth) і **Anthropic** (API key або Claude CLI). +Він може налаштувати модель + автентифікацію для поширених провайдерів, зокрема **OpenAI Code (Codex) +subscription** (OAuth) і **Anthropic** (API-ключ або Claude CLI). ## Ключі конфігурації (огляд) @@ -67,55 +67,55 @@ openclaw onboard - `agents.defaults.pdfModel.primary` і `agents.defaults.pdfModel.fallbacks` - `agents.defaults.imageGenerationModel.primary` і `agents.defaults.imageGenerationModel.fallbacks` - `agents.defaults.videoGenerationModel.primary` і `agents.defaults.videoGenerationModel.fallbacks` -- `agents.defaults.models` (allowlist + псевдоніми + параметри постачальника) -- `models.providers` (користувацькі постачальники, записані в `models.json`) +- `agents.defaults.models` (список дозволених + псевдоніми + параметри провайдера) +- `models.providers` (власні провайдери, записані в `models.json`) -Посилання на моделі нормалізуються до нижнього регістру. Псевдоніми постачальників, як-от `z.ai/*`, нормалізуються +Посилання на моделі нормалізуються до нижнього регістру. Псевдоніми провайдерів, як-от `z.ai/*`, нормалізуються до `zai/*`. -Приклади конфігурації постачальників (зокрема OpenCode) наведено в +Приклади конфігурації провайдерів (зокрема OpenCode) наведено в [/providers/opencode](/uk/providers/opencode). -### Безпечне редагування allowlist +### Безпечне редагування списку дозволених -Використовуйте адитивні записи, коли оновлюєте `agents.defaults.models` вручну: +Під час ручного оновлення `agents.defaults.models` використовуйте адитивні записи: ```bash openclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json --merge ``` -`openclaw config set` захищає мапи моделей/постачальників від випадкового перезапису. Звичайне -присвоєння об’єкта для `agents.defaults.models`, `models.providers` або +`openclaw config set` захищає мапи моделей/провайдерів від випадкового перезапису. Звичайне +присвоєння об’єкта до `agents.defaults.models`, `models.providers` або `models.providers..models` відхиляється, якщо воно призведе до видалення наявних записів. Використовуйте `--merge` для адитивних змін; використовуйте `--replace` лише тоді, коли надане значення має стати повним цільовим значенням. -Інтерактивне налаштування постачальника і `openclaw configure --section model` також об’єднують -вибори в межах постачальника в наявний allowlist, тож додавання Codex, -Ollama або іншого постачальника не видаляє незв’язані записи моделей. -Configure зберігає наявний `agents.defaults.model.primary`, коли автентифікацію постачальника -застосовано повторно. Явні команди встановлення типового значення, такі як +Інтерактивне налаштування провайдера та `openclaw configure --section model` також зливають +вибірки в межах провайдера в наявний список дозволених, тому додавання Codex, +Ollama або іншого провайдера не видаляє не пов’язані записи моделей. +Configure зберігає наявне `agents.defaults.model.primary`, коли автентифікацію провайдера +застосовано повторно. Явні команди встановлення типових значень, як-от `openclaw models auth login --provider --set-default` і -`openclaw models set `, як і раніше, замінюють `agents.defaults.model.primary`. +`openclaw models set `, усе одно замінюють `agents.defaults.model.primary`. -## «Модель не дозволена» (і чому відповіді припиняються) +## «Model is not allowed» (і чому відповіді зупиняються) -Якщо встановлено `agents.defaults.models`, воно стає **allowlist** для `/model` і для -перевизначень сесії. Коли користувач вибирає модель, якої немає в цьому allowlist, +Якщо задано `agents.defaults.models`, він стає **списком дозволених** для `/model` і для +перевизначень у сесії. Коли користувач вибирає модель, якої немає в цьому списку дозволених, OpenClaw повертає: ``` Model "provider/model" is not allowed. Use /model to list available models. ``` -Це відбувається **до** створення звичайної відповіді, тому повідомлення може створювати враження, -ніби воно «не відповіло». Щоб виправити це, потрібно: +Це відбувається **до** генерації звичайної відповіді, тому може здаватися, що на повідомлення +«не відповіли». Виправити це можна так: -- Додати модель до `agents.defaults.models`, або -- Очистити allowlist (видалити `agents.defaults.models`), або -- Вибрати модель із `/model list`. +- Додайте модель до `agents.defaults.models`, або +- Очистьте список дозволених (видаліть `agents.defaults.models`), або +- Виберіть модель із `/model list`. -Приклад конфігурації allowlist: +Приклад конфігурації списку дозволених: ```json5 { @@ -143,26 +143,26 @@ Model "provider/model" is not allowed. Use /model to list available models. Примітки: -- `/model` (і `/model list`) — це компактний нумерований вибір (сімейство моделей + доступні постачальники). -- У Discord команди `/model` і `/models` відкривають інтерактивний вибір із випадними списками постачальника та моделі, а також кроком Submit. -- `/models add` застаріла і тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. -- `/model <#>` вибирає зі списку цього вибору. -- `/model` негайно зберігає новий вибір сесії. +- `/model` (і `/model list`) — це компактний нумерований засіб вибору (сімейство моделей + доступні провайдери). +- У Discord `/model` і `/models` відкривають інтерактивний засіб вибору зі списками провайдера та моделі, а також кроком Submit. +- `/models add` застаріла команда й тепер повертає повідомлення про застарілість замість реєстрації моделей із чату. +- `/model <#>` вибирає модель із цього засобу вибору. +- `/model` негайно зберігає новий вибір для сесії. - Якщо агент простоює, наступний запуск одразу використовує нову модель. -- Якщо запуск уже активний, OpenClaw позначає живе перемикання як очікуване й перезапускається з новою моделлю лише в чистій точці повторної спроби. -- Якщо активність інструмента або виведення відповіді вже розпочалися, очікуване перемикання може залишатися в черзі до пізнішої можливості повторної спроби або до наступного ходу користувача. -- `/model status` — це докладний перегляд (кандидати автентифікації і, коли налаштовано, `baseUrl` кінцевої точки постачальника + режим `api`). -- Посилання на моделі аналізуються шляхом розділення за **першим** `/`. Використовуйте `provider/model`, коли вводите `/model `. -- Якщо сам ID моделі містить `/` (у стилі OpenRouter), ви повинні вказати префікс постачальника (приклад: `/model openrouter/moonshotai/kimi-k2`). -- Якщо ви пропускаєте постачальника, OpenClaw визначає введення в такому порядку: +- Якщо запуск уже активний, OpenClaw позначає живе перемикання як таке, що очікує, і перезапускає нову модель лише в чистій точці повторної спроби. +- Якщо активність інструмента або виведення відповіді вже почалися, відкладене перемикання може залишатися в черзі до пізнішої можливості повторної спроби або до наступного ходу користувача. +- `/model status` — це докладне подання (кандидати автентифікації та, коли налаштовано, `baseUrl` кінцевої точки провайдера + режим `api`). +- Посилання на моделі розбираються поділом за **першим** `/`. Під час введення `/model ` використовуйте `provider/model`. +- Якщо сам ідентифікатор моделі містить `/` (у стилі OpenRouter), ви маєте вказати префікс провайдера (приклад: `/model openrouter/moonshotai/kimi-k2`). +- Якщо ви не вказали провайдера, OpenClaw визначає введене значення в такому порядку: 1. збіг псевдоніма - 2. унікальний збіг налаштованого постачальника для цього точного ID моделі без префікса - 3. застарілий резервний перехід до налаштованого типового постачальника - Якщо цей постачальник більше не надає налаштовану типову модель, OpenClaw - натомість повертається до першого налаштованого постачальника/моделі, щоб - уникнути показу застарілого типового значення видаленого постачальника. + 2. унікальний збіг налаштованого провайдера для цього точного ідентифікатора моделі без префікса + 3. застаріле резервне перемикання на налаштованого типового провайдера + Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw + натомість переключається на першу налаштовану пару провайдер/модель, щоб уникнути + показу застарілого типового значення видаленого провайдера. -Повна поведінка команди/конфігурація: [Слеш-команди](/uk/tools/slash-commands). +Повна поведінка команди/конфігурація: [Slash commands](/uk/tools/slash-commands). ## Команди CLI @@ -194,36 +194,35 @@ openclaw models image-fallbacks clear Типово показує налаштовані моделі. Корисні прапорці: - `--all`: повний каталог -- `--local`: лише локальні постачальники -- `--provider `: фільтр за id постачальника, наприклад `moonshot`; мітки відображення з інтерактивних вибірників не приймаються +- `--local`: лише локальні провайдери +- `--provider `: фільтр за ідентифікатором провайдера, наприклад `moonshot`; мітки відображення з інтерактивних засобів вибору не підтримуються - `--plain`: одна модель на рядок -- `--json`: machine-readable вивід +- `--json`: машиночитний вивід -`--all` включає статичні рядки каталогу, що входять до складу постачальника, до -налаштування автентифікації, тому представлення лише для виявлення можуть показувати -моделі, недоступні, доки ви не додасте відповідні облікові дані постачальника. +`--all` включає вбудовані рядки статичного каталогу, що належать провайдеру, ще до +налаштування автентифікації, тому подання лише для виявлення може показувати моделі, які недоступні, +доки ви не додасте відповідні облікові дані провайдера. ### `models status` Показує визначену основну модель, резервні варіанти, модель зображень і огляд автентифікації -налаштованих постачальників. Також показує статус закінчення строку дії OAuth для профілів, знайдених -у сховищі автентифікації (типово попереджає за 24 год до закінчення). `--plain` виводить лише +налаштованих провайдерів. Також показує стан строку дії OAuth для профілів, знайдених +у сховищі автентифікації (типово попереджає за 24 год). `--plain` виводить лише визначену основну модель. -Статус OAuth показується завжди (і включається у вивід `--json`). Якщо налаштований -постачальник не має облікових даних, `models status` виводить розділ **Відсутня автентифікація**. -JSON містить `auth.oauth` (вікно попередження + профілі) і `auth.providers` -(ефективна автентифікація для кожного постачальника, зокрема облікові дані з env). `auth.oauth` -стосується лише стану профілів у сховищі автентифікації; постачальники лише з env там не з’являються. -Використовуйте `--check` для автоматизації (exit `1` за відсутності/простроченні, `2` якщо строк скоро спливає). -Використовуйте `--probe` для живих перевірок автентифікації; рядки probe можуть надходити з профілів автентифікації, облікових даних env +Стан OAuth показується завжди (і включається у вивід `--json`). Якщо налаштований +провайдер не має облікових даних, `models status` виводить розділ **Missing auth**. +JSON включає `auth.oauth` (вікно попередження + профілі) і `auth.providers` +(ефективна автентифікація для кожного провайдера, зокрема облікові дані з env). `auth.oauth` +— це лише стан профілів у сховищі автентифікації; провайдери лише з env там не з’являються. +Для автоматизації використовуйте `--check` (код виходу `1`, якщо дані відсутні/прострочені, `2`, якщо скоро спливають). +Для живих перевірок автентифікації використовуйте `--probe`; рядки перевірки можуть походити з профілів автентифікації, облікових даних env або `models.json`. -Якщо явний `auth.order.` пропускає збережений профіль, probe повідомляє -`excluded_by_auth_order` замість спроби використати його. Якщо автентифікація є, але не вдається визначити модель, -яку можна probe для цього постачальника, probe повідомляє `status: no_model`. +Якщо явний `auth.order.` пропускає збережений профіль, перевірка повідомляє +`excluded_by_auth_order` замість спроби його використати. Якщо автентифікація є, але для цього провайдера неможливо визначити модель для перевірки, перевірка повідомляє `status: no_model`. -Вибір автентифікації залежить від постачальника/облікового запису. Для постійно ввімкнених хостів gateway API -keys зазвичай є найпередбачуванішими; повторне використання Claude CLI та наявних профілів Anthropic OAuth/token -також підтримується. +Вибір автентифікації залежить від провайдера/облікового запису. Для постійно активних хостів Gateway +API-ключі зазвичай найпередбачуваніші; також підтримується повторне використання Claude CLI і наявні +OAuth/токен-профілі Anthropic. Приклад (Claude CLI): @@ -235,20 +234,22 @@ openclaw models status ## Сканування (безкоштовні моделі OpenRouter) `openclaw models scan` перевіряє **каталог безкоштовних моделей** OpenRouter і може -за бажанням виконувати probe моделей на підтримку інструментів і зображень. +за бажанням перевіряти моделі на підтримку інструментів і зображень. Основні прапорці: -- `--no-probe`: пропустити живі probe (лише метадані) +- `--no-probe`: пропустити живі перевірки (лише метадані) - `--min-params `: мінімальний розмір параметрів (у мільярдах) - `--max-age-days `: пропустити старіші моделі -- `--provider `: фільтр за префіксом постачальника +- `--provider `: фільтр префікса провайдера - `--max-candidates `: розмір списку резервних варіантів - `--set-default`: встановити `agents.defaults.model.primary` на перший вибір -- `--set-image`: встановити `agents.defaults.imageModel.primary` на перший вибір зображень +- `--set-image`: встановити `agents.defaults.imageModel.primary` на перший вибір для зображень -Для probe потрібен API key OpenRouter (з профілів автентифікації або -`OPENROUTER_API_KEY`). Без ключа використовуйте `--no-probe`, щоб лише перелічити кандидатів. +Каталог OpenRouter `/models` є публічним, тому сканування лише метаданих може +показувати безкоштовних кандидатів без ключа. Перевірки й інференс однаково потребують +API-ключ OpenRouter (з профілів автентифікації або `OPENROUTER_API_KEY`). Якщо ключ недоступний, +`openclaw models scan` переключається на вивід лише метаданих і не змінює конфігурацію. Використовуйте `--no-probe`, щоб явно запросити режим лише метаданих. Результати сканування ранжуються за: @@ -257,40 +258,42 @@ openclaw models status 3. Розміром контексту 4. Кількістю параметрів -Ввід +Вхідні дані - Список OpenRouter `/models` (фільтр `:free`) -- Потребує API key OpenRouter з профілів автентифікації або `OPENROUTER_API_KEY` (див. [/environment](/uk/help/environment)) +- Для живих перевірок потрібен API-ключ OpenRouter із профілів автентифікації або `OPENROUTER_API_KEY` (див. [/environment](/uk/help/environment)) - Необов’язкові фільтри: `--max-age-days`, `--min-params`, `--provider`, `--max-candidates` -- Керування probe: `--timeout`, `--concurrency` +- Керування запитами/перевірками: `--timeout`, `--concurrency` -Під час запуску в TTY ви можете інтерактивно вибирати резервні варіанти. У неінтерактивному -режимі передайте `--yes`, щоб прийняти типові значення. +Коли живі перевірки виконуються в TTY, ви можете інтерактивно вибирати резервні варіанти. У +неінтерактивному режимі передайте `--yes`, щоб прийняти типові значення. Результати лише з метаданими є +інформаційними; `--set-default` і `--set-image` потребують живих перевірок, щоб +OpenClaw не налаштував непридатну модель OpenRouter без ключа. ## Реєстр моделей (`models.json`) -Користувацькі постачальники в `models.providers` записуються у `models.json` у каталозі +Власні провайдери в `models.providers` записуються в `models.json` у каталозі агента (типово `~/.openclaw/agents//agent/models.json`). Цей файл -типово об’єднується, якщо лише `models.mode` не встановлено в `replace`. +типово зливається, якщо лише `models.mode` не встановлено в `replace`. -Пріоритет у режимі merge для відповідних ID постачальників: +Пріоритет у режимі злиття для відповідних ідентифікаторів провайдерів: -- Непорожній `baseUrl`, який уже присутній в агентському `models.json`, має пріоритет. -- Непорожній `apiKey` в агентському `models.json` має пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті конфігурації/профілю автентифікації. -- Значення `apiKey` для постачальників, керованих через SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env-посилань, `secretref-managed` для file/exec-посилань) замість збереження визначених секретів. -- Значення заголовків постачальника, керованих через SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env-посилань, `secretref-managed` для file/exec-посилань). -- Порожні або відсутні агентські `apiKey`/`baseUrl` повертаються до конфігураційного `models.providers`. -- Інші поля постачальника оновлюються з конфігурації та нормалізованих даних каталогу. +- Непорожній `baseUrl`, уже наявний в `models.json` агента, має пріоритет. +- Непорожній `apiKey` у `models.json` агента має пріоритет лише тоді, коли цей провайдер не керується через SecretRef у поточному контексті конфігурації/профілю автентифікації. +- Значення `apiKey` для провайдерів, керованих через SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для посилань env, `secretref-managed` для посилань file/exec) замість збереження розв’язаних секретів. +- Значення заголовків для провайдерів, керованих через SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для посилань env, `secretref-managed` для посилань file/exec). +- Порожні або відсутні `apiKey`/`baseUrl` агента переключаються на конфігураційні `models.providers`. +- Інші поля провайдера оновлюються з конфігурації та нормалізованих даних каталогу. -Збереження маркерів є авторитетним на рівні джерела: OpenClaw записує маркери з активного знімка конфігурації джерела (до визначення), а не з визначених значень секретів часу виконання. -Це застосовується щоразу, коли OpenClaw повторно генерує `models.json`, зокрема в шляхах, ініційованих командами, таких як `openclaw agent`. +Збереження маркерів є авторитетним щодо джерела: OpenClaw записує маркери з активного знімка конфігурації джерела (до розв’язання), а не з розв’язаних значень секретів під час виконання. +Це застосовується щоразу, коли OpenClaw повторно генерує `models.json`, зокрема в шляхах, керованих командами, як-от `openclaw agent`. -## Пов’язане +## Пов’язано -- [Постачальники моделей](/uk/concepts/model-providers) — маршрутизація постачальників і автентифікація -- [Середовища виконання агентів](/uk/concepts/agent-runtimes) — PI, Codex та інші середовища виконання циклу агента -- [Резервне перемикання моделей](/uk/concepts/model-failover) — ланцюжки резервних варіантів -- [Генерація зображень](/uk/tools/image-generation) — конфігурація моделі зображень -- [Генерація музики](/uk/tools/music-generation) — конфігурація моделі музики -- [Генерація відео](/uk/tools/video-generation) — конфігурація моделі відео -- [Довідник із конфігурації](/uk/gateway/config-agents#agent-defaults) — ключі конфігурації моделей +- [Model Providers](/uk/concepts/model-providers) — маршрутизація провайдерів і автентифікація +- [Agent Runtimes](/uk/concepts/agent-runtimes) — PI, Codex та інші середовища виконання циклу агента +- [Model Failover](/uk/concepts/model-failover) — ланцюжки резервних варіантів +- [Image Generation](/uk/tools/image-generation) — конфігурація моделі зображень +- [Music Generation](/uk/tools/music-generation) — конфігурація моделі генерації музики +- [Video Generation](/uk/tools/video-generation) — конфігурація моделі генерації відео +- [Configuration Reference](/uk/gateway/config-agents#agent-defaults) — ключі конфігурації моделей diff --git a/docs/uk/web/control-ui.md b/docs/uk/web/control-ui.md index f13dc2979..81853f069 100644 --- a/docs/uk/web/control-ui.md +++ b/docs/uk/web/control-ui.md @@ -1,208 +1,207 @@ --- read_when: - - Ви хочете керувати Gateway із браузера - - Вам потрібен доступ Tailnet без SSH-тунелів -summary: Вебінтерфейс керування для Gateway (чат, Node, конфігурація) -title: Control UI + - Ви хочете керувати Gateway з браузера + - Ви хочете доступ Tailnet без SSH-тунелів +summary: Вебінтерфейс керування для Gateway (чат, вузли, конфігурація) +title: Інтерфейс керування x-i18n: - generated_at: "2026-04-25T05:59:25Z" + generated_at: "2026-04-25T09:52:27Z" model: gpt-5.4 provider: openai - source_hash: 0c41605af9972b2ec0a8f23724f0279c1890740b150b37814d2f879a466d36b0 + source_hash: d63d2e6a33fe87103c6265532a8742e08b3dd15124ce8b876ed280aea5f55a9d source_path: web/control-ui.md workflow: 15 --- -Control UI — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується Gateway: +Інтерфейс керування — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується Gateway: - за замовчуванням: `http://:18789/` -- необов’язковий префікс: задайте `gateway.controlUi.basePath` (наприклад, `/openclaw`) +- необов’язковий префікс: встановіть `gateway.controlUi.basePath` (наприклад, `/openclaw`) -Він звертається **безпосередньо до WebSocket Gateway** на тому самому порту. +Він взаємодіє **безпосередньо з WebSocket Gateway** на тому самому порту. ## Швидке відкриття (локально) -Якщо Gateway запущений на тому самому комп’ютері, відкрийте: +Якщо Gateway запущено на тому самому комп’ютері, відкрийте: - [http://127.0.0.1:18789/](http://127.0.0.1:18789/) (або [http://localhost:18789/](http://localhost:18789/)) Якщо сторінка не завантажується, спочатку запустіть Gateway: `openclaw gateway`. -Auth передається під час handshake WebSocket через: +Автентифікація передається під час рукостискання WebSocket через: - `connect.params.auth.token` - `connect.params.auth.password` - заголовки ідентичності Tailscale Serve, коли `gateway.auth.allowTailscale: true` - заголовки ідентичності trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"` -Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера -і вибрану URL-адресу Gateway; паролі не зберігаються. Onboarding зазвичай -генерує токен Gateway для auth зі спільним секретом під час першого підключення, але -auth за паролем теж працює, коли `gateway.auth.mode` має значення `"password"`. +Панель налаштувань на інформаційній панелі зберігає токен для поточної сесії вкладки браузера +та вибрану URL-адресу gateway; паролі не зберігаються. Під час початкового налаштування зазвичай +генерується токен gateway для автентифікації за спільним секретом при першому підключенні, але +автентифікація паролем також працює, коли `gateway.auth.mode` має значення `"password"`. ## Сполучення пристрою (перше підключення) Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway -вимагає **одноразового схвалення сполучення** — навіть якщо ви в тій самій Tailnet -із `gateway.auth.allowTailscale: true`. Це захід безпеки, щоб запобігти +вимагає **одноразове підтвердження сполучення** — навіть якщо ви перебуваєте в тій самій Tailnet +із `gateway.auth.allowTailscale: true`. Це захід безпеки для запобігання несанкціонованому доступу. -**Що ви побачите:** `disconnected (1008): pairing required` +**Що ви побачите:** "disconnected (1008): pairing required" -**Щоб схвалити пристрій:** +**Щоб підтвердити пристрій:** ```bash -# Показати очікувані запити +# Перелічити очікувальні запити openclaw devices list -# Схвалити за ID запиту +# Підтвердити за ID запиту openclaw devices approve ``` -Якщо браузер повторює спробу сполучення зі зміненими деталями auth (роль/scopes/public -key), попередній очікуваний запит витісняється і створюється новий `requestId`. -Перед схваленням знову виконайте `openclaw devices list`. +Якщо браузер повторно намагається виконати сполучення зі зміненими даними автентифікації (роль/області доступу/публічний +ключ), попередній очікувальний запит замінюється, і створюється новий `requestId`. +Перед підтвердженням знову виконайте `openclaw devices list`. Якщо браузер уже сполучений і ви змінюєте його з доступу лише для читання на -доступ для запису/admin, це вважається оновленням схвалення, а не тихим -повторним підключенням. OpenClaw зберігає старе схвалення активним, блокує ширше -повторне підключення і просить вас явно схвалити новий набір scopes. +доступ для запису/адміністратора, це розглядається як підвищення рівня схвалення, а не як +тихе повторне підключення. OpenClaw зберігає старе схвалення активним, блокує ширше повторне підключення +і просить вас явно підтвердити новий набір областей доступу. -Після схвалення пристрій запам’ятовується й не вимагатиме повторного схвалення, якщо -ви не відкличете його через `openclaw devices revoke --device --role `. Див. -[CLI Devices](/uk/cli/devices) для ротації токенів і відкликання. +Після підтвердження пристрій буде запам’ятовано й не потребуватиме повторного підтвердження, якщо +ви не відкличете його за допомогою `openclaw devices revoke --device --role `. Див. +[Devices CLI](/uk/cli/devices) для ротації токенів і відкликання. **Примітки:** -- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`) автоматично схвалюються. -- Підключення браузера через Tailnet і LAN усе одно вимагають явного схвалення, навіть якщо - вони походять з тієї самої машини. +- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`) + підтверджуються автоматично. +- Підключення браузера через Tailnet і LAN усе одно потребують явного підтвердження, навіть якщо + вони ініціюються з тієї самої машини. - Кожен профіль браузера генерує унікальний ID пристрою, тому зміна браузера або очищення даних браузера вимагатиме повторного сполучення. -## Персональна ідентичність (локально в браузері) +## Особиста ідентичність (локально в браузері) Control UI підтримує персональну ідентичність для кожного браузера (відображуване ім’я та -аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона -зберігається в сховищі браузера, прив’язана до поточного профілю браузера і не -синхронізується з іншими пристроями та не зберігається на сервері поза звичайними -метаданими авторства transcript у повідомленнях, які ви фактично надсилаєте. Очищення -даних сайту або зміна браузера скидає її до порожнього значення. +аватар), яка додається до вихідних повідомлень для атрибуції у спільних сесіях. Вона +зберігається в сховищі браузера, прив’язана до поточного профілю браузера й не +синхронізується з іншими пристроями та не зберігається на сервері поза звичайними метаданими +авторства в транскрипті для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або +зміна браузера скидає її до порожнього значення. -## Endpoint runtime-конфігурації +## Кінцева точка конфігурації runtime -Control UI отримує свої runtime-налаштування з -`/__openclaw/control-ui-config.json`. Цей endpoint захищений тією самою auth Gateway, що -й решта HTTP-поверхні: неавтентифіковані браузери не можуть його отримати, а -успішне отримання вимагає або вже дійсного токена/пароля Gateway, або ідентичності -Tailscale Serve, або ідентичності trusted-proxy. +Control UI отримує свої налаштування runtime з +`/__openclaw/control-ui-config.json`. Доступ до цієї кінцевої точки захищено тією самою +автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть +отримати її, а успішне отримання вимагає або вже чинного токена/пароля gateway, +ідентичності Tailscale Serve або ідентичності trusted-proxy. ## Підтримка мов Control UI може локалізуватися під час першого завантаження на основі локалі вашого браузера. -Щоб змінити це пізніше, відкрийте **Overview -> Gateway Access -> Language**. Вибір +Щоб змінити її пізніше, відкрийте **Overview -> Gateway Access -> Language**. Перемикач локалі знаходиться в картці Gateway Access, а не в розділі Appearance. - Підтримувані локалі: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `tr`, `uk`, `id`, `pl`, `th` -- Неанглійські переклади ліниво завантажуються в браузері. -- Вибрана локаль зберігається в сховищі браузера і повторно використовується під час наступних відвідувань. +- Неангломовні переклади ліниво завантажуються в браузері. +- Вибрана локаль зберігається в сховищі браузера й повторно використовується під час наступних відвідувань. - Відсутні ключі перекладу повертаються до англійської. -## Що він уміє (зараз) +## Що він може робити (сьогодні) -- Чат із моделлю через Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`) -- Безпосередньо звертатися до OpenAI Realtime з браузера через WebRTC. Gateway - створює короткоживучий секрет клієнта Realtime через `talk.realtime.session`; браузер - надсилає аудіо мікрофона безпосередньо до OpenAI і повертає виклики інструмента +- Спілкуватися з моделлю через Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`) +- Напряму взаємодіяти з OpenAI Realtime із браузера через WebRTC. Gateway + карбує короткоживучий секрет клієнта Realtime за допомогою `talk.realtime.session`; браузер + надсилає аудіо з мікрофона безпосередньо до OpenAI і передає виклики інструмента `openclaw_agent_consult` назад через `chat.send` для більшої налаштованої моделі OpenClaw. -- Потокові виклики інструментів + картки виводу live-інструментів у Chat (події агента) -- Канали: статус вбудованих і bundled/external каналів Plugin, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`) -- Instances: список присутності + оновлення (`system-presence`) -- Sessions: список + перевизначення моделі/thinking/fast/verbose/trace/reasoning для кожної сесії (`sessions.list`, `sessions.patch`) -- Dreams: статус Dreaming, перемикач увімкнення/вимкнення і читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`) -- Завдання Cron: список/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`) -- Skills: статус, увімкнення/вимкнення, встановлення, оновлення API key (`skills.*`) -- Node: список + caps (`node.list`) -- Погодження exec: редагування allowlist для gateway або Node + політика запиту для `exec host=gateway/node` (`exec.approvals.*`) +- Потоково передавати виклики інструментів + картки живого виводу інструментів у Chat (події агента) +- Канали: статус вбудованих і підключених/зовнішніх каналів Plugin, вхід за QR, і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`) +- Екземпляри: список присутності + оновлення (`system-presence`) +- Сесії: список + перевизначення моделі/мислення/fast/verbose/trace/reasoning для окремої сесії (`sessions.list`, `sessions.patch`) +- Dreams: статус Dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`) +- Завдання Cron: перегляд/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`) +- Skills: статус, увімкнення/вимкнення, встановлення, оновлення API-ключів (`skills.*`) +- Nodes: список + caps (`node.list`) +- Підтвердження exec: редагування списків дозволів gateway або node + політика запитів для `exec host=gateway/node` (`exec.approvals.*`) - Конфігурація: перегляд/редагування `~/.openclaw/openclaw.json` (`config.get`, `config.set`) - Конфігурація: застосування + перезапуск із валідацією (`config.apply`) і пробудження останньої активної сесії -- Записи конфігурації включають guard на основі base-hash, щоб запобігти перезапису паралельних змін -- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також виконують preflight для активного визначення SecretRef для посилань у надісланому payload конфігурації; невизначені активні надіслані посилання відхиляються до запису -- Schema конфігурації + рендеринг форми (`config.schema` / `config.schema.lookup`, - включно з `title` / `description` полів, відповідними UI hints, підсумками - безпосередніх дочірніх елементів, метаданими docs на вузлах nested object/wildcard/array/composition, - а також schema Plugin + каналів, коли вони доступні); редактор Raw JSON - доступний лише тоді, коли snapshot має безпечне raw round-trip -- Якщо snapshot не може безпечно виконати raw round-trip, Control UI примусово використовує режим Form і вимикає режим Raw для цього snapshot -- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, макет `$include`), замість повторного рендерингу сплющеного snapshot, тому зовнішні зміни переживають скидання, коли snapshot може безпечно виконати raw round-trip -- Структуровані значення об’єктів SecretRef у формі відображаються лише для читання в текстових полях, щоб запобігти випадковому пошкодженню object-to-string -- Налагодження: snapshots статусу/здоров’я/моделей + журнал подій + ручні RPC-виклики (`status`, `health`, `models.list`) -- Журнали: live-tail файлових журналів gateway із фільтрацією/експортом (`logs.tail`) -- Оновлення: запуск package/git update + перезапуск (`update.run`) зі звітом про перезапуск +- Записи конфігурації містять захист base-hash, щоб запобігти перезапису одночасних змін +- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також попередньо перевіряють активне розв’язання SecretRef для посилань у надісланому корисному навантаженні конфігурації; нерозв’язані активні надіслані посилання відхиляються до запису +- Схема конфігурації + рендеринг форми (`config.schema` / `config.schema.lookup`, + включно з полями `title` / `description`, відповідними підказками UI, підсумками + безпосередніх дочірніх елементів, метаданими документації для вузлів вкладених object/wildcard/array/composition, + а також схемами plugin + channel, коли вони доступні); редактор Raw JSON + доступний лише тоді, коли знімок підтримує безпечне проходження raw туди й назад +- Якщо знімок не може безпечно пройти raw-цикл туди й назад, Control UI примусово вмикає режим Form і вимикає режим Raw для цього знімка +- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, розкладку `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні зміни переживають скидання, коли знімок може безпечно пройти raw-цикл туди й назад +- Структуровані значення об’єктів SecretRef відображаються лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню через перетворення object у string +- Налагодження: знімки status/health/models + журнал подій + ручні виклики RPC (`status`, `health`, `models.list`) +- Логи: живий tail логів файлів gateway із фільтрацією/експортом (`logs.tail`) +- Оновлення: запуск оновлення пакунка/git + перезапуск (`update.run`) зі звітом про перезапуск Примітки до панелі завдань Cron: -- Для ізольованих завдань доставлення за замовчуванням оголошує підсумок. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски. +- Для ізольованих завдань доставлення за замовчуванням — оголошення підсумку. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски. - Поля channel/target з’являються, коли вибрано announce. -- Режим Webhook використовує `delivery.mode = "webhook"` з `delivery.to`, установленим на дійсну HTTP(S) URL Webhook. +- Режим Webhook використовує `delivery.mode = "webhook"` з `delivery.to`, установленим на дійсну URL-адресу HTTP(S) Webhook. - Для завдань main-session доступні режими доставлення webhook і none. -- Розширені елементи редагування включають delete-after-run, clear agent override, точні/зміщені параметри Cron, - перевизначення model/thinking агента та перемикачі best-effort delivery. -- Валідація форми вбудована, з помилками на рівні полів; невалідні значення вимикають кнопку збереження, доки їх не буде виправлено. -- Задайте `cron.webhookToken`, щоб надсилати окремий bearer token; якщо його не вказано, Webhook надсилається без заголовка auth. -- Застарілий fallback: збережені застарілі завдання з `notify: true` і далі можуть використовувати `cron.webhook`, доки їх не буде мігровано. +- Розширені елементи керування редагуванням включають delete-after-run, clear agent override, параметри exact/stagger для cron, + перевизначення model/thinking для агента та перемикачі best-effort delivery. +- Валідація форми виконується вбудовано з помилками на рівні полів; недійсні значення вимикають кнопку збереження, доки їх не буде виправлено. +- Установіть `cron.webhookToken`, щоб надсилати окремий bearer-токен; якщо його не вказано, webhook надсилається без заголовка автентифікації. +- Застарілий запасний варіант: збережені застарілі завдання з `notify: true` усе ще можуть використовувати `cron.webhook`, доки їх не буде мігровано. ## Поведінка чату -- `chat.send` є **неблокувальним**: він одразу підтверджує через `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`. +- `chat.send` є **неблокувальним**: він негайно підтверджує запитом `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`. - Повторне надсилання з тим самим `idempotencyKey` повертає `{ status: "in_flight" }` під час виконання та `{ status: "ok" }` після завершення. -- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи transcript занадто великі, Gateway може обрізати довгі текстові поля, пропускати великі блоки метаданих і замінювати надмірно великі повідомлення заповнювачем (`[chat.history omitted: message too large]`). -- Згенеровані помічником зображення зберігаються як керовані посилання media і повертаються через автентифіковані URL media Gateway, тому перезавантаження не залежить від того, що сирі payload зображень base64 залишаються у відповіді історії чату. -- `chat.history` також прибирає теги inline directive, які призначені лише для відображення, із видимого тексту помічника (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), payload XML викликів інструментів у plain-text (включно з `...`, `...`, `...`, `...` і обрізаними блоками викликів інструментів), а також витіклі токени керування моделлю ASCII/full-width і пропускає записи помічника, у яких увесь видимий текст — це лише точний тихий токен `NO_REPLY` / `no_reply`. -- Під час активного надсилання та остаточного оновлення історії вигляд чату зберігає локальні - оптимістичні повідомлення користувача/помічника видимими, якщо `chat.history` тимчасово повертає - старіший snapshot; канонічний transcript замінює ці локальні повідомлення, щойно - історія Gateway наздожене. -- `chat.inject` додає примітку помічника до transcript сесії та розсилає подію `chat` для оновлень лише UI (без запуску агента, без доставлення в канал). -- Вибір моделі та thinking у заголовку чату одразу змінює активну сесію через `sessions.patch`; це стійкі перевизначення сесії, а не параметри надсилання лише на один хід. -- Коли свіжі звіти Gateway про використання сесії показують високий тиск контексту, область компонування чату - показує сповіщення про контекст і, на рекомендованих рівнях Compaction, кнопку - compact, яка запускає звичайний шлях Compaction сесії. Застарілі snapshots - токенів приховуються, доки Gateway знову не повідомить про свіже використання. -- Talk mode використовує зареєстрований provider realtime voice, який підтримує браузерні - WebRTC-сесії. Налаштуйте OpenAI через `talk.provider: "openai"` плюс - `talk.providers.openai.apiKey`, або повторно використайте конфігурацію provider-а realtime для Voice Call. Браузер ніколи не отримує стандартний API key OpenAI; він отримує - лише тимчасовий секрет клієнта Realtime. Realtime voice Google Live підтримується - для backend-мостів Voice Call і Google Meet, але ще не для цього шляху - браузерного WebRTC. Prompt сесії Realtime збирається Gateway; - `talk.realtime.session` не приймає перевизначення інструкцій від викликача. -- У компонувальнику Chat елемент керування Talk — це кнопка хвиль поруч із - кнопкою диктування мікрофоном. Коли Talk запускається, рядок стану компонувальника показує +- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи транскрипту надто великі, Gateway може усікати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надмірно великі повідомлення заповнювачем (`[chat.history omitted: message too large]`). +- Згенеровані асистентом зображення зберігаються як керовані посилання на медіа й повторно віддаються через автентифіковані URL-адреси медіа Gateway, тому перезавантаження не залежать від того, чи залишаються сирі base64-корисні навантаження зображень у відповіді історії чату. +- `chat.history` також прибирає вбудовані теги директив, призначені лише для відображення, із видимого тексту асистента (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-корисні навантаження викликів інструментів у звичайному тексті (включно з `...`, `...`, `...`, `...` і усіченими блоками викликів інструментів), а також витеклі ASCII/повноширинні токени керування моделлю, і пропускає записи асистента, у яких весь видимий текст — це лише точний тихий токен `NO_REPLY` / `no_reply`. +- Під час активного надсилання та остаточного оновлення історії подання чату зберігає локальні + оптимістичні повідомлення користувача/асистента видимими, якщо `chat.history` тимчасово повертає + старіший знімок; канонічний транскрипт замінює ці локальні повідомлення, щойно + історія Gateway наздожене їх. +- `chat.inject` додає нотатку асистента до транскрипту сесії та транслює подію `chat` для оновлень лише UI (без запуску агента, без доставлення в канал). +- Перемикачі моделі та мислення в заголовку чату негайно змінюють активну сесію через `sessions.patch`; це сталі перевизначення сесії, а не параметри надсилання лише для одного ходу. +- Коли свіжі звіти про використання сесії Gateway показують високий тиск контексту, область + компонувальника чату показує сповіщення про контекст і, на рекомендованих рівнях Compaction, + кнопку compact, яка запускає звичайний шлях Compaction сесії. Застарілі + знімки токенів приховуються, доки Gateway знову не повідомить про свіже використання. +- Режим Talk використовує зареєстрованого realtime-провайдера голосу, який підтримує сесії WebRTC у браузері. Налаштуйте OpenAI через `talk.provider: "openai"` разом із + `talk.providers.openai.apiKey`, або повторно використайте конфігурацію realtime-провайдера Voice Call. Браузер ніколи не отримує стандартний API-ключ OpenAI; він отримує + лише ефемерний секрет клієнта Realtime. Голос Google Live realtime підтримується для бекендового Voice Call і мостів Google Meet, але ще не для цього браузерного + шляху WebRTC. Підказка сесії Realtime збирається Gateway; + `talk.realtime.session` не приймає перевизначення інструкцій, надані викликачем. +- У компонувальнику Chat елемент керування Talk — це кнопка з хвилями поруч із + кнопкою диктування з мікрофона. Коли Talk запускається, у рядку стану компонувальника відображається `Connecting Talk...`, потім `Talk live`, поки аудіо підключено, або - `Asking OpenClaw...`, поки виклик інструмента realtime консультується з налаштованою + `Asking OpenClaw...`, поки виклик realtime-інструмента консультується з налаштованою більшою моделлю через `chat.send`. - Зупинка: - Натисніть **Stop** (викликає `chat.abort`) - - Поки запуск активний, звичайні наступні повідомлення стають у чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це продовження в поточний хід. + - Поки запуск активний, звичайні наступні повідомлення ставляться в чергу. Натисніть **Steer** на повідомленні в черзі, щоб вбудувати це наступне повідомлення в поточний хід. - Введіть `/stop` (або окремі фрази переривання, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза смугою - - `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків для цієї сесії -- Часткове збереження після переривання: - - Коли запуск перервано, частковий текст помічника все ще може показуватися в UI - - Gateway зберігає частковий текст помічника після переривання в історії transcript, коли є буферизований вивід - - Збережені записи включають метадані переривання, щоб споживачі transcript могли відрізняти часткові записи після переривання від звичайного завершеного виводу + - `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків цієї сесії +- Часткове збереження при перериванні: + - Коли запуск перервано, частковий текст асистента все ще може відображатися в UI + - Gateway зберігає частковий текст асистента, перерваний під час виконання, в історії транскрипту, коли існує буферизований вивід + - Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізнити часткові перервані фрагменти від звичайно завершеного виводу ## Вбудовані hosted-елементи -Повідомлення помічника можуть відображати вбудований hosted web content через shortcode `[embed ...]`. -Політика sandbox для iframe керується через +Повідомлення асистента можуть відображати вбудований hosted вебвміст за допомогою шорткоду `[embed ...]`. +Політика пісочниці iframe керується параметром `gateway.controlUi.embedSandbox`: -- `strict`: вимикає виконання скриптів усередині вбудованих hosted-елементів -- `scripts`: дозволяє інтерактивні вбудовані елементи, зберігаючи ізоляцію походження; це - значення за замовчуванням, і його зазвичай достатньо для самодостатніх браузерних ігор/віджетів -- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для документів того самого сайту, - яким навмисно потрібні ширші привілеї +- `strict`: вимикає виконання скриптів усередині hosted-вбудовувань +- `scripts`: дозволяє інтерактивні вбудовування, зберігаючи ізоляцію origin; це + значення за замовчуванням і зазвичай його достатньо для самодостатніх браузерних ігор/віджетів +- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для same-site + документів, яким навмисно потрібні ширші привілеї Приклад: @@ -216,19 +215,19 @@ Control UI може локалізуватися під час першого з } ``` -Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна -поведінка same-origin. Для більшості згенерованих агентом ігор та інтерактивних canvas -безпечнішим вибором є `scripts`. +Використовуйте `trusted` лише тоді, коли вбудований документ справді потребує +поведінки same-origin. Для більшості згенерованих агентом ігор та інтерактивних полотен `scripts` — +безпечніший вибір. -Абсолютні зовнішні URL вбудованих елементів `http(s)` за замовчуванням залишаються заблокованими. Якщо ви -навмисно хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, задайте +Абсолютні зовнішні URL-адреси вбудовувань `http(s)` залишаються заблокованими за замовчуванням. Якщо ви +навмисно хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, встановіть `gateway.controlUi.allowExternalEmbedUrls: true`. ## Доступ Tailnet (рекомендовано) ### Інтегрований Tailscale Serve (бажано) -Залиште Gateway на local loopback і дозвольте Tailscale Serve проксувати його через HTTPS: +Тримайте Gateway на loopback і дозвольте Tailscale Serve проксувати його через HTTPS: ```bash openclaw gateway --tailscale serve @@ -238,20 +237,20 @@ openclaw gateway --tailscale serve - `https:///` (або ваш налаштований `gateway.controlUi.basePath`) -За замовчуванням запити Serve до Control UI/WebSocket можуть проходити auth через заголовки ідентичності Tailscale +За замовчуванням запити Serve для Control UI/WebSocket можуть автентифікуватися через заголовки ідентичності Tailscale (`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw -перевіряє ідентичність, визначаючи адресу `x-forwarded-for` через -`tailscale whois` і звіряючи її із заголовком, і приймає це лише тоді, коли -запит потрапляє на local loopback із заголовками Tailscale `x-forwarded-*`. Задайте +перевіряє ідентичність, розв’язуючи адресу `x-forwarded-for` за допомогою +`tailscale whois` і звіряючи її із заголовком, і приймає їх лише тоді, коли +запит потрапляє на loopback із заголовками Tailscale `x-forwarded-*`. Установіть `gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або `"password"`. -Для цього асинхронного шляху ідентичності Serve невдалі спроби auth для тієї самої IP-адреси клієнта -і того самого scope auth серіалізуються до записів rate-limit. Тому одночасні помилкові повторні спроби -з того самого браузера можуть показувати `retry later` для другого запиту -замість двох звичайних невідповідностей, які змагаються паралельно. -Auth Serve без токена припускає, що host Gateway є довіреним. Якщо на цьому host може працювати -недовірений локальний код, вимагайте auth через токен/пароль. +Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта +та тієї самої області автентифікації серіалізуються перед записами обмеження частоти. +Тому одночасні невдалі повторні спроби з того самого браузера можуть показувати `retry later` у другому запиті +замість двох звичайних невідповідностей, що змагаються паралельно. +Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості +може виконуватися недовірений локальний код, вимагайте автентифікацію токеном/паролем. ### Прив’язка до tailnet + токен @@ -266,22 +265,22 @@ openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)" Вставте відповідний спільний секрет у налаштування UI (він надсилається як `connect.params.auth.token` або `connect.params.auth.password`). -## Небезпечний HTTP +## Незахищений HTTP -Якщо ви відкриваєте dashboard через звичайний HTTP (`http://` або `http://`), -браузер працює в **незахищеному контексті** й блокує WebCrypto. За замовчуванням +Якщо ви відкриваєте інформаційну панель через звичайний HTTP (`http://` або `http://`), +браузер працює в **незахищеному контексті** та блокує WebCrypto. За замовчуванням OpenClaw **блокує** підключення Control UI без ідентичності пристрою. Задокументовані винятки: - сумісність незахищеного HTTP лише для localhost з `gateway.controlUi.allowInsecureAuth=true` -- успішний auth оператора Control UI через `gateway.auth.mode: "trusted-proxy"` -- аварійний режим `gateway.controlUi.dangerouslyDisableDeviceAuth=true` +- успішна автентифікація оператора в Control UI через `gateway.auth.mode: "trusted-proxy"` +- аварійний варіант `gateway.controlUi.dangerouslyDisableDeviceAuth=true` -**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкривайте UI локально: +**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкрийте UI локально: - `https:///` (Serve) -- `http://127.0.0.1:18789/` (на host Gateway) +- `http://127.0.0.1:18789/` (на хості gateway) **Поведінка перемикача insecure-auth:** @@ -297,12 +296,12 @@ OpenClaw **блокує** підключення Control UI без іденти `allowInsecureAuth` — це лише локальний перемикач сумісності: -- Він дозволяє сесіям localhost у Control UI продовжуватися без ідентичності пристрою в +- Він дозволяє сесіям Control UI на localhost продовжувати роботу без ідентичності пристрою в незахищених HTTP-контекстах. - Він не обходить перевірки сполучення. -- Він не послаблює вимоги до ідентичності віддалених пристроїв (не localhost). +- Він не послаблює вимоги до ідентичності віддаленого (не localhost) пристрою. -**Лише для аварійного використання:** +**Лише аварійний варіант:** ```json5 { @@ -315,76 +314,77 @@ OpenClaw **блокує** підключення Control UI без іденти ``` `dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Control UI і є -серйозним послабленням безпеки. Після аварійного використання швидко поверніть попередні налаштування. +серйозним зниженням рівня безпеки. Швидко скасуйте це після аварійного використання. Примітка щодо trusted-proxy: -- успішний trusted-proxy auth може допустити сесії **оператора** Control UI без +- успішна автентифікація trusted-proxy може допускати **операторські** сесії Control UI без ідентичності пристрою -- це **не** поширюється на сесії Control UI з роллю Node -- reverse proxy на тому самому host для local loopback усе одно не задовольняють trusted-proxy auth; див. - [Auth trusted proxy](/uk/gateway/trusted-proxy-auth) +- це **не** поширюється на сесії Control UI з роллю node +- reverse proxy на loopback того самого хоста все одно не задовольняють автентифікацію trusted-proxy; див. + [Trusted proxy auth](/uk/gateway/trusted-proxy-auth) -Див. [Tailscale](/uk/gateway/tailscale) для інструкцій із налаштування HTTPS. +Див. [Tailscale](/uk/gateway/tailscale) для вказівок щодо налаштування HTTPS. -## Content Security Policy +## Політика безпеки вмісту -Control UI постачається із жорсткою політикою `img-src`: дозволені лише ресурси **того самого походження** і URL `data:`. Віддалені URL `http(s)` і URL з відносним до протоколу записом браузер відхиляє і не виконує мережевих запитів. +Control UI постачається з жорсткою політикою `img-src`: дозволені лише ресурси **same-origin**, URL `data:` і локально згенеровані URL `blob:`. Віддалені URL `http(s)` та відносні до протоколу URL зображень відхиляються браузером і не ініціюють мережевих запитів. Що це означає на практиці: -- Аватари й зображення, які віддаються за відносними шляхами (наприклад `/avatars/`), і далі відображаються. -- Вбудовані URL `data:image/...` і далі відображаються (це корисно для payload у межах протоколу). -- Віддалені URL аватарів, які надає метадані каналу, прибираються helper-ами аватарів у Control UI і замінюються вбудованим логотипом/значком, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень. +- Аватари та зображення, які обслуговуються за відносними шляхами (наприклад, `/avatars/`), як і раніше відображаються, зокрема автентифіковані маршрути аватарів, які UI отримує та перетворює на локальні URL `blob:`. +- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для корисних навантажень усередині протоколу). +- Локальні URL `blob:`, створені Control UI, як і раніше відображаються. +- Віддалені URL аватарів, які надходять із метаданих каналів, видаляються в допоміжних функціях аватарів Control UI і замінюються вбудованим логотипом/значком, тож скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень. -Щоб отримати цю поведінку, нічого змінювати не потрібно — вона завжди ввімкнена й не налаштовується. +Щоб отримати таку поведінку, нічого змінювати не потрібно — вона завжди ввімкнена й не налаштовується. -## Auth для маршруту аватарів +## Автентифікація маршруту аватара -Коли налаштовано auth Gateway, endpoint аватарів у Control UI вимагає той самий токен Gateway, що й решта API: +Коли налаштовано автентифікацію gateway, кінцева точка аватарів Control UI вимагає той самий токен gateway, що й решта API: - `GET /avatar/` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/?meta=1` повертає метадані аватара за тим самим правилом. -- Неавтентифіковані запити до обох маршрутів відхиляються (аналогічно сусідньому маршруту media помічника). Це запобігає витоку ідентичності агента через маршрут аватарів на host, які в іншому разі захищені. -- Сам Control UI передає токен Gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тому зображення все одно відображається в dashboard. +- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (аналогічно до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому захищені. +- Сам Control UI пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані URL `blob:`, тож зображення все одно відображається в інформаційних панелях. -Якщо ви вимкнете auth Gateway (не рекомендується на спільних host), маршрут аватарів також стане неавтентифікованим, як і решта gateway. +Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стане неавтентифікованим, узгоджено з рештою gateway. ## Збирання UI -Gateway віддає статичні файли з `dist/control-ui`. Збирайте їх командою: +Gateway обслуговує статичні файли з `dist/control-ui`. Зберіть їх за допомогою: ```bash pnpm ui:build ``` -Необов’язкова абсолютна база (коли вам потрібні фіксовані URL ресурсів): +Необов’язкова абсолютна база (коли вам потрібні фіксовані URL-адреси ресурсів): ```bash OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build ``` -Для локальної розробки (окремий dev server): +Для локальної розробки (окремий dev-сервер): ```bash pnpm ui:dev ``` -Потім спрямуйте UI на вашу URL Gateway WS (наприклад `ws://127.0.0.1:18789`). +Потім вкажіть UI URL-адресу вашого Gateway WS (наприклад, `ws://127.0.0.1:18789`). -## Налагодження/тестування: dev server + віддалений Gateway +## Налагодження/тестування: dev-сервер + віддалений Gateway Control UI — це статичні файли; ціль WebSocket налаштовується і може -відрізнятися від HTTP-походження. Це зручно, коли ви хочете локальний Vite dev server, -але Gateway працює в іншому місці. +відрізнятися від HTTP origin. Це зручно, коли ви хочете використовувати dev-сервер Vite +локально, але Gateway працює в іншому місці. -1. Запустіть dev server UI: `pnpm ui:dev` +1. Запустіть dev-сервер UI: `pnpm ui:dev` 2. Відкрийте URL на кшталт: ```text http://localhost:5173/?gatewayUrl=ws://:18789 ``` -Необов’язковий одноразовий auth (за потреби): +Необов’язкова одноразова автентифікація (за потреби): ```text http://localhost:5173/?gatewayUrl=wss://:18789#token= @@ -392,20 +392,20 @@ http://localhost:5173/?gatewayUrl=wss://:18789#token=:18789#token=