From 9ca76b7da8cc6aed7df76202a6fec7551a8542dd Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sun, 26 Apr 2026 18:03:50 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/web/control-ui.md | 249 +++++++++++++++++++------------------- 1 file changed, 125 insertions(+), 124 deletions(-) diff --git a/docs/uk/web/control-ui.md b/docs/uk/web/control-ui.md index 2a06c88fe..d5402f62d 100644 --- a/docs/uk/web/control-ui.md +++ b/docs/uk/web/control-ui.md @@ -1,46 +1,46 @@ --- read_when: - Ви хочете керувати Gateway з браузера - - Ви хочете доступ Tailnet без SSH-тунелів + - Ви хочете доступ до Tailnet без SSH-тунелів sidebarTitle: Control UI -summary: Вебінтерфейс керування для Gateway (чат, вузли, конфігурація) +summary: Браузерний інтерфейс керування для Gateway (чат, вузли, конфігурація) title: Інтерфейс керування x-i18n: - generated_at: "2026-04-26T08:50:14Z" + generated_at: "2026-04-26T18:01:47Z" model: gpt-5.4 provider: openai - source_hash: a419e627c2b4e18687e946494d170b005102ba242b5f72c03ba0e55de2b8d4b3 + source_hash: a1021dbac736269d04a08639f484289ccd387676525011de4e54f03ed3a747ad source_path: web/control-ui.md workflow: 15 --- Інтерфейс керування — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується Gateway: -- за замовчуванням: `http://:18789/` -- необов’язковий префікс: установіть `gateway.controlUi.basePath` (наприклад, `/openclaw`) +- типово: `http://:18789/` +- необов’язковий префікс: задайте `gateway.controlUi.basePath` (наприклад, `/openclaw`) Він взаємодіє **безпосередньо з 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`. -Автентифікація передається під час WebSocket handshake через: +Автентифікація передається під час рукостискання WebSocket через: - `connect.params.auth.token` - `connect.params.auth.password` - заголовки ідентифікації Tailscale Serve, коли `gateway.auth.allowTailscale: true` - заголовки ідентифікації trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"` -Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера та вибрану URL-адресу gateway; паролі не зберігаються. Під час онбордингу зазвичай створюється токен gateway для автентифікації за спільним секретом при першому підключенні, але автентифікація паролем теж працює, коли `gateway.auth.mode` має значення `"password"`. +Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера та вибрану URL-адресу gateway; паролі не зберігаються. Під час онбордингу зазвичай створюється токен gateway для автентифікації через спільний секрет при першому підключенні, але автентифікація паролем також працює, коли `gateway.auth.mode` має значення `"password"`. ## Сполучення пристрою (перше підключення) -Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway зазвичай вимагає **одноразове підтвердження сполучення**. Це захід безпеки, який запобігає несанкціонованому доступу. +Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway зазвичай вимагає **одноразове підтвердження сполучення**. Це захід безпеки для запобігання несанкціонованому доступу. **Що ви побачите:** "disconnected (1008): pairing required" @@ -50,43 +50,43 @@ x-i18n: openclaw devices list ``` - + ```bash openclaw devices approve ``` -Якщо браузер повторює спробу сполучення зі зміненими даними автентифікації (роль/області доступу/публічний ключ), попередній очікуваний запит замінюється, і створюється новий `requestId`. Перед підтвердженням знову виконайте `openclaw devices list`. +Якщо браузер повторно намагається виконати сполучення зі зміненими даними автентифікації (роль/області доступу/публічний ключ), попередній очікуваний запит замінюється, і створюється новий `requestId`. Перед схваленням знову виконайте `openclaw devices list`. -Якщо браузер уже сполучений і ви змінюєте його з доступу лише для читання на доступ для запису/адміністратора, це розглядається як підвищення рівня підтвердження, а не як тихе повторне підключення. OpenClaw зберігає старе підтвердження активним, блокує повторне підключення з ширшими правами та просить вас явно підтвердити новий набір областей доступу. +Якщо браузер уже сполучений, а ви змінюєте його з доступу лише для читання на доступ для запису/адміністратора, це розглядається як підвищення схвалення, а не як тихе повторне підключення. OpenClaw зберігає попереднє схвалення активним, блокує повторне підключення з ширшими правами й просить вас явно схвалити новий набір областей доступу. -Після підтвердження пристрій буде запам’ятовано й не вимагатиме повторного підтвердження, якщо тільки ви не відкличете його за допомогою `openclaw devices revoke --device --role `. Перегляньте [CLI Devices](/uk/cli/devices) для ротації токенів і відкликання. +Після схвалення пристрій запам’ятовується й не потребуватиме повторного схвалення, доки ви не відкличете його через `openclaw devices revoke --device --role `. Див. [CLI Devices](/uk/cli/devices) для ротації токенів і відкликання. -- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`) підтверджуються автоматично. -- Tailscale Serve може пропустити цикл підтвердження сполучення для операторських сесій Control UI, коли `gateway.auth.allowTailscale: true`, ідентифікація Tailscale підтверджується, а браузер надає свою ідентичність пристрою. -- Прямі прив’язки Tailnet, підключення браузера через LAN та профілі браузера без ідентичності пристрою все одно вимагають явного підтвердження. -- Кожен профіль браузера генерує унікальний ID пристрою, тому перехід на інший браузер або очищення даних браузера вимагатиме повторного сполучення. +- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`) схвалюються автоматично. +- Tailscale Serve може пропустити цикл сполучення для операторських сесій Control UI, коли `gateway.auth.allowTailscale: true`, ідентифікація Tailscale перевірена, а браузер надає ідентифікатор свого пристрою. +- Прямі прив’язки Tailnet, підключення браузера через LAN і профілі браузера без ідентифікатора пристрою все одно потребують явного схвалення. +- Кожен профіль браузера генерує унікальний ID пристрою, тому перемикання браузерів або очищення даних браузера вимагатиме повторного сполучення. ## Особиста ідентичність (локально в браузері) -Control UI підтримує особисту ідентичність для кожного браузера (відображуване ім’я та аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона зберігається в сховищі браузера, прив’язана до поточного профілю браузера й не синхронізується з іншими пристроями та не зберігається на сервері, окрім звичайних метаданих авторства в транскрипті для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або перехід на інший браузер скидає її до порожнього стану. +Control UI підтримує особисту ідентичність для кожного браузера (ім’я для відображення та аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона зберігається в сховищі браузера, прив’язана до поточного профілю браузера й не синхронізується з іншими пристроями та не зберігається на сервері, окрім звичайних метаданих авторства в стенограмі для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або перемикання браузера скидає її до порожнього значення. -Той самий локальний для браузера шаблон застосовується до перевизначення аватара помічника. Завантажені аватари помічника накладаються на ідентичність, визначену gateway, лише в локальному браузері й ніколи не передаються назад через `config.patch`. Спільне поле конфігурації `ui.assistant.avatar` все ще доступне для не-UI клієнтів, які записують це поле безпосередньо (наприклад, scripted gateways або custom dashboards). +Той самий локальний для браузера підхід застосовується до перевизначення аватара помічника. Завантажені аватари помічника накладаються на ідентичність, визначену gateway, лише в локальному браузері й ніколи не передаються назад через `config.patch`. Спільне поле конфігурації `ui.assistant.avatar` як і раніше доступне для клієнтів не з UI, які записують це поле безпосередньо (наприклад, скриптові gateway або власні інформаційні панелі). ## Кінцева точка конфігурації середовища виконання -Control UI отримує свої налаштування середовища виконання з `/__openclaw/control-ui-config.json`. Ця кінцева точка захищена тією ж автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть її отримати, а успішне отримання вимагає або вже чинного токена/пароля gateway, або ідентичності Tailscale Serve, або ідентичності trusted-proxy. +Control UI отримує свої налаштування середовища виконання з `/__openclaw/control-ui-config.json`. Доступ до цієї кінцевої точки захищений тією ж автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть її отримати, а успішне отримання вимагає або вже чинний токен/пароль gateway, або ідентифікацію Tailscale Serve, або ідентифікацію trusted-proxy. ## Підтримка мов -Control UI може локалізуватися при першому завантаженні на основі локалі вашого браузера. Щоб перевизначити її пізніше, відкрийте **Overview -> Gateway Access -> Language**. Перемикач локалі розташований у картці Gateway Access, а не в розділі Appearance. +Control UI може локалізувати себе під час першого завантаження на основі локалі вашого браузера. Щоб перевизначити це пізніше, відкрийте **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` -- Неанглійські переклади ліниво завантажуються в браузері. -- Вибрана локаль зберігається в сховищі браузера та повторно використовується під час наступних відвідувань. +- Неанглійські переклади завантажуються в браузері ліниво. +- Вибрана локаль зберігається в сховищі браузера й повторно використовується під час наступних відвідувань. - Відсутні ключі перекладу повертаються до англійської. ## Що він може робити (сьогодні) @@ -94,45 +94,45 @@ Control UI може локалізуватися при першому зава - Спілкування з моделлю через 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. - - Потокові виклики інструментів + картки виводу інструментів у реальному часі в Chat (події агента). + - Пряма розмова з OpenAI Realtime із браузера через WebRTC. Gateway випускає короткоживучий клієнтський секрет Realtime через `talk.realtime.session`; браузер надсилає аудіо з мікрофона безпосередньо до OpenAI і передає виклики інструмента `openclaw_agent_consult` назад через `chat.send` для більшої налаштованої моделі OpenClaw. + - Потокове передавання викликів інструментів + картки виводу інструментів у реальному часі в Chat (події агента). - - Канали: вбудовані, а також bundled/external plugin channels — статус, вхід через 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`). - - Сни: статус Dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`). + - Сесії: список + перевизначення model/thinking/fast/verbose/trace/reasoning для окремої сесії (`sessions.list`, `sessions.patch`). + - Сни: статус dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`). - + - Завдання Cron: список/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`). - Skills: статус, увімкнення/вимкнення, встановлення, оновлення API-ключів (`skills.*`). - - Вузли: список + caps (`node.list`). - - Підтвердження exec: редагування allowlist для gateway або node + політика запиту для `exec host=gateway/node` (`exec.approvals.*`). + - Вузли: список + можливості (`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; нерозв’язані активні надіслані посилання відхиляються до запису. - - Рендеринг schema + form (`config.schema` / `config.schema.lookup`, включно з полями `title` / `description`, відповідними підказками UI, зведеннями безпосередніх дочірніх елементів, метаданими docs для вкладених вузлів object/wildcard/array/composition, а також schema plugin + channel, коли вони доступні); редактор Raw JSON доступний лише тоді, коли snapshot має безпечний raw round-trip. - - Якщо snapshot не може безпечно пройти raw round-trip, Control UI примусово вмикає режим Form і вимикає режим Raw для цього snapshot. - - У редакторі Raw JSON пункт "Reset to saved" зберігає raw-authored форму (форматування, коментарі, макет `$include`) замість повторного рендерингу зведеного snapshot, тому зовнішні редагування зберігаються після скидання, коли snapshot може безпечно пройти raw round-trip. - - Структуровані значення об’єктів SecretRef відображаються лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню через перетворення об’єкта на рядок. + - Записи містять захист base-hash, щоб запобігти перезапису паралельних змін. + - Операції запису (`config.set`/`config.apply`/`config.patch`) попередньо перевіряють активне розв’язання SecretRef для посилань у переданому корисному навантаженні конфігурації; нерозв’язані активні передані посилання відхиляються до запису. + - Відображення схеми + форми (`config.schema` / `config.schema.lookup`, включно з `title` / `description` полів, відповідними підказками UI, зведеннями безпосередніх дочірніх елементів, метаданими документації для вузлів nested object/wildcard/array/composition, а також схемами Plugin і каналів, коли вони доступні); редактор Raw JSON доступний лише тоді, коли знімок має безпечне пряме перетворення туди й назад. + - Якщо знімок не може безпечно пройти пряме перетворення сирого тексту, Control UI примусово вмикає режим Form і вимикає режим Raw для цього знімка. + - У редакторі Raw JSON команда "Reset to saved" зберігає форму, створену в raw-режимі (форматування, коментарі, розташування `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні зміни переживають скидання, коли знімок може безпечно пройти пряме перетворення. + - Значення структурованих об’єктів SecretRef відображаються в текстових полях форми лише для читання, щоб запобігти випадковому пошкодженню під час перетворення об’єкта на рядок. - - Налагодження: snapshot статусу/стану здоров’я/моделей + журнал подій + ручні виклики RPC (`status`, `health`, `models.list`). - - Журнали: live tail журналів файлів gateway із фільтрацією/експортом (`logs.tail`). - - Оновлення: запуск package/git update + restart (`update.run`) зі звітом про перезапуск. + - Налагодження: знімки status/health/models + журнал подій + ручні RPC-виклики (`status`, `health`, `models.list`). + - Журнали: live-tail журналів файлів gateway із фільтрацією/експортом (`logs.tail`). + - Оновлення: запуск оновлення пакета/git + перезапуск (`update.run`) зі звітом про перезапуск. - - Для ізольованих завдань доставлення за замовчуванням — анонсувати підсумок. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски. + - Для ізольованих завдань типовим способом доставки є оголошення зведення. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски. - Поля channel/target з’являються, коли вибрано announce. - - Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, установленим на дійсну URL-адресу HTTP(S) Webhook. - - Для завдань main-session доступні режими доставлення webhook і none. - - Розширені елементи керування редагуванням включають delete-after-run, clear agent override, точні/зі зміщенням параметри cron, перевизначення agent model/thinking і перемикачі доставлення best-effort. - - Валідація форми вбудована, з помилками на рівні полів; невалідні значення вимикають кнопку збереження, доки їх не буде виправлено. - - Установіть `cron.webhookToken`, щоб надсилати окремий bearer token; якщо його не вказано, Webhook надсилається без заголовка auth. - - Застарілий резервний варіант: збережені legacy jobs із `notify: true` все ще можуть використовувати `cron.webhook`, доки не буде виконано міграцію. + - Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, встановленим на дійсну URL-адресу HTTP(S) Webhook. + - Для завдань main-session доступні режими доставки webhook і none. + - Розширені елементи керування редагуванням включають delete-after-run, clear agent override, точні/зміщені параметри cron, перевизначення agent model/thinking і перемикачі доставки best-effort. + - Валідація форми вбудована й має помилки на рівні полів; недійсні значення вимикають кнопку збереження, доки їх не буде виправлено. + - Установіть `cron.webhookToken`, щоб надсилати окремий bearer-токен; якщо його не вказано, webhook надсилається без заголовка автентифікації. + - Застарілий резервний варіант: збережені застарілі завдання з `notify: true` усе ще можуть використовувати `cron.webhook`, доки не буде виконано міграцію. @@ -140,73 +140,74 @@ Control UI може локалізуватися при першому зава - - `chat.send` є **неблокувальним**: він одразу підтверджується з `{ runId, status: "started" }`, а відповідь надходить потоком через події `chat`. + - `chat.send` є **неблокувальним**: він одразу підтверджується з `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`. + - Завантаження до чату приймають зображення та невідеофайли. Зображення зберігають власний шлях до файлу; інші файли зберігаються як керовані медіа й показуються в історії як посилання на вкладення. - Повторне надсилання з тим самим `idempotencyKey` повертає `{ status: "in_flight" }` під час виконання та `{ status: "ok" }` після завершення. - - Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи транскрипту надто великі, Gateway може обрізати довгі текстові поля, опускати важкі блоки метаданих і замінювати надто великі повідомлення заповнювачем (`[chat.history omitted: message too large]`). - - Зображення помічника/згенеровані зображення зберігаються як керовані посилання на медіа та повертаються через автентифіковані URL-адреси медіа Gateway, тому перезавантаження не залежить від того, чи залишаються в відповіді історії чату сирі payload зображень base64. - - `chat.history` також прибирає inline directive tags, призначені лише для відображення, із видимого тексту помічника (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML payload простих текстових викликів інструментів (зокрема `...`, `...`, `...`, `...` і обрізані блоки викликів інструментів), а також витеклі ASCII/full-width токени керування моделлю, і пропускає записи помічника, у яких увесь видимий текст є лише точним silent token `NO_REPLY` / `no_reply`. - - Під час активного надсилання та фінального оновлення історії подання чату зберігає видимими локальні оптимістичні повідомлення користувача/помічника, якщо `chat.history` тимчасово повертає старіший snapshot; канонічний транскрипт замінює ці локальні повідомлення, щойно історія Gateway наздоганяє. - - `chat.inject` додає примітку помічника до транскрипту сесії та транслює подію `chat` для оновлень лише UI (без запуску агента, без доставлення в канал). - - Перемикачі model і thinking у заголовку чату негайно змінюють активну сесію через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише на один хід. - - Коли свіжі звіти Gateway про використання сесії показують високий тиск контексту, область компонування чату відображає повідомлення про контекст і, на рекомендованих рівнях Compaction, кнопку стискання, яка запускає звичайний шлях Compaction сесії. Застарілі snapshot токенів приховуються, доки Gateway знову не повідомить про свіже використання. + - Відповіді `chat.history` обмежені за розміром для безпеки UI. Якщо записи стенограми надто великі, Gateway може обрізати довгі текстові поля, опускати важкі блоки метаданих і замінювати надто великі повідомлення заповнювачем (`[chat.history omitted: message too large]`). + - Згенеровані помічником зображення зберігаються як посилання на керовані медіа й знову віддаються через автентифіковані URL-адреси медіа Gateway, тож перезавантаження не залежить від того, чи залишився сирий base64-корисний вміст зображення у відповіді історії чату. + - `chat.history` також прибирає з видимого тексту помічника лише відображувані inline-теги директив (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-корисні навантаження plain-text викликів інструментів (зокрема `...`, `...`, `...`, `...` і обрізані блоки викликів інструментів), а також витеклі ASCII/full-width токени керування моделі, і пропускає записи помічника, у яких увесь видимий текст — це лише точний тихий токен `NO_REPLY` / `no_reply`. + - Під час активного надсилання та остаточного оновлення історії подання чату зберігає видимими локальні оптимістичні повідомлення користувача/помічника, якщо `chat.history` тимчасово повертає старіший знімок; канонічна стенограма замінює ці локальні повідомлення, щойно історія Gateway наздоганяє. + - `chat.inject` додає примітку помічника до стенограми сесії й транслює подію `chat` для оновлень лише UI (без запуску агента, без доставки в канал). + - Перемикачі model і thinking у заголовку чату негайно оновлюють активну сесію через `sessions.patch`; це сталі перевизначення сесії, а не параметри надсилання лише на один хід. + - Коли свіжі звіти про використання сесії Gateway показують високий тиск контексту, область введення чату показує сповіщення про контекст і, на рекомендованих рівнях Compaction, кнопку compact, яка запускає звичайний шлях ущільнення сесії. Застарілі знімки токенів приховуються, доки Gateway знову не повідомить свіжі дані використання. - Режим розмови використовує зареєстрованого постачальника голосу realtime, який підтримує браузерні сесії WebRTC. Налаштуйте OpenAI з `talk.provider: "openai"` разом із `talk.providers.openai.apiKey`, або повторно використайте конфігурацію постачальника realtime із Voice Call. Браузер ніколи не отримує стандартний API-ключ OpenAI; він отримує лише ефемерний секрет клієнта Realtime. Голос realtime Google Live підтримується для бекендового Voice Call і мостів Google Meet, але ще не для цього шляху WebRTC у браузері. Промпт сесії Realtime збирається Gateway; `talk.realtime.session` не приймає перевизначення інструкцій, надані викликачем. + Режим розмови використовує зареєстрованого 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-інструмента звертається до налаштованої більшої моделі через `chat.send`. + У компоновщику Chat елемент керування Talk — це кнопка з хвилями поруч із кнопкою диктування через мікрофон. Коли Talk запускається, у рядку стану компоновщика відображається `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`) для переривання всіх активних запусків для цієї сесії. + - Поки виконання активне, звичайні подальші повідомлення ставляться в чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це подальше повідомлення в поточний хід. + - Введіть `/stop` (або окремі фрази переривання, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза основним потоком. + - `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних виконань цієї сесії. - - - Коли запуск переривається, частковий текст помічника все одно може відображатися в UI. - - Gateway зберігає частковий текст помічника після переривання в історію транскрипту, якщо існує буферизований вивід. - - Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізнити часткові дані після переривання від звичайного завершеного виводу. + + - Коли виконання перервано, частковий текст помічника все одно може відображатися в UI. + - Gateway зберігає частковий текст помічника, перерваний під час виконання, в історії стенограми, якщо є буферизований вивід. + - Збережені записи містять метадані переривання, щоб споживачі стенограми могли відрізнити часткові результати після переривання від звичайного завершеного виводу. ## Установлення PWA і web push -Control UI постачається з `manifest.webmanifest` і service worker, тому сучасні браузери можуть встановити його як окремий PWA. Web Push дає змогу Gateway пробуджувати встановлений PWA сповіщеннями, навіть коли вкладка або вікно браузера не відкриті. +Control UI постачається з `manifest.webmanifest` і service worker, тому сучасні браузери можуть установити його як автономний PWA. Web Push дозволяє Gateway пробуджувати встановлений PWA сповіщеннями, навіть коли вкладка або вікно браузера не відкриті. -| Поверхня | Що вона робить | -| ---------------------------------------------------- | ------------------------------------------------------------------- | -| `ui/public/manifest.webmanifest` | Маніфест PWA. Браузери пропонують "Install app", щойно він доступний. | -| `ui/public/sw.js` | Service worker, який обробляє події `push` і натискання на сповіщення. | -| `push/vapid-keys.json` (у каталозі стану OpenClaw) | Автоматично згенерована пара ключів VAPID, що використовується для підпису payload Web Push. | -| `push/web-push-subscriptions.json` | Збережені кінцеві точки підписок браузера. | +| Поверхня | Що вона робить | +| ----------------------------------------------------- | ------------------------------------------------------------------ | +| `ui/public/manifest.webmanifest` | Маніфест PWA. Браузери пропонують "Install app", щойно він стає доступним. | +| `ui/public/sw.js` | Service worker, який обробляє події `push` і кліки по сповіщеннях. | +| `push/vapid-keys.json` (у каталозі стану OpenClaw) | Автоматично згенерована пара ключів VAPID, що використовується для підпису корисних навантажень Web Push. | +| `push/web-push-subscriptions.json` | Збережені кінцеві точки підписок браузера. | -Перевизначте пару ключів VAPID через env vars у процесі Gateway, якщо хочете зафіксувати ключі (для розгортань із кількома хостами, ротації секретів або тестів): +Перевизначте пару ключів VAPID через змінні середовища в процесі Gateway, якщо хочете зафіксувати ключі (для розгортань на кількох хостах, ротації секретів або тестів): - `OPENCLAW_VAPID_PUBLIC_KEY` - `OPENCLAW_VAPID_PRIVATE_KEY` -- `OPENCLAW_VAPID_SUBJECT` (типове значення — `mailto:openclaw@localhost`) +- `OPENCLAW_VAPID_SUBJECT` (типово `mailto:openclaw@localhost`) -Control UI використовує ці методи Gateway з обмеженням за scope для реєстрації та тестування підписок браузера: +Control UI використовує ці методи Gateway, обмежені областями доступу, для реєстрації та тестування підписок браузера: - `push.web.vapidPublicKey` — отримує активний публічний ключ VAPID. - `push.web.subscribe` — реєструє `endpoint` плюс `keys.p256dh`/`keys.auth`. -- `push.web.unsubscribe` — видаляє зареєстрований endpoint. -- `push.web.test` — надсилає тестове сповіщення на підписку викликача. +- `push.web.unsubscribe` — видаляє зареєстровану кінцеву точку. +- `push.web.test` — надсилає тестове сповіщення до підписки викликача. -Web Push не залежить від шляху ретрансляції iOS APNS (див. [Конфігурація](/uk/gateway/configuration) для push із relay) і наявного методу `push.test`, які націлені на сполучення з нативними мобільними пристроями. +Web Push не залежить від шляху ретрансляції iOS APNS (див. [Конфігурація](/uk/gateway/configuration) щодо push через relay) та наявного методу `push.test`, які призначені для сполучення нативних мобільних застосунків. -## Вбудовування розміщеного вмісту +## Вбудовані розміщені елементи -Повідомлення помічника можуть відображати розміщений вебвміст вбудовано за допомогою shortcode `[embed ...]`. Політика sandbox для iframe керується параметром `gateway.controlUi.embedSandbox`: +Повідомлення помічника можуть вбудовано відображати розміщений вебвміст за допомогою шорткоду `[embed ...]`. Політика sandbox для iframe керується параметром `gateway.controlUi.embedSandbox`: - Вимикає виконання скриптів усередині вбудованого розміщеного вмісту. + Вимикає виконання скриптів усередині розміщених вбудованих елементів. - Дозволяє інтерактивне вбудовування, зберігаючи ізоляцію походження; це типовий режим, і його зазвичай достатньо для самодостатніх браузерних ігор/віджетів. + Дозволяє інтерактивні вбудовані елементи, зберігаючи ізоляцію джерела; це типове значення, і його зазвичай достатньо для самодостатніх браузерних ігор/віджетів. Додає `allow-same-origin` поверх `allow-scripts` для документів того самого сайту, яким навмисно потрібні ширші привілеї. @@ -226,16 +227,16 @@ Web Push не залежить від шляху ретрансляції iOS AP ``` -Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна поведінка same-origin. Для більшості ігор і інтерактивних canvas, згенерованих агентом, `scripts` — безпечніший вибір. +Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна поведінка same-origin. Для більшості ігор та інтерактивних полотен, згенерованих агентом, безпечнішим вибором є `scripts`. -Абсолютні зовнішні URL-адреси вбудовування `http(s)` залишаються заблокованими за замовчуванням. Якщо ви навмисно хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, установіть `gateway.controlUi.allowExternalEmbedUrls: true`. +Абсолютні зовнішні URL-адреси вбудовування `http(s)` типово залишаються заблокованими. Якщо ви навмисно хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, установіть `gateway.controlUi.allowExternalEmbedUrls: true`. ## Доступ Tailnet (рекомендовано) - - Залиште Gateway на loopback і дозвольте Tailscale Serve проксіювати його через HTTPS: + + Залишайте Gateway на loopback і дозвольте Tailscale Serve проксувати його через HTTPS: ```bash openclaw gateway --tailscale serve @@ -243,38 +244,38 @@ Web Push не залежить від шляху ретрансляції iOS AP Відкрийте: - - `https:///` (або ваш налаштований `gateway.controlUi.basePath`) + - `https:///` (або налаштований вами `gateway.controlUi.basePath`) - За замовчуванням запити Serve для Control UI/WebSocket можуть автентифікуватися через заголовки ідентичності Tailscale (`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw перевіряє ідентичність, визначаючи адресу `x-forwarded-for` через `tailscale whois` і звіряючи її із заголовком, і приймає такі запити лише тоді, коли вони надходять на loopback із заголовками Tailscale `x-forwarded-*`. Для операторських сесій Control UI з ідентичністю пристрою браузера цей перевірений шлях Serve також пропускає цикл сполучення пристрою; браузери без ідентичності пристрою та підключення з роллю node усе одно проходять звичайні перевірки пристрою. Установіть `gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або `"password"`. + Типово запити Control UI/WebSocket Serve можуть автентифікуватися через заголовки ідентифікації Tailscale (`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw перевіряє ідентичність, визначаючи адресу `x-forwarded-for` через `tailscale whois` і звіряючи її із заголовком, та приймає їх лише тоді, коли запит надходить на loopback із заголовками `x-forwarded-*` від Tailscale. Для операторських сесій Control UI з ідентичністю пристрою браузера цей перевірений шлях Serve також пропускає цикл сполучення пристрою; браузери без ідентичності пристрою та підключення з роллю node усе одно проходять звичайні перевірки пристрою. Установіть `gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або `"password"`. - Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта та scope автентифікації серіалізуються перед записами rate-limit. Тому одночасні невдалі повторні спроби з того самого браузера можуть показувати `retry later` на другому запиті замість двох звичайних невідповідностей, що змагаються паралельно. + Для цього асинхронного шляху ідентифікації Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта та тієї самої області автентифікації серіалізуються перед записом обмеження частоти. Тому паралельні хибні повторні спроби з того самого браузера можуть показувати `retry later` на другому запиті замість двох звичайних невідповідностей, що змагаються паралельно. - Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості може виконуватися недовірений локальний код, вимагайте автентифікацію токеном/паролем. + Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості може виконуватися недовірений локальний код, вимагайте автентифікацію через токен/пароль. - + ```bash openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)" ``` Потім відкрийте: - - `http://:18789/` (або ваш налаштований `gateway.controlUi.basePath`) + - `http://:18789/` (або налаштований вами `gateway.controlUi.basePath`) - Вставте відповідний спільний секрет у налаштування UI (надсилається як `connect.params.auth.token` або `connect.params.auth.password`). + Вставте відповідний спільний секрет у налаштування UI (він передається як `connect.params.auth.token` або `connect.params.auth.password`). -## Незахищений HTTP +## Небезпечний HTTP -Якщо ви відкриваєте інформаційну панель через звичайний HTTP (`http://` або `http://`), браузер працює в **незахищеному контексті** й блокує WebCrypto. За замовчуванням OpenClaw **блокує** підключення Control UI без ідентичності пристрою. +Якщо ви відкриваєте інформаційну панель через звичайний HTTP (`http://` або `http://`), браузер працює в **незахищеному контексті** та блокує WebCrypto. Типово OpenClaw **блокує** підключення Control UI без ідентичності пристрою. Задокументовані винятки: -- сумісність незахищеного HTTP лише для localhost з `gateway.controlUi.allowInsecureAuth=true` +- сумісність із незахищеним HTTP лише для localhost із `gateway.controlUi.allowInsecureAuth=true` - успішна операторська автентифікація Control UI через `gateway.auth.mode: "trusted-proxy"` - аварійний варіант `gateway.controlUi.dangerouslyDisableDeviceAuth=true` @@ -297,12 +298,12 @@ Web Push не залежить від шляху ретрансляції iOS AP `allowInsecureAuth` — це лише локальний перемикач сумісності: - - Він дозволяє сесіям localhost у Control UI працювати без ідентичності пристрою в незахищених HTTP-контекстах. + - Він дозволяє сесіям Control UI на localhost продовжувати роботу без ідентичності пристрою в незахищених HTTP-контекстах. - Він не обходить перевірки сполучення. - - Він не послаблює вимоги до ідентичності пристрою для віддалених (не localhost) підключень. + - Він не послаблює вимоги до ідентичності пристрою для віддалених підключень (не localhost). - + ```json5 { gateway: { @@ -314,45 +315,45 @@ Web Push не залежить від шляху ретрансляції iOS AP ``` - `dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Control UI і є серйозним зниженням безпеки. Швидко скасуйте це після аварійного використання. + `dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Control UI і є серйозним зниженням безпеки. Після аварійного використання швидко поверніть попередній стан. - Успішна автентифікація trusted-proxy може допускати **операторські** сесії Control UI без ідентичності пристрою. - Це **не** поширюється на сесії Control UI з роллю node. - - Reverse proxy на loopback того самого хоста все одно не задовольняють автентифікацію trusted-proxy; див. [Автентифікація trusted proxy](/uk/gateway/trusted-proxy-auth). + - Зворотні проксі loopback на тому самому хості все одно не задовольняють автентифікацію trusted-proxy; див. [Автентифікація trusted proxy](/uk/gateway/trusted-proxy-auth). -Див. [Tailscale](/uk/gateway/tailscale), щоб отримати вказівки щодо налаштування HTTPS. +Див. [Tailscale](/uk/gateway/tailscale) для вказівок щодо налаштування HTTPS. ## Політика безпеки вмісту -Control UI постачається з жорсткою політикою `img-src`: дозволені лише ресурси **того самого походження**, URL-адреси `data:` і локально згенеровані URL-адреси `blob:`. Віддалені URL-адреси з `http(s)` і URL-адреси із відносним до протоколу записом відхиляються браузером і не ініціюють мережеві запити. +Control UI постачається зі строгою політикою `img-src`: дозволені лише ресурси **того самого джерела**, URL-адреси `data:` та локально згенеровані URL-адреси `blob:`. Віддалені URL-адреси `http(s)` і відносні до протоколу URL-адреси зображень відхиляються браузером і не ініціюють мережевих запитів. Що це означає на практиці: -- Аватари та зображення, які обслуговуються за відносними шляхами (наприклад, `/avatars/`), як і раніше відображаються, включно з маршрутами аватарів з автентифікацією, які UI отримує й перетворює на локальні URL-адреси `blob:`. -- Вбудовані URL-адреси `data:image/...` як і раніше відображаються (це корисно для payload у межах протоколу). +- Аватари й зображення, що обслуговуються за відносними шляхами (наприклад, `/avatars/`), як і раніше відображаються, включно з автентифікованими маршрутами аватарів, які UI отримує та перетворює на локальні URL-адреси `blob:`. +- Вбудовані URL-адреси `data:image/...` як і раніше відображаються (це корисно для корисних навантажень усередині протоколу). - Локальні URL-адреси `blob:`, створені Control UI, як і раніше відображаються. -- Віддалені URL-адреси аватарів, які повертаються метаданими каналу, відсікаються в допоміжних функціях аватарів Control UI і замінюються вбудованим логотипом/значком, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити на зображення. +- Віддалені URL-адреси аватарів, які надходять із метаданих каналів, видаляються допоміжними функціями аватарів у Control UI і замінюються вбудованим логотипом/значком, тож скомпрометований або зловмисний канал не може примусити браузер оператора виконувати довільні віддалені запити зображень. -Щоб отримати таку поведінку, нічого змінювати не потрібно — вона завжди ввімкнена й не налаштовується. +Щоб отримати цю поведінку, вам нічого не потрібно змінювати — вона завжди ввімкнена й не налаштовується. ## Автентифікація маршруту аватара Коли налаштована автентифікація gateway, кінцева точка аватара Control UI вимагає той самий токен gateway, що й решта API: - `GET /avatar/` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/?meta=1` повертає метадані аватара за тим самим правилом. -- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (аналогічно до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які інакше захищені. -- Сам Control UI пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані URL-адреси blob, тому зображення як і раніше відображається в інформаційних панелях. +- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (аналогічно до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому разі захищені. +- Сам Control UI передає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані URL-адреси blob, тож зображення все одно відображається в інформаційних панелях. -Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стане неавтентифікованим, відповідно до решти gateway. +Якщо ви вимикаєте автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стає неавтентифікованим, відповідно до решти gateway. ## Збирання UI -Gateway обслуговує статичні файли з `dist/control-ui`. Зберіть їх за допомогою: +Gateway обслуговує статичні файли з `dist/control-ui`. Зберіть їх командою: ```bash pnpm ui:build @@ -364,20 +365,20 @@ pnpm ui:build OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build ``` -Для локальної розробки (окремий dev server): +Для локальної розробки (окремий сервер розробки): ```bash pnpm ui:dev ``` -Потім укажіть UI URL-адресу WS вашого Gateway (наприклад, `ws://127.0.0.1:18789`). +Потім укажіть для UI URL-адресу вашого Gateway WS (наприклад, `ws://127.0.0.1:18789`). -## Налагодження/тестування: dev server + віддалений Gateway +## Налагодження/тестування: сервер розробки + віддалений Gateway -Control UI — це статичні файли; ціль WebSocket налаштовується і може відрізнятися від HTTP origin. Це зручно, коли ви хочете локальний dev server Vite, але Gateway працює деінде. +Control UI — це статичні файли; ціль WebSocket налаштовується й може відрізнятися від джерела HTTP. Це зручно, коли ви хочете локальний сервер розробки Vite, а Gateway працює деінде. - + ```bash pnpm ui:dev ``` @@ -398,15 +399,15 @@ Control UI — це статичні файли; ціль WebSocket налашт - - `gatewayUrl` зберігається в localStorage після завантаження і видаляється з URL. - - `token` слід передавати через фрагмент URL (`#token=...`) щоразу, коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку через журнали запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як резервний варіант, і видаляються одразу після bootstrap. + - `gatewayUrl` зберігається в localStorage після завантаження та видаляється з URL-адреси. + - `token` слід передавати через фрагмент URL (`#token=...`) щоразу, коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку через журнали запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як резервний варіант, і негайно видаляються після початкового запуску. - `password` зберігається лише в пам’яті. - - Коли встановлено `gatewayUrl`, UI не повертається до облікових даних із конфігурації чи середовища. Явно вкажіть `token` (або `password`). Відсутність явно вказаних облікових даних є помилкою. - - Використовуйте `wss://`, коли Gateway працює за TLS (Tailscale Serve, HTTPS proxy тощо). + - Коли встановлено `gatewayUrl`, UI не повертається до облікових даних із конфігурації або середовища. Явно передайте `token` (або `password`). Відсутність явно переданих облікових даних є помилкою. + - Використовуйте `wss://`, коли Gateway розміщений за TLS (Tailscale Serve, HTTPS-проксі тощо). - `gatewayUrl` приймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти clickjacking. - - Для розгортань Control UI поза loopback потрібно явно встановити `gateway.controlUi.allowedOrigins` (повні origins). Це також стосується віддалених dev-середовищ. - - Під час запуску Gateway може ініціалізувати локальні origins, як-от `http://localhost:` і `http://127.0.0.1:`, на основі фактичних bind і port середовища виконання, але origins віддаленого браузера все одно потребують явних записів. - - Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім жорстко контрольованого локального тестування. Це означає дозвіл для будь-якого browser origin, а не "відповідність будь-якому хосту, який я використовую". + - Розгортання Control UI не на loopback повинні явно задавати `gateway.controlUi.allowedOrigins` (повні origins). Це також стосується віддалених середовищ розробки. + - Під час запуску Gateway може заповнювати локальні origins, такі як `http://localhost:` і `http://127.0.0.1:`, з ефективної прив’язки середовища виконання та порту, але origins віддаленого браузера все одно потребують явних записів. + - Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім як для суворо контрольованого локального тестування. Це означає дозвіл для будь-якого browser origin, а не "збіг із будь-яким хостом, який я використовую." - `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` вмикає режим резервного визначення origin через заголовок Host, але це небезпечний режим безпеки. @@ -428,6 +429,6 @@ Control UI — це статичні файли; ціль WebSocket налашт ## Пов’язане - [Інформаційна панель](/uk/web/dashboard) — інформаційна панель gateway -- [Перевірки стану](/uk/gateway/health) — моніторинг стану gateway +- [Перевірки справності](/uk/gateway/health) — моніторинг справності gateway - [TUI](/uk/web/tui) — термінальний інтерфейс користувача - [WebChat](/uk/web/webchat) — браузерний інтерфейс чату