chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-24 02:38:55 +00:00
parent 5e7014e87d
commit 089dc0be42
2 changed files with 320 additions and 313 deletions

View File

@ -1,64 +1,65 @@
---
read_when:
- Ви хочете використовувати моделі OpenAI в OpenClaw
- Ви хочете автентифікацію за підпискою Codex замість API-ключів
- Ви хочете використовувати автентифікацію за підпискою Codex замість API-ключів
- Вам потрібні суворіші правила виконання агента GPT-5
summary: Використовуйте OpenAI через API-ключі або підписку Codex в OpenClaw
title: OpenAI
x-i18n:
generated_at: "2026-04-24T02:21:50Z"
generated_at: "2026-04-24T02:37:02Z"
model: gpt-5.4
provider: openai
source_hash: f9bb65b29be2b69a85663b17a68560c557ffb5303ac7afa2b27548a27397af46
source_hash: 8337990d0de692b32746b05ab344695fc5a54ab3855993ac7795fabf38d4d19d
source_path: providers/openai.md
workflow: 15
---
OpenAI надає API для розробників для моделей GPT. OpenClaw підтримує три маршрути сімейства OpenAI. Префікс моделі визначає маршрут:
- **API key** — прямий доступ до OpenAI Platform з оплатою за використання (моделі `openai/*`)
- **Codex subscription through PI** — вхід через ChatGPT/Codex з доступом за підпискою (моделі `openai-codex/*`)
- **API-ключ** — прямий доступ до OpenAI Platform з оплатою за використання (моделі `openai/*`)
- **Підписка Codex через PI** — вхід через ChatGPT/Codex з доступом за підпискою (моделі `openai-codex/*`)
- **Codex app-server harness** — нативне виконання через Codex app-server (`openai/*` моделі плюс `agents.defaults.embeddedHarness.runtime: "codex"`)
OpenAI явно підтримує використання OAuth за підпискою у зовнішніх інструментах і робочих процесах, таких як OpenClaw.
OpenAI прямо підтримує використання OAuth-підписки в зовнішніх інструментах і робочих процесах, таких як OpenClaw.
<Note>
GPT-5.5 наразі доступна в OpenClaw через маршрути підписки/OAuth:
`openai-codex/gpt-5.5` з виконавцем PI або `openai/gpt-5.5` з
Codex app-server harness. Прямий доступ за API key для `openai/gpt-5.5`
підтримується, щойно OpenAI увімкне GPT-5.5 у публічному API; до того часу використовуйте
модель з доступом через API, таку як `openai/gpt-5.4`, для конфігурацій `OPENAI_API_KEY`.
`openai-codex/gpt-5.5` з PI runner або `openai/gpt-5.5` з
Codex app-server harness. Прямий доступ за API-ключем для `openai/gpt-5.5`
підтримуватиметься, щойно OpenAI увімкне GPT-5.5 у публічному API; до того
часу використовуйте модель, доступну через API, наприклад `openai/gpt-5.4`, для конфігурацій
`OPENAI_API_KEY`.
</Note>
## Покриття можливостей OpenClaw
## Покриття функцій OpenClaw
| Можливість OpenAI | Поверхня OpenClaw | Статус |
| ------------------------ | ----------------------------------------------------- | ------------------------------------------------------ |
| Chat / Responses | постачальник моделей `openai/<model>` | Так |
| Моделі підписки Codex | `openai-codex/<model>` з OAuth `openai-codex` | Так |
| Codex app-server harness | `openai/<model>` з `embeddedHarness.runtime: codex` | Так |
| Server-side web search | нативний інструмент OpenAI Responses | Так, коли увімкнено web search і не закріплено постачальника |
| Images | `image_generate` | Так |
| Videos | `video_generate` | Так |
| Text-to-speech | `messages.tts.provider: "openai"` / `tts` | Так |
| Batch speech-to-text | `tools.media.audio` / розуміння медіа | Так |
| Streaming speech-to-text | Voice Call `streaming.provider: "openai"` | Так |
| Realtime voice | Voice Call `realtime.provider: "openai"` | Так |
| Embeddings | постачальник embedding для пам’яті | Так |
| Можливість OpenAI | Поверхня OpenClaw | Статус |
| ------------------------- | -------------------------------------------------------- | ------------------------------------------------------- |
| Chat / Responses | постачальник моделей `openai/<model>` | Так |
| Моделі за підпискою Codex | `openai-codex/<model>` з OAuth `openai-codex` | Так |
| Codex app-server harness | `openai/<model>` з `embeddedHarness.runtime: codex` | Так |
| Пошук у вебі на боці сервера | нативний інструмент OpenAI Responses | Так, коли вебпошук увімкнено і постачальника не зафіксовано |
| Зображення | `image_generate` | Так |
| Відео | `video_generate` | Так |
| Перетворення тексту на мовлення | `messages.tts.provider: "openai"` / `tts` | Так |
| Пакетне перетворення мовлення на текст | `tools.media.audio` / розуміння медіа | Так |
| Потокове перетворення мовлення на текст | Voice Call `streaming.provider: "openai"` | Так |
| Голос у реальному часі | Voice Call `realtime.provider: "openai"` / Control UI Talk | Так |
| Вбудовування | постачальник вбудовувань пам’яті | Так |
## Початок роботи
Виберіть бажаний метод автентифікації та виконайте кроки налаштування.
Виберіть бажаний спосіб автентифікації й виконайте кроки налаштування.
<Tabs>
<Tab title="API key (OpenAI Platform)">
<Tab title="API-ключ (OpenAI Platform)">
**Найкраще для:** прямого доступу до API та оплати за використання.
<Steps>
<Step title="Отримайте свій API key">
Створіть або скопіюйте API key з [панелі OpenAI Platform](https://platform.openai.com/api-keys).
<Step title="Отримайте свій API-ключ">
Створіть або скопіюйте API-ключ з [панелі OpenAI Platform](https://platform.openai.com/api-keys).
</Step>
<Step title="Запустіть онбординг">
<Step title="Запустіть початкове налаштування">
```bash
openclaw onboard --auth-choice openai-api-key
```
@ -69,25 +70,25 @@ Codex app-server harness. Прямий доступ за API key для `openai/
openclaw onboard --openai-api-key "$OPENAI_API_KEY"
```
</Step>
<Step title="Перевірте, що модель доступна">
<Step title="Переконайтеся, що модель доступна">
```bash
openclaw models list --provider openai
```
</Step>
</Steps>
### Підсумок маршрутів
### Підсумок маршруту
| Model ref | Маршрут | Автентифікація |
|-----------|---------|----------------|
| `openai/gpt-5.4` | прямий API OpenAI Platform | `OPENAI_API_KEY` |
| `openai/gpt-5.4-mini` | прямий API OpenAI Platform | `OPENAI_API_KEY` |
| `openai/gpt-5.5` | майбутній прямий маршрут API, щойно OpenAI увімкне GPT-5.5 в API | `OPENAI_API_KEY` |
| Посилання на модель | Маршрут | Автентифікація |
|-----------|-------|------|
| `openai/gpt-5.4` | Прямий API OpenAI Platform | `OPENAI_API_KEY` |
| `openai/gpt-5.4-mini` | Прямий API OpenAI Platform | `OPENAI_API_KEY` |
| `openai/gpt-5.5` | Майбутній прямий маршрут API, щойно OpenAI увімкне GPT-5.5 в API | `OPENAI_API_KEY` |
<Note>
`openai/*` — це прямий маршрут OpenAI API за API key, якщо ви явно не примусите
Codex app-server harness. Сама GPT-5.5 наразі доступна лише через підписку/OAuth;
використовуйте `openai-codex/*` для Codex OAuth через стандартний виконавець PI.
`openai/*` — це прямий маршрут OpenAI за API-ключем, якщо ви явно не примусите
використання Codex app-server harness. Сама GPT-5.5 наразі доступна лише через підписку/OAuth;
використовуйте `openai-codex/*` для Codex OAuth через стандартний PI runner.
</Note>
### Приклад конфігурації
@ -100,13 +101,13 @@ Codex app-server harness. Прямий доступ за API key для `openai/
```
<Warning>
OpenClaw **не** надає `openai/gpt-5.3-codex-spark`. Реальні запити до OpenAI API відхиляють цю модель, і поточний каталог Codex також її не надає.
OpenClaw **не** надає `openai/gpt-5.3-codex-spark`. Живі запити до OpenAI API відхиляють цю модель, і поточний каталог Codex також її не надає.
</Warning>
</Tab>
<Tab title="Codex subscription">
**Найкраще для:** використання вашої підписки ChatGPT/Codex замість окремого API key. Codex cloud потребує входу через ChatGPT.
<Tab title="Підписка Codex">
**Найкраще для:** використання вашої підписки ChatGPT/Codex замість окремого API-ключа. Codex cloud вимагає входу через ChatGPT.
<Steps>
<Step title="Запустіть Codex OAuth">
@ -120,34 +121,34 @@ Codex app-server harness. Прямий доступ за API key для `openai/
openclaw models auth login --provider openai-codex
```
Для headless або несумісних зі зворотним викликом середовищ додайте `--device-code`, щоб увійти через потік device-code ChatGPT замість callback браузера localhost:
Для headless-середовищ або конфігурацій, де незручно використовувати callback, додайте `--device-code`, щоб увійти через потік коду пристрою ChatGPT замість callback локального браузера:
```bash
openclaw models auth login --provider openai-codex --device-code
```
</Step>
<Step title="Встановіть модель за замовчуванням">
<Step title="Задайте модель за замовчуванням">
```bash
openclaw config set agents.defaults.model.primary openai-codex/gpt-5.5
```
</Step>
<Step title="Перевірте, що модель доступна">
<Step title="Переконайтеся, що модель доступна">
```bash
openclaw models list --provider openai-codex
```
</Step>
</Steps>
### Підсумок маршрутів
### Підсумок маршруту
| Model ref | Маршрут | Автентифікація |
|-----------|---------|----------------|
| Посилання на модель | Маршрут | Автентифікація |
|-----------|-------|------|
| `openai-codex/gpt-5.5` | ChatGPT/Codex OAuth через PI | вхід Codex |
| `openai/gpt-5.5` + `embeddedHarness.runtime: "codex"` | Codex app-server harness | автентифікація Codex app-server |
<Note>
Продовжуйте використовувати ідентифікатор постачальника `openai-codex` для команд
auth/profile. Префікс моделі `openai-codex/*` також є явним маршрутом PI для Codex OAuth.
Продовжуйте використовувати ідентифікатор постачальника `openai-codex` для команд автентифікації/профілю. Префікс моделі
`openai-codex/*` також є явним маршрутом PI для Codex OAuth.
</Note>
### Приклад конфігурації
@ -159,29 +160,29 @@ Codex app-server harness. Прямий доступ за API key для `openai/
```
<Note>
Онбординг більше не імпортує OAuth-матеріали з `~/.codex`. Увійдіть через OAuth у браузері (типово) або через потік device-code вище — OpenClaw керує отриманими обліковими даними у власному сховищі auth агента.
Початкове налаштування більше не імпортує матеріали OAuth з `~/.codex`. Увійдіть через OAuth у браузері (типовий варіант) або через потік коду пристрою, вказаний вище — OpenClaw керує отриманими обліковими даними у власному сховищі автентифікації агента.
</Note>
### Індикатор статусу
### Індикатор стану
Chat `/status` показує, який вбудований harness активний для поточної
сесії. Стандартний harness PI відображається як `Runner: pi (embedded)` і не
додає окремого значка. Коли вибрано вбудований Codex app-server harness,
сесії. Стандартний PI harness відображається як `Runner: pi (embedded)` і
не додає окремий індикатор. Коли вибрано вбудований Codex app-server harness,
`/status` додає ідентифікатор не-PI harness поруч із `Fast`, наприклад
`Fast · codex`. Наявні сесії зберігають записаний ідентифікатор harness, тож використайте
`Fast · codex`. Наявні сесії зберігають записаний для них ідентифікатор harness, тому використовуйте
`/new` або `/reset` після зміни `embeddedHarness`, якщо хочете, щоб `/status`
відображав новий вибір PI/Codex.
### Обмеження вікна контексту
OpenClaw розглядає метадані моделі та ліміт контексту середовища виконання як окремі значення.
OpenClaw розглядає метадані моделі та обмеження контексту під час виконання як окремі значення.
Для `openai-codex/gpt-5.5` через Codex OAuth:
- Нативний `contextWindow`: `1000000`
- Стандартний ліміт `contextTokens` середовища виконання: `272000`
- Стандартне обмеження `contextTokens` під час виконання: `272000`
Менший стандартний ліміт на практиці має кращі характеристики затримки та якості. Перевизначте його через `contextTokens`:
Менше стандартне обмеження на практиці дає кращі характеристики затримки й якості. Перевизначте його через `contextTokens`:
```json5
{
@ -196,7 +197,7 @@ Codex app-server harness. Прямий доступ за API key для `openai/
```
<Note>
Використовуйте `contextWindow`, щоб оголосити нативні метадані моделі. Використовуйте `contextTokens`, щоб обмежити бюджет контексту середовища виконання.
Використовуйте `contextWindow`, щоб оголосити нативні метадані моделі. Використовуйте `contextTokens`, щоб обмежити бюджет контексту під час виконання.
</Note>
</Tab>
@ -205,18 +206,18 @@ Codex app-server harness. Прямий доступ за API key для `openai/
## Генерація зображень
Вбудований Plugin `openai` реєструє генерацію зображень через інструмент `image_generate`.
Він підтримує як генерацію зображень OpenAI за API key, так і генерацію зображень
через Codex OAuth через той самий ідентифікатор моделі `openai/gpt-image-2`.
Він підтримує як генерацію зображень OpenAI за API-ключем, так і генерацію зображень
через Codex OAuth, використовуючи те саме посилання на модель `openai/gpt-image-2`.
| Можливість | API key OpenAI | Codex OAuth |
| ------------------------ | ---------------------------------- | ----------------------------------- |
| Model ref | `openai/gpt-image-2` | `openai/gpt-image-2` |
| Автентифікація | `OPENAI_API_KEY` | вхід через OpenAI Codex OAuth |
| Транспорт | OpenAI Images API | бекенд Codex Responses |
| Максимум зображень на запит | 4 | 4 |
| Режим редагування | Увімкнено (до 5 еталонних зображень) | Увімкнено (до 5 еталонних зображень) |
| Перевизначення розміру | Підтримується, включно з розмірами 2K/4K | Підтримується, включно з розмірами 2K/4K |
| Співвідношення сторін / роздільність | Не передається до OpenAI Images API | За потреби зіставляється з підтримуваним розміром |
| Можливість | API-ключ OpenAI | Codex OAuth |
| ------------------------- | ---------------------------------- | ------------------------------------ |
| Посилання на модель | `openai/gpt-image-2` | `openai/gpt-image-2` |
| Автентифікація | `OPENAI_API_KEY` | вхід через OpenAI Codex OAuth |
| Транспорт | OpenAI Images API | бекенд Codex Responses |
| Макс. кількість зображень на запит | 4 | 4 |
| Режим редагування | Увімкнено (до 5 еталонних зображень) | Увімкнено (до 5 еталонних зображень) |
| Перевизначення розміру | Підтримується, зокрема розміри 2K/4K | Підтримується, зокрема розміри 2K/4K |
| Співвідношення сторін / роздільна здатність | Не передається до OpenAI Images API | Зіставляється з підтримуваним розміром, коли це безпечно |
```json5
{
@ -232,27 +233,27 @@ Codex app-server harness. Прямий доступ за API key для `openai/
Див. [Генерація зображень](/uk/tools/image-generation) для спільних параметрів інструмента, вибору постачальника та поведінки failover.
</Note>
`gpt-image-2` є стандартним для генерації тексту в зображення OpenAI та
редагування зображень. `gpt-image-1` залишається доступною як явне перевизначення моделі, але нові
робочі процеси OpenAI для зображень мають використовувати `openai/gpt-image-2`.
`gpt-image-2` — це стандартне значення і для генерації зображень з тексту OpenAI, і для редагування зображень. `gpt-image-1` залишається доступною як явне перевизначення моделі, але нові робочі процеси OpenAI для зображень мають використовувати `openai/gpt-image-2`.
Для інсталяцій Codex OAuth зберігайте той самий ідентифікатор `openai/gpt-image-2`. Коли
налаштовано OAuth-профіль `openai-codex`, OpenClaw знаходить цей збережений токен доступу OAuth
і надсилає запити на зображення через бекенд Codex Responses. Він
не спочатку пробує `OPENAI_API_KEY` і не виконує тихий відкат до API key для цього
запиту. Явно налаштуйте `models.providers.openai` з API key,
власним base URL або endpoint Azure, якщо вам потрібен прямий маршрут OpenAI Images API.
Якщо цей користувацький endpoint для зображень розташований у довіреній LAN/приватній адресі, також встановіть
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`; OpenClaw зберігає
блокування приватних/внутрішніх OpenAI-сумісних endpoint для зображень, якщо не задано цей явний дозвіл.
Для установок із Codex OAuth зберігайте те саме посилання `openai/gpt-image-2`. Коли
налаштовано OAuth-профіль `openai-codex`, OpenClaw визначає цей збережений токен
доступу OAuth і надсилає запити на зображення через бекенд Codex Responses. Він
не намагається спочатку використати `OPENAI_API_KEY` і не виконує тихий перехід на API-ключ для цього
запиту. Явно налаштуйте `models.providers.openai` з API-ключем,
власною базовою URL-адресою або Azure endpoint, якщо хочете використовувати прямий маршрут
OpenAI Images API.
Якщо цей власний endpoint зображень перебуває в довіреній LAN/приватній адресі, також задайте
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`; OpenClaw і далі
блокує приватні/внутрішні OpenAI-сумісні endpoint зображень, якщо цей явний дозвіл
не задано.
Генерація:
Згенерувати:
```
/tool image_generate model=openai/gpt-image-2 prompt="A polished launch poster for OpenClaw on macOS" size=3840x2160 count=1
```
Редагування:
Відредагувати:
```
/tool image_generate model=openai/gpt-image-2 prompt="Preserve the object shape, change the material to translucent glass" image=/path/to/reference.png size=1024x1536
@ -262,11 +263,11 @@ Codex app-server harness. Прямий доступ за API key для `openai/
Вбудований Plugin `openai` реєструє генерацію відео через інструмент `video_generate`.
| Можливість | Значення |
| --------------- | --------------------------------------------------------------------------------- |
| Стандартна модель | `openai/sora-2` |
| Режими | Текст у відео, зображення у відео, редагування одного відео |
| Еталонні входи | 1 зображення або 1 відео |
| Можливість | Значення |
| ---------------- | --------------------------------------------------------------------------------- |
| Стандартна модель | `openai/sora-2` |
| Режими | Текст у відео, зображення у відео, редагування одного відео |
| Вхідні еталони | 1 зображення або 1 відео |
| Перевизначення розміру | Підтримується |
| Інші перевизначення | `aspectRatio`, `resolution`, `audio`, `watermark` ігноруються з попередженням інструмента |
@ -284,13 +285,13 @@ Codex app-server harness. Прямий доступ за API key для `openai/
Див. [Генерація відео](/uk/tools/video-generation) для спільних параметрів інструмента, вибору постачальника та поведінки failover.
</Note>
## Внесок до підказки GPT-5
## Внесок у prompt GPT-5
OpenClaw додає спільний внесок до підказки GPT-5 для запусків сімейства GPT-5 у всіх постачальників. Він застосовується за ідентифікатором моделі, тож `openai-codex/gpt-5.5`, `openai/gpt-5.4`, `openrouter/openai/gpt-5.5`, `opencode/gpt-5.5` та інші сумісні ідентифікатори GPT-5 отримують той самий шар. Старіші моделі GPT-4.x — ні.
OpenClaw додає спільний внесок у prompt GPT-5 для запусків сімейства GPT-5 у різних постачальників. Він застосовується за ідентифікатором моделі, тому `openai-codex/gpt-5.5`, `openai/gpt-5.4`, `openrouter/openai/gpt-5.5`, `opencode/gpt-5.5` та інші сумісні посилання GPT-5 отримують той самий overlay. Старіші моделі GPT-4.x — ні.
Вбудований нативний Codex harness використовує ту саму поведінку GPT-5 і шар Heartbeat через інструкції розробника Codex app-server, тому сесії `openai/gpt-5.x`, примусово спрямовані через `embeddedHarness.runtime: "codex"`, зберігають ті самі настанови щодо доведення виконання до кінця та проактивного Heartbeat, хоча рештою підказки harness керує Codex.
Вбудований нативний Codex harness використовує ту саму поведінку GPT-5 і overlay Heartbeat через інструкції розробника Codex app-server, тому сесії `openai/gpt-5.x`, примусово спрямовані через `embeddedHarness.runtime: "codex"`, зберігають ті самі вказівки щодо доведення дій до завершення та проактивного Heartbeat, навіть попри те, що рештою prompt harness керує Codex.
Внесок GPT-5 додає тегований контракт поведінки для збереження персони, безпеки виконання, дисципліни використання інструментів, форми виводу, перевірок завершення та верифікації. Специфічна для каналу поведінка відповідей і тихих повідомлень залишається в спільній системній підказці OpenClaw і політиці вихідної доставки. Настанови GPT-5 завжди ввімкнені для відповідних моделей. Рівень дружнього стилю взаємодії є окремим і налаштовуваним.
Внесок GPT-5 додає тегований контракт поведінки для збереження persona, безпеки виконання, дисципліни використання інструментів, форми виводу, перевірок завершення та верифікації. Специфічна для каналів поведінка відповіді та тихих повідомлень залишається у спільному системному prompt OpenClaw і політиці вихідної доставки. Вказівки GPT-5 завжди ввімкнені для відповідних моделей. Рівень дружнього стилю взаємодії є окремим і налаштовуваним.
| Значення | Ефект |
| ---------------------- | ------------------------------------------ |
@ -299,7 +300,7 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
| `"off"` | Вимкнути лише рівень дружнього стилю |
<Tabs>
<Tab title="Config">
<Tab title="Конфігурація">
```json5
{
agents: {
@ -320,11 +321,11 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
</Tabs>
<Tip>
Значення нечутливі до регістру під час виконання, тому і `"Off"`, і `"off"` вимикають рівень дружнього стилю.
Значення під час виконання не чутливі до регістру, тому і `"Off"`, і `"off"` вимикають дружній стиль.
</Tip>
<Note>
Застаріле `plugins.entries.openai.config.personality` усе ще читається як сумісний fallback, коли спільне налаштування `agents.defaults.promptOverlays.gpt5.personality` не задано.
Застарілий `plugins.entries.openai.config.personality` усе ще читається як сумісний запасний варіант, коли спільне налаштування `agents.defaults.promptOverlays.gpt5.personality` не задано.
</Note>
## Голос і мовлення
@ -333,15 +334,15 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
<Accordion title="Синтез мовлення (TTS)">
Вбудований Plugin `openai` реєструє синтез мовлення для поверхні `messages.tts`.
| Налаштування | Шлях конфігурації | Типово |
| Налаштування | Шлях конфігурації | Типове значення |
|---------|------------|---------|
| Модель | `messages.tts.providers.openai.model` | `gpt-4o-mini-tts` |
| Голос | `messages.tts.providers.openai.voice` | `coral` |
| Швидкість | `messages.tts.providers.openai.speed` | (не задано) |
| Інструкції | `messages.tts.providers.openai.instructions` | (не задано, лише `gpt-4o-mini-tts`) |
| Формат | `messages.tts.providers.openai.responseFormat` | `opus` для голосових нотаток, `mp3` для файлів |
| API key | `messages.tts.providers.openai.apiKey` | Використовує `OPENAI_API_KEY` як fallback |
| Base URL | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
| API-ключ | `messages.tts.providers.openai.apiKey` | Використовується `OPENAI_API_KEY` як запасний варіант |
| Базова URL-адреса | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
Доступні моделі: `gpt-4o-mini-tts`, `tts-1`, `tts-1-hd`. Доступні голоси: `alloy`, `ash`, `ballad`, `cedar`, `coral`, `echo`, `fable`, `juniper`, `marin`, `onyx`, `nova`, `sage`, `shimmer`, `verse`.
@ -358,21 +359,21 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
```
<Note>
Встановіть `OPENAI_TTS_BASE_URL`, щоб перевизначити базовий URL TTS без впливу на endpoint chat API.
Установіть `OPENAI_TTS_BASE_URL`, щоб перевизначити базову URL-адресу TTS без впливу на endpoint chat API.
</Note>
</Accordion>
<Accordion title="Мовлення в текст">
Вбудований Plugin `openai` реєструє пакетне перетворення мовлення в текст через
<Accordion title="Перетворення мовлення на текст">
Вбудований Plugin `openai` реєструє пакетне перетворення мовлення на текст через
поверхню транскрибування розуміння медіа OpenClaw.
- Стандартна модель: `gpt-4o-transcribe`
- Типова модель: `gpt-4o-transcribe`
- Endpoint: OpenAI REST `/v1/audio/transcriptions`
- Шлях введення: multipart-завантаження аудіофайлу
- Шлях вхідних даних: multipart-вивантаження аудіофайлу
- Підтримується в OpenClaw всюди, де транскрибування вхідного аудіо використовує
`tools.media.audio`, зокрема для сегментів голосових каналів Discord і
аудіовкладень каналів
`tools.media.audio`, зокрема у сегментах голосових каналів Discord і
аудіовкладеннях каналів
Щоб примусово використовувати OpenAI для транскрибування вхідного аудіо:
@ -394,25 +395,25 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
}
```
Підказки щодо мови та prompt передаються до OpenAI, коли їх задано у
спільній конфігурації аудіомедіа або в запиті на транскрибування для конкретного виклику.
Підказки щодо мови та prompt передаються до OpenAI, коли вони задані
у спільній конфігурації аудіомедіа або в запиті транскрибування для конкретного виклику.
</Accordion>
<Accordion title="Транскрибування в реальному часі">
Вбудований Plugin `openai` реєструє транскрибування в реальному часі для Plugin Voice Call.
| Налаштування | Шлях конфігурації | Типово |
| Налаштування | Шлях конфігурації | Типове значення |
|---------|------------|---------|
| Модель | `plugins.entries.voice-call.config.streaming.providers.openai.model` | `gpt-4o-transcribe` |
| Мова | `...openai.language` | (не задано) |
| Prompt | `...openai.prompt` | (не задано) |
| Тривалість тиші | `...openai.silenceDurationMs` | `800` |
| Поріг VAD | `...openai.vadThreshold` | `0.5` |
| API key | `...openai.apiKey` | Використовує `OPENAI_API_KEY` як fallback |
| API-ключ | `...openai.apiKey` | Використовується `OPENAI_API_KEY` як запасний варіант |
<Note>
Використовує WebSocket-з’єднання з `wss://api.openai.com/v1/realtime` з аудіо G.711 u-law (`g711_ulaw` / `audio/pcmu`). Цей streaming provider призначений для шляху транскрибування в реальному часі в Voice Call; голосові канали Discord наразі записують короткі сегменти та натомість використовують пакетний шлях транскрибування `tools.media.audio`.
Використовує WebSocket-з’єднання з `wss://api.openai.com/v1/realtime` з аудіо G.711 u-law (`g711_ulaw` / `audio/pcmu`). Цей постачальник потокової обробки призначений для шляху транскрибування в реальному часі у Voice Call; голос у Discord наразі записує короткі сегменти й натомість використовує пакетний шлях транскрибування `tools.media.audio`.
</Note>
</Accordion>
@ -420,17 +421,17 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
<Accordion title="Голос у реальному часі">
Вбудований Plugin `openai` реєструє голос у реальному часі для Plugin Voice Call.
| Налаштування | Шлях конфігурації | Типово |
| Налаштування | Шлях конфігурації | Типове значення |
|---------|------------|---------|
| Модель | `plugins.entries.voice-call.config.realtime.providers.openai.model` | `gpt-realtime-1.5` |
| Голос | `...openai.voice` | `alloy` |
| Temperature | `...openai.temperature` | `0.8` |
| Поріг VAD | `...openai.vadThreshold` | `0.5` |
| Тривалість тиші | `...openai.silenceDurationMs` | `500` |
| API key | `...openai.apiKey` | Використовує `OPENAI_API_KEY` як fallback |
| API-ключ | `...openai.apiKey` | Використовується `OPENAI_API_KEY` як запасний варіант |
<Note>
Підтримує Azure OpenAI через ключі конфігурації `azureEndpoint` і `azureDeployment`. Підтримує двонаправлений виклик інструментів. Використовує аудіоформат G.711 u-law.
Підтримує Azure OpenAI через ключі конфігурації `azureEndpoint` і `azureDeployment`. Підтримує двонапрямлені виклики інструментів. Використовує аудіоформат G.711 u-law.
</Note>
</Accordion>
@ -438,29 +439,28 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
## Endpoint Azure OpenAI
Вбудований постачальник `openai` може звертатися до ресурсу Azure OpenAI для
генерації зображень шляхом перевизначення base URL. На шляху генерації
зображень OpenClaw виявляє імена хостів Azure у `models.providers.openai.baseUrl` і автоматично
перемикається на формат запиту Azure.
Вбудований постачальник `openai` може використовувати ресурс Azure OpenAI для
генерації зображень шляхом перевизначення базової URL-адреси. На шляху
генерації зображень OpenClaw автоматично виявляє хости Azure у `models.providers.openai.baseUrl` і перемикається на
форму запиту Azure.
<Note>
Голос у реальному часі використовує окремий шлях конфігурації
(`plugins.entries.voice-call.config.realtime.providers.openai.azureEndpoint`)
і не залежить від `models.providers.openai.baseUrl`. Див. акордеон **Голос у реальному
часі** в розділі [Голос і мовлення](#voice-and-speech) для його налаштувань
Azure.
часі** в розділі [Голос і мовлення](#voice-and-speech) для налаштувань Azure.
</Note>
Використовуйте Azure OpenAI, коли:
- У вас уже є підписка Azure OpenAI, квота або корпоративна угода
- Вам потрібна регіональна локалізація даних або засоби контролю відповідності, які надає Azure
- Ви хочете зберігати трафік у межах наявного тенанта Azure
- У вас уже є підписка, квота або корпоративна угода Azure OpenAI
- Вам потрібні регіональне зберігання даних або засоби відповідності вимогам, які надає Azure
- Ви хочете, щоб трафік залишався в межах наявного орендаря Azure
### Конфігурація
Для генерації зображень Azure через вбудований постачальник `openai`, вкажіть
`models.providers.openai.baseUrl` на ваш ресурс Azure і встановіть `apiKey` у
Для генерації зображень через Azure за допомогою вбудованого постачальника `openai` вкажіть
`models.providers.openai.baseUrl` на ваш ресурс Azure і задайте `apiKey` як
ключ Azure OpenAI (а не ключ OpenAI Platform):
```json5
@ -476,8 +476,7 @@ Azure.
}
```
OpenClaw розпізнає такі суфікси хостів Azure для маршруту Azure генерації
зображень:
OpenClaw розпізнає такі суфікси хостів Azure для маршруту генерації зображень Azure:
- `*.openai.azure.com`
- `*.services.ai.azure.com`
@ -486,49 +485,48 @@ OpenClaw розпізнає такі суфікси хостів Azure для м
Для запитів генерації зображень на розпізнаному хості Azure OpenClaw:
- Надсилає заголовок `api-key` замість `Authorization: Bearer`
- Використовує шляхи в межах deployment (`/openai/deployments/{deployment}/...`)
- Використовує шляхи з прив’язкою до deployment (`/openai/deployments/{deployment}/...`)
- Додає `?api-version=...` до кожного запиту
Інші base URL (публічний OpenAI, OpenAI-сумісні проксі) зберігають стандартну
Інші базові URL-адреси (публічний OpenAI, OpenAI-сумісні проксі) зберігають стандартну
форму запиту OpenAI для зображень.
<Note>
Маршрутизація Azure для шляху генерації зображень постачальника `openai`
потребує OpenClaw 2026.4.22 або новішої версії. Раніші версії обробляють будь-який
власний `openai.baseUrl` як публічний endpoint OpenAI і завершуються помилкою при роботі з deployment
зображень Azure.
потребує OpenClaw 2026.4.22 або новішої версії. Раніші версії обробляють будь-який користувацький
`openai.baseUrl` як публічний endpoint OpenAI і завершуються помилкою при роботі з deployment зображень Azure.
</Note>
### Версія API
Встановіть `AZURE_OPENAI_API_VERSION`, щоб зафіксувати конкретну preview- або GA-версію Azure
Установіть `AZURE_OPENAI_API_VERSION`, щоб зафіксувати конкретну preview- або GA-версію Azure
для шляху генерації зображень Azure:
```bash
export AZURE_OPENAI_API_VERSION="2024-12-01-preview"
```
Типове значення — `2024-12-01-preview`, якщо змінну не встановлено.
Типове значення — `2024-12-01-preview`, якщо змінну не задано.
### Назви моделей — це назви deployment
### Імена моделей — це імена deployment
Azure OpenAI прив’язує моделі до deployment. Для запитів генерації зображень Azure,
маршрутизованих через вбудований постачальник `openai`, поле `model` в OpenClaw
має бути **назвою deployment Azure**, яку ви налаштували в порталі Azure, а не
публічним ідентифікатором моделі OpenAI.
має бути **іменем deployment Azure**, яке ви налаштували в порталі Azure, а не
ідентифікатором публічної моделі OpenAI.
Якщо ви створили deployment під назвою `gpt-image-2-prod`, який обслуговує `gpt-image-2`:
Якщо ви створили deployment з назвою `gpt-image-2-prod`, який обслуговує `gpt-image-2`:
```
/tool image_generate model=openai/gpt-image-2-prod prompt="A clean poster" size=1024x1024 count=1
```
Те саме правило назв deployment застосовується до викликів генерації зображень,
Те саме правило імен deployment застосовується до викликів генерації зображень,
маршрутизованих через вбудований постачальник `openai`.
### Регіональна доступність
Генерація зображень Azure наразі доступна лише в частині регіонів
Генерація зображень Azure наразі доступна лише в обмеженій кількості регіонів
(наприклад, `eastus2`, `swedencentral`, `polandcentral`, `westus3`,
`uaenorth`). Перевірте актуальний список регіонів Microsoft перед створенням
deployment і підтвердьте, що конкретна модель доступна у вашому регіоні.
@ -536,21 +534,21 @@ deployment і підтвердьте, що конкретна модель до
### Відмінності параметрів
Azure OpenAI і публічний OpenAI не завжди приймають однакові параметри зображень.
Azure може відхиляти опції, які дозволяє публічний OpenAI (наприклад, певні
значення `background` у `gpt-image-2`) або надавати їх лише для конкретних
версій моделі. Ці відмінності походять від Azure та базової моделі, а не від
OpenClaw. Якщо запит Azure завершується помилкою валідації, перевірте
набір параметрів, який підтримує ваш конкретний deployment і версія API в
Azure може відхиляти параметри, які дозволяє публічний OpenAI (наприклад, певні
значення `background` для `gpt-image-2`), або надавати їх лише для конкретних версій
моделі. Ці відмінності походять від Azure та базової моделі, а не від
OpenClaw. Якщо запит Azure завершується помилкою валідації, перевірте набір
параметрів, який підтримує ваш конкретний deployment і версія API, у
порталі Azure.
<Note>
Azure OpenAI використовує нативний транспорт і сумісну поведінку, але не отримує
приховані заголовки атрибуції OpenClaw — див. акордеон **Нативні та OpenAI-сумісні
Azure OpenAI використовує нативний транспорт і поведінку compat, але не отримує
приховані заголовки атрибуції OpenClaw — див. акордеон **Нативні маршрути та OpenAI-сумісні
маршрути** в розділі [Розширена конфігурація](#advanced-configuration).
Для трафіку chat або Responses на Azure (окрім генерації зображень) використовуйте
процес онбордингу або окрему конфігурацію постачальника Azure — одного лише
`openai.baseUrl` недостатньо, щоб увімкнути форму API/автентифікації Azure. Існує окремий
Для трафіку chat або Responses на Azure (поза генерацією зображень) використовуйте
потік початкового налаштування або окрему конфігурацію постачальника Azure — одного лише
`openai.baseUrl` недостатньо, щоб отримати форму API/автентифікації Azure. Існує окремий
постачальник `azure-openai-responses/*`; див.
акордеон Server-side Compaction нижче.
</Note>
@ -558,18 +556,18 @@ Azure OpenAI використовує нативний транспорт і с
## Розширена конфігурація
<AccordionGroup>
<Accordion title="Транспорт (WebSocket vs SSE)">
OpenClaw використовує спочатку WebSocket з fallback на SSE (`"auto"`) як для `openai/*`, так і для `openai-codex/*`.
<Accordion title="Транспорт (WebSocket чи SSE)">
OpenClaw використовує WebSocket-first із запасним переходом на SSE (`"auto"`) як для `openai/*`, так і для `openai-codex/*`.
У режимі `"auto"` OpenClaw:
- Повторює одну ранню помилку WebSocket перед переходом на SSE
- Після помилки позначає WebSocket як деградований приблизно на 60 секунд і використовує SSE під час охолодження
- Додає стабільні заголовки ідентичності сесії та ходу для повторних спроб і повторних підключень
- Додає стабільні заголовки ідентичності сесії та ходу для повторних спроб і перепідключень
- Нормалізує лічильники використання (`input_tokens` / `prompt_tokens`) між варіантами транспорту
| Значення | Поведінка |
|-------|----------|
| `"auto"` (типово) | Спочатку WebSocket, fallback на SSE |
| `"auto"` (типово) | Спочатку WebSocket, потім запасний перехід на SSE |
| `"sse"` | Примусово лише SSE |
| `"websocket"` | Примусово лише WebSocket |
@ -591,8 +589,8 @@ Azure OpenAI використовує нативний транспорт і с
```
Пов’язана документація OpenAI:
- [Realtime API with WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
- [Streaming API responses (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
- [Realtime API з WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
- [Потокові відповіді API (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
</Accordion>
@ -600,7 +598,7 @@ Azure OpenAI використовує нативний транспорт і с
OpenClaw типово вмикає прогрів WebSocket для `openai/*` і `openai-codex/*`, щоб зменшити затримку першого ходу.
```json5
// Disable warm-up
// Вимкнути прогрів
{
agents: {
defaults: {
@ -616,13 +614,13 @@ Azure OpenAI використовує нативний транспорт і с
</Accordion>
<Accordion title="Fast mode">
OpenClaw надає спільний перемикач Fast mode для `openai/*` і `openai-codex/*`:
<Accordion title="Швидкий режим">
OpenClaw надає спільний перемикач швидкого режиму для `openai/*` і `openai-codex/*`:
- **Chat/UI:** `/fast status|on|off`
- **Config:** `agents.defaults.models["<provider>/<model>"].params.fastMode`
- **Конфігурація:** `agents.defaults.models["<provider>/<model>"].params.fastMode`
Коли ввімкнено, OpenClaw зіставляє fast mode з пріоритетною обробкою OpenAI (`service_tier = "priority"`). Наявні значення `service_tier` зберігаються, а fast mode не переписує `reasoning` або `text.verbosity`.
Якщо ввімкнено, OpenClaw зіставляє швидкий режим із пріоритетною обробкою OpenAI (`service_tier = "priority"`). Наявні значення `service_tier` зберігаються, а швидкий режим не переписує `reasoning` або `text.verbosity`.
```json5
{
@ -637,13 +635,13 @@ Azure OpenAI використовує нативний транспорт і с
```
<Note>
Перевизначення сесії мають пріоритет над конфігурацією. Очищення перевизначення сесії в UI Sessions повертає сесію до налаштованого типового значення.
Перевизначення сесії мають вищий пріоритет за конфігурацію. Очищення перевизначення сесії в UI Sessions повертає сесію до налаштованого типового значення.
</Note>
</Accordion>
<Accordion title="Пріоритетна обробка (service_tier)">
API OpenAI надає пріоритетну обробку через `service_tier`. Встановіть її для кожної моделі в OpenClaw:
API OpenAI надає пріоритетну обробку через `service_tier`. Задайте її для кожної моделі в OpenClaw:
```json5
{
@ -666,16 +664,16 @@ Azure OpenAI використовує нативний транспорт і с
</Accordion>
<Accordion title="Server-side Compaction (Responses API)">
Для прямих моделей OpenAI Responses (`openai/*` на `api.openai.com`) обгортка потоку Pi-harness Plugin OpenAI автоматично вмикає server-side Compaction:
Для прямих моделей OpenAI Responses (`openai/*` на `api.openai.com`) stream wrapper Pi-harness Plugin `openai` автоматично вмикає Server-side Compaction:
- Примусово встановлює `store: true` (якщо сумісність моделі не задає `supportsStore: false`)
- Впроваджує `context_management: [{ type: "compaction", compact_threshold: ... }]`
- Типовий `compact_threshold`: 70% від `contextWindow` (або `80000`, коли значення недоступне)
- Примусово задає `store: true` (якщо сумісність моделі не встановлює `supportsStore: false`)
- Вставляє `context_management: [{ type: "compaction", compact_threshold: ... }]`
- Типове значення `compact_threshold`: 70% від `contextWindow` (або `80000`, якщо значення недоступне)
Це застосовується до вбудованого шляху Pi harness і до хуків постачальника OpenAI, які використовуються вбудованими запусками. Нативний Codex app-server harness керує власним контекстом через Codex і налаштовується окремо через `agents.defaults.embeddedHarness.runtime`.
<Tabs>
<Tab title="Явно ввімкнути">
<Tab title="Явне ввімкнення">
Корисно для сумісних endpoint, таких як Azure OpenAI Responses:
```json5
@ -710,7 +708,7 @@ Azure OpenAI використовує нативний транспорт і с
}
```
</Tab>
<Tab title="Вимкнути">
<Tab title="Вимкнення">
```json5
{
agents: {
@ -728,7 +726,7 @@ Azure OpenAI використовує нативний транспорт і с
</Tabs>
<Note>
`responsesServerCompaction` керує лише впровадженням `context_management`. Прямі моделі OpenAI Responses однаково примусово встановлюють `store: true`, якщо сумісність не задає `supportsStore: false`.
`responsesServerCompaction` керує лише вставленням `context_management`. Прямі моделі OpenAI Responses все одно примусово використовують `store: true`, якщо compat не задає `supportsStore: false`.
</Note>
</Accordion>
@ -747,32 +745,32 @@ Azure OpenAI використовує нативний транспорт і с
```
З `strict-agentic` OpenClaw:
- Більше не вважає хід лише з планом успішним прогресом, коли доступна дія з інструментом
- Більше не вважає хід лише з планом успішним прогресом, коли доступна дія через інструмент
- Повторює хід із вказівкою діяти негайно
- Автоматично вмикає `update_plan` для суттєвої роботи
- Показує явний заблокований стан, якщо модель продовжує планувати без дії
- Показує явний стан блокування, якщо модель продовжує планувати без дії
<Note>
Обмежено лише запусками сімейства GPT-5 OpenAI та Codex. Інші постачальники й старіші сімейства моделей зберігають типову поведінку.
Обмежено лише запуском OpenAI і Codex сімейства GPT-5. Інші постачальники й старіші сімейства моделей зберігають типову поведінку.
</Note>
</Accordion>
<Accordion title="Нативні та OpenAI-сумісні маршрути">
OpenClaw по-різному обробляє прямі endpoint OpenAI, Codex і Azure OpenAI та загальні OpenAI-сумісні проксі `/v1`:
<Accordion title="Нативні маршрути та OpenAI-сумісні маршрути">
OpenClaw по-різному обробляє прямі endpoint OpenAI, Codex і Azure OpenAI порівняно із загальними OpenAI-сумісними проксі `/v1`:
**Нативні маршрути** (`openai/*`, Azure OpenAI):
- Зберігають `reasoning: { effort: "none" }` лише для моделей, які підтримують OpenAI `none` effort
- Пропускають вимкнений reasoning для моделей або проксі, які відхиляють `reasoning.effort: "none"`
- Типово використовують строгий режим для схем інструментів
- Додають приховані заголовки атрибуції лише на перевірених нативних хостах
- Зберігають формування запитів, специфічне для OpenAI (`service_tier`, `store`, сумісність reasoning, підказки кешу prompt)
- Зберігають формування запитів, характерне лише для OpenAI (`service_tier`, `store`, reasoning-compat, підказки prompt-cache)
**Маршрути проксі/сумісності:**
- Використовують м’якшу сумісну поведінку
- Не примушують строгі схеми інструментів або заголовки лише для нативних маршрутів
**Проксі/сумісні маршрути:**
- Використовують м’якшу compat-поведінку
- Не примушують строгі схеми інструментів або нативні заголовки
Azure OpenAI використовує нативний транспорт і сумісну поведінку, але не отримує прихованих заголовків атрибуції.
Azure OpenAI використовує нативний транспорт і compat-поведінку, але не отримує приховані заголовки атрибуції.
</Accordion>
</AccordionGroup>
@ -781,15 +779,15 @@ Azure OpenAI використовує нативний транспорт і с
<CardGroup cols={2}>
<Card title="Вибір моделі" href="/uk/concepts/model-providers" icon="layers">
Вибір постачальників, ідентифікаторів моделей і поведінки failover.
Вибір постачальників, посилань на моделі та поведінки failover.
</Card>
<Card title="Генерація зображень" href="/uk/tools/image-generation" icon="image">
Спільні параметри інструмента зображень і вибір постачальника.
</Card>
<Card title="Генерація відео" href="/uk/tools/video-generation" icon="video">
Спільні параметри інструмента відео і вибір постачальника.
Спільні параметри інструмента відео та вибір постачальника.
</Card>
<Card title="OAuth і автентифікація" href="/uk/gateway/authentication" icon="key">
<Card title="OAuth та автентифікація" href="/uk/gateway/authentication" icon="key">
Докладніше про автентифікацію та правила повторного використання облікових даних.
</Card>
</CardGroup>

View File

@ -1,14 +1,14 @@
---
read_when:
- Ви хочете керувати Gateway з браузера
- Ви хочете доступ до Tailnet без SSH-тунелів
summary: Вебінтерфейс керування для Gateway (чат, вузли, конфігурація)
- Ви хочете доступ Tailnet без SSH-тунелів
summary: Браузерний інтерфейс керування для Gateway (чат, Node, конфігурація)
title: Інтерфейс керування
x-i18n:
generated_at: "2026-04-24T01:39:17Z"
generated_at: "2026-04-24T02:37:00Z"
model: gpt-5.4
provider: openai
source_hash: 931a87479844fc5c06f2c373d3e7447c140bf6d17a5614197209e7a5f3f896bd
source_hash: edf6beb9c485720b6811d9d348bbb4752cf6aae929a9fbc62fc8c4770e762490
source_path: web/control-ui.md
workflow: 15
---
@ -16,7 +16,7 @@ x-i18n:
Інтерфейс керування — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується Gateway:
- за замовчуванням: `http://<host>:18789/`
- необов’язковий префікс: встановіть `gateway.controlUi.basePath` (наприклад, `/openclaw`)
- необов’язковий префікс: установіть `gateway.controlUi.basePath` (наприклад, `/openclaw`)
Він взаємодіє **безпосередньо з WebSocket Gateway** на тому самому порту.
@ -35,14 +35,14 @@ x-i18n:
- заголовки ідентифікації Tailscale Serve, коли `gateway.auth.allowTailscale: true`
- заголовки ідентифікації trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"`
Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера
та вибрану URL-адресу gateway; паролі не зберігаються. Під час первинного налаштування зазвичай
генерується токен gateway для автентифікації зі спільним секретом при першому підключенні, але
Панель налаштувань на інформаційній панелі зберігає токен для поточної сесії вкладки браузера
і вибрану URL-адресу gateway; паролі не зберігаються. Onboarding зазвичай
генерує токен gateway для автентифікації зі спільним секретом під час першого підключення, але
автентифікація паролем також працює, коли `gateway.auth.mode` має значення `"password"`.
## Сполучення пристрою (перше підключення)
Коли ви підключаєтеся до Інтерфейсу керування з нового браузера або пристрою, Gateway
Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway
вимагає **одноразове підтвердження сполучення** — навіть якщо ви перебуваєте в тій самій Tailnet
з `gateway.auth.allowTailscale: true`. Це захід безпеки для запобігання
несанкціонованому доступу.
@ -52,133 +52,142 @@ x-i18n:
**Щоб підтвердити пристрій:**
```bash
# List pending requests
# Перелічити запити, що очікують
openclaw devices list
# Approve by request ID
# Підтвердити за ID запиту
openclaw devices approve <requestId>
```
Якщо браузер повторно намагається виконати сполучення зі зміненими даними автентифікації (роль/області доступу/публічний
ключ), попередній запит у стані очікування замінюється, і створюється новий `requestId`.
Якщо браузер повторно намагається пройти сполучення зі зміненими даними автентифікації (роль/області доступу/публічний
ключ), попередній запит, що очікує, замінюється, і створюється новий `requestId`.
Перед підтвердженням знову виконайте `openclaw devices list`.
Якщо браузер уже сполучений і ви змінюєте його доступ із читання на
доступ запису/адміністратора, це розглядається як підвищення рівня підтвердження, а не як тихе
повторне підключення. OpenClaw залишає попереднє підтвердження активним, блокує ширше повторне підключення
Якщо браузер уже сполучений і ви змінюєте його з доступу лише для читання на
доступ для запису/адміністратора, це вважається підвищенням рівня підтвердження, а не
тихим повторним підключенням. OpenClaw зберігає попереднє підтвердження активним, блокує ширше повторне підключення
і просить вас явно підтвердити новий набір областей доступу.
Після підтвердження пристрій запам’ятовується і не потребуватиме повторного підтвердження, якщо
ви не відкличете його через `openclaw devices revoke --device <id> --role <role>`. Див.
ви не відкличете його за допомогою `openclaw devices revoke --device <id> --role <role>`. Див.
[CLI Devices](/uk/cli/devices) для ротації токенів і відкликання.
**Примітки:**
- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`)
підтверджуються автоматично.
- Підключення браузера через Tailnet і LAN однаково вимагають явного підтвердження, навіть якщо
вони ініційовані з тієї самої машини.
- Кожен профіль браузера генерує унікальний ідентифікатор пристрою, тому зміна браузера або
- Прямі локальні browser-з’єднання через local loopback (`127.0.0.1` / `localhost`) автоматично
підтверджуються.
- Browser-підключення через Tailnet і LAN усе одно потребують явного підтвердження, навіть якщо
вони походять з тієї самої машини.
- Кожен профіль браузера генерує унікальний ID пристрою, тому зміна браузера або
очищення даних браузера вимагатиме повторного сполучення.
## Особиста ідентичність (локально в браузері)
Інтерфейс керування підтримує особисту ідентичність для кожного браузера (відображуване ім’я та
Control UI підтримує персональну ідентичність для кожного браузера (відображуване ім’я та
аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона
зберігається в сховищі браузера, прив’язана до поточного профілю браузера і не
синхронізується з іншими пристроями та не зберігається на сервері поза звичайними
метаданими авторства в стенограмі повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
синхронізується з іншими пристроями та не зберігається на сервері поза межами звичайних
метаданих авторства в транскрипті для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
зміна браузера скидає її до порожнього значення.
## Кінцева точка конфігурації runtime
## Endpoint конфігурації середовища виконання
Інтерфейс керування отримує свої налаштування runtime з
`/__openclaw/control-ui-config.json`. Ця кінцева точка захищена тією самою
Control UI отримує свої runtime-налаштування з
`/__openclaw/control-ui-config.json`. Доступ до цього endpoint захищений тією самою
автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть
отримати її, а успішне отримання вимагає або вже дійсний токен/пароль gateway,
ідентичність Tailscale Serve, або ідентичність trusted-proxy.
отримати його, а успішне отримання вимагає або вже дійсного токена/пароля gateway,
ідентифікації Tailscale Serve, або ідентичності trusted-proxy.
## Підтримка мов
Інтерфейс керування може локалізуватися під час першого завантаження відповідно до локалі вашого браузера.
Щоб змінити це пізніше, відкрийте **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`
- Неанглійські переклади ліниво завантажуються в браузері.
- Вибрана локаль зберігається в сховищі браузера і використовується повторно під час майбутніх відвідувань.
- Вибрана локаль зберігається в сховищі браузера й повторно використовується під час наступних відвідувань.
- Відсутні ключі перекладу повертаються до англійської.
## Що він уміє робити (зараз)
- Спілкуватися з моделлю через Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`)
- Передавати виклики інструментів + картки живого виводу інструментів у Chat (події агента)
- Канали: статус вбудованих, а також bundled/external plugin каналів, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
- Екземпляри: список присутності + оновлення (`system-presence`)
- Сесії: список + перевизначення моделі/мислення/швидкого режиму/детального режиму/трасування/міркування для кожної сесії (`sessions.list`, `sessions.patch`)
- Dreams: статус Dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`)
- Завдання Cron: список/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`)
- Підключатися до 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`)
- Інстанси: список присутності + оновлення (`system-presence`)
- Сесії: список + перевизначення model/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.*`)
- Вузли: список + можливості (`node.list`)
- Підтвердження exec: редагування списків дозволів gateway або вузла + політика запитів для `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 для посилань у надісланому корисному навантаженні конфігурації; нерозв’язані активні надіслані посилання відхиляються до запису
- Схема конфігурації + рендеринг форм (`config.schema` / `config.schema.lookup`,
включно з полями `title` / `description`, відповідними підказками UI, негайними
зведеннями дочірніх елементів, метаданими документації для вузлів nested object/wildcard/array/composition,
а також схемами plugin і каналів, коли вони доступні); редактор Raw JSON
доступний лише тоді, коли знімок має безпечний raw round-trip
- Якщо знімок не може безпечно пройти raw round-trip, Інтерфейс керування примусово вмикає режим Form і вимикає режим Raw для цього знімка
- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, структуру `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні редагування зберігаються під час скидання, коли знімок може безпечно пройти round-trip
- Структуровані значення об’єктів SecretRef відображаються в текстових полях форми лише для читання, щоб запобігти випадковому пошкодженню під час перетворення об’єкта на рядок
- Записи конфігурації містять захист на основі базового хеша, щоб запобігти перезапису одночасних змін
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також попередньо перевіряють розв’язання активних SecretRef для посилань у надісланому payload конфігурації; невирішені активні надіслані посилання відхиляються до запису
- Схема конфігурації + рендеринг форми (`config.schema` / `config.schema.lookup`,
зокрема поле `title` / `description`, відповідні підказки UI, підсумки
безпосередніх дочірніх елементів, метадані документації для вузлів nested object/wildcard/array/composition,
а також схеми Plugin і каналів, коли вони доступні); редактор Raw JSON
доступний лише тоді, коли знімок має безпечне повне raw-перетворення
- Якщо знімок не може безпечно пройти повне raw-перетворення, Control UI примусово використовує режим Form і вимикає режим Raw для цього знімка
- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw-режимі (форматування, коментарі, макет `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні зміни зберігаються після скидання, коли знімок може безпечно пройти повне raw-перетворення
- Значення структурованих об’єктів SecretRef відображаються лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню під час перетворення об’єкта на рядок
- Налагодження: знімки status/health/models + журнал подій + ручні RPC-виклики (`status`, `health`, `models.list`)
- Журнали: live tail журнальних файлів gateway із фільтрацією/експортом (`logs.tail`)
- Оновлення: запуск оновлення пакета/git + перезапуск (`update.run`) зі звітом про перезапуск
Примітки до панелі завдань Cron:
- Для ізольованих завдань доставка за замовчуванням налаштована на оголошення підсумку. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
- Поля каналу/цілі з’являються, коли вибрано announce.
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, встановленим на дійсну URL-адресу HTTP(S) Webhook.
- Для завдань основної сесії доступні режими доставки webhook і none.
- Розширені елементи керування редагуванням включають delete-after-run, очищення перевизначення агента, точні/зміщені параметри cron,
перевизначення моделі/мислення агента та перемикачі доставки best-effort.
- Валідація форми виконується вбудовано з помилками на рівні полів; недійсні значення вимикають кнопку збереження, доки їх не буде виправлено.
- Встановіть `cron.webhookToken`, щоб надсилати окремий bearer token; якщо його не вказано, webhook надсилається без заголовка автентифікації.
- Застарілий резервний варіант: збережені застарілі завдання з `notify: true` усе ще можуть використовувати `cron.webhook`, доки їх не буде мігровано.
- Для ізольованих завдань доставка за замовчуванням оголошує підсумок. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
- Поля channel/target з’являються, коли вибрано announce.
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, установленим на дійсну URL-адресу HTTP(S) Webhook.
- Для завдань main-session доступні режими доставки webhook і none.
- Розширені елементи редагування включають видалення після запуску, очищення перевизначення агента, точні/з відтермінуванням параметри cron,
перевизначення model/thinking для агента та перемикачі доставки з найкращими зусиллями.
- Валідація форми є вбудованою з помилками на рівні полів; некоректні значення вимикають кнопку збереження, доки їх не буде виправлено.
- Установіть `cron.webhookToken`, щоб надсилати окремий bearer-токен; якщо його не вказано, webhook надсилається без заголовка автентифікації.
- Застарілий запасний варіант: збережені legacy-завдання з `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. Коли записи стенограми надто великі, Gateway може обрізати довгі текстові поля, пропускати великі блоки метаданих і замінювати надто великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
- Зображення assistant/generated зберігаються як керовані посилання на медіа й повертаються через автентифіковані URL-адреси медіа Gateway, тому перезавантаження не залежать від того, чи збережуться в історії чату необроблені корисні навантаження зображень base64.
- `chat.history` також прибирає з видимого тексту assistant вбудовані теги директив лише для відображення (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-корисні навантаження викликів інструментів у форматі plain-text (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізані блоки викликів інструментів), а також витеклі ASCII/full-width токени керування моделлю, і пропускає записи assistant, увесь видимий текст яких складається лише з точного тихого токена `NO_REPLY` / `no_reply`.
- `chat.inject` додає примітку assistant до стенограми сесії та транслює подію `chat` для оновлень лише в UI (без запуску агента, без доставки в канал).
- Перемикачі моделі та мислення в заголовку чату негайно змінюють активну сесію через `sessions.patch`; це сталі перевизначення сесії, а не параметри надсилання лише на один хід.
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи транскрипту надто великі, Gateway може обрізати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надто великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
- Зображення assistant/згенеровані зберігаються як керовані посилання на медіа і повертаються через автентифіковані URL-адреси медіа Gateway, тож перезавантаження не залежить від того, чи залишаються в відповіді історії чату raw-payload зображень base64.
- `chat.history` також прибирає inline-теги директив лише для відображення з видимого тексту assistant (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-payload звичайного тексту викликів інструментів (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізані блоки викликів інструментів), а також витеклі токени керування моделлю ASCII/full-width, і пропускає записи assistant, увесь видимий текст яких — це лише точний тихий токен `NO_REPLY` / `no_reply`.
- `chat.inject` додає примітку assistant до транскрипту сесії та транслює подію `chat` для оновлень лише UI (без запуску агента, без доставки через канал).
- Засоби вибору model і thinking у заголовку чату негайно застосовують зміни до активної сесії через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише для одного ходу.
- Режим Talk використовує зареєстрованого постачальника голосу в реальному часі. Налаштуйте OpenAI за допомогою
`talk.provider: "openai"` разом із `talk.providers.openai.apiKey`, або повторно використайте
конфігурацію постачальника Realtime для Voice Call. Браузер ніколи не отримує стандартний
API-ключ OpenAI; він отримує лише ефемерний секрет клієнта Realtime.
- Зупинка:
- Натисніть **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`) для переривання всіх активних запусків у цій сесії
- Збереження часткового виводу після переривання:
- Коли запуск перервано, частковий текст assistant усе ще може відображатися в UI
- Gateway зберігає частковий текст assistant у стенограмі, якщо існує буферизований вивід
- Збережені записи містять метадані переривання, щоб споживачі стенограми могли відрізнити часткові результати переривання від звичайного завершеного виводу
- Gateway зберігає частковий текст assistant у історії транскрипту після переривання, коли існує буферизований вивід
- Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізнити частковий вивід після переривання від звичайного завершення
## Hosted embeds
Повідомлення assistant можуть вбудовано відображати hosted web content за допомогою shortcode `[embed ...]`.
Повідомлення assistant можуть відображати hosted web content вбудовано за допомогою shortcode `[embed ...]`.
Політика sandbox для iframe керується параметром
`gateway.controlUi.embedSandbox`:
- `strict`: вимикає виконання скриптів усередині hosted embeds
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію походження; це
значення за замовчуванням, і його зазвичай достатньо для самодостатніх browser games/widgets
- `trusted`: додає `allow-same-origin` на додачу до `allow-scripts` для same-site
документів, яким навмисно потрібні ширші привілеї
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію джерела; це
значення за замовчуванням і зазвичай його достатньо для самодостатніх browser-ігор/віджетів
- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для same-site
документів, яким навмисно потрібні розширені привілеї
Приклад:
@ -192,19 +201,19 @@ openclaw devices approve <requestId>
}
```
Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна
поведінка same-origin. Для більшості згенерованих агентом ігор та інтерактивних полотен `scripts`
Використовуйте `trusted`, лише коли вбудованому документу справді потрібна поведінка
same-origin. Для більшості згенерованих агентом ігор та інтерактивних canvas `scripts`
безпечніший вибір.
Абсолютні зовнішні URL-адреси embed `http(s)` за замовчуванням залишаються заблокованими. Якщо ви
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, встановіть
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, установіть
`gateway.controlUi.allowExternalEmbedUrls: true`.
## Доступ через Tailnet (рекомендовано)
## Доступ Tailnet (рекомендовано)
### Інтегрований Tailscale Serve (бажано)
Тримайте Gateway на loopback і дозвольте Tailscale Serve проксувати його через HTTPS:
Залишайте Gateway на loopback і дозвольте Tailscale Serve проксіювати його через HTTPS:
```bash
openclaw gateway --tailscale serve
@ -214,22 +223,22 @@ openclaw gateway --tailscale serve
- `https://<magicdns>/` (або ваш налаштований `gateway.controlUi.basePath`)
За замовчуванням запити Serve до Інтерфейсу керування/WebSocket можуть автентифікуватися через заголовки ідентичності Tailscale
За замовчуванням запити Control UI/WebSocket Serve можуть проходити автентифікацію через заголовки ідентичності Tailscale
(`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw
перевіряє ідентичність, визначаючи адресу `x-forwarded-for` через
`tailscale whois` і зіставляючи її із заголовком, і приймає такі запити лише тоді, коли
запит потрапляє на loopback із заголовками Tailscale `x-forwarded-*`. Встановіть
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом
навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
`tailscale whois` і звіряючи її із заголовком, і приймає їх лише тоді, коли
запит надходить на loopback із заголовками Tailscale `x-forwarded-*`. Установіть
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані
зі спільним секретом навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
`"password"`.
Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта
та області автентифікації серіалізуються перед записами до обмеження частоти. Тому одночасні хибні повторні спроби
та області автентифікації серіалізуються перед записами обмеження частоти. Тому одночасні невдалі повторні спроби
з того самого браузера можуть показувати `retry later` у другому запиті
замість двох звичайних невідповідностей, що паралельно змагаються.
замість двох звичайних невідповідностей, що змагаються паралельно.
Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості
може виконуватися недовірений локальний код, вимагайте автентифікацію токеном/паролем.
### Прив’язка до tailnet + токен
### Прив’язати до tailnet + токен
```bash
openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
@ -239,19 +248,19 @@ 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 (`http://<lan-ip>` або `http://<tailscale-ip>`),
браузер працює в **незахищеному контексті** й блокує WebCrypto. За замовчуванням
OpenClaw **блокує** підключення Інтерфейсу керування без ідентичності пристрою.
браузер працює в **незахищеному контексті** і блокує WebCrypto. За замовчуванням
OpenClaw **блокує** підключення Control UI без ідентичності пристрою.
Задокументовані винятки:
- сумісність незахищеного HTTP лише для localhost з `gateway.controlUi.allowInsecureAuth=true`
- успішна автентифікація оператора Інтерфейсу керування через `gateway.auth.mode: "trusted-proxy"`
- успішна автентифікація оператора Control UI через `gateway.auth.mode: "trusted-proxy"`
- аварійний варіант `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкрийте UI локально:
@ -273,12 +282,12 @@ OpenClaw **блокує** підключення Інтерфейсу керув
`allowInsecureAuth` — це лише локальний перемикач сумісності:
- Він дозволяє сесіям Інтерфейсу керування на localhost продовжувати роботу без ідентичності пристрою
у незахищених HTTP-контекстах.
- Він дозволяє сесіям localhost Control UI продовжуватися без ідентичності пристрою в
незахищених контекстах HTTP.
- Він не обходить перевірки сполучення.
- Він не послаблює вимоги до ідентичності віддалених пристроїв (не localhost).
- Він не послаблює вимоги до віддаленої (не-localhost) ідентичності пристрою.
**Лише для аварійних випадків:**
**Лише для аварійного використання:**
```json5
{
@ -290,40 +299,40 @@ OpenClaw **блокує** підключення Інтерфейсу керув
}
```
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Інтерфейсі керування і є
серйозним зниженням рівня безпеки. Після аварійного використання швидко поверніть попереднє значення.
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Control UI і є
серйозним зниженням рівня безпеки. Швидко поверніть налаштування назад після аварійного використання.
Примітка щодо trusted-proxy:
- успішна автентифікація trusted-proxy може допускати **операторські** сесії Інтерфейсу керування без
- успішна автентифікація trusted-proxy може допускати **операторські** сесії Control UI без
ідентичності пристрою
- це **не** поширюється на сесії Інтерфейсу керування з роллю вузла
- reverse proxy через loopback на тому самому хості все одно не задовольняють автентифікацію trusted-proxy; див.
- це **не** поширюється на сесії Control UI з роллю node
- reverse-proxy на тій самій машині через loopback усе одно не задовольняють автентифікацію trusted-proxy; див.
[Автентифікація Trusted Proxy](/uk/gateway/trusted-proxy-auth)
Див. [Tailscale](/uk/gateway/tailscale) для інструкцій із налаштування HTTPS.
Див. [Tailscale](/uk/gateway/tailscale) для вказівок щодо налаштування HTTPS.
## Політика безпеки вмісту
Інтерфейс керування постачається зі суворою політикою `img-src`: дозволені лише ресурси **того самого походження** та URL `data:`. Віддалені URL `http(s)` і URL з відносним протоколом відхиляються браузером і не ініціюють мережевих запитів.
Control UI постачається із суворою політикою `img-src`: дозволено лише ресурси **того самого джерела** та URL-адреси `data:`. Віддалені URL-адреси з `http(s)` і протокольно-відносні URL-адреси зображень відхиляються браузером і не спричиняють мережевих запитів.
Що це означає на практиці:
- Аватари та зображення, що обслуговуються за відносними шляхами (наприклад `/avatars/<id>`), як і раніше відображаються.
- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для корисних навантажень усередині протоколу).
- Віддалені URL аватарів, що надходять із метаданих каналу, видаляються в допоміжних функціях аватарів Інтерфейсу керування і замінюються вбудованим логотипом/значком, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
- Вбудовані URL-адреси `data:image/...` як і раніше відображаються (це корисно для payload усередині протоколу).
- Віддалені URL-адреси аватарів, які надходять із метаданих каналів, видаляються в helper-функціях аватарів Control UI і замінюються вбудованим логотипом/бейджем, тож скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
Щоб отримати таку поведінку, нічого змінювати не потрібно — вона завжди ввімкнена і не налаштовується.
Вам не потрібно нічого змінювати, щоб отримати таку поведінку — вона завжди ввімкнена й не налаштовується.
## Автентифікація маршруту аватара
Коли налаштовано автентифікацію gateway, кінцева точка аватара Інтерфейсу керування вимагає той самий токен gateway, що й решта API:
Коли налаштовано автентифікацію gateway, endpoint аватарів у Control UI вимагає той самий токен gateway, що й решта API:
- `GET /avatar/<agentId>` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/<agentId>?meta=1` повертає метадані аватара за тим самим правилом.
- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (так само, як і до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які інакше захищені.
- Сам Інтерфейс керування пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення все одно відображається в інформаційних панелях.
- `GET /avatar/<agentId>` повертає зображення аватара лише автентифікованим викликам. `GET /avatar/<agentId>?meta=1` повертає метадані аватара за тим самим правилом.
- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (узгоджено із сусіднім маршрутом assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому разі захищені.
- Сам Control UI пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення все одно відображається в інформаційних панелях.
Якщо ви вимкнете автентифікацію gateway (не рекомендується на спільних хостах), маршрут аватара також стане неавтентифікованим, відповідно до решти gateway.
Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стане неавтентифікованим, узгоджено з рештою gateway.
## Збирання UI
@ -333,7 +342,7 @@ Gateway обслуговує статичні файли з `dist/control-ui`.
pnpm ui:build
```
Необов’язкова абсолютна база (коли вам потрібні фіксовані URL ресурсів):
Необов’язкова абсолютна база (коли потрібні фіксовані URL-адреси ресурсів):
```bash
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
@ -345,16 +354,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
Інтерфейс керування — це статичні файли; ціль WebSocket налаштовується і може
відрізнятися від HTTP-походження. Це зручно, коли ви хочете мати dev server Vite
локально, але Gateway працює деінде.
Control UI — це статичні файли; ціль WebSocket можна налаштувати, і вона може
відрізнятися від HTTP origin. Це зручно, коли ви хочете локальний dev server Vite,
але Gateway працює деінде.
1. Запустіть dev server UI: `pnpm ui:dev`
2. Відкрийте URL такого вигляду:
2. Відкрийте URL-адресу на кшталт:
```text
http://localhost:5173/?gatewayUrl=ws://<gateway-host>:18789
@ -368,20 +377,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=` усе ще одноразово імпортуються для сумісності, але лише як запасний варіант, і видаляються одразу після bootstrap.
- `password` зберігається лише в пам’яті.
- Коли встановлено `gatewayUrl`, UI не повертається до облікових даних із конфігурації чи середовища.
Надайте `token` (або `password`) явно. Відсутність явних облікових даних є помилкою.
- Використовуйте `wss://`, коли Gateway працює за TLS (Tailscale Serve, HTTPS proxy тощо).
Явно передайте `token` (або `password`). Відсутність явних облікових даних є помилкою.
- Використовуйте `wss://`, коли Gateway перебуває за TLS (Tailscale Serve, HTTPS proxy тощо).
- `gatewayUrl` приймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти clickjacking.
- Розгортання Інтерфейсу керування не на loopback повинні явно задавати `gateway.controlUi.allowedOrigins`
(повні походження). Це також стосується віддалених dev-середовищ.
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім жорстко контрольованого
локального тестування. Це означає дозвіл для будь-якого походження браузера, а не «збіг із будь-яким хостом, який я
- Для розгортань Control UI поза loopback потрібно явно встановити `gateway.controlUi.allowedOrigins`
(повні origin). Це також стосується віддалених dev-конфігурацій.
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім суворо контрольованого
локального тестування. Це означає дозволити будь-який origin браузера, а не «зіставляти з будь-яким хостом, який я
використовую».
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` вмикає
режим резервного визначення походження за заголовком Host, але це небезпечний режим безпеки.
режим резервного визначення origin через заголовок Host, але це небезпечний режим безпеки.
Приклад: