chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-24 04:37:12 +00:00
parent 2b7dbe8be8
commit e1201d5d8a
5 changed files with 601 additions and 544 deletions

View File

@ -1,14 +1,14 @@
---
read_when:
- Ви хочете, щоб агент OpenClaw приєднався до виклику Google Meet
- Ви налаштовуєте Chrome або Twilio як транспорт для Google Meet
summary: 'Plugin Google Meet: приєднання до явних URL Google Meet через Chrome або Twilio з типовими налаштуваннями realtime voice'
- Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet
- Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet
summary: 'Plugin Google Meet: приєднання до явно вказаних URL-адрес Meet через Chrome або Twilio з типовими налаштуваннями голосу в реальному часі'
title: Plugin Google Meet
x-i18n:
generated_at: "2026-04-24T03:47:46Z"
generated_at: "2026-04-24T04:35:24Z"
model: gpt-5.4
provider: openai
source_hash: 0ff8fa088d162e1d90e7f4cff9e72db485d6777f56086203d70d4c7071d70000
source_hash: 5c89587eeab8440b2ded2c352cc73209753fc4697d9fdf44cfe39de9d1d76b3f
source_path: plugins/google-meet.md
workflow: 15
---
@ -17,37 +17,34 @@ x-i18n:
Підтримка учасника Google Meet для OpenClaw.
Plugin навмисно зроблено явним:
Plugin є навмисно явним за дизайном:
- Він приєднується лише до явного URL `https://meet.google.com/...`.
- `realtime` voice — режим за замовчуванням.
- Realtime voice може звертатися назад до повного агента OpenClaw, коли потрібні глибше
міркування або інструменти.
- Він приєднується лише до явно вказаної URL-адреси `https://meet.google.com/...`.
- Голос `realtime` є режимом за замовчуванням.
- Голос у режимі реального часу може повертатися до повного агента OpenClaw, коли потрібні глибше міркування або інструменти.
- Автентифікація починається з особистого Google OAuth або вже виконаного входу в профіль Chrome.
- Автоматичного оголошення згоди немає.
- Аудіобекенд Chrome за замовчуванням — `BlackHole 2ch`.
- Типовим аудіобекендом Chrome є `BlackHole 2ch`.
- Chrome може працювати локально або на підключеному вузлі.
- Twilio приймає номер для дозвону та необов’язкову PIN-код або DTMF-послідовність.
- CLI-команда — `googlemeet`; `meet` зарезервовано для ширших
teleconference-процесів агента.
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших робочих процесів телеконференцій агента.
## Швидкий старт
Установіть локальні аудіозалежності та переконайтеся, що провайдер realtime може використовувати
OpenAI:
Установіть локальні аудіозалежності та переконайтеся, що постачальник realtime може використовувати OpenAI:
```bash
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
```
`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор
Homebrew вимагає перезавантаження, перш ніж macOS покаже цей пристрій:
`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew вимагає перезавантаження, перш ніж macOS зробить пристрій доступним:
```bash
sudo reboot
```
Після перезавантаження перевірте обидва компоненти:
Після перезавантаження перевірте обидві складові:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
@ -90,46 +87,124 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
}
```
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для
шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте
окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole
достатньо для першого smoke test, але він може давати відлуння.
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двостороннього аудіо використовуйте окремі віртуальні пристрої або граф на кшталт Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але може виникати луна.
### Локальний Gateway + Parallels Chrome
Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть хост вузла у VM. Один раз увімкніть вбудований Plugin на VM, щоб вузол рекламував команду Chrome:
Що і де запускається:
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, постачальник realtime і конфігурація Plugin Google Meet.
- Parallels macOS VM: CLI/хост вузла OpenClaw, Google Chrome, SoX, BlackHole 2ch і профіль Chrome із виконаним входом у Google.
- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування постачальника моделі.
Установіть залежності у VM:
```bash
brew install blackhole-2ch sox
```
Перезавантажте VM після встановлення BlackHole, щоб macOS зробила `BlackHole 2ch` доступним:
```bash
sudo reboot
```
Після перезавантаження переконайтеся, що VM бачить аудіопристрій і команди SoX:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
command -v rec play
```
Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin:
```bash
openclaw plugins enable google-meet
```
Запустіть хост вузла у VM:
```bash
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
Підтвердьте вузол з хоста Gateway:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
Підтвердьте, що Gateway бачить вузол і що він рекламує `googlemeet.chrome`:
```bash
openclaw nodes status
```
Спрямуйте Meet через цей вузол на хості Gateway:
```json5
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {
defaultTransport: "chrome-node",
chromeNode: {
node: "parallels-macos",
},
},
},
},
},
}
```
Тепер приєднуйтеся як зазвичай із хоста Gateway:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
```
або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`.
Якщо `chromeNode.node` не вказано, OpenClaw автоматично виконує вибір лише тоді, коли рівно один підключений вузол рекламує `googlemeet.chrome`. Якщо підключено кілька придатних вузлів, установіть `chromeNode.node` на id вузла, відображуване ім’я або віддалену IP-адресу.
Типові перевірки у разі збоїв:
- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, підтвердьте з’єднання та переконайтеся, що у VM було виконано `openclaw plugins enable google-meet`.
- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` у VM і перезавантажте VM.
- Chrome відкривається, але не може приєднатися: увійдіть у Chrome всередині VM і переконайтеся, що цей профіль може вручну приєднатися до URL-адреси Meet.
- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію на кшталт Loopback для чистого двостороннього аудіо.
## Примітки щодо встановлення
Типовий шлях Chrome realtime використовує два зовнішні інструменти:
Типовий режим realtime у Chrome використовує два зовнішні інструменти:
- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play`
для типового аудіомоста G.711 mu-law на 8 кГц.
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`,
через який Chrome/Meet можуть маршрутизувати звук.
- `sox`: утиліта командного рядка для аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомоста 8 кГц G.711 mu-law.
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet можуть маршрутизувати аудіо.
OpenClaw не постачає і не розповсюджує жоден із цих пакетів. У документації користувачам пропонується
встановити їх як залежності хоста через Homebrew. Ліцензія SoX —
`LGPL-2.0-only AND GPL-2.0-only`; ліцензія BlackHole — GPL-3.0. Якщо ви збираєте
інсталятор або appliance, що постачає BlackHole разом з OpenClaw, перегляньте
умови ліцензування BlackHole від першоджерела або отримайте окрему ліцензію від Existential Audio.
OpenClaw не постачає і не розповсюджує жоден із цих пакетів. У документації користувачам пропонується встановити їх як залежності хоста через Homebrew. SoX ліцензовано як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole — за GPL-3.0. Якщо ви збираєте інсталятор або appliance, що постачає BlackHole разом з OpenClaw, перегляньте ліцензійні умови BlackHole від upstream або отримайте окрему ліцензію від Existential Audio.
## Транспорти
### Chrome
Транспорт Chrome відкриває URL Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід.
У macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`.
Якщо це налаштовано, він також запускає команду перевірки стану аудіомоста й команду запуску перед відкриттям Chrome.
Транспорт Chrome відкриває URL-адресу Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. У macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`. Якщо налаштовано, він також запускає команду перевірки працездатності аудіомоста та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному вузлі, наприклад у Parallels macOS VM.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node
```
Маршрутизуйте звук мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw.
Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування,
а не тихо приєднується без аудіошляху.
Спрямуйте аудіо мікрофона та динаміка Chrome через локальний аудіоміст OpenClaw. Якщо `BlackHole 2ch` не встановлено, приєднання завершується з помилкою налаштування замість тихого приєднання без аудіошляху.
### Twilio
Транспорт Twilio — це суворий план дозвону, делегований Plugin Voice Call. Він
не аналізує сторінки Meet у пошуку телефонних номерів.
Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet у пошуку телефонних номерів.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -138,7 +213,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--pin 123456
```
Використовуйте `--dtmf-sequence`, коли зустріч потребує користувацької послідовності:
Використовуйте `--dtmf-sequence`, коли зустріч потребує спеціальної послідовності:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -149,18 +224,15 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
## OAuth і preflight
Доступ до Google Meet Media API спочатку використовує особистий OAuth-клієнт. Налаштуйте
`oauth.clientId` і, за бажання, `oauth.clientSecret`, а потім виконайте:
Доступ до Google Meet Media API спочатку використовує особистий OAuth-клієнт. Налаштуйте `oauth.clientId` і, за бажання, `oauth.clientSecret`, а потім виконайте:
```bash
openclaw googlemeet auth login --json
```
Команда виводить блок конфігурації `oauth` із refresh token. Вона використовує PKCE,
localhost callback за адресою `http://localhost:8085/oauth2callback` і ручний
процес копіювання/вставлення з `--manual`.
Команда виводить блок конфігурації `oauth` з токеном оновлення. Вона використовує PKCE, localhost callback на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`.
Як запасні варіанти приймаються такі змінні середовища:
Як резервні варіанти приймаються такі змінні середовища:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET`
@ -171,7 +243,7 @@ localhost callback за адресою `http://localhost:8085/oauth2callback` і
- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING`
- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK`
Розв’яжіть URL Meet, код або `spaces/{id}` через `spaces.get`:
Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`:
```bash
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
@ -183,21 +255,18 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
```
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project,
OAuth principal і учасники зустрічі зареєстровані в Google
Workspace Developer Preview Program для Meet media APIs.
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program for Meet media APIs.
## Конфігурація
Для типового шляху Chrome realtime потрібні лише ввімкнений Plugin, BlackHole, SoX
і ключ OpenAI:
Типовий шлях realtime у Chrome потребує лише ввімкненого Plugin, BlackHole, SoX і ключа OpenAI:
```bash
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
```
Задайте конфігурацію Plugin у `plugins.entries.google-meet.config`:
Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`:
```json5
{
@ -212,15 +281,14 @@ export OPENAI_API_KEY=sk-...
}
```
Значення за замовчуванням:
Типові значення:
- `defaultTransport: "chrome"`
- `defaultMode: "realtime"`
- `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node`
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо G.711 mu-law
8 кГц у stdout
- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо G.711 mu-law
8 кГц зі stdin
- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо 8 кГц G.711 mu-law у stdout
- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо 8 кГц G.711 mu-law зі stdin
- `realtime.provider: "openai"`
- `realtime.toolPolicy: "safe-read-only"`
- `realtime.instructions`: короткі усні відповіді, з
@ -236,6 +304,9 @@ export OPENAI_API_KEY=sk-...
chrome: {
browserProfile: "Default",
},
chromeNode: {
node: "parallels-macos",
},
realtime: {
toolPolicy: "owner",
},
@ -265,62 +336,46 @@ export OPENAI_API_KEY=sk-...
{
"action": "join",
"url": "https://meet.google.com/abc-defg-hij",
"transport": "chrome",
"transport": "chrome-node",
"mode": "realtime"
}
```
Використовуйте `action: "status"`, щоб переглянути активні сесії або перевірити ID сесії. Використовуйте
`action: "leave"`, щоб позначити сесію як завершену.
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у Parallels VM. В обох випадках модель realtime і `openclaw_agent_consult` працюють на хості Gateway, тому облікові дані моделі залишаються там.
## Консультація агента в realtime
Використовуйте `action: "status"`, щоб вивести список активних сесій або перевірити id сесії. Використовуйте `action: "leave"`, щоб позначити сесію завершеною.
Режим Chrome realtime оптимізовано для живого голосового циклу. Провайдер
голосу realtime чує аудіо зустрічі й говорить через налаштований аудіоміст.
Коли моделі realtime потрібні глибші міркування, актуальна інформація
або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
## Консультація агента в режимі реального часу
Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з недавнім
контекстом стенограми зустрічі й повертає коротку усну відповідь у сесію
голосу realtime. Потім голосова модель може озвучити цю відповідь назад у зустріч.
Режим Chrome realtime оптимізовано для живого голосового циклу. Постачальник голосу realtime чує аудіо зустрічі й говорить через налаштований аудіоміст. Коли моделі realtime потрібні глибше міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавньої стенограми зустрічі та повертає стислу усну відповідь до голосової сесії realtime. Потім голосова модель може озвучити цю відповідь назад у зустріч.
`realtime.toolPolicy` керує запуском consult:
- `safe-read-only`: надає інструмент consult і обмежує звичайного агента
інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
- `safe-read-only`: показати інструмент consult і обмежити звичайного агента до
`read`, `web_search`, `web_fetch`, `x_search`, `memory_search`, і
`memory_get`.
- `owner`: надає інструмент consult і дозволяє звичайному агенту використовувати звичайну
політику інструментів агента.
- `none`: не надає інструмент consult моделі голосу realtime.
- `owner`: показати інструмент consult і дозволити звичайному агенту використовувати звичайну політику інструментів агента.
- `none`: не показувати інструмент consult моделі голосу realtime.
Ключ сесії consult має область дії на рівні сесії Meet, тож наступні виклики consult
можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
Ключ сесії consult має область дії в межах сесії Meet, тому подальші виклики consult можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
## Примітки
Офіційний media API Google Meet орієнтований на отримання, тому для мовлення в
дзвінок Meet усе ще потрібен шлях учасника. Цей Plugin робить цю межу видимою:
Chrome відповідає за участь через браузер і локальну маршрутизацію аудіо; Twilio відповідає за
участь через телефонний дозвін.
Офіційний media API Google Meet орієнтований на прийом, тому для мовлення в дзвінок Meet усе ще потрібен шлях учасника. Цей Plugin зберігає цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє участь через телефонний дозвін.
Режиму Chrome realtime потрібен один із варіантів:
Режим Chrome realtime потребує одного з таких варіантів:
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує
мостом моделі realtime і передає аудіо G.711 mu-law 8 кГц між цими
командами та вибраним провайдером голосу realtime.
- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним
аудіошляхом і має завершитися після запуску або перевірки свого демона.
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує мостом моделі realtime і передає аудіо 8 кГц G.711 mu-law між цими командами та вибраним постачальником голосу realtime.
- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона.
Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі
віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний
пристрій BlackHole може повертати голоси інших учасників назад у дзвінок як відлуння.
Для чистого двостороннього аудіо спрямовуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв на кшталт Loopback. Один спільний пристрій BlackHole може повертати голоси інших учасників назад у дзвінок.
`googlemeet leave` зупиняє realtime-аудіоміст із парою команд для сесій Chrome.
Для сесій Twilio, делегованих через Plugin Voice Call, він також
завершує базовий голосовий дзвінок.
`googlemeet leave` зупиняє аудіоміст realtime на основі пари команд для сесій Chrome. Для сесій Twilio, делегованих через Plugin Voice Call, він також завершує базовий голосовий дзвінок.
## Пов’язане
- [Plugin Voice Call](/uk/plugins/voice-call)
- [Режим Talk](/uk/nodes/talk)
- [Режим розмови](/uk/nodes/talk)
- [Створення Plugin](/uk/plugins/building-plugins)

View File

@ -1,26 +1,26 @@
---
read_when:
- Вам потрібно викликати допоміжні засоби ядра з Plugin (`TTS`, `STT`, генерація зображень, вебпошук, субагент)
- Вам потрібно викликати основні допоміжні засоби з plugin-а (`TTS`, `STT`, генерацію зображень, вебпошук, субагента, nodes)
- Ви хочете зрозуміти, що надає `api.runtime`
- Ви отримуєте доступ до допоміжних засобів конфігурації, агента або медіа з коду Plugin
- Ви звертаєтеся до допоміжних засобів конфігурації, агента або медіа з коду plugin-а
sidebarTitle: Runtime Helpers
summary: api.runtime — вбудовані допоміжні засоби середовища виконання, доступні для plugins
title: допоміжні засоби середовища виконання Plugin
summary: api.runtime — вбудовані допоміжні засоби середовища виконання, доступні для plugin-ів
title: Допоміжні засоби середовища виконання Plugin
x-i18n:
generated_at: "2026-04-23T22:45:16Z"
generated_at: "2026-04-24T04:35:27Z"
model: gpt-5.4
provider: openai
source_hash: 63069008df16baebbe1ad0189af9002761d3829c4a71bdbf9d753fc51d40741f
source_hash: 2327bdabc0dc1e05000ff83e507007fadff2698cceaae0d4a3e7bc4885440c55
source_path: plugins/sdk-runtime.md
workflow: 15
---
Довідник для об’єкта `api.runtime`, який вбудовується в кожен Plugin під час
Довідник щодо об’єкта `api.runtime`, який вбудовується в кожен plugin під час
реєстрації. Використовуйте ці допоміжні засоби замість прямого імпорту внутрішніх
компонентів хоста.
<Tip>
**Шукаєте покрокове пояснення?** Перегляньте [Channel Plugins](/uk/plugins/sdk-channel-plugins)
**Шукаєте покрокове пояснення?** Дивіться [Channel Plugins](/uk/plugins/sdk-channel-plugins)
або [Provider Plugins](/uk/plugins/sdk-provider-plugins) для покрокових посібників,
які показують ці допоміжні засоби в контексті.
</Tip>
@ -38,25 +38,25 @@ register(api) {
Ідентичність агента, каталоги та керування сесіями.
```typescript
// Resolve the agent's working directory
// Визначити робочий каталог агента
const agentDir = api.runtime.agent.resolveAgentDir(cfg);
// Resolve agent workspace
// Визначити робочий простір агента
const workspaceDir = api.runtime.agent.resolveAgentWorkspaceDir(cfg);
// Get agent identity
// Отримати ідентичність агента
const identity = api.runtime.agent.resolveAgentIdentity(cfg);
// Get default thinking level
// Отримати типовий рівень мислення
const thinking = api.runtime.agent.resolveThinkingDefault(cfg, provider, model);
// Get agent timeout
// Отримати тайм-аут агента
const timeoutMs = api.runtime.agent.resolveAgentTimeoutMs(cfg);
// Ensure workspace exists
// Переконатися, що робочий простір існує
await api.runtime.agent.ensureAgentWorkspace(cfg);
// Run an embedded agent turn
// Запустити вбудований хід агента
const agentDir = api.runtime.agent.resolveAgentDir(cfg);
const result = await api.runtime.agent.runEmbeddedAgent({
sessionId: "my-plugin:task-1",
@ -68,14 +68,13 @@ const result = await api.runtime.agent.runEmbeddedAgent({
});
```
`runEmbeddedAgent(...)` — це нейтральний допоміжний засіб для запуску звичайного
ходу агента OpenClaw з коду Plugin. Він використовує той самий механізм
визначення provider/model і той самий вибір agent harness, що й відповіді,
запущені каналом.
`runEmbeddedAgent(...)` — це нейтральний допоміжний засіб для запуску звичайного ходу
агента OpenClaw із коду plugin-а. Він використовує той самий механізм визначення
provider/model і той самий вибір agent-harness, що й відповіді, запущені каналом.
`runEmbeddedPiAgent(...)` залишається псевдонімом сумісності.
`runEmbeddedPiAgent(...)` залишається псевдонімом для сумісності.
**Допоміжні засоби сховища сесій** містяться в `api.runtime.agent.session`:
**Допоміжні засоби сховища сесій** розташовані в `api.runtime.agent.session`:
```typescript
const storePath = api.runtime.agent.session.resolveStorePath(cfg);
@ -86,54 +85,74 @@ const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId
### `api.runtime.agent.defaults`
Константи типових model і provider:
Сталі типових model і provider:
```typescript
const model = api.runtime.agent.defaults.model; // e.g. "anthropic/claude-sonnet-4-6"
const provider = api.runtime.agent.defaults.provider; // e.g. "anthropic"
const model = api.runtime.agent.defaults.model; // наприклад, "anthropic/claude-sonnet-4-6"
const provider = api.runtime.agent.defaults.provider; // наприклад, "anthropic"
```
### `api.runtime.subagent`
Запуск і керування фоновими запусками субагента.
Запуск і керування фоновими запусками субагентів.
```typescript
// Start a subagent run
// Запустити субагента
const { runId } = await api.runtime.subagent.run({
sessionKey: "agent:main:subagent:search-helper",
message: "Expand this query into focused follow-up searches.",
provider: "openai", // optional override
model: "gpt-4.1-mini", // optional override
provider: "openai", // необов’язкове перевизначення
model: "gpt-4.1-mini", // необов’язкове перевизначення
deliver: false,
});
// Wait for completion
// Дочекатися завершення
const result = await api.runtime.subagent.waitForRun({ runId, timeoutMs: 30000 });
// Read session messages
// Прочитати повідомлення сесії
const { messages } = await api.runtime.subagent.getSessionMessages({
sessionKey: "agent:main:subagent:search-helper",
limit: 10,
});
// Delete a session
// Видалити сесію
await api.runtime.subagent.deleteSession({
sessionKey: "agent:main:subagent:search-helper",
});
```
<Warning>
Перевизначення model (`provider`/`model`) потребує явної згоди оператора через
`plugins.entries.<id>.subagent.allowModelOverride: true` у конфігурації.
Недовірені plugins все одно можуть запускати субагентів, але запити на
перевизначення відхиляються.
Перевизначення model (`provider`/`model`) потребують явного дозволу оператора через
`plugins.entries.<id>.subagent.allowModelOverride: true` у config.
Ненадійні plugin-и все ще можуть запускати субагентів, але запити на перевизначення відхиляються.
</Warning>
### `api.runtime.nodes`
Перелік підключених nodes і виклик команди хоста node з коду plugin-а,
завантаженого через Gateway. Використовуйте це, коли plugin відповідає за локальну роботу
на спареному пристрої, наприклад за браузер або аудіоміст на іншому Mac.
```typescript
const { nodes } = await api.runtime.nodes.list({ connected: true });
const result = await api.runtime.nodes.invoke({
nodeId: "mac-studio",
command: "my-plugin.command",
params: { action: "start" },
timeoutMs: 30000,
});
```
Це середовище виконання доступне лише всередині Gateway. Команди node, як і раніше,
проходять через звичайне спарювання Gateway node, списки дозволених команд і локальну
обробку команд на node.
### `api.runtime.taskFlow`
Прив’язує середовище виконання TaskFlow до наявного ключа сесії OpenClaw або
довіреного контексту інструмента, а потім дає змогу створювати TaskFlow і
керувати ними без передавання власника в кожному виклику.
Прив’язати середовище виконання TaskFlow до наявного ключа сесії OpenClaw або
довіреного контексту інструмента, а потім створювати й керувати TaskFlow без
передавання власника в кожному виклику.
```typescript
const taskFlow = api.runtime.taskFlow.fromToolContext(ctx);
@ -161,73 +180,72 @@ const waiting = taskFlow.setWaiting({
```
Використовуйте `bindSession({ sessionKey, requesterOrigin })`, коли у вас уже є
довірений ключ сесії OpenClaw із власного рівня прив’язки. Не виконуйте
прив’язку на основі необробленого введення користувача.
довірений ключ сесії OpenClaw із вашого власного шару прив’язки. Не виконуйте
прив’язку на основі сирого користувацького вводу.
### `api.runtime.tts`
Синтез мовлення з тексту.
```typescript
// Standard TTS
// Стандартний TTS
const clip = await api.runtime.tts.textToSpeech({
text: "Hello from OpenClaw",
cfg: api.config,
});
// Telephony-optimized TTS
// TTS, оптимізований для телефонії
const telephonyClip = await api.runtime.tts.textToSpeechTelephony({
text: "Hello from OpenClaw",
cfg: api.config,
});
// List available voices
// Перелічити доступні голоси
const voices = await api.runtime.tts.listVoices({
provider: "elevenlabs",
cfg: api.config,
});
```
Використовує конфігурацію ядра `messages.tts` і вибір provider. Повертає
PCM-буфер аудіо та частоту дискретизації.
Використовує основну конфігурацію `messages.tts` і вибір provider. Повертає буфер
PCM-аудіо + частоту дискретизації.
### `api.runtime.mediaUnderstanding`
Аналіз зображень, аудіо та відео.
```typescript
// Describe an image
// Описати зображення
const image = await api.runtime.mediaUnderstanding.describeImageFile({
filePath: "/tmp/inbound-photo.jpg",
cfg: api.config,
agentDir: "/tmp/agent",
});
// Transcribe audio
// Транскрибувати аудіо
const { text } = await api.runtime.mediaUnderstanding.transcribeAudioFile({
filePath: "/tmp/inbound-audio.ogg",
cfg: api.config,
mime: "audio/ogg", // optional, for when MIME cannot be inferred
mime: "audio/ogg", // необов’язково, якщо MIME неможливо визначити
});
// Describe a video
// Описати відео
const video = await api.runtime.mediaUnderstanding.describeVideoFile({
filePath: "/tmp/inbound-video.mp4",
cfg: api.config,
});
// Generic file analysis
// Загальний аналіз файлу
const result = await api.runtime.mediaUnderstanding.runFile({
filePath: "/tmp/inbound-file.pdf",
cfg: api.config,
});
```
Повертає `{ text: undefined }`, якщо результат не створено (наприклад, якщо
вхідний файл пропущено).
Повертає `{ text: undefined }`, коли вихідні дані не створено (наприклад, якщо вхід пропущено).
<Info>
`api.runtime.stt.transcribeAudioFile(...)` залишається псевдонімом сумісності
`api.runtime.stt.transcribeAudioFile(...)` залишається псевдонімом для сумісності
для `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
</Info>
@ -259,7 +277,7 @@ const result = await api.runtime.webSearch.search({
### `api.runtime.media`
Низькорівневі медіаутиліти.
Низькорівневі допоміжні засоби для медіа.
```typescript
const webMedia = await api.runtime.media.loadWebMedia(url);
@ -284,7 +302,7 @@ const pngQrFile = await api.runtime.media.writeQrPngTempFile("https://openclaw.a
### `api.runtime.config`
Завантаження та запис конфігурації.
Завантаження й запис config.
```typescript
const cfg = await api.runtime.config.loadConfig();
@ -293,7 +311,7 @@ await api.runtime.config.writeConfigFile(cfg);
### `api.runtime.system`
Утиліти системного рівня.
Системні допоміжні засоби.
```typescript
await api.runtime.system.enqueueSystemEvent(event);
@ -317,7 +335,7 @@ api.runtime.events.onSessionTranscriptUpdate((update) => {
### `api.runtime.logging`
Логування.
Журналювання.
```typescript
const verbose = api.runtime.logging.shouldLogVerbose();
@ -326,7 +344,7 @@ const childLogger = api.runtime.logging.getChildLogger({ plugin: "my-plugin" },
### `api.runtime.modelAuth`
Визначення автентифікації для model і provider.
Визначення автентифікації model і provider.
```typescript
const auth = await api.runtime.modelAuth.getApiKeyForModel({ model, cfg });
@ -356,12 +374,10 @@ api.runtime.tools.registerMemoryCli(/* ... */);
### `api.runtime.channel`
Допоміжні засоби середовища виконання, специфічні для каналу (доступні, коли
завантажено channel plugin).
Допоміжні засоби середовища виконання, специфічні для каналу (доступні, коли завантажено channel plugin).
`api.runtime.channel.mentions` — це спільна поверхня політики згадок для
вхідних повідомлень у вбудованих channel plugins, які використовують вбудоване
середовище виконання:
`api.runtime.channel.mentions` — це спільна поверхня політики вхідних згадок для
вбудованих channel plugin-ів, які використовують вбудоване середовище виконання:
```typescript
const mentionMatch = api.runtime.channel.mentions.matchesMentionWithExplicit(text, {
@ -396,14 +412,14 @@ const decision = api.runtime.channel.mentions.resolveInboundMentionDecision({
- `implicitMentionKindWhen`
- `resolveInboundMentionDecision`
`api.runtime.channel.mentions` навмисно не надає старіші допоміжні засоби
сумісності `resolveMentionGating*`. Надавайте перевагу нормалізованому шляху
`api.runtime.channel.mentions` навмисно не надає старіші допоміжні засоби сумісності
`resolveMentionGating*`. Надавайте перевагу нормалізованому шляху
`{ facts, policy }`.
## Зберігання посилань на runtime
## Зберігання посилань на середовище виконання
Використовуйте `createPluginRuntimeStore`, щоб зберегти посилання на runtime
для використання за межами callback-функції `register`:
Використовуйте `createPluginRuntimeStore`, щоб зберегти посилання на середовище виконання
для використання поза зворотним викликом `register`:
```typescript
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
@ -414,7 +430,7 @@ const store = createPluginRuntimeStore<PluginRuntime>({
errorMessage: "my-plugin runtime not initialized",
});
// In your entry point
// У вашій точці входу
export default defineChannelPluginEntry({
id: "my-plugin",
name: "My Plugin",
@ -423,19 +439,19 @@ export default defineChannelPluginEntry({
setRuntime: store.setRuntime,
});
// In other files
// В інших файлах
export function getRuntime() {
return store.getRuntime(); // throws if not initialized
return store.getRuntime(); // викидає помилку, якщо не ініціалізовано
}
export function tryGetRuntime() {
return store.tryGetRuntime(); // returns null if not initialized
return store.tryGetRuntime(); // повертає null, якщо не ініціалізовано
}
```
Надавайте перевагу `pluginId` як ідентифікатору runtime-store. Низькорівнева
форма `key` призначена для нечастих випадків, коли одному plugin навмисно
потрібно більше ніж один слот runtime.
Надавайте перевагу `pluginId` для ідентичності runtime-store. Низькорівнева форма `key`
призначена для нетипових випадків, коли одному plugin-у навмисно потрібно більше
одного слота середовища виконання.
## Інші поля верхнього рівня `api`
@ -445,11 +461,11 @@ export function tryGetRuntime() {
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- |
| `api.id` | `string` | Ідентифікатор Plugin |
| `api.name` | `string` | Відображувана назва Plugin |
| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, якщо доступний) |
| `api.pluginConfig` | `Record<string, unknown>` | Конфігурація, специфічна для Plugin, з `plugins.entries.<id>.config` |
| `api.logger` | `PluginLogger` | Логер з відповідною областю видимості (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це полегшене вікно запуску/налаштування до повного запуску entry point |
| `api.resolvePath(input)` | `(string) => string` | Визначити шлях відносно кореня Plugin |
| `api.config` | `OpenClawConfig` | Поточний знімок config (активний знімок середовища виконання в пам’яті, коли доступний) |
| `api.pluginConfig` | `Record<string, unknown>` | Конфігурація, специфічна для Plugin, із `plugins.entries.<id>.config` |
| `api.logger` | `PluginLogger` | Logger з відповідною областю видимості (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легковагове вікно запуску/налаштування до повного входу |
| `api.resolvePath(input)` | `(string) => string` | Визначити шлях відносно кореня plugin-а |
## Пов’язане

View File

@ -1,30 +1,30 @@
---
read_when:
- Вибір правильного підшляху plugin-sdk для імпорту плагіна
- Вибір правильного підшляху plugin-sdk для імпорту Plugin
- Аудит підшляхів bundled-plugin і допоміжних поверхонь
summary: 'Каталог підшляхів Plugin SDK: які імпорти де знаходяться, згруповано за областями'
summary: 'Каталог підшляхів Plugin SDK: які імпорти де розміщені, згруповано за областями'
title: Підшляхи Plugin SDK
x-i18n:
generated_at: "2026-04-24T02:21:52Z"
generated_at: "2026-04-24T04:35:26Z"
model: gpt-5.4
provider: openai
source_hash: 592cd599c9026eb584773cb7991dd75796f58cd62cd3a85d32e5b106440f7c3e
source_hash: 753c7202a8a59ae9e420d436c7f3770ea455d810f2af52b716d438b84b8b986e
source_path: plugins/sdk-subpaths.md
workflow: 15
---
Plugin SDK надається як набір вузьких підшляхів у `openclaw/plugin-sdk/`.
Ця сторінка каталогізує найуживаніші підшляхи, згруповані за призначенням. Згенерований
Plugin SDK доступний як набір вузьких підшляхів у `openclaw/plugin-sdk/`.
На цій сторінці зібрано часто використовувані підшляхи, згруповані за призначенням. Згенерований
повний список із понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`;
зарезервовані допоміжні підшляхи bundled-plugin також наведені там, але є деталлю
реалізації, якщо лише сторінка документації явно не просуває їх.
зарезервовані допоміжні підшляхи bundled-plugin також з’являються там, але є
деталлю реалізації, якщо лише сторінка документації явно не просуває їх.
Посібник з розробки плагінів дивіться в [Огляд Plugin SDK](/uk/plugins/sdk-overview).
Посібник з авторства Plugin див. у [Огляд Plugin SDK](/uk/plugins/sdk-overview).
## Точка входу плагіна
## Точка входу Plugin
| Підшлях | Ключові експорти |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Subpath | Key exports |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` |
| `plugin-sdk/config-schema` | `OpenClawSchema` |
@ -32,251 +32,256 @@ x-i18n:
<AccordionGroup>
<Accordion title="Підшляхи каналів">
| Підшлях | Ключові експорти |
| Subpath | Key exports |
| --- | --- |
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/config-schema` | Експорт кореневої Zod-схеми `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/config-schema` | Кореневий експорт Zod-схеми `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/setup` | Спільні допоміжні засоби майстра налаштування, allowlist-запити, побудовники статусу налаштування |
| `plugin-sdk/setup` | Спільні допоміжні функції майстра налаштування, запити allowlist, збирачі статусу налаштування |
| `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
| `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | Допоміжні засоби для багатoакаунтної конфігурації/шлюзу дій, допоміжні засоби запасного варіанта для типового акаунта |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні засоби нормалізації account-id |
| `plugin-sdk/account-resolution` | Пошук акаунта + допоміжні засоби запасного варіанта за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі допоміжні засоби для списків акаунтів/дій з акаунтами |
| `plugin-sdk/account-core` | Допоміжні функції конфігурації/контролю дій для кількох облікових записів, допоміжні функції резервного вибору типового облікового запису |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні функції нормалізації ідентифікатора облікового запису |
| `plugin-sdk/account-resolution` | Допоміжні функції пошуку облікового запису + резервного вибору типового |
| `plugin-sdk/account-helpers` | Вузькі допоміжні функції списку облікових записів/дій з обліковими записами |
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | Типи схем конфігурації каналу |
| `plugin-sdk/telegram-command-config` | Допоміжні засоби нормалізації/валідації користувацьких команд Telegram із запасним варіантом bundled-contract |
| `plugin-sdk/command-gating` | Вузькі допоміжні засоби шлюзу авторизації команд |
| `plugin-sdk/channel-config-schema` | Типи схеми конфігурації каналу |
| `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації/валідації користувацьких команд Telegram із резервним bundled-contract |
| `plugin-sdk/command-gating` | Вузькі допоміжні функції шлюзу авторизації команд |
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, допоміжні засоби життєвого циклу/фіналізації потоку чернеток |
| `plugin-sdk/inbound-envelope` | Спільні допоміжні засоби маршрутизації вхідних даних і побудови envelope |
| `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні засоби запису й диспетчеризації вхідних відповідей |
| `plugin-sdk/messaging-targets` | Допоміжні засоби розбору/зіставлення цілей |
| `plugin-sdk/outbound-media` | Спільні допоміжні засоби завантаження вихідних медіа |
| `plugin-sdk/outbound-runtime` | Допоміжні засоби вихідної ідентичності, делегата надсилання та планування payload |
| `plugin-sdk/poll-runtime` | Вузькі допоміжні засоби нормалізації опитувань |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні засоби життєвого циклу thread-binding і адаптерів |
| `plugin-sdk/agent-media-payload` | Застарілий побудовник медіа-payload агента |
| `plugin-sdk/conversation-runtime` | Допоміжні засоби для прив’язки розмов/потоків, pairing і configured-binding |
| `plugin-sdk/runtime-config-snapshot` | Допоміжний засіб знімка конфігурації часу виконання |
| `plugin-sdk/runtime-group-policy` | Допоміжні засоби визначення group-policy у часі виконання |
| `plugin-sdk/channel-status` | Спільні допоміжні засоби знімків/підсумків статусу каналу |
| `plugin-sdk/channel-config-primitives` | Вузькі примітиви схем конфігурації каналу |
| `plugin-sdk/channel-config-writes` | Допоміжні засоби авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти плагіна каналу |
| `plugin-sdk/allowlist-config-edit` | Допоміжні засоби редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Спільні допоміжні засоби рішень доступу до груп |
| `plugin-sdk/direct-dm` | Спільні допоміжні засоби авторизації/захисту direct-DM |
| `plugin-sdk/interactive-runtime` | Семантичне представлення повідомлень, доставка та застарілі допоміжні засоби інтерактивних відповідей. Див. [Представлення повідомлень](/uk/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | Сумісний barrel для debounce вхідних даних, зіставлення згадок, допоміжних засобів mention-policy та допоміжних засобів envelope |
| `plugin-sdk/channel-mention-gating` | Вузькі допоміжні засоби mention-policy без ширшої поверхні inbound runtime |
| `plugin-sdk/channel-location` | Допоміжні засоби контексту та форматування розташування каналу |
| `plugin-sdk/channel-logging` | Допоміжні засоби журналювання каналу для відкидання вхідних даних і збоїв typing/ack |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, допоміжні функції життєвого циклу/фіналізації потоку чернеток |
| `plugin-sdk/inbound-envelope` | Спільні допоміжні функції для побудови вхідних маршрутів і конвертів |
| `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні функції запису й диспетчеризації вхідних повідомлень |
| `plugin-sdk/messaging-targets` | Допоміжні функції розбору/зіставлення цілей |
| `plugin-sdk/outbound-media` | Спільні допоміжні функції завантаження вихідних медіа |
| `plugin-sdk/outbound-runtime` | Допоміжні функції вихідної ідентичності, делегата надсилання та планування payload |
| `plugin-sdk/poll-runtime` | Вузькі допоміжні функції нормалізації опитувань |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні функції життєвого циклу прив’язки потоків і адаптерів |
| `plugin-sdk/agent-media-payload` | Застарілий збирач payload медіа агента |
| `plugin-sdk/conversation-runtime` | Допоміжні функції прив’язки розмов/потоків, pairинг і налаштованих прив’язок |
| `plugin-sdk/runtime-config-snapshot` | Допоміжна функція знімка конфігурації часу виконання |
| `plugin-sdk/runtime-group-policy` | Допоміжні функції визначення групової політики часу виконання |
| `plugin-sdk/channel-status` | Спільні допоміжні функції знімка/підсумку статусу каналу |
| `plugin-sdk/channel-config-primitives` | Вузькі примітиви схеми конфігурації каналу |
| `plugin-sdk/channel-config-writes` | Допоміжні функції авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти Plugin каналу |
| `plugin-sdk/allowlist-config-edit` | Допоміжні функції редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Спільні допоміжні функції ухвалення рішень щодо доступу до груп |
| `plugin-sdk/direct-dm` | Спільні допоміжні функції авторизації/захисту прямих DM |
| `plugin-sdk/interactive-runtime` | Семантичне представлення повідомлень, доставка та застарілі допоміжні функції інтерактивної відповіді. Див. [Представлення повідомлень](/uk/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | Сумісний barrel для debounce вхідних повідомлень, зіставлення згадок, допоміжних функцій політики згадок і допоміжних функцій конвертів |
| `plugin-sdk/channel-inbound-debounce` | Вузькі допоміжні функції debounce вхідних повідомлень |
| `plugin-sdk/channel-mention-gating` | Вузькі допоміжні функції політики згадок і тексту згадок без ширшої поверхні часу виконання вхідних повідомлень |
| `plugin-sdk/channel-envelope` | Вузькі допоміжні функції форматування вхідних конвертів |
| `plugin-sdk/channel-location` | Допоміжні функції контексту та форматування розташування каналу |
| `plugin-sdk/channel-logging` | Допоміжні функції логування каналу для відкинутих вхідних повідомлень і збоїв typing/ack |
| `plugin-sdk/channel-send-result` | Типи результату відповіді |
| `plugin-sdk/channel-actions` | Допоміжні засоби дій із повідомленнями каналу, а також застарілі допоміжні засоби native schema, збережені для сумісності плагінів |
| `plugin-sdk/channel-targets` | Допоміжні засоби розбору/зіставлення цілей |
| `plugin-sdk/channel-contract` | Типи контрактів каналу |
| `plugin-sdk/channel-feedback` | Підключення feedback/reaction |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні засоби secret-contract, як-от `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, а також типи secret target |
| `plugin-sdk/channel-actions` | Допоміжні функції дій над повідомленнями каналу, а також застарілі допоміжні функції native schema, збережені для сумісності Plugin |
| `plugin-sdk/channel-targets` | Допоміжні функції розбору/зіставлення цілей |
| `plugin-sdk/channel-contract` | Типи контракту каналу |
| `plugin-sdk/channel-feedback` | Підключення зворотного зв’язку/реакцій |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції secret-contract, як-от `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, і типи цілей секретів |
</Accordion>
<Accordion title="Підшляхи провайдерів">
| Підшлях | Ключові експорти |
| Subpath | Key exports |
| --- | --- |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/provider-setup` | Кураторські допоміжні засоби налаштування локальних/self-hosted провайдерів |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні засоби налаштування self-hosted провайдерів, сумісних з OpenAI |
| `plugin-sdk/cli-backend` | Типові значення бекенда CLI + константи watchdog |
| `plugin-sdk/provider-auth-runtime` | Допоміжні засоби визначення API-ключів під час виконання для плагінів провайдерів |
| `plugin-sdk/provider-auth-api-key` | Допоміжні засоби онбордингу API-ключів/запису профілів, як-от `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Стандартний побудовник результату OAuth-автентифікації |
| `plugin-sdk/provider-auth-login` | Спільні допоміжні засоби інтерактивного входу для плагінів провайдерів |
| `plugin-sdk/provider-env-vars` | Допоміжні засоби пошуку env vars для автентифікації провайдера |
| `plugin-sdk/provider-setup` | Кураторські допоміжні функції налаштування локальних/self-hosted провайдерів |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні функції налаштування self-hosted провайдерів, сумісних з OpenAI |
| `plugin-sdk/cli-backend` | Типові значення CLI backend + константи watchdog |
| `plugin-sdk/provider-auth-runtime` | Допоміжні функції визначення API-ключів у часі виконання для Plugin провайдерів |
| `plugin-sdk/provider-auth-api-key` | Допоміжні функції onboarding/profile-write для API-ключів, як-от `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Стандартний збирач результату OAuth-автентифікації |
| `plugin-sdk/provider-auth-login` | Спільні допоміжні функції інтерактивного входу для Plugin провайдерів |
| `plugin-sdk/provider-env-vars` | Допоміжні функції пошуку env-var автентифікації провайдера |
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні побудовники replay-policy, допоміжні засоби endpoint провайдерів і допоміжні засоби нормалізації model-id, як-от `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні збирачі replay-policy, допоміжні функції endpoint провайдера та допоміжні функції нормалізації model-id, як-от `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-http` | Загальні допоміжні засоби HTTP/можливостей endpoint провайдерів, зокрема допоміжні засоби multipart form для аудіотранскрипції |
| `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні засоби контрактів конфігурації/вибору web-fetch, як-от `enablePluginInConfig` і `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Допоміжні засоби реєстрації/кешування web-fetch провайдерів |
| `plugin-sdk/provider-web-search-config-contract` | Вузькі допоміжні засоби конфігурації/облікових даних web-search для провайдерів, яким не потрібне підключення вмикання плагіна |
| `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні засоби контрактів конфігурації/облікових даних web-search, як-от `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`, а також scoped сетери/гетери облікових даних |
| `plugin-sdk/provider-web-search` | Допоміжні засоби реєстрації/кешування/runtime для web-search провайдерів |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схем Gemini + діагностика, а також xAI-сумісні допоміжні засоби, як-от `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` та подібні |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи stream wrapper і спільні допоміжні засоби wrapper для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Допоміжні засоби native provider transport, як-от guarded fetch, перетворення transport message і writable transport event streams |
| `plugin-sdk/provider-onboard` | Допоміжні засоби патчів конфігурації онбордингу |
| `plugin-sdk/global-singleton` | Допоміжні засоби process-local singleton/map/cache |
| `plugin-sdk/provider-http` | Загальні допоміжні функції HTTP/можливостей endpoint провайдера, включно з допоміжними функціями multipart form для транскрипції аудіо |
| `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні функції контракту конфігурації/вибору web-fetch, як-от `enablePluginInConfig` і `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Допоміжні функції реєстрації/кешування провайдерів web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Вузькі допоміжні функції конфігурації/облікових даних web-search для провайдерів, яким не потрібне підключення ввімкнення Plugin |
| `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні функції контракту конфігурації/облікових даних web-search, як-от `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setter/getter для облікових даних |
| `plugin-sdk/provider-web-search` | Допоміжні функції реєстрації/кешування/часу виконання провайдерів web-search |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика, а також допоміжні функції сумісності xAI, як-от `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` та подібне |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток потоку та спільні допоміжні функції обгорток для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Власні допоміжні функції транспорту провайдера, як-от guarded fetch, перетворення транспортних повідомлень і доступні для запису потоки транспортних подій |
| `plugin-sdk/provider-onboard` | Допоміжні функції patch конфігурації onboarding |
| `plugin-sdk/global-singleton` | Допоміжні функції локальних для процесу singleton/map/cache |
| `plugin-sdk/group-activation` | Вузькі допоміжні функції режиму активації груп і розбору команд |
</Accordion>
<Accordion title="Підшляхи автентифікації та безпеки">
| Підшлях | Ключові експорти |
| Subpath | Key exports |
| --- | --- |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні засоби реєстру команд, допоміжні засоби авторизації відправника |
| `plugin-sdk/command-status` | Побудовники повідомлень команд/довідки, як-от `buildCommandsMessagePaginated` і `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Допоміжні засоби визначення схвалювача та автентифікації дій у тому самому чаті |
| `plugin-sdk/approval-client-runtime` | Допоміжні засоби native exec approval profile/filter |
| `plugin-sdk/approval-delivery-runtime` | Native адаптери можливостей/доставки схвалення |
| `plugin-sdk/approval-gateway-runtime` | Спільний допоміжний засіб визначення approval gateway |
| `plugin-sdk/approval-handler-adapter-runtime` | Легковагові допоміжні засоби завантаження native approval adapter для гарячих точок входу каналів |
| `plugin-sdk/approval-handler-runtime` | Ширші допоміжні засоби runtime обробника схвалення; віддавайте перевагу вужчим adapter/gateway seams, якщо їх достатньо |
| `plugin-sdk/approval-native-runtime` | Native допоміжні засоби цілей схвалення + прив’язки акаунтів |
| `plugin-sdk/approval-reply-runtime` | Допоміжні засоби payload відповіді для exec/plugin approval |
| `plugin-sdk/channel-contract-testing` | Вузькі допоміжні засоби тестування контракту каналу без широкого testing barrel |
| `plugin-sdk/command-auth-native` | Native command auth + native допоміжні засоби session-target |
| `plugin-sdk/command-detection` | Спільні допоміжні засоби виявлення команд |
| `plugin-sdk/command-primitives-runtime` | Легковагові предикати тексту команд для гарячих шляхів каналів |
| `plugin-sdk/command-surface` | Нормалізація тіла команди та допоміжні засоби command-surface |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні функції реєстру команд, допоміжні функції авторизації відправника |
| `plugin-sdk/command-status` | Збирачі команд/довідкових повідомлень, як-от `buildCommandsMessagePaginated` і `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Допоміжні функції визначення затверджувача та автентифікації дій у межах того самого чату |
| `plugin-sdk/approval-client-runtime` | Допоміжні функції профілів/фільтрів native exec approval |
| `plugin-sdk/approval-delivery-runtime` | Native-адаптери можливостей/доставки approval |
| `plugin-sdk/approval-gateway-runtime` | Спільна допоміжна функція визначення approval gateway |
| `plugin-sdk/approval-handler-adapter-runtime` | Полегшені допоміжні функції завантаження native approval adapter для гарячих точок входу каналів |
| `plugin-sdk/approval-handler-runtime` | Ширші допоміжні функції часу виконання обробника approval; віддавайте перевагу вужчим adapter/gateway-швам, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Допоміжні функції native approval target + account-binding |
| `plugin-sdk/approval-reply-runtime` | Допоміжні функції payload відповіді для exec/plugin approval |
| `plugin-sdk/reply-dedupe` | Вузькі допоміжні функції скидання дедуплікації вхідних відповідей |
| `plugin-sdk/channel-contract-testing` | Вузькі допоміжні функції тестування контракту каналу без широкого testing barrel |
| `plugin-sdk/command-auth-native` | Допоміжні функції native command auth + native session-target |
| `plugin-sdk/command-detection` | Спільні допоміжні функції виявлення команд |
| `plugin-sdk/command-primitives-runtime` | Полегшені предикати тексту команд для гарячих шляхів каналів |
| `plugin-sdk/command-surface` | Допоміжні функції нормалізації тіла команди та command-surface |
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні засоби збирання secret-contract для поверхонь секретів каналу/плагіна |
| `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні засоби `coerceSecretRef` і типізації SecretRef для парсингу secret-contract/config |
| `plugin-sdk/security-runtime` | Спільні допоміжні засоби довіри, DM gating, зовнішнього вмісту та збирання секретів |
| `plugin-sdk/ssrf-policy` | Допоміжні засоби host allowlist і SSRF policy приватної мережі |
| `plugin-sdk/ssrf-dispatcher` | Вузькі допоміжні засоби pinned-dispatcher без широкої infra runtime surface |
| `plugin-sdk/ssrf-runtime` | Pinned-dispatcher, SSRF-захищений fetch і допоміжні засоби SSRF policy |
| `plugin-sdk/secret-input` | Допоміжні засоби парсингу secret input |
| `plugin-sdk/webhook-ingress` | Допоміжні засоби запитів/цілей Webhook |
| `plugin-sdk/webhook-request-guards` | Допоміжні засоби для розміру тіла запиту/таймауту |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції збирання secret-contract для поверхонь секретів каналу/plugin |
| `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні функції типізації `coerceSecretRef` і SecretRef для розбору secret-contract/config |
| `plugin-sdk/security-runtime` | Спільні допоміжні функції довіри, DM gating, external-content і збирання секретів |
| `plugin-sdk/ssrf-policy` | Допоміжні функції host allowlist і політики SSRF для приватних мереж |
| `plugin-sdk/ssrf-dispatcher` | Вузькі допоміжні функції pinned-dispatcher без широкої infra runtime-поверхні |
| `plugin-sdk/ssrf-runtime` | Допоміжні функції pinned-dispatcher, SSRF-захищеного fetch і політики SSRF |
| `plugin-sdk/secret-input` | Допоміжні функції розбору введення секретів |
| `plugin-sdk/webhook-ingress` | Допоміжні функції Webhook request/target |
| `plugin-sdk/webhook-request-guards` | Допоміжні функції для розміру тіла запиту/тайм-аутів |
</Accordion>
<Accordion title="Підшляхи runtime та сховища">
| Підшлях | Ключові експорти |
<Accordion title="Підшляхи часу виконання та сховища">
| Subpath | Key exports |
| --- | --- |
| `plugin-sdk/runtime` | Широкі допоміжні засоби runtime/журналювання/резервного копіювання/встановлення плагінів |
| `plugin-sdk/runtime-env` | Вузькі допоміжні засоби runtime env, logger, timeout, retry і backoff |
| `plugin-sdk/channel-runtime-context` | Загальні допоміжні засоби реєстрації та пошуку runtime-context каналу |
| `plugin-sdk/runtime` | Широкі допоміжні функції часу виконання/логування/резервного копіювання/встановлення plugin |
| `plugin-sdk/runtime-env` | Вузькі допоміжні функції runtime env, logger, timeout, retry і backoff |
| `plugin-sdk/channel-runtime-context` | Загальні допоміжні функції реєстрації та пошуку channel runtime-context |
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
| `plugin-sdk/plugin-runtime` | Спільні допоміжні засоби команд/хуків/http/інтерактивності плагіна |
| `plugin-sdk/hook-runtime` | Спільні допоміжні засоби pipeline для Webhook/внутрішніх хуків |
| `plugin-sdk/lazy-runtime` | Допоміжні засоби lazy runtime import/binding, як-от `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Допоміжні засоби виконання процесів |
| `plugin-sdk/cli-runtime` | Допоміжні засоби форматування CLI, очікування та версій |
| `plugin-sdk/gateway-runtime` | Допоміжні засоби клієнта Gateway і патчів статусу каналу |
| `plugin-sdk/config-runtime` | Допоміжні засоби завантаження/запису конфігурації та пошуку конфігурації плагіна |
| `plugin-sdk/telegram-command-config` | Нормалізація імен/описів команд Telegram та перевірки дублікатів/конфліктів, навіть коли surface bundled Telegram contract недоступна |
| `plugin-sdk/text-autolink-runtime` | Виявлення autolink для посилань на файли без широкого text-runtime barrel |
| `plugin-sdk/approval-runtime` | Допоміжні засоби exec/plugin approval, побудовники approval-capability, допоміжні засоби auth/profile, native routing/runtime |
| `plugin-sdk/reply-runtime` | Спільні допоміжні засоби runtime для вхідних даних/відповідей, chunking, dispatch, Heartbeat, планувальник відповідей |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні засоби dispatch/finalize відповіді |
| `plugin-sdk/reply-history` | Спільні допоміжні засоби коротковіконної історії відповідей, як-от `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/plugin-runtime` | Спільні допоміжні функції команд/hook/http/interactive для plugin |
| `plugin-sdk/hook-runtime` | Спільні допоміжні функції pipeline для webhook/internal hook |
| `plugin-sdk/lazy-runtime` | Допоміжні функції lazy runtime import/binding, як-от `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Допоміжні функції виконання процесів |
| `plugin-sdk/cli-runtime` | Допоміжні функції форматування CLI, очікування та версій |
| `plugin-sdk/gateway-runtime` | Допоміжні функції клієнта Gateway і patch статусу каналу |
| `plugin-sdk/config-runtime` | Допоміжні функції завантаження/запису конфігурації та пошуку plugin-config |
| `plugin-sdk/telegram-command-config` | Нормалізація назв/описів команд Telegram і перевірки на дублікати/конфлікти, навіть коли поверхня bundled Telegram contract недоступна |
| `plugin-sdk/text-autolink-runtime` | Виявлення autolink посилань на файли без широкого text-runtime barrel |
| `plugin-sdk/approval-runtime` | Допоміжні функції exec/plugin approval, збирачі approval-capability, допоміжні функції auth/profile, native routing/runtime |
| `plugin-sdk/reply-runtime` | Спільні допоміжні функції часу виконання для inbound/reply, chunking, dispatch, Heartbeat, planner відповіді |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні функції dispatch/finalize відповіді |
| `plugin-sdk/reply-history` | Спільні допоміжні функції коротковіконної історії відповідей, як-от `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | Вузькі допоміжні засоби chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Допоміжні засоби шляху сховища сесій + `updated-at` |
| `plugin-sdk/state-paths` | Допоміжні засоби шляхів до каталогів state/OAuth |
| `plugin-sdk/routing` | Допоміжні засоби маршруту/ключа сесії/прив’язки акаунта, як-от `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Спільні допоміжні засоби підсумків статусу каналу/акаунта, типові значення runtime-state і допоміжні засоби метаданих проблем |
| `plugin-sdk/target-resolver-runtime` | Спільні допоміжні засоби визначення цілей |
| `plugin-sdk/string-normalization-runtime` | Допоміжні засоби нормалізації slug/рядків |
| `plugin-sdk/request-url` | Витягання рядкових URL з fetch/request-подібних входів |
| `plugin-sdk/run-command` | Виконавець команд із тайм-аутом і нормалізованими результатами stdout/stderr |
| `plugin-sdk/param-readers` | Загальні читачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Витягання нормалізованих payload з об’єктів результатів tool |
| `plugin-sdk/tool-send` | Витягання канонічних полів цілі надсилання з аргументів tool |
| `plugin-sdk/temp-path` | Спільні допоміжні засоби шляхів для тимчасових завантажень |
| `plugin-sdk/logging-core` | Допоміжні засоби subsystem logger і редагування чутливих даних |
| `plugin-sdk/markdown-table-runtime` | Допоміжні засоби режиму таблиць Markdown |
| `plugin-sdk/json-store` | Невеликі допоміжні засоби читання/запису JSON state |
| `plugin-sdk/file-lock` | Реентрантні допоміжні засоби file-lock |
| `plugin-sdk/persistent-dedupe` | Допоміжні засоби кешу дедуплікації з дисковим збереженням |
| `plugin-sdk/acp-runtime` | Допоміжні засоби runtime/сесій ACP і dispatch відповідей |
| `plugin-sdk/acp-binding-resolve-runtime` | Лише для читання: визначення ACP binding без імпортів запуску життєвого циклу |
| `plugin-sdk/agent-config-primitives` | Вузькі примітиви agent runtime config-schema |
| `plugin-sdk/boolean-param` | Читач нестрогого булевого параметра |
| `plugin-sdk/dangerous-name-runtime` | Допоміжні засоби визначення збігів небезпечних назв |
| `plugin-sdk/device-bootstrap` | Допоміжні засоби початкового налаштування пристрою та токенів pairing |
| `plugin-sdk/extension-shared` | Спільні примітиви допоміжних засобів passive-channel, status і ambient proxy |
| `plugin-sdk/models-provider-runtime` | Допоміжні засоби відповіді для команди `/models`/провайдера |
| `plugin-sdk/skill-commands-runtime` | Допоміжні засоби виведення списку команд Skills |
| `plugin-sdk/native-command-registry` | Native допоміжні засоби реєстру/побудови/серіалізації команд |
| `plugin-sdk/agent-harness` | Експериментальна trusted-plugin surface для низькорівневих harness агента: типи harness, допоміжні засоби steer/abort для active-run, допоміжні засоби моста інструментів OpenClaw і утиліти результатів спроб |
| `plugin-sdk/provider-zai-endpoint` | Допоміжні засоби визначення endpoint Z.A.I |
| `plugin-sdk/infra-runtime` | Допоміжні засоби системних подій/Heartbeat |
| `plugin-sdk/collection-runtime` | Невеликі допоміжні засоби обмеженого кешу |
| `plugin-sdk/diagnostic-runtime` | Допоміжні засоби діагностичних прапорців і подій |
| `plugin-sdk/error-runtime` | Граф помилок, форматування, спільні допоміжні засоби класифікації помилок, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Обгорнутий fetch, proxy і допоміжні засоби pinned lookup |
| `plugin-sdk/reply-chunking` | Вузькі допоміжні функції chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Допоміжні функції шляху до сховища сесій + updated-at |
| `plugin-sdk/state-paths` | Допоміжні функції шляхів до каталогів State/OAuth |
| `plugin-sdk/routing` | Допоміжні функції route/session-key/account binding, як-от `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Спільні допоміжні функції підсумку статусу каналу/облікового запису, типові стани runtime-state і допоміжні функції метаданих проблем |
| `plugin-sdk/target-resolver-runtime` | Спільні допоміжні функції target resolver |
| `plugin-sdk/string-normalization-runtime` | Допоміжні функції нормалізації slug/рядків |
| `plugin-sdk/request-url` | Витягування рядкових URL із fetch/request-подібних входів |
| `plugin-sdk/run-command` | Запускач команд із таймуванням і нормалізованими результатами stdout/stderr |
| `plugin-sdk/param-readers` | Поширені читачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Витягування нормалізованих payload з об’єктів результатів tool |
| `plugin-sdk/tool-send` | Витягування канонічних полів цілі надсилання з аргументів tool |
| `plugin-sdk/temp-path` | Спільні допоміжні функції шляхів тимчасового завантаження |
| `plugin-sdk/logging-core` | Допоміжні функції логера підсистеми та редагування чутливих даних |
| `plugin-sdk/markdown-table-runtime` | Допоміжні функції режиму та конвертації таблиць Markdown |
| `plugin-sdk/json-store` | Невеликі допоміжні функції читання/запису JSON state |
| `plugin-sdk/file-lock` | Допоміжні функції повторно вхідного file-lock |
| `plugin-sdk/persistent-dedupe` | Допоміжні функції кешу дедуплікації на диску |
| `plugin-sdk/acp-runtime` | Допоміжні функції ACP runtime/session і reply-dispatch |
| `plugin-sdk/acp-binding-resolve-runtime` | Розв’язання read-only ACP binding без імпортів запуску життєвого циклу |
| `plugin-sdk/agent-config-primitives` | Вузькі примітиви config-schema часу виконання агента |
| `plugin-sdk/boolean-param` | Гнучкий читач boolean-параметрів |
| `plugin-sdk/dangerous-name-runtime` | Допоміжні функції зіставлення та розв’язання небезпечних назв |
| `plugin-sdk/device-bootstrap` | Допоміжні функції bootstrap пристрою та pairing token |
| `plugin-sdk/extension-shared` | Спільні примітиви допоміжних функцій passive-channel, status і ambient proxy |
| `plugin-sdk/models-provider-runtime` | Допоміжні функції відповіді для команди `/models`/провайдера |
| `plugin-sdk/skill-commands-runtime` | Допоміжні функції переліку команд Skills |
| `plugin-sdk/native-command-registry` | Допоміжні функції native command registry/build/serialize |
| `plugin-sdk/agent-harness` | Експериментальна trusted-plugin-поверхня для низькорівневих agent harness: типи harness, допоміжні функції steer/abort для active-run, допоміжні функції bridge інструментів OpenClaw і утиліти результатів спроб |
| `plugin-sdk/provider-zai-endpoint` | Допоміжні функції виявлення endpoint Z.AI |
| `plugin-sdk/infra-runtime` | Допоміжні функції системних подій/Heartbeat |
| `plugin-sdk/collection-runtime` | Невеликі допоміжні функції обмеженого кешу |
| `plugin-sdk/diagnostic-runtime` | Допоміжні функції діагностичних прапорців і подій |
| `plugin-sdk/error-runtime` | Допоміжні функції графа помилок, форматування, спільної класифікації помилок, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Допоміжні функції обгорнутого fetch, proxy і pinned lookup |
| `plugin-sdk/runtime-fetch` | Runtime fetch з урахуванням dispatcher без імпортів proxy/guarded-fetch |
| `plugin-sdk/response-limit-runtime` | Читач обмеженого тіла відповіді без широкої media runtime surface |
| `plugin-sdk/session-binding-runtime` | Поточний стан прив’язки розмови без маршрутизації configured binding або сховищ pairing |
| `plugin-sdk/session-store-runtime` | Допоміжні засоби читання session-store без широких імпортів запису/обслуговування конфігурації |
| `plugin-sdk/context-visibility-runtime` | Визначення видимості контексту та фільтрація додаткового контексту без широких імпортів config/security |
| `plugin-sdk/string-coerce-runtime` | Вузькі допоміжні засоби приведення та нормалізації primitive record/string без імпортів markdown/logging |
| `plugin-sdk/host-runtime` | Допоміжні засоби нормалізації hostname і SCP host |
| `plugin-sdk/retry-runtime` | Допоміжні засоби конфігурації retry і виконавця retry |
| `plugin-sdk/agent-runtime` | Допоміжні засоби каталогів/ідентичності/робочого простору агента |
| `plugin-sdk/directory-runtime` | Запити до каталогів на основі конфігурації/усунення дублікатів |
| `plugin-sdk/response-limit-runtime` | Читач обмеженого тіла відповіді без широкої media runtime-поверхні |
| `plugin-sdk/session-binding-runtime` | Поточний стан binding розмови без routing налаштованих binding або pairing store |
| `plugin-sdk/session-store-runtime` | Допоміжні функції читання session-store без широких імпортів запису/обслуговування конфігурації |
| `plugin-sdk/context-visibility-runtime` | Допоміжні функції розв’язання видимості контексту та фільтрації додаткового контексту без широких імпортів config/security |
| `plugin-sdk/string-coerce-runtime` | Вузькі допоміжні функції примусового приведення й нормалізації primitive record/string без імпортів markdown/logging |
| `plugin-sdk/host-runtime` | Допоміжні функції нормалізації імен хостів і SCP host |
| `plugin-sdk/retry-runtime` | Допоміжні функції конфігурації retry і запуску retry |
| `plugin-sdk/agent-runtime` | Допоміжні функції каталогу/ідентичності/робочого простору агента |
| `plugin-sdk/directory-runtime` | Запити/дедуплікація каталогів на основі конфігурації |
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
</Accordion>
<Accordion title="Підшляхи можливостей і тестування">
| Підшлях | Ключові експорти |
| Subpath | Key exports |
| --- | --- |
| `plugin-sdk/media-runtime` | Спільні допоміжні засоби fetch/transform/store для медіа, а також побудовники media payload |
| `plugin-sdk/media-generation-runtime` | Спільні допоміжні засоби failover для генерації медіа, вибір кандидатів і повідомлення про відсутню модель |
| `plugin-sdk/media-understanding` | Типи провайдерів media understanding, а також provider-facing експорти допоміжних засобів для зображень/аудіо |
| `plugin-sdk/text-runtime` | Спільні допоміжні засоби text/markdown/logging, як-от видалення тексту, видимого асистенту, допоміжні засоби render/chunking/table для markdown, допоміжні засоби редагування чутливих даних, допоміжні засоби directive-tag і утиліти safe-text |
| `plugin-sdk/text-chunking` | Допоміжний засіб chunking вихідного тексту |
| `plugin-sdk/speech` | Типи speech provider, а також provider-facing допоміжні засоби directive, registry і validation |
| `plugin-sdk/speech-core` | Спільні типи speech provider, а також допоміжні засоби registry, directive і normalization |
| `plugin-sdk/realtime-transcription` | Типи провайдерів транскрипції в реальному часі, допоміжні засоби registry і спільний допоміжний засіб WebSocket session |
| `plugin-sdk/realtime-voice` | Типи провайдерів голосу в реальному часі та допоміжні засоби registry |
| `plugin-sdk/media-runtime` | Спільні допоміжні функції fetch/transform/store для медіа, а також збирачі media payload |
| `plugin-sdk/media-store` | Вузькі допоміжні функції media store, як-от `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | Спільні допоміжні функції failover для генерації медіа, вибір candidate і повідомлення про відсутню модель |
| `plugin-sdk/media-understanding` | Типи провайдерів media understanding, а також експорти допоміжних функцій для зображень/аудіо, орієнтованих на провайдера |
| `plugin-sdk/text-runtime` | Спільні допоміжні функції text/markdown/logging, як-от видалення assistant-visible text, допоміжні функції render/chunking/table для Markdown, допоміжні функції редагування чутливих даних, directive-tag і safe-text утиліти |
| `plugin-sdk/text-chunking` | Допоміжна функція chunking вихідного тексту |
| `plugin-sdk/speech` | Типи провайдерів speech, а також допоміжні функції directive, registry і validation, орієнтовані на провайдера |
| `plugin-sdk/speech-core` | Спільні типи провайдерів speech і допоміжні функції registry, directive та normalizації |
| `plugin-sdk/realtime-transcription` | Типи провайдерів realtime transcription, допоміжні функції registry і спільна допоміжна функція WebSocket session |
| `plugin-sdk/realtime-voice` | Типи провайдерів realtime voice і допоміжні функції registry |
| `plugin-sdk/image-generation` | Типи провайдерів генерації зображень |
| `plugin-sdk/image-generation-core` | Спільні типи генерації зображень, а також допоміжні засоби failover, auth і registry |
| `plugin-sdk/image-generation-core` | Спільні типи генерації зображень і допоміжні функції failover, auth і registry |
| `plugin-sdk/music-generation` | Типи провайдера/запиту/результату генерації музики |
| `plugin-sdk/music-generation-core` | Спільні типи генерації музики, допоміжні засоби failover, пошук провайдера та парсинг model-ref |
| `plugin-sdk/music-generation-core` | Спільні типи генерації музики і допоміжні функції failover, lookup провайдера та розбору model-ref |
| `plugin-sdk/video-generation` | Типи провайдера/запиту/результату генерації відео |
| `plugin-sdk/video-generation-core` | Спільні типи генерації відео, допоміжні засоби failover, пошук провайдера та парсинг model-ref |
| `plugin-sdk/webhook-targets` | Допоміжні засоби реєстру цілей Webhook і встановлення маршрутів |
| `plugin-sdk/webhook-path` | Допоміжні засоби нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні допоміжні засоби завантаження віддалених/локальних медіа |
| `plugin-sdk/zod` | Повторно експортований `zod` для споживачів Plugin SDK |
| `plugin-sdk/video-generation-core` | Спільні типи генерації відео і допоміжні функції failover, lookup провайдера та розбору model-ref |
| `plugin-sdk/webhook-targets` | Допоміжні функції реєстру Webhook target і встановлення route |
| `plugin-sdk/webhook-path` | Допоміжні функції нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні допоміжні функції завантаження віддалених/локальних медіа |
| `plugin-sdk/zod` | Повторно експортований `zod` для споживачів plugin SDK |
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` |
</Accordion>
<Accordion title="Підшляхи пам’яті">
| Підшлях | Ключові експорти |
| Subpath | Key exports |
| --- | --- |
| `plugin-sdk/memory-core` | Допоміжна surface bundled memory-core для допоміжних засобів manager/config/file/CLI |
| `plugin-sdk/memory-core-engine-runtime` | Runtime facade індексу/пошуку пам’яті |
| `plugin-sdk/memory-core` | Поверхня допоміжних функцій bundled memory-core для менеджера/конфігурації/файлів/CLI |
| `plugin-sdk/memory-core-engine-runtime` | Runtime-фасад індексу/пошуку пам’яті |
| `plugin-sdk/memory-core-host-engine-foundation` | Експорти foundation engine хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-embeddings` | Контракти embedding хоста пам’яті, доступ до registry, локальний provider і загальні допоміжні засоби batch/remote |
| `plugin-sdk/memory-core-host-engine-embeddings` | Контракти embedding хоста пам’яті, доступ до registry, локальний провайдер і загальні допоміжні функції batch/remote |
| `plugin-sdk/memory-core-host-engine-qmd` | Експорти QMD engine хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-storage` | Експорти storage engine хоста пам’яті |
| `plugin-sdk/memory-core-host-multimodal` | Мультимодальні допоміжні засоби хоста пам’яті |
| `plugin-sdk/memory-core-host-query` | Допоміжні засоби запитів хоста пам’яті |
| `plugin-sdk/memory-core-host-secret` | Допоміжні засоби секретів хоста пам’яті |
| `plugin-sdk/memory-core-host-events` | Допоміжні засоби журналу подій хоста пам’яті |
| `plugin-sdk/memory-core-host-status` | Допоміжні засоби статусу хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні засоби CLI runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-core` | Допоміжні засоби core runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-files` | Допоміжні засоби файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-core` | Vendor-neutral псевдонім для допоміжних засобів core runtime хоста пам’яті |
| `plugin-sdk/memory-host-events` | Vendor-neutral псевдонім для допоміжних засобів журналу подій хоста пам’яті |
| `plugin-sdk/memory-host-files` | Vendor-neutral псевдонім для допоміжних засобів файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-markdown` | Спільні допоміжні засоби managed-markdown для плагінів, суміжних із пам’яттю |
| `plugin-sdk/memory-host-search` | Runtime facade Active Memory для доступу до search-manager |
| `plugin-sdk/memory-host-status` | Vendor-neutral псевдонім для допоміжних засобів статусу хоста пам’яті |
| `plugin-sdk/memory-lancedb` | Допоміжна surface bundled memory-lancedb |
| `plugin-sdk/memory-core-host-multimodal` | Багатомодальні допоміжні функції хоста пам’яті |
| `plugin-sdk/memory-core-host-query` | Допоміжні функції запитів хоста пам’яті |
| `plugin-sdk/memory-core-host-secret` | Допоміжні функції секретів хоста пам’яті |
| `plugin-sdk/memory-core-host-events` | Допоміжні функції журналу подій хоста пам’яті |
| `plugin-sdk/memory-core-host-status` | Допоміжні функції статусу хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні функції CLI runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-core` | Допоміжні функції core runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-files` | Допоміжні функції файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-core` | Нейтральний до вендора псевдонім для допоміжних функцій core runtime хоста пам’яті |
| `plugin-sdk/memory-host-events` | Нейтральний до вендора псевдонім для допоміжних функцій журналу подій хоста пам’яті |
| `plugin-sdk/memory-host-files` | Нейтральний до вендора псевдонім для допоміжних функцій файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-markdown` | Спільні допоміжні функції керованого Markdown для plugin, суміжних із пам’яттю |
| `plugin-sdk/memory-host-search` | Runtime-фасад Active Memory для доступу до менеджера пошуку |
| `plugin-sdk/memory-host-status` | Нейтральний до вендора псевдонім для допоміжних функцій статусу хоста пам’яті |
| `plugin-sdk/memory-lancedb` | Поверхня допоміжних функцій bundled memory-lancedb |
</Accordion>
<Accordion title="Зарезервовані підшляхи bundled-helper">
| Сімейство | Поточні підшляхи | Призначення |
| Family | Current subpaths | Intended use |
| --- | --- | --- |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні засоби підтримки bundled browser plugin (`browser-support` лишається compatibility barrel) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Допоміжна/runtime surface bundled Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Допоміжна/runtime surface bundled LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Допоміжна surface bundled IRC |
| Допоміжні засоби для конкретних каналів | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Seams сумісності/допоміжних засобів bundled каналів |
| Допоміжні засоби для конкретних auth/plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Seams допоміжних засобів bundled функцій/плагінів; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні функції підтримки bundled browser plugin (`browser-support` залишається compatibility barrel) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня допоміжних функцій/runtime bundled Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня допоміжних функцій/runtime bundled LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Поверхня допоміжних функцій bundled IRC |
| Channel-specific helpers | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Шви сумісності/допоміжних функцій bundled channel |
| Auth/plugin-specific helpers | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Шви допоміжних функцій bundled feature/plugin; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` |
</Accordion>
</AccordionGroup>
## Пов’язані матеріали
## Пов’язане
- [Огляд Plugin SDK](/uk/plugins/sdk-overview)
- [Налаштування Plugin SDK](/uk/plugins/sdk-setup)
- [Створення плагінів](/uk/plugins/building-plugins)
- [Створення plugin](/uk/plugins/building-plugins)

View File

@ -1,24 +0,0 @@
---
read_when:
- Ви перейшли за старим посиланням Model Studio
- Вам потрібна канонічна сторінка провайдера Qwen
summary: Перенаправлення на /providers/qwen
title: Qwen / Model Studio
x-i18n:
generated_at: "2026-04-24T03:48:39Z"
model: gpt-5.4
provider: openai
source_hash: 04fcb811b399931e8a18974c0f13bf882551185e16a7c3563a86214d175b07fb
source_path: providers/qwen_modelstudio.md
workflow: 15
---
Цю сторінку перенесено до [Qwen](/uk/providers/qwen). Див. [Qwen](/uk/providers/qwen) для
канонічного налаштування провайдера, деталей endpoint, alias сумісності та
приміток щодо генерації відео Wan.
## Пов’язане
- [Alibaba Model Studio](/uk/providers/alibaba)
- [Qwen](/uk/providers/qwen)
- [Model selection](/uk/concepts/model-providers)

View File

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