diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index 358851c63..66ac53106 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -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 --port 18789 --display-name parallels-macos +``` + +Підтвердьте вузол з хоста Gateway: + +```bash +openclaw devices list +openclaw devices approve +``` + +Підтвердьте, що 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) diff --git a/docs/uk/plugins/sdk-runtime.md b/docs/uk/plugins/sdk-runtime.md index 9dcea6534..6c6973ec4 100644 --- a/docs/uk/plugins/sdk-runtime.md +++ b/docs/uk/plugins/sdk-runtime.md @@ -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 під час реєстрації. Використовуйте ці допоміжні засоби замість прямого імпорту внутрішніх компонентів хоста. - **Шукаєте покрокове пояснення?** Перегляньте [Channel Plugins](/uk/plugins/sdk-channel-plugins) + **Шукаєте покрокове пояснення?** Дивіться [Channel Plugins](/uk/plugins/sdk-channel-plugins) або [Provider Plugins](/uk/plugins/sdk-provider-plugins) для покрокових посібників, які показують ці допоміжні засоби в контексті. @@ -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", }); ``` - Перевизначення model (`provider`/`model`) потребує явної згоди оператора через - `plugins.entries..subagent.allowModelOverride: true` у конфігурації. - Недовірені plugins все одно можуть запускати субагентів, але запити на - перевизначення відхиляються. + Перевизначення model (`provider`/`model`) потребують явного дозволу оператора через + `plugins.entries..subagent.allowModelOverride: true` у config. + Ненадійні plugin-и все ще можуть запускати субагентів, але запити на перевизначення відхиляються. +### `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 }`, коли вихідні дані не створено (наприклад, якщо вхід пропущено). - `api.runtime.stt.transcribeAudioFile(...)` залишається псевдонімом сумісності + `api.runtime.stt.transcribeAudioFile(...)` залишається псевдонімом для сумісності для `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`. @@ -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({ 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` | Конфігурація, специфічна для Plugin, з `plugins.entries..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` | Конфігурація, специфічна для Plugin, із `plugins.entries..config` | +| `api.logger` | `PluginLogger` | Logger з відповідною областю видимості (`debug`, `info`, `warn`, `error`) | +| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легковагове вікно запуску/налаштування до повного входу | +| `api.resolvePath(input)` | `(string) => string` | Визначити шлях відносно кореня plugin-а | ## Пов’язане diff --git a/docs/uk/plugins/sdk-subpaths.md b/docs/uk/plugins/sdk-subpaths.md index c3aca4421..1f85547ca 100644 --- a/docs/uk/plugins/sdk-subpaths.md +++ b/docs/uk/plugins/sdk-subpaths.md @@ -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: - | Підшлях | Ключові експорти | + | 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`, і типи цілей секретів | - | Підшлях | Ключові експорти | + | 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` | Вузькі допоміжні функції режиму активації груп і розбору команд | - | Підшлях | Ключові експорти | + | 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` | Допоміжні функції для розміру тіла запиту/тайм-аутів | - - | Підшлях | Ключові експорти | + + | 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` | - | Підшлях | Ключові експорти | + | 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` | - | Підшлях | Ключові експорти | + | 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 | - | Сімейство | Поточні підшляхи | Призначення | + | 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` | -## Пов’язані матеріали +## Пов’язане - [Огляд Plugin SDK](/uk/plugins/sdk-overview) - [Налаштування Plugin SDK](/uk/plugins/sdk-setup) -- [Створення плагінів](/uk/plugins/building-plugins) +- [Створення plugin](/uk/plugins/building-plugins) diff --git a/docs/uk/providers/qwen_modelstudio.md b/docs/uk/providers/qwen_modelstudio.md deleted file mode 100644 index 33f80b805..000000000 --- a/docs/uk/providers/qwen_modelstudio.md +++ /dev/null @@ -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) diff --git a/docs/uk/web/control-ui.md b/docs/uk/web/control-ui.md index 1dfbd0c2f..365147947 100644 --- a/docs/uk/web/control-ui.md +++ b/docs/uk/web/control-ui.md @@ -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://:18789/` -- необов’язковий префікс: установіть `gateway.controlUi.basePath` (наприклад, `/openclaw`) +- типово: `http://: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`. +Якщо браузер повторює спробу сполучення зі зміненими даними автентифікації (роль/області доступу/public +key), попередній запит, що очікує, замінюється, і створюється новий `requestId`. Перед підтвердженням знову виконайте `openclaw devices list`. -Якщо браузер уже сполучений і ви змінюєте його з доступу лише для читання на -доступ для запису/адміністратора, це вважається підвищенням рівня підтвердження, а не -тихим повторним підключенням. OpenClaw зберігає попереднє підтвердження активним, блокує ширше повторне підключення +Якщо браузер уже сполучений і ви змінюєте для нього доступ із читання на +доступ на запис/адміністрування, це розглядається як підвищення рівня підтвердження, а не як тихе +повторне підключення. OpenClaw зберігає попереднє підтвердження активним, блокує ширше повторне підключення і просить вас явно підтвердити новий набір областей доступу. Після підтвердження пристрій запам’ятовується і не потребуватиме повторного підтвердження, якщо -ви не відкличете його за допомогою `openclaw devices revoke --device --role `. Див. -[CLI Devices](/uk/cli/devices) для ротації токенів і відкликання. +ви не відкличете його через `openclaw devices revoke --device --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 звичайного тексту викликів інструментів (зокрема `...`, `...`, `...`, `...` і обрізані блоки викликів інструментів), а також витеклі токени керування моделлю 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 викликів інструментів (включно з `...`, `...`, `...`, `...` і обрізаними блоками викликів інструментів), а також 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:///` (або ваш налаштований `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://` або `http://`), -браузер працює в **незахищеному контексті** і блокує 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:///` (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/`), як і раніше відображаються. -- Вбудовані URL-адреси `data:image/...` як і раніше відображаються (це корисно для payload усередині протоколу). -- Віддалені URL-адреси аватарів, які надходять із метаданих каналів, видаляються в helper-функціях аватарів Control UI і замінюються вбудованим логотипом/бейджем, тож скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень. +- Аватари та зображення, що обслуговуються за відносними шляхами (наприклад, `/avatars/`), як і раніше відображаються. +- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для payloads усередині протоколу). +- Віддалені URL аватарів, що надходять із метаданих каналу, видаляються допоміжними засобами аватарів у Control UI і замінюються вбудованим logo/badge, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень. -Вам не потрібно нічого змінювати, щоб отримати таку поведінку — вона завжди ввімкнена й не налаштовується. +Щоб отримати цю поведінку, вам нічого не потрібно змінювати — вона завжди ввімкнена і не налаштовується. ## Автентифікація маршруту аватара -Коли налаштовано автентифікацію gateway, endpoint аватарів у Control UI вимагає той самий токен gateway, що й решта API: +Коли налаштована автентифікація gateway, endpoint аватара в Control UI вимагає той самий токен gateway, що й решта API: -- `GET /avatar/` повертає зображення аватара лише автентифікованим викликам. `GET /avatar/?meta=1` повертає метадані аватара за тим самим правилом. -- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (узгоджено із сусіднім маршрутом assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому разі захищені. -- Сам Control UI пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення все одно відображається в інформаційних панелях. +- `GET /avatar/` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/?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://:18789 @@ -377,17 +382,17 @@ http://localhost:5173/?gatewayUrl=wss://:18789#token=:18789#token=