chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-24 04:50:43 +00:00
parent 4c64c1474a
commit e310f44979

View File

@ -1,28 +1,28 @@
---
read_when:
- Ви хочете керувати Gateway з браузера
- Ви хочете доступ до Tailnet без SSH-тунелів
summary: Браузерний інтерфейс керування для Gateway (чат, вузли, конфігурація)
title: Інтерфейс керування
- Ви хочете доступ Tailnet без SSH-тунелів
summary: Браузерний UI керування для Gateway (чат, вузли, конфігурація)
title: UI керування
x-i18n:
generated_at: "2026-04-24T04:35:30Z"
generated_at: "2026-04-24T04:49:08Z"
model: gpt-5.4
provider: openai
source_hash: 3dd1234ef8c7fbb753cdb1015426323b75916833d4245b212793a7ee66cfa86f
source_hash: 2ad0d0cef7d842eddf665ba50f37403df258b17d4c072d22a30d1bc3830dc467
source_path: web/control-ui.md
workflow: 15
---
Інтерфейс керування — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується через Gateway:
UI керування — це невеликий односторінковий застосунок **Vite + Lit**, який Gateway віддає:
- типово: `http://<host>:18789/`
- за замовчуванням: `http://<host>:18789/`
- необов’язковий префікс: задайте `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/))
@ -36,15 +36,15 @@ x-i18n:
- заголовки ідентифікації trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"`
Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера
і вибрану URL-адресу gateway; паролі не зберігаються. Onboarding зазвичай
генерує токен gateway для автентифікації зі спільним секретом під час першого підключення, але
та вибрану URL-адресу gateway; паролі не зберігаються. Під час початкового налаштування зазвичай
створюється токен gateway для автентифікації зі спільним секретом при першому підключенні, але
автентифікація паролем також працює, коли `gateway.auth.mode` має значення `"password"`.
## Сполучення пристрою (перше підключення)
Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway
Коли ви підключаєтеся до UI керування з нового браузера або пристрою, Gateway
вимагає **одноразове підтвердження сполучення** — навіть якщо ви в тій самій Tailnet
з `gateway.auth.allowTailscale: true`. Це захід безпеки для запобігання
із `gateway.auth.allowTailscale: true`. Це захід безпеки для запобігання
несанкціонованому доступу.
**Що ви побачите:** "disconnected (1008): pairing required"
@ -52,147 +52,148 @@ x-i18n:
**Щоб підтвердити пристрій:**
```bash
# Перелічити запити, що очікують
# Показати список запитів, що очікують
openclaw devices list
# Підтвердити за ID запиту
openclaw devices approve <requestId>
```
Якщо браузер повторює спробу сполучення зі зміненими даними автентифікації (роль/області доступу/public
Якщо браузер повторно надсилає запит на сполучення зі зміненими даними автентифікації (роль/області доступу/public
key), попередній запит, що очікує, замінюється, і створюється новий `requestId`.
Перед підтвердженням знову виконайте `openclaw devices list`.
Якщо браузер уже сполучений і ви змінюєте для нього доступ із читання на
доступ на запис/адміністрування, це розглядається як підвищення рівня підтвердження, а не як тихе
повторне підключення. OpenClaw зберігає попереднє підтвердження активним, блокує ширше повторне підключення
Якщо браузер уже сполучений і ви змінюєте доступ із читання на
доступ запису/адміністратора, це вважається підвищенням рівня підтвердження, а не
тихим повторним підключенням. OpenClaw зберігає старе підтвердження активним, блокує ширше повторне підключення
і просить вас явно підтвердити новий набір областей доступу.
Після підтвердження пристрій запам’ятовується і не потребуватиме повторного підтвердження, якщо
Після підтвердження пристрій запам’ятовується і не вимагатиме повторного підтвердження, якщо
ви не відкличете його через `openclaw devices revoke --device <id> --role <role>`. Див.
[CLI пристроїв](/uk/cli/devices) щодо ротації токенів і відкликання.
[Devices CLI](/uk/cli/devices) щодо ротації токенів і відкликання.
**Примітки:**
- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`)
підтверджуються автоматично.
- Браузерні підключення через Tailnet і LAN однаково вимагають явного підтвердження, навіть коли
вони походять із тієї самої машини.
- Підключення браузера через Tailnet і LAN все одно вимагають явного підтвердження, навіть якщо
вони виконуються з тієї самої машини.
- Кожен профіль браузера генерує унікальний ID пристрою, тому зміна браузера або
очищення даних браузера потребуватиме повторного сполучення.
очищення даних браузера вимагатиме повторного сполучення.
## Особиста ідентичність (локально в браузері)
Control UI підтримує особисту ідентичність для кожного браузера (відображуване ім’я та
UI керування підтримує особисту ідентичність для кожного браузера (відображуване ім’я та
аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона
зберігається у сховищі браузера, прив’язана до поточного профілю браузера та не
синхронізується з іншими пристроями і не зберігається на сервері, окрім звичайних
метаданих авторства в транскрипті для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
зміна браузера скидає її до порожнього стану.
зберігається в сховищі браузера, прив’язана до поточного профілю браузера і не
синхронізується з іншими пристроями та не зберігається на сервері понад звичайні
метадані авторства в стенограмі для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
зміна браузера скидає її до порожнього значення.
## Endpoint конфігурації середовища виконання
## Кінцева точка конфігурації виконання
Control UI отримує свої налаштування середовища виконання з
`/__openclaw/control-ui-config.json`. Доступ до цього endpoint захищений тією ж
UI керування отримує свої налаштування виконання з
`/__openclaw/control-ui-config.json`. Доступ до цієї кінцевої точки захищений тією самою
автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть
отримати його, а успішне отримання вимагає або вже дійсного токена/пароля gateway,
ідентифікації Tailscale Serve, або ідентичності trusted-proxy.
отримати її, а успішне отримання вимагає або вже дійсного токена/пароля gateway,
ідентифікації Tailscale Serve, або ідентифікації trusted-proxy.
## Підтримка мов
Control UI може локалізуватися під час першого завантаження на основі локалі вашого браузера.
Щоб змінити її пізніше, відкрийте **Overview -> Gateway Access -> Language**. Засіб вибору
локалі розташований у картці Gateway Access, а не в розділі Appearance.
UI керування може локалізуватися під час першого завантаження на основі локалі вашого браузера.
Щоб пізніше перевизначити її, відкрийте **Огляд -> Доступ до Gateway -> Мова**. Перемикач
локалі знаходиться в картці доступу до Gateway, а не в розділі «Зовнішній вигляд».
- Підтримувані локалі: `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 Realtime з браузера через WebRTC. Gateway
випускає короткоживучий клієнтський секрет Realtime через `talk.realtime.session`; браузер
надсилає аудіо з мікрофона безпосередньо до OpenAI і пересилає виклики інструмента
`openclaw_agent_consult` назад через `chat.send` для більшої
налаштованої моделі OpenClaw.
- Потокова передача викликів інструментів + картки виводу інструментів у реальному часі в Chat (події агента)
- Канали: статус вбудованих, bundled і external каналів Plugin, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
- Потокове передавання викликів інструментів + картки виводу інструментів у реальному часі в чаті (події агента)
- Канали: вбудовані, а також стан bundled/external plugin каналів, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
- Екземпляри: список присутності + оновлення (`system-presence`)
- Сесії: список + перевизначення model/thinking/fast/verbose/trace/reasoning для кожної сесії (`sessions.list`, `sessions.patch`)
- Dreams: статус dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`)
- Сесії: список + перевизначення для кожної сесії моделі/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-ключів (`skills.*`)
- Nodes: список + обмеження (`node.list`)
- Підтвердження exec: редагування списків дозволів gateway або node + політика запиту для `exec host=gateway/node` (`exec.approvals.*`)
- Node: список + обмеження (`node.list`)
- Підтвердження exec: редагування списків дозволів gateway або node + політика запитів для `exec host=gateway/node` (`exec.approvals.*`)
- Конфігурація: перегляд/редагування `~/.openclaw/openclaw.json` (`config.get`, `config.set`)
- Конфігурація: застосування + перезапуск із перевіркою (`config.apply`) і пробудження останньої активної сесії
- Запис конфігурації включає захист base-hash, щоб запобігти перезапису одночасних змін
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також заздалегідь перевіряють активне розв’язання SecretRef для посилань у надісланому payload конфігурації; нерозв’язані активні надіслані посилання відхиляються до запису
- Конфігурація: застосування + перезапуск із валідацією (`config.apply`) і пробудження останньої активної сесії
- Записи конфігурації містять захист base-hash, щоб запобігти перезапису одночасних змін
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також виконують попередню перевірку активного розв’язання SecretRef для посилань у надісланому конфігураційному payload; нерозв’язані активні надіслані посилання відхиляються до запису
- Схема конфігурації + рендеринг форми (`config.schema` / `config.schema.lookup`,
включно з полями `title` / `description`, відповідними підказками UI, негайними підсумками
дочірніх елементів, метаданими docs для вкладених вузлів object/wildcard/array/composition,
а також схемами Plugin і каналів, коли вони доступні); редактор Raw JSON
доступний лише тоді, коли знімок має безпечний круговий перехід raw
- Якщо знімок не може безпечно пройти круговий перехід raw text, Control UI примусово вмикає режим Form і вимикає режим Raw для цього знімка
- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, макет `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні зміни зберігаються після скидання, коли знімок може безпечно пройти круговий перехід
- Структуровані значення об’єктів SecretRef відображаються лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню через перетворення object-to-string
- Налагодження: знімки status/health/models + журнал подій + ручні виклики RPC (`status`, `health`, `models.list`)
- Логи: tail у реальному часі для файлових логів gateway із фільтрацією/експортом (`logs.tail`)
- Оновлення: запуск оновлення package/git + перезапуск (`update.run`) зі звітом про перезапуск
включно з `title` / `description` поля, відповідними UI-підказками, зведеннями
безпосередніх дочірніх елементів, метаданими документації для вузлів вкладених об’єктів/wildcard/масивів/композицій,
а також схемами plugin і каналів, коли вони доступні); редактор Raw JSON
доступний лише тоді, коли snapshot має безпечний round-trip необробленого вигляду
- Якщо snapshot не можна безпечно виконати round-trip як необроблений текст, UI керування примусово вмикає режим Form і вимикає режим Raw для цього snapshot
- У редакторі Raw JSON кнопка "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, розмітку `$include`), замість повторного рендерингу сплощеного snapshot, тож зовнішні зміни переживають скидання, коли snapshot можна безпечно виконати round-trip
- Структуровані значення об’єктів SecretRef рендеряться як лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню через перетворення об’єкта на рядок
- Налагодження: знімки status/health/models + журнал подій + ручні RPC-виклики (`status`, `health`, `models.list`)
- Журнали: live tail журналів файлів gateway із фільтрацією/експортом (`logs.tail`)
- Оновлення: запуск оновлення пакунка/git + перезапуск (`update.run`) зі звітом про перезапуск
Примітки до панелі завдань Cron:
- Для ізольованих завдань типовою доставкою є оголошення підсумку. За потреби можна переключити на none для лише внутрішніх запусків.
- Для ізольованих завдань доставлення за замовчуванням оголошує зведення. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
- Поля channel/target з’являються, коли вибрано announce.
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, встановленим на дійсну HTTP(S) URL-адресу Webhook.
- Для завдань main-session доступні режими доставки webhook і none.
- Розширені елементи редагування включають delete-after-run, clear agent override, параметри cron exact/stagger,
перевизначення agent model/thinking та перемикачі best-effort delivery.
- Перевірка форми виконується вбудовано з помилками на рівні полів; недійсні значення вимикають кнопку збереження, доки їх не буде виправлено.
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, установленим на дійсну HTTP(S) URL-адресу Webhook.
- Для завдань main-session доступні режими доставлення webhook і none.
- Розширені елементи редагування містять видалення після запуску, очищення перевизначення агента, точні/зміщені параметри cron,
перевизначення model/thinking агента та перемикачі доставлення best-effort.
- Валідація форми вбудована з помилками на рівні полів; некоректні значення вимикають кнопку збереження, доки їх не буде виправлено.
- Установіть `cron.webhookToken`, щоб надсилати окремий bearer token; якщо його не задано, webhook надсилається без заголовка auth.
- Застарілий запасний варіант: збережені legacy jobs із `notify: true` усе ще можуть використовувати `cron.webhook`, доки не буде виконано міграцію.
- Застарілий fallback: збережені legacy-завдання з `notify: true` все ще можуть використовувати `cron.webhook`, доки не буде виконано міграцію.
## Поведінка чату
- `chat.send` є **неблокувальним**: він одразу підтверджується з `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`.
- Повторне надсилання з тим самим `idempotencyKey` повертає `{ status: "in_flight" }` під час виконання і `{ status: "ok" }` після завершення.
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Якщо записи транскрипту надто великі, Gateway може обрізати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надмірно великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
- Зображення assistant/generated зберігаються як керовані посилання на медіа й повертаються через автентифіковані URL-адреси медіа Gateway, тож повторні завантаження не залежать від того, чи залишився raw payload зображення base64 у відповіді історії чату.
- `chat.history` також прибирає з видимого тексту assistant inline-теги директив лише для відображення (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), plain-text XML payloads викликів інструментів (включно з `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізаними блоками викликів інструментів), а також leaked ASCII/full-width токени керування моделлю, і пропускає записи assistant, у яких увесь видимий текст — це лише точний silent token `NO_REPLY` / `no_reply`.
- `chat.inject` додає примітку assistant до транскрипту сесії та транслює подію `chat` для оновлень лише UI (без запуску агента, без доставки в канал).
- Засоби вибору model і thinking у заголовку чату негайно змінюють активну сесію через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише на один хід.
- Режим Talk використовує зареєстрованого постачальника realtime voice. Налаштуйте OpenAI через
`talk.provider: "openai"` разом із `talk.providers.openai.apiKey`, або повторно використайте конфігурацію
постачальника realtime для Voice Call. Браузер ніколи не отримує стандартний
API-ключ OpenAI; він отримує лише тимчасовий секрет клієнта Realtime.
- У компоновщику Chat елемент керування Talk — це кнопка з хвилями поруч із
кнопкою диктування з мікрофона. Коли Talk запускається, у рядку стану компоновщика
показується `Connecting Talk...`, потім `Talk live`, коли аудіо підключено, або
`Asking OpenClaw...`, коли виклик інструмента realtime консультується з налаштованою
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи стенограми надто великі, Gateway може усікати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надмірно великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
- Зображення помічника/згенеровані зображення зберігаються як керовані медіапосилання і знову віддаються через автентифіковані медіа-URL Gateway, тож перезавантаження не залежать від того, чи залишаються необроблені payload-и зображень base64 у відповіді історії чату.
- `chat.history` також прибирає inline-теги директив, призначені лише для відображення, із видимого тексту помічника (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML payload-и викликів інструментів у звичайному тексті (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і усічені блоки викликів інструментів), а також leaked ASCII/full-width токени керування моделлю, і пропускає записи помічника, у яких увесь видимий текст — це лише точний тихий токен `NO_REPLY` / `no_reply`.
- `chat.inject` додає примітку помічника до стенограми сесії та розсилає подію `chat` для оновлень лише UI (без запуску агента, без доставлення через канал).
- Перемикачі моделі й thinking у заголовку чату одразу змінюють активну сесію через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише на один хід.
- Режим Talk використовує зареєстрованого постачальника голосу realtime. Налаштуйте OpenAI за допомогою
`talk.provider: "openai"` разом із `talk.providers.openai.apiKey`, або повторно використайте
конфігурацію realtime-постачальника Voice Call. Браузер ніколи не отримує стандартний
API-ключ OpenAI; він отримує лише ефемерний клієнтський секрет Realtime. Підказка сесії
Realtime збирається Gateway; `talk.realtime.session` не приймає перевизначення інструкцій, надані викликачем.
- У composer чату елемент керування Talk — це кнопка з хвилями поруч із
кнопкою диктування з мікрофона. Коли Talk запускається, рядок статусу composer показує
`Connecting Talk...`, потім `Talk live`, поки підключено аудіо, або
`Asking OpenClaw...`, поки realtime-виклик інструмента консультується з налаштованою
більшою моделлю через `chat.send`.
- Зупинка:
- Натисніть **Stop** (викликає `chat.abort`)
- Поки запуск активний, звичайні наступні повідомлення стають у чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це продовження в поточний хід.
- Введіть `/stop` (або окремі фрази для переривання, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза основним потоком
- `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків цієї сесії
- Збереження часткових результатів після переривання:
- Коли запуск переривається, частковий текст assistant усе ще може відображатися в UI
- Gateway зберігає частковий текст assistant у історії транскрипту, коли існує буферизований вивід
- Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізняти часткові результати після переривання від звичайного завершеного виводу
- Поки запуск активний, звичайні подальші повідомлення стають у чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це подальше повідомлення в поточний хід.
- Введіть `/stop` (або окремі фрази переривання, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза смугою
- `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків для цієї сесії
- Часткове збереження під час переривання:
- Коли запуск переривається, частковий текст помічника все одно може відображатися в UI
- Gateway зберігає частковий текст помічника в історію стенограми перерваного запуску, коли існує буферизований вивід
- Збережені записи містять метадані переривання, щоб споживачі стенограми могли відрізнити часткові фрагменти переривання від звичайного завершеного виводу
## Hosted embeds
Повідомлення assistant можуть відображати вбудований hosted web content за допомогою shortcode `[embed ...]`.
Політика sandbox для iframe контролюється параметром
Повідомлення помічника можуть відображати вбудований розміщений вебвміст за допомогою shortcode `[embed ...]`.
Політика sandbox iframe керується через
`gateway.controlUi.embedSandbox`:
- `strict`: вимикає виконання скриптів усередині hosted embeds
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію origin; це
типове значення, і його зазвичай достатньо для самодостатніх браузерних ігор/віджетів
- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для same-site
документів, яким навмисно потрібні ширші привілеї
значення за замовчуванням і зазвичай його достатньо для самодостатніх браузерних ігор/віджетів
- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для документів того самого сайту,
яким навмисно потрібні ширші привілеї
Приклад:
@ -206,19 +207,19 @@ Control UI може локалізуватися під час першого з
}
```
Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна поведінка
same-origin. Для більшості створених агентом ігор та інтерактивних canvas
`scripts` є безпечнішим вибором.
Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна
поведінка same-origin. Для більшості згенерованих агентом ігор та інтерактивних canvas
`cripts` є безпечнішим вибором.
Абсолютні зовнішні URL-адреси embed `http(s)` типово залишаються заблокованими. Якщо ви
Абсолютні зовнішні URL-адреси embed `http(s)` за замовчуванням залишаються заблокованими. Якщо ви
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, установіть
`gateway.controlUi.allowExternalEmbedUrls: true`.
## Доступ Tailnet (рекомендовано)
### Інтегрований Tailscale Serve (бажано)
### Інтегрований Tailscale Serve (рекомендовано)
Залишайте Gateway на loopback і дозвольте Tailscale Serve проксувати його через HTTPS:
Залиште Gateway на loopback і дозвольте Tailscale Serve проксіювати його через HTTPS:
```bash
openclaw gateway --tailscale serve
@ -228,19 +229,19 @@ openclaw gateway --tailscale serve
- `https://<magicdns>/` (або ваш налаштований `gateway.controlUi.basePath`)
Типово запити Serve для Control UI/WebSocket можуть автентифікуватися через заголовки ідентичності Tailscale
За замовчуванням запити Serve до UI керування/WebSocket можуть автентифікуватися через заголовки ідентифікації Tailscale
(`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw
перевіряє ідентичність, визначаючи адресу `x-forwarded-for` через
`tailscale whois` і звіряючи її із заголовком, і приймає це лише тоді, коли
перевіряє ідентичність, розв’язуючи адресу `x-forwarded-for` за допомогою
`tailscale whois` і звіряючи її із заголовком, і приймає їх лише тоді, коли
запит потрапляє на loopback із заголовками Tailscale `x-forwarded-*`. Установіть
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані
зі спільним секретом навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом
навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
`"password"`.
Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта
та області автентифікації серіалізуються перед записами rate-limit. Тому паралельні
невдалі повторні спроби з того самого браузера можуть показати `retry later` у другому запиті
Для цього асинхронного шляху ідентифікації Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта
та області автентифікації серіалізуються перед записами обмеження швидкості. Тому одночасні хибні повторні спроби
з того самого браузера можуть показувати `retry later` у другому запиті
замість двох звичайних невідповідностей, що змагаються паралельно.
Автентифікація Serve без токена припускає, що вузол gateway є довіреним. Якщо на цьому вузлі
Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості
може виконуватися недовірений локальний код, вимагайте автентифікацію токеном/паролем.
### Прив’язка до tailnet + токен
@ -253,27 +254,27 @@ openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
- `http://<tailscale-ip>:18789/` (або ваш налаштований `gateway.controlUi.basePath`)
Вставте відповідний спільний секрет у налаштування UI (надсилається як
Вставте відповідний спільний секрет у налаштування UI (він надсилається як
`connect.params.auth.token` або `connect.params.auth.password`).
## Незахищений HTTP
Якщо ви відкриваєте інформаційну панель через звичайний HTTP (`http://<lan-ip>` або `http://<tailscale-ip>`),
браузер працює в **незахищеному контексті** і блокує WebCrypto. Типово
OpenClaw **блокує** підключення Control UI без ідентичності пристрою.
браузер працює в **незахищеному контексті** і блокує WebCrypto. За замовчуванням
OpenClaw **блокує** підключення UI керування без ідентичності пристрою.
Задокументовані винятки:
- сумісність із незахищеним HTTP лише для localhost через `gateway.controlUi.allowInsecureAuth=true`
- успішна автентифікація оператора в Control UI через `gateway.auth.mode: "trusted-proxy"`
- сумісність localhost-only для незахищеного HTTP з `gateway.controlUi.allowInsecureAuth=true`
- успішна автентифікація оператора UI керування через `gateway.auth.mode: "trusted-proxy"`
- аварійний варіант `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкривайте UI локально:
**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкрийте UI локально:
- `https://<magicdns>/` (Serve)
- `http://127.0.0.1:18789/` (на вузлі gateway)
- `http://127.0.0.1:18789/` (на хості gateway)
**Поведінка перемикача insecure-auth:**
**Поведінка перемикача незахищеної автентифікації:**
```json5
{
@ -287,7 +288,7 @@ OpenClaw **блокує** підключення Control UI без іденти
`allowInsecureAuth` — це лише локальний перемикач сумісності:
- Він дозволяє сесіям Control UI на localhost продовжувати роботу без ідентичності пристрою в
- Він дозволяє сесіям UI керування на localhost продовжуватися без ідентичності пристрою в
незахищених HTTP-контекстах.
- Він не обходить перевірки сполучення.
- Він не послаблює вимоги до ідентичності пристрою для віддалених підключень (не localhost).
@ -304,44 +305,44 @@ OpenClaw **блокує** підключення Control UI без іденти
}
```
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Control UI і є
серйозним зниженням безпеки. Швидко поверніть попередні налаштування після аварійного використання.
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в UI керування і є
серйозним зниженням безпеки. Після аварійного використання швидко скасуйте цю зміну.
Примітка щодо trusted-proxy:
- успішна автентифікація trusted-proxy може допускати **операторські** сесії Control UI без
- успішна автентифікація trusted-proxy може допускати **операторські** сесії UI керування без
ідентичності пристрою
- це **не** поширюється на сесії Control UI з роллю node
- reverse proxy на loopback на тому самому вузлі все одно не задовольняють автентифікацію trusted-proxy; див.
- це **не** поширюється на сесії UI керування з роллю node
- reverse proxy на loopback того самого хоста все одно не задовольняють автентифікацію trusted-proxy; див.
[Автентифікація Trusted Proxy](/uk/gateway/trusted-proxy-auth)
Див. [Tailscale](/uk/gateway/tailscale) для вказівок із налаштування HTTPS.
Див. [Tailscale](/uk/gateway/tailscale) для рекомендацій щодо налаштування HTTPS.
## Content Security Policy
## Політика безпеки вмісту
Control UI постачається з жорсткою політикою `img-src`: дозволені лише ресурси **того самого origin** і URL `data:`. Віддалені URL з `http(s)` і URL з відносним до протоколу записом відхиляються браузером і не ініціюють мережевих запитів.
UI керування постачається зі суворою політикою `img-src`: дозволені лише ресурси **same-origin** і URL `data:`. Віддалені URL з `http(s)` і відносні до протоколу URL зображень відхиляються браузером і не ініціюють мережевих запитів.
Що це означає на практиці:
- Аватари та зображення, що обслуговуються за відносними шляхами (наприклад, `/avatars/<id>`), як і раніше відображаються.
- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для payloads усередині протоколу).
- Віддалені URL аватарів, що надходять із метаданих каналу, видаляються допоміжними засобами аватарів у Control UI і замінюються вбудованим logo/badge, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
- Аватари й зображення, що віддаються за відносними шляхами (наприклад, `/avatars/<id>`), як і раніше відображаються.
- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для payload-ів усередині протоколу).
- Віддалені URL аватарів, які надсилає метадані каналу, видаляються в допоміжних функціях аватарів UI керування та замінюються вбудованим логотипом/значком, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
Щоб отримати цю поведінку, вам нічого не потрібно змінювати — вона завжди ввімкнена і не налаштовується.
Щоб отримати таку поведінку, нічого змінювати не потрібно — вона завжди ввімкнена й не налаштовується.
## Автентифікація маршруту аватара
Коли налаштована автентифікація gateway, endpoint аватара в Control UI вимагає той самий токен gateway, що й решта API:
Коли налаштовано автентифікацію gateway, кінцева точка аватарів UI керування вимагає той самий токен gateway, що й решта API:
- `GET /avatar/<agentId>` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/<agentId>?meta=1` повертає метадані аватара за тим самим правилом.
- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (аналогічно до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на вузлах, які інакше захищені.
- Сам Control UI пересилає токен gateway як заголовок bearer під час отримання аватарів і використовує автентифіковані blob URL, тому зображення все одно відображається в інформаційних панелях.
- Неавтентифіковані запити до будь-якого з маршрутів відхиляються (аналогічно до сусіднього маршруту медіа помічника). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому разі захищені.
- Сам UI керування пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення як і раніше відображається в інформаційних панелях.
Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних вузлах), маршрут аватара також стане неавтентифікованим, відповідно до решти gateway.
Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стане неавтентифікованим, відповідно до решти gateway.
## Збирання UI
Gateway обслуговує статичні файли з `dist/control-ui`. Зберіть їх за допомогою:
Gateway віддає статичні файли з `dist/control-ui`. Зберіть їх за допомогою:
```bash
pnpm ui:build
@ -359,16 +360,16 @@ OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
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
Control UI — це статичні файли; ціль WebSocket можна налаштувати, і вона може
відрізнятися від HTTP origin. Це зручно, коли ви хочете мати локальний dev server Vite,
а Gateway запущений деінде.
UI керування — це статичні файли; ціль WebSocket налаштовується і може
відрізнятися від HTTP origin. Це зручно, коли ви хочете використовувати Vite dev server
локально, але Gateway працює в іншому місці.
1. Запустіть dev server UI: `pnpm ui:dev`
2. Відкрийте URL на кшталт:
2. Відкрийте URL такого вигляду:
```text
http://localhost:5173/?gatewayUrl=ws://<gateway-host>:18789
@ -382,20 +383,20 @@ http://localhost:5173/?gatewayUrl=wss://<gateway-host>:18789#token=<gateway-toke
Примітки:
- `gatewayUrl` після завантаження зберігається в localStorage і видаляється з URL.
- `token` слід передавати через фрагмент URL (`#token=...`) щоразу, коли це можливо. Фрагменти не надсилаються на сервер, що допомагає уникнути витоку через журнали запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як запасний варіант, і видаляються одразу після bootstrap.
- `gatewayUrl` зберігається в localStorage після завантаження і видаляється з URL.
- `token` слід передавати через фрагмент URL (`#token=...`) щоразу, коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку через журнали запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як fallback, і видаляються одразу після bootstrap.
- `password` зберігається лише в пам’яті.
- Коли задано `gatewayUrl`, UI не повертається до облікових даних із конфігурації чи середовища.
- Коли встановлено `gatewayUrl`, UI не повертається до облікових даних із конфігурації чи середовища.
Явно вкажіть `token` (або `password`). Відсутність явних облікових даних є помилкою.
- Використовуйте `wss://`, коли Gateway стоїть за TLS (Tailscale Serve, HTTPS proxy тощо).
- `gatewayUrl` приймається лише у вікні верхнього рівня (не вбудованому), щоб запобігти clickjacking.
- Для розгортань Control UI не на loopback потрібно явно задавати `gateway.controlUi.allowedOrigins`
(повні origins). Це також стосується віддалених середовищ розробки.
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім як для жорстко контрольованого
локального тестування. Це означає дозвіл будь-якого browser origin, а не «підібрати будь-який вузол, який я
- Використовуйте `wss://`, коли Gateway знаходиться за TLS (Tailscale Serve, HTTPS proxy тощо).
- `gatewayUrl` приймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти clickjacking.
- Розгортання UI керування не на loopback мають явно задавати `gateway.controlUi.allowedOrigins`
(повні origin). Це також стосується віддалених dev-налаштувань.
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім жорстко контрольованого
локального тестування. Це означає дозвіл для будь-якого origin браузера, а не «відповідати будь-якому хосту, який я
використовую».
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` вмикає
режим резервного визначення origin через заголовок Host, але це небезпечний режим безпеки.
режим fallback origin за заголовком Host, але це небезпечний режим безпеки.
Приклад:
@ -409,11 +410,11 @@ http://localhost:5173/?gatewayUrl=wss://<gateway-host>:18789#token=<gateway-toke
}
```
Деталі налаштування віддаленого доступу: [Віддалений доступ](/uk/gateway/remote).
Докладніше про налаштування віддаленого доступу: [Віддалений доступ](/uk/gateway/remote).
## Пов’язане
- [Dashboard](/uk/web/dashboard) — інформаційна панель gateway
- [WebChat](/uk/web/webchat) — браузерний інтерфейс чату
- [Інформаційна панель](/uk/web/dashboard) — інформаційна панель gateway
- [WebChat](/uk/web/webchat) — чат-інтерфейс у браузері
- [TUI](/uk/web/tui) — термінальний інтерфейс користувача
- [Health Checks](/uk/gateway/health) — моніторинг стану gateway
- [Перевірки справності](/uk/gateway/health) — моніторинг справності gateway