chore(i18n): refresh uk translations
This commit is contained in:
parent
2b7dbe8be8
commit
e1201d5d8a
@ -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)
|
||||
|
||||
@ -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-а |
|
||||
|
||||
## Пов’язане
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user