From fa9e06956eff13d8f8d1c3896db261bfaf8adc1b Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 8 Apr 2026 05:05:31 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/slack.md | 305 ++--- docs/uk/concepts/streaming.md | 151 +-- docs/uk/gateway/configuration-reference.md | 1238 ++++++++++---------- 3 files changed, 831 insertions(+), 863 deletions(-) diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index 2a94a8bf4..3828b1d8f 100644 --- a/docs/uk/channels/slack.md +++ b/docs/uk/channels/slack.md @@ -1,29 +1,29 @@ --- read_when: - - Налаштування Slack або налагодження режиму Slack socket/HTTP + - Налаштування Slack або налагодження режиму socket/HTTP у Slack summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Request URLs) title: Slack x-i18n: - generated_at: "2026-04-07T00:08:10Z" + generated_at: "2026-04-08T05:00:50Z" model: gpt-5.4 provider: openai - source_hash: 2b8fd2cc6c638ee82069f0af2c2b6f6f49c87da709b941433a0343724a9907ea + source_hash: cad132131ddce688517def7c14703ad314441c67aacc4cc2a2a721e1d1c01942 source_path: channels/slack.md workflow: 15 --- # Slack -Статус: готово до продакшну для приватних повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються. +Статус: готовий до production для DM + каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються. - Приватні повідомлення Slack типово працюють у режимі сполучення. + Для Slack DM за замовчуванням використовується режим сполучення. - Нативна поведінка команд і каталог команд. + Власна поведінка команд і каталог команд. - + Міжканальна діагностика та сценарії відновлення. @@ -31,15 +31,15 @@ x-i18n: ## Швидке налаштування - + У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку + - виберіть **from a manifest** і виберіть workspace для вашого застосунку - вставте [приклад manifest](#manifest-and-scope-checklist) нижче та продовжте створення - згенеруйте **App-Level Token** (`xapp-...`) з `connections:write` - - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) + - встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) @@ -57,7 +57,7 @@ x-i18n: } ``` - Резервне джерело через env (лише для типового облікового запису): + Резервне значення env (лише для облікового запису за замовчуванням): ```bash SLACK_APP_TOKEN=xapp-... @@ -82,10 +82,10 @@ openclaw gateway У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**: - - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку + - виберіть **from a manifest** і виберіть workspace для вашого застосунку - вставте [приклад manifest](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням - збережіть **Signing Secret** для перевірки запитів - - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) + - встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`) @@ -106,9 +106,9 @@ openclaw gateway ``` - Використовуйте унікальні шляхи webhook для багатьох HTTP-облікових записів + Використовуйте унікальні webhook path для багатьох HTTP-облікових записів - Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували. + Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували. @@ -128,7 +128,7 @@ openclaw gateway ## Контрольний список manifest і scope - + ```json { @@ -291,12 +291,12 @@ openclaw gateway - Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та значок) замість типової ідентичності застосунку Slack. + Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та піктограму) замість стандартної ідентичності застосунку Slack. - Якщо ви використовуєте значок emoji, Slack очікує синтаксис `:emoji_name:`. + Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`. - - Якщо ви налаштовуєте `channels.slack.userToken`, типовими scopes для читання є: + + Якщо ви налаштували `channels.slack.userToken`, типовими scopes читання є: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -304,44 +304,45 @@ openclaw gateway - `reactions:read` - `pins:read` - `emoji:read` - - `search:read` (якщо ви залежите від читання через Slack search) + - `search:read` (якщо ви залежите від читання пошуку Slack) ## Модель токенів -- `botToken` + `appToken` обов’язкові для Socket Mode. -- Для режиму HTTP потрібні `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті +- `botToken` + `appToken` потрібні для Socket Mode. +- Для HTTP mode потрібні `botToken` + `signingSecret`. +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні рядки або об’єкти SecretRef. -- Токени в конфігурації мають пріоритет над резервним джерелом через env. -- Резервне джерело через env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до типового облікового запису. -- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного джерела через env) і типово працює в режимі лише для читання (`userTokenReadOnly: true`). +- Токени конфігурації мають пріоритет над резервними значеннями env. +- Резервні значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до облікового запису за замовчуванням. +- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення env) і за замовчуванням працює в режимі лише для читання (`userTokenReadOnly: true`). -Поведінка знімка статусу: +Поведінка знімка стану: -- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` - для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`). +- Перевірка облікового запису Slack відстежує для кожного облікового + даного поля `*Source` і `*Status` + (`botToken`, `appToken`, `signingSecret`, `userToken`). - Статус може бути `available`, `configured_unavailable` або `missing`. -- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef - або інше не вбудоване джерело секрету, але поточна команда/шлях виконання +- `configured_unavailable` означає, що обліковий запис налаштований через SecretRef + або інше не-inline джерело секретів, але поточний шлях команди/виконання не зміг визначити фактичне значення. -- У режимі HTTP включається `signingSecretStatus`; у Socket Mode - обов’язковою парою є `botTokenStatus` + `appTokenStatus`. +- У HTTP mode додається `signingSecretStatus`; у Socket Mode + потрібною парою є `botTokenStatus` + `appTokenStatus`. -Для дій/читання каталогу user token може мати пріоритет, якщо його налаштовано. Для запису bot token залишається пріоритетним; запис через user token дозволено лише коли `userTokenReadOnly: false` і bot token недоступний. +Для дій/читання каталогу може надаватися перевага user token, якщо його налаштовано. Для запису перевага зберігається за bot token; запис через user token дозволений лише коли `userTokenReadOnly: false`, а bot token недоступний. ## Дії та обмеження -Дії Slack контролюються через `channels.slack.actions.*`. +Дії Slack керуються через `channels.slack.actions.*`. Доступні групи дій у поточному інструментарії Slack: -| Група | Типово | -| ---------- | ------- | +| Група | За замовчуванням | +| ---------- | ---------------- | | messages | увімкнено | | reactions | увімкнено | | pins | увімкнено | @@ -350,32 +351,32 @@ openclaw gateway Поточні дії з повідомленнями Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. -## Керування доступом і маршрутизація +## Контроль доступу та маршрутизація - - `channels.slack.dmPolicy` керує доступом до приватних повідомлень (застаріле: `channels.slack.dm.policy`): + + `channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`): - - `pairing` (типово) + - `pairing` (за замовчуванням) - `allowlist` - - `open` (потрібно, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) + - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) - `disabled` - Прапорці для приватних повідомлень: + Прапорці DM: - - `dm.enabled` (типово true) + - `dm.enabled` (за замовчуванням true) - `channels.slack.allowFrom` (рекомендовано) - `dm.allowFrom` (застаріле) - - `dm.groupEnabled` (групові приватні повідомлення типово false) + - `dm.groupEnabled` (групові DM за замовчуванням false) - `dm.groupChannels` (необов’язковий allowlist MPIM) - Пріоритет для кількох облікових записів: + Пріоритет для багатьох облікових записів: - `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано. - Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`. - Для сполучення в приватних повідомленнях використовується `openclaw pairing approve slack `. + Для сполучення в DM використовується `openclaw pairing approve slack `. @@ -388,26 +389,26 @@ openclaw gateway Allowlist каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів. - Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо встановлено `channels.defaults.groupPolicy`). + Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`). Визначення імен/ID: - - записи allowlist каналів і allowlist приватних повідомлень визначаються під час запуску, якщо доступ токена це дозволяє - - записи з невизначеними іменами каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації - - вхідна авторизація та маршрутизація каналів типово орієнтовані на ID; пряме зіставлення за ім’ям користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи allowlist каналів і DM allowlist визначаються під час запуску, якщо доступ токена це дозволяє + - нерозв’язані записи назв каналів зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації + - вхідна авторизація та маршрутизація каналів за замовчуванням орієнтуються на ID; пряме зіставлення імені користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` - - Повідомлення в каналах типово обмежуються згадками. + + Повідомлення в каналах за замовчуванням обмежуються згадками. Джерела згадок: - явна згадка застосунку (`<@botId>`) - - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) - - неявна поведінка reply-to-bot у тредах (вимикається, коли `thread.requireExplicitMention` має значення `true`) + - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) + - неявна поведінка відповіді в треді на бота (вимикається, коли `thread.requireExplicitMention` має значення `true`) - Елементи керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): + Керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - `users` (allowlist) @@ -415,36 +416,36 @@ openclaw gateway - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"` + - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"` (застарілі ключі без префікса все ще зіставляються лише з `id:`) -## Треди, сесії та теги reply +## Треди, сесії та теги відповіді -- Приватні повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. -- Із типовим `session.dmScope=main` приватні повідомлення Slack згортаються в основну сесію агента. +- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. +- Із типовим `session.dmScope=main` Slack DM згортаються до основної сесії агента. - Сесії каналів: `agent::slack:channel:`. -- Відповіді в тредах можуть створювати суфікси сесій тредів (`:thread:`), де це застосовно. -- Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`. -- `channels.slack.thread.initialHistoryLimit` керує кількістю наявних повідомлень треду, які отримуються під час запуску нової сесії треду (типово `20`; установіть `0`, щоб вимкнути). -- `channels.slack.thread.requireExplicitMention` (типово `false`): коли має значення `true`, пригнічує неявні згадки в тредах, тож бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять обмеження `requireMention`. +- Відповіді в треді можуть створювати суфікси сесії треду (`:thread:`), коли це застосовно. +- Для `channels.slack.thread.historyScope` значення за замовчуванням — `thread`; для `thread.inheritParent` — `false`. +- `channels.slack.thread.initialHistoryLimit` керує кількістю наявних повідомлень треду, які отримуються під час запуску нової сесії треду (за замовчуванням `20`; задайте `0`, щоб вимкнути). +- `channels.slack.thread.requireExplicitMention` (за замовчуванням `false`): коли має значення `true`, неявні згадки в треді пригнічуються, тому бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять обмеження `requireMention`. -Елементи керування тредами відповідей: +Керування тредами відповідей: -- `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`) +- `channels.slack.replyToMode`: `off|first|all|batched` (за замовчуванням `off`) - `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel` - застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode` -Підтримуються ручні теги reply: +Підтримуються ручні теги відповіді: - `[[reply_to_current]]` - `[[reply_to:]]` -Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів платформ: у Slack треди приховують повідомлення з каналу, тоді як у Telegram replies залишаються видимими в основному потоці чату. +Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів на цих платформах: у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді залишаються видимими в основному потоці чату. -## Ack-реакції +## Реакції підтвердження `ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення. @@ -453,36 +454,40 @@ openclaw gateway - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- резервне значення emoji з ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") +- резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше `"👀"`) Примітки: -- Slack очікує shortcodes (наприклад, `"eyes"`). +- Slack очікує короткі коди (наприклад, `"eyes"`). - Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально. ## Потокова передача тексту `channels.slack.streaming` керує поведінкою live preview: -- `off`: вимкнути live preview streaming. -- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом. +- `off`: вимкнути потокову live preview. +- `partial` (за замовчуванням): замінювати текст попереднього перегляду останнім частковим виводом. - `block`: додавати фрагментовані оновлення попереднього перегляду. -- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст. +- `progress`: показувати текст статусу прогресу під час генерації, а потім надсилати остаточний текст. -`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`). +`channels.slack.streaming.nativeTransport` керує нативною потоковою передачею тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (за замовчуванням: `true`). -- Щоб з’явилася нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду, як і раніше, підпорядковується `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд. -- Медіа та нетекстові корисні навантаження повертаються до звичайної доставки. -- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти корисних навантажень. +- Для нативної потокової передачі тексту та відображення статусу треду Slack assistant має бути доступний тред відповіді. Вибір треду все одно підпорядковується `replyToMode`. +- Кореневі повідомлення каналів і групових чатів усе ще можуть використовувати звичайний чернетковий preview, коли нативна потокова передача недоступна. +- DM у Slack верхнього рівня за замовчуванням залишаються поза тредом, тому не показують preview у стилі треду; використовуйте відповіді в треді або `typingReaction`, якщо хочете бачити прогрес там. +- Для медіа та не текстових payload використовується звичайна доставка. +- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти payload. -Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack: +Використовуйте чернетковий preview замість нативної потокової передачі тексту Slack: ```json5 { channels: { slack: { - streaming: "partial", - nativeStreaming: false, + streaming: { + mode: "partial", + nativeTransport: false, + }, }, }, } @@ -490,12 +495,13 @@ openclaw gateway Застарілі ключі: -- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming`. -- булевий `channels.slack.streaming` автоматично мігрує до `channels.slack.nativeStreaming`. +- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`. +- булеве `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`. +- застаріле `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`. -## Резервний варіант з typing reaction +## Резервна реакція введення -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в тредах, де використовується типовий індикатор стану "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це особливо корисно поза відповідями в тредах, які використовують типовий індикатор статусу "is typing...". Порядок визначення: @@ -504,50 +510,50 @@ openclaw gateway Примітки: -- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`). -- Реакція надсилається за принципом best-effort, а очищення автоматично намагається виконатися після відповіді або завершення шляху помилки. +- Slack очікує короткі коди (наприклад, `"hourglass_flowing_sand"`). +- Реакція є best-effort, а спроба очищення автоматично виконується після завершення відповіді або сценарію помилки. ## Медіа, розбиття на частини та доставка - Файлові вкладення Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру. + Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру. - Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`. + Обмеження розміру вхідних даних під час виконання за замовчуванням становить `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`. - - текстові фрагменти використовують `channels.slack.textChunkLimit` (типово 4000) + - текстові частини використовують `channels.slack.textChunkLimit` (за замовчуванням 4000) - `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами - - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`) - - обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовують типові значення MIME-kind із конвеєра медіа + - надсилання файлів використовує API завантаження Slack і може включати відповіді в треді (`thread_ts`) + - обмеження вихідних медіа визначається `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує стандартні значення MIME-kind з media pipeline - Бажані явні цілі: + Рекомендовані явні цілі: - - `user:` для приватних повідомлень + - `user:` для DM - `channel:` для каналів - Приватні повідомлення Slack відкриваються через API бесід Slack під час надсилання до цілей користувача. + Slack DM відкриваються через API розмов Slack під час надсилання до цілей користувача. ## Команди та поведінка slash -- Нативний автоматичний режим команд для Slack **вимкнено** (`commands.native: "auto"` не вмикає нативні команди Slack). +- Автоматичний режим нативних команд **вимкнено** для Slack (`commands.native: "auto"` не вмикає нативні команди Slack). - Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`). -- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди у Slack (імена `/`), з одним винятком: - - зареєструйте `/agentstatus` для команди status (Slack резервує `/status`) -- Якщо нативні команди не ввімкнено, можна запускати одну налаштовану slash-команду через `channels.slack.slashCommand`. -- Нативні меню аргументів тепер адаптують свою стратегію відображення: +- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди у Slack (імена `/`), за одним винятком: + - зареєструйте `/agentstatus` для команди статусу (Slack резервує `/status`) +- Якщо нативні команди не ввімкнено, ви можете запускати одну налаштовану slash-команду через `channels.slack.slashCommand`. +- Нативні меню аргументів тепер адаптують свою стратегію рендерингу: - до 5 варіантів: блоки кнопок - 6-100 варіантів: статичне меню вибору - - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity + - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, коли доступні обробники параметрів interactivity - якщо закодовані значення варіантів перевищують обмеження Slack, потік повертається до кнопок -- Для довгих корисних навантажень варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення. +- Для довгих payload варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення. Типові параметри slash-команд: @@ -560,11 +566,11 @@ openclaw gateway - `agent::slack:slash:` -і все ще маршрутизують виконання команд відносно сесії цільової бесіди (`CommandTargetSessionKey`). +і все одно маршрутизують виконання команд до сесії цільової розмови (`CommandTargetSessionKey`). ## Інтерактивні відповіді -Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але цю функцію типово вимкнено. +Slack може відображати інтерактивні елементи відповіді, створені агентом, але ця можливість за замовчуванням вимкнена. Увімкніть її глобально: @@ -580,7 +586,7 @@ Slack може відображати інтерактивні елементи } ``` -Або ввімкніть її лише для одного облікового запису Slack: +Або увімкніть її лише для одного облікового запису Slack: ```json5 { @@ -598,7 +604,7 @@ Slack може відображати інтерактивні елементи } ``` -Коли функцію ввімкнено, агенти можуть надсилати директиви відповідей лише для Slack: +Коли можливість увімкнено, агенти можуть виводити директиви відповіді лише для Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` @@ -609,33 +615,32 @@ Slack може відображати інтерактивні елементи - Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. - Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом. -- Якщо згенеровані інтерактивні блоки перевищать обмеження Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного корисного навантаження blocks. +- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload блоків. -## Погодження exec у Slack +## Exec approvals у Slack -Slack може діяти як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала. +Slack може діяти як нативний клієнт схвалення з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала. -- Погодження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації до приватних повідомлень/каналів. -- Погодження plugin також можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack, а тип ID погодження — `plugin:`. -- Авторизація того, хто погоджує, як і раніше, примусово застосовується: лише користувачі, визначені як approvers, можуть погоджувати або відхиляти запити через Slack. +- Для нативної маршрутизації в DM/каналах exec approvals використовують `channels.slack.execApprovals.*`. +- Схвалення плагінів усе ще можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack і вид ID схвалення є `plugin:`. +- Авторизація того, хто схвалює, усе ще примусово застосовується: лише користувачі, визначені як approvers, можуть схвалювати або відхиляти запити через Slack. -Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в бесіді. -Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw -має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що -погодження в чаті недоступні або ручне погодження є єдиним шляхом. +Це використовує ту саму спільну поверхню кнопок схвалення, що й інші канали. Коли у налаштуваннях застосунку Slack увімкнено `interactivity`, запити на схвалення відображаються як кнопки Block Kit безпосередньо в розмові. +Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw +має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що схвалення в чаті недоступні або ручне схвалення є єдиним шляхом. Шлях конфігурації: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`) -- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) +- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовується резервне значення `commands.ownerAllowFrom`) +- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) - `agentFilter`, `sessionFilter` -Slack автоматично вмикає нативні погодження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один -approver. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт погодження. -Установіть `enabled: true`, щоб примусово ввімкнути нативні погодження, коли approvers визначаються. +Slack автоматично вмикає нативні exec approvals, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один +approver. Встановіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт схвалення. +Встановіть `enabled: true`, щоб примусово ввімкнути нативні схвалення, коли визначаються approvers. -Типова поведінка без явної конфігурації погодження exec для Slack: +Поведінка за замовчуванням без явної конфігурації Slack exec approval: ```json5 { @@ -646,7 +651,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут ``` Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або -вибрати доставку в чат походження: +використовувати доставку до чату-джерела: ```json5 { @@ -662,38 +667,38 @@ approver. Установіть `enabled: false`, щоб явно вимкнут } ``` -Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на погодження exec також мають -маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне переспрямування `approvals.plugin` також є -окремим; нативні кнопки Slack усе ще можуть визначати погодження plugin, коли ці запити вже надходять +Спільне пересилання `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на exec approval також мають +маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне пересилання `approvals.plugin` також є +окремим; нативні кнопки Slack усе ще можуть визначати схвалення плагінів, коли ці запити вже надходять у Slack. -Команда `/approve` у тому самому чаті також працює в каналах і приватних повідомленнях Slack, які вже підтримують команди. Див. [Погодження exec](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю переспрямування погоджень. +Така сама `/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Див. [Exec approvals](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю пересилання схвалень. ## Події та операційна поведінка -- Редагування/видалення повідомлень і трансляції тредів зіставляються із системними подіями. +- Редагування/видалення повідомлень і thread broadcast зіставляються із системними подіями. - Події додавання/видалення реакцій зіставляються із системними подіями. -- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями. +- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення pin зіставляються із системними подіями. - `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`. -- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути ін’єктовані в контекст маршрутизації. -- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, де це застосовно. -- Дії block і взаємодії modal створюють структуровані системні події `Slack interaction: ...` із насиченими полями корисного навантаження: +- Метадані topic/purpose каналу вважаються ненадійним контекстом і можуть бути впроваджені в контекст маршрутизації. +- Початок треду й початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, якщо це застосовно. +- Дії block і взаємодії modal створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload: - дії block: вибрані значення, мітки, значення picker і метадані `workflow_*` - - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними значеннями форми + - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми -## Вказівники на довідкову конфігурацію +## Вказівники на довідник конфігурації -Основне посилання: +Основний довідник: - [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack) - Високосигнальні поля Slack: + Основні поля Slack: - mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` - - доступ до приватних повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` - - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; тримайте вимкненим, якщо не потрібно) + - доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` + - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; залишайте вимкненим, якщо немає потреби) - доступ до каналів: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` - треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming` + - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport` - операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` ## Усунення проблем @@ -705,7 +710,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут - `groupPolicy` - allowlist каналів (`channels.slack.channels`) - `requireMention` - - allowlist `users` для конкретного каналу + - allowlist `users` для кожного каналу Корисні команди: @@ -717,12 +722,12 @@ openclaw doctor - + Перевірте: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) - - дозволи сполучення / записи allowlist + - схвалення сполучення / записи allowlist ```bash openclaw pairing list slack @@ -730,32 +735,32 @@ openclaw pairing list slack - + Перевірте bot token + app token і ввімкнення Socket Mode в налаштуваннях застосунку Slack. Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або `appTokenStatus: "configured_unavailable"`, обліковий запис Slack налаштовано, але поточне середовище виконання не змогло визначити значення, - що підтримується SecretRef. + що використовує SecretRef. - + Перевірте: - signing secret - - шлях webhook + - webhook path - Slack Request URLs (Events + Interactivity + Slash Commands) - унікальний `webhookPath` для кожного HTTP-облікового запису Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло - визначити signing secret, що підтримується SecretRef. + визначити signing secret, що використовує SecretRef. - Перевірте, чи ви справді мали на увазі: + Перевірте, який режим ви мали на увазі: - режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими у Slack - або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`) @@ -765,7 +770,7 @@ openclaw pairing list slack -## Пов’язані розділи +## Пов’язане - [Сполучення](/uk/channels/pairing) - [Групи](/uk/channels/groups) diff --git a/docs/uk/concepts/streaming.md b/docs/uk/concepts/streaming.md index 5badf1c09..5d1bfb7c2 100644 --- a/docs/uk/concepts/streaming.md +++ b/docs/uk/concepts/streaming.md @@ -1,34 +1,34 @@ --- read_when: - - Пояснення того, як працює streaming або chunking у каналах - - Зміна поведінки block streaming або channel chunking - - Налагодження дубльованих/передчасних блокових відповідей або preview streaming у каналах -summary: Поведінка streaming + chunking (блокові відповіді, preview-streaming у каналах, зіставлення режимів) -title: Streaming і chunking + - Пояснення того, як потокове передавання або розбиття на частини працює в каналах + - Зміна поведінки потокового передавання блоків або розбиття на частини в каналах + - Налагодження дубльованих/передчасних блокових відповідей або потокового передавання попереднього перегляду в каналах +summary: Поведінка потокового передавання та розбиття на частини (блокові відповіді, потокове передавання попереднього перегляду в каналах, зіставлення режимів) +title: Потокове передавання та розбиття на частини x-i18n: - generated_at: "2026-04-05T18:02:19Z" + generated_at: "2026-04-08T04:59:57Z" model: gpt-5.4 provider: openai - source_hash: 44b0d08c7eafcb32030ef7c8d5719c2ea2d34e4bac5fdad8cc8b3f4e9e9fad97 + source_hash: a8e847bb7da890818cd79dec7777f6ae488e6d6c0468e948e56b6b6c598e0000 source_path: concepts/streaming.md workflow: 15 --- -# Streaming + chunking +# Потокове передавання та розбиття на частини -OpenClaw має два окремі шари streaming: +OpenClaw має два окремі шари потокового передавання: -- **Block streaming (канали):** надсилає завершені **блоки**, поки асистент пише. Це звичайні повідомлення каналу (не дельти токенів). -- **Preview streaming (Telegram/Discord/Slack):** оновлює тимчасове **preview message** під час генерації. +- **Потокове передавання блоків (канали):** надсилає завершені **блоки**, поки помічник пише. Це звичайні повідомлення каналу (не дельти токенів). +- **Потокове передавання попереднього перегляду (Telegram/Discord/Slack):** оновлює тимчасове **повідомлення попереднього перегляду** під час генерації. -Справжнього streaming дельт токенів до повідомлень каналу сьогодні **немає**. Preview streaming працює на рівні повідомлень (надсилання + редагування/додавання). +Справжнього **потокового передавання дельт токенів** у повідомлення каналів наразі **немає**. Потокове передавання попереднього перегляду є повідомлень-орієнтованим (надсилання + редагування/додавання). -## Block streaming (повідомлення каналу) +## Потокове передавання блоків (повідомлення каналів) -Block streaming надсилає вихід асистента грубими фрагментами в міру його появи. +Потокове передавання блоків надсилає вивід помічника великими частинами в міру його появи. ``` -Model output +Вивід моделі └─ text_delta/events ├─ (blockStreamingBreak=text_end) │ └─ chunker emits blocks as buffer grows @@ -39,130 +39,131 @@ Model output Легенда: -- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без streaming). -- `chunker`: `EmbeddedBlockChunker`, який застосовує мінімальні/максимальні межі + пріоритет розриву. +- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без потокового передавання). +- `chunker`: `EmbeddedBlockChunker`, що застосовує мінімальні/максимальні межі + пріоритет розриву. - `channel send`: фактичні вихідні повідомлення (блокові відповіді). **Керування:** - `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (типово вимкнено). -- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово задати `"on"`/`"off"` для кожного каналу. +- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово встановити `"on"`/`"off"` для кожного каналу. - `agents.defaults.blockStreamingBreak`: `"text_end"` або `"message_end"`. - `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`. -- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання блоків streaming перед надсиланням). +- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання потокових блоків перед надсиланням). - Жорстке обмеження каналу: `*.textChunkLimit` (наприклад, `channels.whatsapp.textChunkLimit`). -- Режим chunking каналу: `*.chunkMode` (`length` типово, `newline` ділить за порожніми рядками (межами абзаців) перед chunking за довжиною). -- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) ділить високі відповіді, щоб уникнути обрізання в UI. +- Режим розбиття на частини для каналу: `*.chunkMode` (`length` типово, `newline` розбиває за порожніми рядками (межами абзаців) перед розбиттям за довжиною). +- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) розбиває високі відповіді, щоб уникнути обрізання в інтерфейсі. **Семантика меж:** -- `text_end`: передавати блоки в потоці, щойно їх видає chunker; flush на кожному `text_end`. -- `message_end`: чекати, доки повідомлення асистента завершиться, а потім flush буферизований вихід. +- `text_end`: передавати блоки потоком щойно `chunker` їх видає; скидати буфер на кожному `text_end`. +- `message_end`: чекати, доки повідомлення помічника завершиться, а потім скидати буферизований вивід. -`message_end` усе одно використовує chunker, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька chunk. +`message_end` усе одно використовує `chunker`, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька частин. -## Алгоритм chunking (нижня/верхня межі) +## Алгоритм розбиття на частини (нижня/верхня межа) -Block chunking реалізовано через `EmbeddedBlockChunker`: +Розбиття блоків на частини реалізовано в `EmbeddedBlockChunker`: -- **Нижня межа:** не видавати, доки буфер не досягне `minChars` (якщо не примусово). -- **Верхня межа:** намагатися розривати до `maxChars`; якщо примусово, розривати на `maxChars`. +- **Нижня межа:** не видавати нічого, доки буфер не стане >= `minChars` (якщо не примусово). +- **Верхня межа:** намагатися розбивати до `maxChars`; якщо примусово, розбивати на `maxChars`. - **Пріоритет розриву:** `paragraph` → `newline` → `sentence` → `whitespace` → жорсткий розрив. -- **Code fences:** ніколи не розривати всередині fence; якщо розрив на `maxChars` примусовий, fence закривається й знову відкривається, щоб Markdown залишався коректним. +- **Огородження коду:** ніколи не розбивати всередині огороджень; у разі примусового розриву на `maxChars` огородження закривається й знову відкривається, щоб Markdown залишався коректним. -`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити ліміти каналу не можна. +`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити обмеження для конкретного каналу неможливо. -## Coalescing (об’єднання блоків streaming) +## Об’єднання (злиття потокових блоків) -Коли block streaming увімкнено, OpenClaw може **об’єднувати послідовні блокові chunk** -перед їх надсиланням. Це зменшує «спам з однорядкових повідомлень», водночас -зберігаючи поступовий вивід. +Коли потокове передавання блоків увімкнене, OpenClaw може **об’єднувати послідовні блокові частини** +перед їх надсиланням. Це зменшує «спам з одного рядка», водночас зберігаючи +поступовий вивід. -- Coalescing чекає **пауз без активності** (`idleMs`) перед flush. -- Буфери обмежені `maxChars` і будуть скинуті, якщо перевищать його. -- `minChars` не дає надсилати крихітні фрагменти, доки не накопичиться достатньо тексту - (під час фінального flush залишковий текст надсилається завжди). -- Joiner виводиться з `blockStreamingChunk.breakPreference` +- Об’єднання чекає на **паузи бездіяльності** (`idleMs`) перед скиданням. +- Буфери обмежуються значенням `maxChars` і буде виконано скидання, якщо їх перевищено. +- `minChars` не дає надсилати дрібні фрагменти, доки не накопичиться достатньо тексту + (підсумкове скидання завжди надсилає решту тексту). +- Роздільник визначається з `blockStreamingChunk.breakPreference` (`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → пробіл). -- Для каналів доступні перевизначення через `*.blockStreamingCoalesce` (зокрема у конфігураціях для окремих облікових записів). +- Перевизначення для каналів доступні через `*.blockStreamingCoalesce` (зокрема в конфігураціях окремих облікових записів). - Типове значення coalesce `minChars` підвищується до 1500 для Signal/Slack/Discord, якщо не перевизначено. ## Людиноподібний темп між блоками -Коли block streaming увімкнено, ви можете додати **випадкову паузу** між -блоковими відповідями (після першого блока). Це робить багатобульбашкові відповіді +Коли потокове передавання блоків увімкнене, можна додати **випадкову паузу** між +блоковими відповідями (після першого блоку). Це робить відповіді з кількох бульбашок природнішими. -- Конфігурація: `agents.defaults.humanDelay` (можна перевизначити для окремого агента через `agents.list[].humanDelay`). -- Режими: `off` (типово), `natural` (800–2500 мс), `custom` (`minMs`/`maxMs`). +- Конфігурація: `agents.defaults.humanDelay` (перевизначення для агента через `agents.list[].humanDelay`). +- Режими: `off` (типово), `natural` (800–2500ms), `custom` (`minMs`/`maxMs`). - Застосовується лише до **блокових відповідей**, а не до фінальних відповідей чи підсумків інструментів. -## "Передавати chunk-и чи все одразу" +## «Передавати частинами чи все одразу» Це зіставляється так: -- **Передавати chunk-и:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (видавати під час генерації). Для каналів, окрім Telegram, також потрібно `*.blockStreaming: true`. -- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (одноразовий flush, можливо з кількома chunk, якщо текст дуже довгий). -- **Без block streaming:** `blockStreamingDefault: "off"` (лише фінальна відповідь). +- **Передавати частинами:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (передавання в міру надходження). Для каналів, крім Telegram, також потрібно `*.blockStreaming: true`. +- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (одноразове скидання, можливо кількома частинами, якщо відповідь дуже довга). +- **Без потокового передавання блоків:** `blockStreamingDefault: "off"` (лише фінальна відповідь). -**Примітка про канал:** Block streaming **вимкнено, якщо тільки** -`*.blockStreaming` явно не задано як `true`. Канали можуть вести live preview streaming +**Примітка щодо каналів:** Потокове передавання блоків **вимкнене, доки** +`*.blockStreaming` явно не встановлено в `true`. Канали можуть передавати живий попередній перегляд (`channels..streaming`) без блокових відповідей. -Нагадування про місце конфігурації: типові значення `blockStreaming*` розміщуються в +Нагадування про розташування конфігурації: типові параметри `blockStreaming*` знаходяться в `agents.defaults`, а не в корені конфігурації. -## Режими preview streaming +## Режими потокового передавання попереднього перегляду Канонічний ключ: `channels..streaming` Режими: -- `off`: вимкнути preview streaming. -- `partial`: одне preview, яке замінюється найновішим текстом. -- `block`: preview оновлюється chunk-ами/додаваннями. -- `progress`: preview прогресу/статусу під час генерації, фінальна відповідь після завершення. +- `off`: вимкнути потокове передавання попереднього перегляду. +- `partial`: один попередній перегляд, який замінюється найновішим текстом. +- `block`: оновлення попереднього перегляду поетапно, частинами/додаванням. +- `progress`: попередній перегляд прогресу/стану під час генерації, фінальна відповідь після завершення. ### Зіставлення каналів -| Канал | `off` | `partial` | `block` | `progress` | -| -------- | ----- | --------- | ------- | ----------------- | +| Канал | `off` | `partial` | `block` | `progress` | +| ------- | ----- | --------- | ------- | ----------------- | | Telegram | ✅ | ✅ | ✅ | зіставляється з `partial` | | Discord | ✅ | ✅ | ✅ | зіставляється з `partial` | | Slack | ✅ | ✅ | ✅ | ✅ | Лише для Slack: -- `channels.slack.nativeStreaming` перемикає нативні виклики API streaming Slack, коли `streaming=partial` (типово: `true`). +- `channels.slack.streaming.nativeTransport` перемикає виклики нативного API потокового передавання Slack, коли `channels.slack.streaming.mode="partial"` (типово: `true`). +- Нативне потокове передавання Slack і статус у потоці помічника Slack вимагають цільового потоку відповіді; DM верхнього рівня не показують такий попередній перегляд у стилі потоку. Міграція застарілих ключів: -- Telegram: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`. -- Discord: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`. -- Slack: `streamMode` автоматично мігрує до enum `streaming`; булевий `streaming` автоматично мігрує до `nativeStreaming`. +- Telegram: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`. +- Discord: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`. +- Slack: `streamMode` автоматично мігрує до `streaming.mode`; булеве `streaming` автоматично мігрує до `streaming.mode` плюс `streaming.nativeTransport`; застаріле `nativeStreaming` автоматично мігрує до `streaming.nativeTransport`. -### Поведінка runtime +### Поведінка під час виконання Telegram: -- Використовує `sendMessage` + `editMessageText` для оновлення preview у DM і групах/темах. -- Preview streaming пропускається, якщо block streaming Telegram явно увімкнено (щоб уникнути подвійного streaming). -- `/reasoning stream` може записувати міркування в preview. +- Використовує оновлення попереднього перегляду через `sendMessage` + `editMessageText` у DM та групах/темах. +- Потокове передавання попереднього перегляду пропускається, якщо для Telegram явно ввімкнено потокове передавання блоків (щоб уникнути подвійного потокового передавання). +- `/reasoning stream` може записувати міркування в попередній перегляд. Discord: -- Використовує надсилання + редагування preview message. -- Режим `block` використовує chunking чернетки (`draftChunk`). -- Preview streaming пропускається, якщо block streaming Discord явно увімкнено. +- Використовує надсилання + редагування повідомлень попереднього перегляду. +- Режим `block` використовує чернеткове розбиття на частини (`draftChunk`). +- Потокове передавання попереднього перегляду пропускається, якщо для Discord явно ввімкнено потокове передавання блоків. Slack: -- `partial` може використовувати нативний streaming Slack (`chat.startStream`/`append`/`stop`), коли доступно. -- `block` використовує preview чернетки у стилі append. -- `progress` використовує preview тексту статусу, а потім фінальну відповідь. +- `partial` може використовувати нативне потокове передавання Slack (`chat.startStream`/`append`/`stop`), коли воно доступне. +- `block` використовує попередні перегляди чернеток у стилі додавання. +- `progress` використовує текст попереднього перегляду стану, а потім фінальну відповідь. ## Пов’язане -- [Повідомлення](/concepts/messages) — життєвий цикл і доставка повідомлень -- [Повторні спроби](/concepts/retry) — поведінка повторних спроб у разі збою доставки -- [Канали](/channels) — підтримка streaming для окремих каналів +- [Повідомлення](/uk/concepts/messages) — життєвий цикл і доставка повідомлень +- [Повторна спроба](/uk/concepts/retry) — поведінка повторних спроб у разі помилки доставки +- [Канали](/uk/channels) — підтримка потокового передавання для кожного каналу diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md index d2c1e5c39..485936650 100644 --- a/docs/uk/gateway/configuration-reference.md +++ b/docs/uk/gateway/configuration-reference.md @@ -1,29 +1,43 @@ --- read_when: - - Вам потрібні точні семантики конфігурації або значення за замовчуванням на рівні полів + - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням - Ви перевіряєте блоки конфігурації каналів, моделей, шлюзу або інструментів -summary: Повний довідник для кожного ключа конфігурації OpenClaw, значень за замовчуванням і налаштувань каналів +summary: Довідник з конфігурації шлюзу для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем title: Довідник з конфігурації x-i18n: - generated_at: "2026-04-08T03:51:43Z" + generated_at: "2026-04-08T05:05:30Z" model: gpt-5.4 provider: openai - source_hash: a22899b8f43a7819a2e27fae1bddbe67b29b314bce5a9844fc276482bda9156c + source_hash: 2f9ab34fb56897a77cb038d95bea21e8530d8f0402b66d1ee97c73822a1e8fd4 source_path: gateway/configuration-reference.md workflow: 15 --- # Довідник з конфігурації -Кожне поле, доступне в `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration). +Основний довідник з конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration). -Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано. +Ця сторінка охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власний детальніший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/плагіну, або кожен глибокий параметр memory/QMD. + +Джерело істини в коді: + +- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, із доданими метаданими bundled/plugin/channel, коли вони доступні +- `config.schema.lookup` повертає один вузол схеми, обмежений шляхом, для інструментів деталізації +- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш базового стану документації конфігурації щодо поточної поверхні схеми + +Окремі поглиблені довідники: + +- [Довідник з конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming` +- [Slash Commands](/uk/tools/slash-commands) для поточного каталогу вбудованих + bundled команд +- сторінки відповідних каналів/плагінів для поверхонь команд, специфічних для каналів + +Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх пропущено. --- ## Канали -Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не вказано `enabled: false`). +Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не встановлено `enabled: false`). ### Доступ до DM і груп @@ -31,26 +45,26 @@ x-i18n: | Політика DM | Поведінка | | ------------------- | -------------------------------------------------------------- | -| `pairing` (типово) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити | -| `allowlist` | Лише відправники в `allowFrom` (або в сховищі дозволених після сполучення) | +| `pairing` (default) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити | +| `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) | | `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) | | `disabled` | Ігнорувати всі вхідні DM | -| Політика груп | Поведінка | -| --------------------- | ------------------------------------------------------ | -| `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist | -| `open` | Обійти allowlist груп (обмеження за згадками все ще діє) | -| `disabled` | Блокувати всі повідомлення груп/кімнат | +| Політика груп | Поведінка | +| --------------------- | ----------------------------------------------------- | +| `allowlist` (default) | Лише групи, що відповідають налаштованому allowlist | +| `open` | Обійти group allowlists (gating за згадками все ще застосовується) | +| `disabled` | Блокувати всі повідомлення груп/кімнат | -`channels.defaults.groupPolicy` встановлює значення за замовчуванням, коли `groupPolicy` провайдера не задано. -Коди сполучення спливають через 1 годину. Кількість запитів на очікуване DM-сполучення обмежена **3 на канал**. -Якщо блок провайдера повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску. +`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` постачальника не встановлено. +Коди pairing закінчуються через 1 годину. Очікувані запити на DM pairing обмежені **3 на канал**. +Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску. -### Перевизначення моделі для каналу +### Перевизначення моделей каналів -Використовуйте `channels.modelByChannel`, щоб прив’язати конкретні ідентифікатори каналів до моделі. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли сесія ще не має перевизначення моделі (наприклад, встановленого через `/model`). +Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Прив’язка каналу застосовується, коли сесія ще не має власного перевизначення моделі (наприклад, встановленого через `/model`). ```json5 { @@ -73,7 +87,7 @@ x-i18n: ### Значення за замовчуванням для каналів і heartbeat -Використовуйте `channels.defaults` для спільної поведінки політики груп і heartbeat у різних провайдерів: +Використовуйте `channels.defaults` для спільної поведінки group-policy і heartbeat у різних постачальників: ```json5 { @@ -91,15 +105,15 @@ x-i18n: } ``` -- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні провайдера не задано. -- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (типово, включати весь процитований/потоковий/історичний контекст), `allowlist` (включати контекст лише від дозволених відправників), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення на рівні каналу: `channels..contextVisibility`. -- `channels.defaults.heartbeat.showOk`: включати статуси справних каналів у вивід heartbeat. -- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід heartbeat. -- `channels.defaults.heartbeat.useIndicator`: відображати компактний heartbeat у стилі індикатора. +- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні постачальника не встановлено. +- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (default, включати весь контекст цитат/гілок/історії), `allowlist` (включати контекст лише від відправників з allowlist), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для каналу: `channels..contextVisibility`. +- `channels.defaults.heartbeat.showOk`: включати здорові статуси каналів у вивід heartbeat. +- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси каналів у вивід heartbeat. +- `channels.defaults.heartbeat.useIndicator`: показувати компактний heartbeat у стилі індикатора. ### WhatsApp -WhatsApp працює через вебканал шлюзу (Baileys Web). Він запускається автоматично, коли існує прив’язана сесія. +WhatsApp працює через web-канал шлюзу (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія. ```json5 { @@ -132,7 +146,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` - + ```json5 { @@ -150,10 +164,10 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- Вихідні команди за замовчуванням використовують акаунт `default`, якщо він є; інакше — перший налаштований ідентифікатор акаунта (відсортовано). -- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. -- Застарілий одноакаунтний auth dir Baileys мігрується `openclaw doctor` у `whatsapp/default`. -- Перевизначення на рівні акаунта: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Вихідні команди за замовчуванням використовують обліковий запис `default`, якщо він є; інакше — перший налаштований ID облікового запису (відсортований). +- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується `openclaw doctor` у `whatsapp/default`. +- Перевизначення для облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -171,24 +185,24 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві "*": { requireMention: true }, "-1001234567890": { allowFrom: ["@admin"], - systemPrompt: "Відповідай стисло.", + systemPrompt: "Keep answers brief.", topics: { "99": { requireMention: false, skills: ["search"], - systemPrompt: "Дотримуйся теми.", + systemPrompt: "Stay on topic.", }, }, }, }, customCommands: [ { command: "backup", description: "Git backup" }, - { command: "generate", description: "Створити зображення" }, + { command: "generate", description: "Create an image" }, ], historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (типово: off; вмикайте явно, щоб уникнути обмежень частоти редагування попереднього перегляду) + streaming: "partial", // off | partial | block | progress (default: off; explicitly opt in to avoid preview-edit rate limits) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -211,12 +225,12 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для акаунта за замовчуванням. -- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. -- У багатоакаунтних конфігураціях (2+ ідентифікаторів акаунтів) установіть явний акаунт за замовчуванням (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути маршрутизації через резервний варіант; `openclaw doctor` попереджає, якщо цього бракує або значення невалідне. -- `configWrites: false` блокує ініційовані Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`). +- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; симлінки відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням. +- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- У багатооблікових конфігураціях (2+ ID облікових записів) установіть явний обліковий запис за замовчуванням (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо цього бракує або значення некоректне. +- `configWrites: false` блокує ініційовані Telegram записи в конфігурацію (міграції ID супергруп, `/config set|unset`). - Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні ACP-прив’язки для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). -- Попередній перегляд потоків Telegram використовує `sendMessage` + `editMessageText` (працює у приватних і групових чатах). +- Попередній перегляд потоків Telegram використовує `sendMessage` + `editMessageText` (працює в прямих і групових чатах). - Політика повторних спроб: див. [Політика повторних спроб](/uk/concepts/retry). ### Discord @@ -264,7 +278,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві requireMention: true, users: ["987654321098765432"], skills: ["docs"], - systemPrompt: "Лише короткі відповіді.", + systemPrompt: "Short answers only.", }, }, }, @@ -272,7 +286,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (progress відображається як partial у Discord) + streaming: "off", // off | partial | block | progress (progress maps to partial on Discord) maxLinesPerMessage: 17, ui: { components: { @@ -283,7 +297,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // opt-in для `sessions_spawn({ thread: true })` + spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -319,36 +333,36 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для акаунта за замовчуванням. -- Прямі вихідні виклики, які надають явний `token` Discord, використовують саме цей токен для виклику; налаштування повторних спроб/політик акаунта все одно беруться з вибраного акаунта в активному знімку runtime. -- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. -- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; голі числові ID відхиляються. -- Slug guild — у нижньому регістрі, пробіли замінено на `-`; ключі каналів використовують slug-ім’я (без `#`). Надавайте перевагу ID guild. -- Повідомлення, написані ботами, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). -- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення для каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (окрім @everyone/@here). -- `maxLinesPerMessage` (типово 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів. -- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до потоків Discord: - - `enabled`: перевизначення Discord для можливостей сесій, прив’язаних до потоку (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, а також прив’язана доставка/маршрутизація) - - `idleHours`: перевизначення Discord для автозняття фокуса через неактивність у годинах (`0` вимикає) +- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням. +- Прямі вихідні виклики, які передають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime. +- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- Використовуйте `user:` (DM) або `channel:` (канал guild) для цілей доставки; голі числові ID відхиляються. +- Slug-и guild — у нижньому регістрі з пробілами, заміненими на `-`; ключі каналів використовують slugged name (без `#`). Надавайте перевагу ID guild. +- Повідомлення, створені ботом, ігноруються за замовчуванням. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). +- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here). +- `maxLinesPerMessage` (default 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів. +- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до Discord thread: + - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, і прив’язана доставка/маршрутизація) + - `idleHours`: перевизначення Discord для автоматичного unfocus через неактивність у годинах (`0` вимикає) - `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає) - - `spawnSubagentSessions`: opt-in перемикач для автоматичного створення/прив’язки потоків у `sessions_spawn({ thread: true })` -- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні ACP-прив’язки для каналів і потоків (використовуйте id каналу/потоку в `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). -- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів Discord components v2. -- `channels.discord.voice` вмикає розмови в голосових каналах Discord та необов’язкові перевизначення auto-join + TTS. -- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються в параметри DAVE `@discordjs/voice` (`true` і `24` за замовчуванням). -- OpenClaw також намагається відновити голосовий прийом, виходячи з голосової сесії та повторно входячи в неї після повторних помилок дешифрування. -- `channels.discord.streaming` — канонічний ключ режиму потокової передачі. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично. -- `channels.discord.autoPresence` відображає доступність runtime у статус бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. -- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінюваними іменами/тегами (режим сумісності break-glass). -- `channels.discord.execApprovals`: доставка схвалень exec, нативна для Discord, та авторизація затверджувачів. - - `enabled`: `true`, `false` або `"auto"` (типово). В auto-режимі схвалення exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`. - - `approvers`: ID користувачів Discord, яким дозволено схвалювати exec-запити. Якщо не задано, резервно використовується `commands.ownerAllowFrom`. - - `agentFilter`: необов’язковий allowlist ID агентів. Якщо опустити, схвалення передаватимуться для всіх агентів. - - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex). - - `target`: куди надсилати запити на схвалення. `"dm"` (типово) надсилає в DM затверджувачам, `"channel"` — у вихідний канал, `"both"` — у обидва місця. Коли target включає `"channel"`, кнопки можуть використовувати лише визначені затверджувачі. - - `cleanupAfterResolve`: якщо `true`, видаляє DM-схвалення після схвалення, відхилення або тайм-ауту. + - `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив’язки thread через `sessions_spawn({ thread: true })` +- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні ACP-прив’язки для каналів і threads (використовуйте id каналу/thread у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- `channels.discord.ui.components.accentColor` задає колір акценту для контейнерів компонентів Discord v2. +- `channels.discord.voice` вмикає розмови в голосових каналах Discord та необов’язкові auto-join + перевизначення TTS. +- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються напряму в опції DAVE для `@discordjs/voice` (`true` і `24` за замовчуванням). +- OpenClaw додатково намагається відновити voice receive, виходячи й повторно приєднуючись до голосової сесії після повторних помилок дешифрування. +- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично. +- `channels.discord.autoPresence` зіставляє доступність runtime із присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. +- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінними іменами/тегами (режим сумісності break-glass). +- `channels.discord.execApprovals`: нативна доставка схвалень exec для Discord та авторизація схвалювачів. + - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо не задано, використовується `commands.ownerAllowFrom`. + - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропущено, схвалення пересилаються для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесій (substring або regex). + - `target`: куди надсилати запити на схвалення. `"dm"` (default) надсилає у DM схвалювачам, `"channel"` — у вихідний канал, `"both"` — в обидва місця. Коли target включає `"channel"`, кнопками можуть користуватися лише визначені схвалювачі. + - `cleanupAfterResolve`: якщо `true`, видаляє DM зі схваленням після схвалення, відхилення або тайм-ауту. -**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень). +**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, default), `all` (усі повідомлення), `allowlist` (від `guilds..users` для всіх повідомлень). ### Google Chat @@ -379,11 +393,11 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- JSON service account: вбудовано (`serviceAccount`) або через файл (`serviceAccountFile`). -- Також підтримується SecretRef для service account (`serviceAccountRef`). -- Резервні змінні середовища: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. -- Використовуйте `spaces/` або `users/` як цілі доставки. -- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінюваним email principal (режим сумісності break-glass). +- JSON облікового запису служби: inline (`serviceAccount`) або через файл (`serviceAccountFile`). +- Також підтримується SecretRef для облікового запису служби (`serviceAccountRef`). +- Резервні env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- Використовуйте `spaces/` або `users/` для цілей доставки. +- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінним email principal (режим сумісності break-glass). ### Slack @@ -405,7 +419,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві allowBots: false, users: ["U123"], skills: ["docs"], - systemPrompt: "Лише короткі відповіді.", + systemPrompt: "Short answers only.", }, }, historyLimit: 50, @@ -433,8 +447,10 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві typingReaction: "hourglass_flowing_sand", textChunkLimit: 4000, chunkMode: "length", - streaming: "partial", // off | partial | block | progress (режим попереднього перегляду) - nativeStreaming: true, // використовувати нативний API потокової передачі Slack, коли streaming=partial + streaming: { + mode: "partial", // off | partial | block | progress + nativeTransport: true, // use Slack native streaming API when mode=partial + }, mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" @@ -448,38 +464,39 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- **Socket mode** вимагає і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервні змінні середовища для акаунта за замовчуванням). -- **HTTP mode** вимагає `botToken` плюс `signingSecret` (на корені або для кожного акаунта). -- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні +- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервне env для облікового запису за замовчуванням). +- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для кожного облікового запису). +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті рядки або об’єкти SecretRef. -- Знімки акаунтів Slack показують поля джерела/статусу для кожного облікового - даних, такі як `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode — - `signingSecretStatus`. `configured_unavailable` означає, що акаунт - налаштований через SecretRef, але поточний шлях команди/runtime не зміг +- Знімки облікових записів Slack показують поля джерела/статусу облікових даних на рівні облікового запису, як-от + `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, у режимі HTTP, + `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис + налаштовано через SecretRef, але поточний шлях команди/runtime не зміг визначити значення секрету. -- `configWrites: false` блокує записи конфігурації, ініційовані Slack. -- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. -- `channels.slack.streaming` — канонічний ключ режиму потокової передачі. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично. -- Використовуйте `user:` (DM) або `channel:` як цілі доставки. +- `configWrites: false` блокує ініційовані Slack записи в конфігурацію. +- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- `channels.slack.streaming.mode` — канонічний ключ режиму потоку для Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично. +- Використовуйте `user:` (DM) або `channel:` для цілей доставки. -**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (з `reactionAllowlist`). -**Ізоляція сесій потоків:** `thread.historyScope` є або для кожного потоку окремо (типово), або спільним для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові потоки. +**Ізоляція сесій у thread:** `thread.historyScope` — для кожного thread окремо (default) або спільно для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові threads. -- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: доставка схвалень exec, нативна для Slack, та авторизація затверджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). +- Нативний стримінг Slack разом зі статусом thread у стилі асистента Slack "is typing..." вимагають ціль відповіді у thread. Верхньорівневі DM за замовчуванням залишаються поза thread, тож вони використовують `typingReaction` або звичайну доставку замість попереднього перегляду в стилі thread. +- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack під час виконання відповіді, а після завершення видаляє її. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`. +- `channels.slack.execApprovals`: нативна доставка схвалень exec для Slack та авторизація схвалювачів. Та сама схема, що і в Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). -| Група дій | Типово | Примітки | -| ------------ | ------- | ------------------------ | -| reactions | увімкнено | Реагування + список реакцій | -| messages | увімкнено | Читання/надсилання/редагування/видалення | -| pins | увімкнено | Закріпити/відкріпити/перелік | -| memberInfo | увімкнено | Інформація про учасника | -| emojiList | увімкнено | Список власних emoji | +| Група дій | За замовчуванням | Примітки | +| ------------ | ---------------- | ------------------------ | +| reactions | увімкнено | Реагувати + перелік реакцій | +| messages | увімкнено | Читати/надсилати/редагувати/видаляти | +| pins | увімкнено | Закріпити/відкріпити/перелік | +| memberInfo | увімкнено | Інформація про учасника | +| emojiList | увімкнено | Список кастомних емодзі | ### Mattermost -Mattermost постачається як plugin: `openclaw plugins install @openclaw/mattermost`. +Mattermost постачається як плагін: `openclaw plugins install @openclaw/mattermost`. ```json5 { @@ -499,7 +516,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // Необов’язковий явний URL для reverse-proxy/public розгортань + // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -509,23 +526,23 @@ Mattermost постачається як plugin: `openclaw plugins install @open } ``` -Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера). +Режими чату: `oncall` (відповідати на @-mention, default), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з тригерного префікса). Коли нативні команди Mattermost увімкнено: - `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повним URL. -- `commands.callbackUrl` має вказувати на endpoint шлюзу OpenClaw і бути доступним із сервера Mattermost. -- Нативні зворотні виклики slash-команд автентифікуються за допомогою токенів - для кожної команди, які Mattermost повертає під час реєстрації slash-команд. Якщо реєстрація не вдається або жодна - команда не активована, OpenClaw відхиляє callback із +- `commands.callbackUrl` має вказувати на endpoint шлюзу OpenClaw і бути досяжним із сервера Mattermost. +- Нативні slash callback-и автентифікуються за допомогою токенів для кожної команди, які Mattermost повертає + під час реєстрації slash command. Якщо реєстрація не вдається або жодну + команду не активовано, OpenClaw відхиляє callback-и з `Unauthorized: invalid command token.` -- Для приватних/tailnet/internal callback-хостів Mattermost може вимагати, - щоб `ServiceSettings.AllowedUntrustedInternalConnections` включав callback host/domain. +- Для приватних/tailnet/internal callback host-ів Mattermost може вимагати, + щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain. Використовуйте значення host/domain, а не повні URL. -- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Mattermost. +- `channels.mattermost.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані Mattermost. - `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах. -- `channels.mattermost.groups..requireMention`: перевизначення обмеження за згадками для конкретного каналу (`"*"` для значення за замовчуванням). -- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. +- `channels.mattermost.groups..requireMention`: перевизначення gating за згадкою для конкретного каналу (`"*"` для значення за замовчуванням). +- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. ### Signal @@ -534,7 +551,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open channels: { signal: { enabled: true, - account: "+15555550123", // необов’язкова прив’язка акаунта + account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -546,15 +563,15 @@ Mattermost постачається як plugin: `openclaw plugins install @open } ``` -**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (з `reactionAllowlist`). -- `channels.signal.account`: прив’язати запуск каналу до конкретної ідентичності акаунта Signal. -- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Signal. -- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. +- `channels.signal.account`: закріпити запуск каналу за конкретною ідентичністю облікового запису Signal. +- `channels.signal.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані Signal. +- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. ### BlueBubbles -BlueBubbles — рекомендований шлях для iMessage (на основі plugin, налаштовується в `channels.bluebubbles`). +BlueBubbles — рекомендований шлях для iMessage (на базі плагіна, налаштовується в `channels.bluebubbles`). ```json5 { @@ -562,21 +579,21 @@ BlueBubbles — рекомендований шлях для iMessage (на ос bluebubbles: { enabled: true, dmPolicy: "pairing", - // serverUrl, password, webhookPath, керування групами та розширені дії: - // див. /channels/bluebubbles + // serverUrl, password, webhookPath, group controls, and advanced actions: + // see /channels/bluebubbles }, }, } ``` -- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. -- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте BlueBubbles handle або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Основні шляхи ключів, охоплені тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. +- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте handle або target string BlueBubbles (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). - Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles). ### iMessage -OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Не потрібні ні демон, ні порт. +OpenClaw запускає `imsg rpc` (JSON-RPC поверх stdio). Не потрібні ані daemon, ані порт. ```json5 { @@ -600,15 +617,15 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Не потр } ``` -- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. +- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. - Потрібен Full Disk Access до БД Messages. -- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів. -- `cliPath` може вказувати на SSH wrapper; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. -- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`). -- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ relay-хоста вже існує в `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані iMessage. -- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб перелічити чати. +- `cliPath` може вказувати на SSH wrapper; встановіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. +- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (default: `/Users/*/Library/Messages/Attachments`). +- SCP використовує сувору перевірку host key, тому переконайтеся, що ключ relay host уже існує в `~/.ssh/known_hosts`. +- `channels.imessage.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані iMessage. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явний target чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). @@ -621,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix працює через extension і налаштовується в `channels.matrix`. +Matrix працює через розширення і налаштовується в `channels.matrix`. ```json5 { @@ -651,25 +668,25 @@ Matrix працює через extension і налаштовується в `cha } ``` -- Автентифікація токеном використовує `accessToken`; автентифікація паролем — `userId` + `password`. -- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані акаунти можуть перевизначати його через `channels.matrix.accounts..proxy`. -- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/internal homeserver. `proxy` і цей opt-in для мережі — незалежні засоби керування. -- `channels.matrix.defaultAccount` вибирає пріоритетний акаунт у багатоакаунтних конфігураціях. -- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не встановите `autoJoin: "allowlist"` із `autoJoinAllowlist` або `autoJoin: "always"`. -- `channels.matrix.execApprovals`: доставка схвалень exec, нативна для Matrix, та авторизація затверджувачів. - - `enabled`: `true`, `false` або `"auto"` (типово). В auto-режимі схвалення exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`. - - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати exec-запити. - - `agentFilter`: необов’язковий allowlist ID агентів. Якщо опустити, схвалення передаватимуться для всіх агентів. - - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex). - - `target`: куди надсилати запити на схвалення. `"dm"` (типово), `"channel"` (вихідна кімната) або `"both"`. - - Перевизначення на рівні акаунта: `channels.matrix.accounts..execApprovals`. -- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сесії: `per-user` (типово) об’єднує за маршрутизованим peer, тоді як `per-room` ізолює кожну DM-кімнату. -- Перевірки статусу Matrix і пошук у live directory використовують ту саму політику proxy, що й трафік runtime. -- Повну конфігурацію Matrix, правила націлювання та приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). +- Токен-автентифікація використовує `accessToken`; парольна автентифікація використовує `userId` + `password`. +- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані облікові записи можуть перевизначати його через `channels.matrix.accounts..proxy`. +- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/internal homeserver-и. `proxy` і ця opt-in опція мережі — незалежні елементи керування. +- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у багатооблікових конфігураціях. +- `channels.matrix.autoJoin` за замовчуванням має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не встановите `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`. +- `channels.matrix.execApprovals`: нативна доставка схвалень exec для Matrix та авторизація схвалювачів. + - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати запити exec. + - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропущено, схвалення пересилаються для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесій (substring або regex). + - `target`: куди надсилати запити на схвалення. `"dm"` (default), `"channel"` (вихідна кімната) або `"both"`. + - Перевизначення для облікового запису: `channels.matrix.accounts..execApprovals`. +- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сесії: `per-user` (default) спільний за маршрутизованим peer, тоді як `per-room` ізолює кожну DM room. +- Статусні probe-и Matrix і пошук у live directory використовують ту саму політику proxy, що й runtime traffic. +- Повну конфігурацію Matrix, правила націлювання і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). ### Microsoft Teams -Microsoft Teams працює через extension і налаштовується в `channels.msteams`. +Microsoft Teams працює через розширення і налаштовується в `channels.msteams`. ```json5 { @@ -677,19 +694,19 @@ Microsoft Teams працює через extension і налаштовуєтьс msteams: { enabled: true, configWrites: true, - // appId, appPassword, tenantId, webhook, політики команд/каналів: - // див. /channels/msteams + // appId, appPassword, tenantId, webhook, team/channel policies: + // see /channels/msteams }, }, } ``` -- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`. -- Повну конфігурацію Teams (облікові дані, webhook, політики DM/груп, перевизначення для команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams). +- Основні шляхи ключів, охоплені тут: `channels.msteams`, `channels.msteams.configWrites`. +- Повну конфігурацію Teams (облікові дані, webhook, DM/group policy, перевизначення для team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams). ### IRC -IRC працює через extension і налаштовується в `channels.irc`. +IRC працює через розширення і налаштовується в `channels.irc`. ```json5 { @@ -710,13 +727,13 @@ IRC працює через extension і налаштовується в `channe } ``` -- Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта. -- Повну конфігурацію IRC-каналу (host/port/TLS/channels/allowlists/обмеження за згадками) задокументовано в [IRC](/uk/channels/irc). +- Основні шляхи ключів, охоплені тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. +- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/mention gating) задокументовано в [IRC](/uk/channels/irc). -### Багатоакаунтність (усі канали) +### Багатообліковість (усі канали) -Запускайте кілька акаунтів на канал (кожен зі своїм `accountId`): +Запускайте кілька облікових записів для одного каналу (кожен зі своїм `accountId`): ```json5 { @@ -724,11 +741,11 @@ IRC працює через extension і налаштовується в `channe telegram: { accounts: { default: { - name: "Основний бот", + name: "Primary bot", botToken: "123456:ABC...", }, alerts: { - name: "Бот сповіщень", + name: "Alerts bot", botToken: "987654:XYZ...", }, }, @@ -737,28 +754,28 @@ IRC працює через extension і налаштовується в `channe } ``` -- `default` використовується, коли `accountId` не вказано (CLI + маршрутизація). -- Токени зі змінних середовища застосовуються лише до акаунта **default**. -- Базові налаштування каналу застосовуються до всіх акаунтів, якщо їх не перевизначено на рівні акаунта. -- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен акаунт до іншого агента. -- Якщо ви додаєте не-default акаунт через `openclaw channels add` (або онбординг каналу), залишаючись при цьому на одноакаунтній конфігурації каналу верхнього рівня, OpenClaw спершу переносить одноакаунтні значення верхнього рівня, прив’язані до акаунта, у мапу акаунтів каналу, щоб початковий акаунт продовжував працювати. Для більшості каналів це переміщення відбувається до `channels..accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль. -- Наявні прив’язки лише до каналу (без `accountId`) і далі відповідатимуть акаунту за замовчуванням; прив’язки з областю акаунта залишаються необов’язковими. -- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи одноакаунтні значення верхнього рівня, прив’язані до акаунта, у вибраний для цього каналу підвищений акаунт. Більшість каналів використовують `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль. +- `default` використовується, коли `accountId` пропущено (CLI + routing). +- Env-токени застосовуються лише до облікового запису **default**. +- Базові налаштування каналу застосовуються до всіх облікових записів, якщо не перевизначено для конкретного облікового запису. +- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента. +- Якщо ви додаєте не-default обліковий запис через `openclaw channels add` (або onboarding каналу), маючи ще однооблікову конфігурацію каналу верхнього рівня, OpenClaw спочатку підвищує account-scoped значення верхнього рівня для одного облікового запису в map облікових записів каналу, щоб початковий обліковий запис продовжував працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/default ціль. +- Існуючі прив’язки лише до каналу (без `accountId`) і далі збігаються з default account; прив’язки на рівні облікового запису залишаються необов’язковими. +- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи account-scoped значення верхнього рівня для одного облікового запису в підвищений обліковий запис, обраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль. -### Інші канали extension +### Інші канали-розширення -Багато каналів extension налаштовуються як `channels.` і задокументовані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). +Багато каналів-розширень налаштовуються як `channels.` і задокументовані на власних сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). Див. повний індекс каналів: [Канали](/uk/channels). -### Обмеження за згадками в групових чатах +### Gating за згадкою в груповому чаті -Для групових повідомлень типово **потрібна згадка** (метадані згадки або безпечні шаблони regex). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage. +Повідомлення груп за замовчуванням **вимагають згадки** (метадані згадки або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage. **Типи згадок:** -- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp. -- **Текстові шаблони**: безпечні шаблони regex у `agents.list[].groupChat.mentionPatterns`. Невалідні шаблони та небезпечне вкладене повторення ігноруються. -- Обмеження за згадками застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон). +- **Metadata mentions**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp. +- **Text patterns**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Некоректні шаблони і небезпечне вкладене повторення ігноруються. +- Gating за згадкою застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон). ```json5 { @@ -771,7 +788,7 @@ IRC працює через extension і налаштовується в `channe } ``` -`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для кожного акаунта). Установіть `0`, щоб вимкнути. +`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для кожного облікового запису). Встановіть `0`, щоб вимкнути. #### Ліміти історії DM @@ -788,13 +805,13 @@ IRC працює через extension і налаштовується в `channe } ``` -Розв’язання: перевизначення для конкретного DM → значення за замовчуванням провайдера → без ліміту (зберігається все). +Порядок розв’язання: перевизначення для конкретного DM → значення постачальника за замовчуванням → без обмеження (зберігається все). Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. #### Режим self-chat -Додайте свій власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, реагує лише на текстові шаблони): +Додайте власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові шаблони): ```json5 { @@ -815,18 +832,24 @@ IRC працює через extension і налаштовується в `channe } ``` -### Команди (обробка команд чату) +### Команди (обробка команд у чаті) ```json5 { commands: { - native: "auto", // реєструвати нативні команди, коли це підтримується - text: true, // розбирати /commands у повідомленнях чату - bash: false, // дозволити ! (псевдонім: /bash) + native: "auto", // register native commands when supported + nativeSkills: "auto", // register native skill commands when supported + text: true, // parse /commands in chat messages + bash: false, // allow ! (alias: /bash) bashForegroundMs: 2000, - config: false, // дозволити /config - debug: false, // дозволити /debug - restart: false, // дозволити /restart + інструмент перезапуску gateway + config: false, // allow /config + mcp: false, // allow /mcp + plugins: false, // allow /plugins + debug: false, // allow /debug + restart: true, // allow /restart + gateway restart tool + ownerAllowFrom: ["discord:123456789012345678"], + ownerDisplay: "raw", // raw | hash + ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], @@ -838,16 +861,32 @@ IRC працює через extension і налаштовується в `channe +- Цей блок налаштовує поверхні команд. Для поточного каталогу вбудованих + bundled команд див. [Slash Commands](/uk/tools/slash-commands). +- Ця сторінка — **довідник за ключами конфігурації**, а не повний каталог команд. Команди, що належать каналу/плагіну, такі як QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на їхніх сторінках каналів/плагінів і в [Slash Commands](/uk/tools/slash-commands). - Текстові команди мають бути **окремими** повідомленнями з початковим `/`. - `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим. -- Перевизначення для кожного каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди. -- `channels.telegram.customCommands` додає додаткові записи до меню бота Telegram. -- `bash: true` вмикає `! ` для shell хоста. Потрібні `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`. -- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; доступний лише для читання `/config show` і далі доступний звичайним операторським клієнтам із правом запису. -- `channels..configWrites` керує мутаціями конфігурації для кожного каналу (типово: true). -- Для багатоакаунтних каналів `channels..accounts..configWrites` також керує записами, націленими на цей акаунт (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`). -- `allowFrom` задається для кожного провайдера. Якщо його встановлено, це **єдине** джерело авторизації (allowlist/сполучення каналу та `useAccessGroups` ігноруються). -- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено. +- `nativeSkills: "auto"` вмикає нативні skill-команди для Discord/Telegram, залишає Slack вимкненим. +- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди. +- Перевизначайте реєстрацію нативних skill-команд для каналу через `channels..commands.nativeSkills`. +- `channels.telegram.customCommands` додає додаткові записи в меню бота Telegram. +- `bash: true` вмикає `! ` для host shell. Потрібні `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`. +- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів gateway `chat.send` постійні записи `/config set|unset` також вимагають `operator.admin`; доступний лише для читання `/config show` залишається доступним звичайним клієнтам з write scope. +- `mcp: true` вмикає `/mcp` для конфігурації MCP server, керованої OpenClaw, у `mcp.servers`. +- `plugins: true` вмикає `/plugins` для виявлення плагінів, встановлення та керування увімкненням/вимкненням. +- `channels..configWrites` контролює мутації конфігурації для кожного каналу (default: true). +- Для багатооблікових каналів `channels..accounts..configWrites` також контролює записи, що націлені на цей обліковий запис (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`). +- `restart: false` вимикає `/restart` і дії інструмента перезапуску шлюзу. За замовчуванням: `true`. +- `ownerAllowFrom` — явний owner allowlist для команд/інструментів лише для власника. Він окремий від `allowFrom`. +- `ownerDisplay: "hash"` хешує owner id у system prompt. Встановіть `ownerDisplaySecret`, щоб керувати хешуванням. +- `allowFrom` — для кожного постачальника. Якщо встановлено, це **єдине** джерело авторизації (channel allowlists/pairing і `useAccessGroups` ігноруються). +- `useAccessGroups: false` дозволяє командам обходити політики access group, коли `allowFrom` не встановлено. +- Карта документації команд: + - вбудований + bundled каталог: [Slash Commands](/uk/tools/slash-commands) + - поверхні команд, специфічні для каналів: [Канали](/uk/channels) + - команди QQ Bot: [QQ Bot](/uk/channels/qqbot) + - команди pairing: [Pairing](/uk/channels/pairing) + - команда картки LINE: [LINE](/uk/channels/line) + - memory dreaming: [Dreaming](/uk/concepts/dreaming) @@ -857,7 +896,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.workspace` -Типово: `~/.openclaw/workspace`. +За замовчуванням: `~/.openclaw/workspace`. ```json5 { @@ -867,7 +906,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.repoRoot` -Необов’язковий корінь репозиторію, що показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись вгору від workspace. +Необов’язковий корінь репозиторію, що показується в рядку Runtime системного запиту. Якщо не встановлено, OpenClaw визначає його автоматично, піднімаючись вгору від workspace. ```json5 { @@ -887,17 +926,17 @@ IRC працює через extension і налаштовується в `channe list: [ { id: "writer" }, // успадковує github, weather { id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням - { id: "locked-down", skills: [] }, // без Skills + { id: "locked-down", skills: [] }, // без skills ], }, } ``` -- Опустіть `agents.defaults.skills`, щоб типово Skills не обмежувалися. -- Опустіть `agents.list[].skills`, щоб успадкувати значення за замовчуванням. -- Установіть `agents.list[].skills: []`, щоб не використовувати жодних Skills. -- Непорожній список `agents.list[].skills` є фінальним набором для цього агента; - він не зливається зі значеннями за замовчуванням. +- Пропустіть `agents.defaults.skills`, щоб за замовчуванням не обмежувати Skills. +- Пропустіть `agents.list[].skills`, щоб успадкувати значення за замовчуванням. +- Встановіть `agents.list[].skills: []`, щоб не мати skills. +- Непорожній список `agents.list[].skills` є кінцевим набором для цього агента; він + не об’єднується зі значеннями за замовчуванням. ### `agents.defaults.skipBootstrap` @@ -911,9 +950,9 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.contextInjection` -Керує тим, коли файли bootstrap workspace вбудовуються в системний prompt. Типово: `"always"`. +Керує тим, коли bootstrap-файли workspace вбудовуються в system prompt. За замовчуванням: `"always"`. -- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Запуски heartbeat і повторні спроби після ущільнення все одно перебудовують контекст. +- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Виконання heartbeat і повторні спроби після ущільнення все одно перебудовують контекст. ```json5 { @@ -923,7 +962,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.bootstrapMaxChars` -Максимальна кількість символів на файл bootstrap workspace до обрізання. Типово: `20000`. +Максимальна кількість символів на файл bootstrap workspace перед обрізанням. За замовчуванням: `20000`. ```json5 { @@ -933,7 +972,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.bootstrapTotalMaxChars` -Максимальна загальна кількість символів, що вбудовуються з усіх файлів bootstrap workspace. Типово: `150000`. +Максимальна загальна кількість символів, що вбудовуються з усіх файлів bootstrap workspace. За замовчуванням: `150000`. ```json5 { @@ -943,12 +982,12 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.bootstrapPromptTruncationWarning` -Керує видимим агенту текстом попередження, коли bootstrap-контекст обрізається. -Типово: `"once"`. +Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізано. +За замовчуванням: `"once"`. -- `"off"`: ніколи не вбудовувати текст попередження в системний prompt. +- `"off"`: ніколи не вбудовувати текст попередження в system prompt. - `"once"`: вбудовувати попередження один раз для кожного унікального підпису обрізання (рекомендовано). -- `"always"`: вбудовувати попередження під час кожного запуску, коли є обрізання. +- `"always"`: вбудовувати попередження при кожному запуску, якщо обрізання існує. ```json5 { @@ -958,11 +997,11 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.imageMaxDimensionPx` -Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень транскрипту/інструментів перед викликами провайдера. -Типово: `1200`. +Максимальний розмір у пікселях для найдовшого боку зображення в блоках зображень transcript/tool перед викликами постачальника. +За замовчуванням: `1200`. -Менші значення зазвичай зменшують використання vision-токенів і розмір корисного навантаження запиту для сценаріїв із великою кількістю скриншотів. -Більші значення зберігають більше візуальних деталей. +Нижчі значення зазвичай зменшують використання vision-token і розмір payload запиту для запусків із великою кількістю скриншотів. +Вищі значення зберігають більше візуальних деталей. ```json5 { @@ -972,7 +1011,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.userTimezone` -Часовий пояс для контексту системного prompt (не для часових міток повідомлень). Якщо не вказано, використовується часовий пояс хоста. +Часовий пояс для контексту system prompt (не для позначок часу повідомлень). Якщо не встановлено, використовується часовий пояс хоста. ```json5 { @@ -982,7 +1021,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.timeFormat` -Формат часу в системному prompt. Типово: `auto` (налаштування ОС). +Формат часу в system prompt. За замовчуванням: `auto` (налаштування ОС). ```json5 { @@ -1020,7 +1059,7 @@ IRC працює через extension і налаштовується в `channe primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // глобальні параметри провайдера за замовчуванням + params: { cacheRetention: "long" }, // global default provider params pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", @@ -1036,44 +1075,44 @@ IRC працює через extension і налаштовується в `channe ``` - `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Рядкова форма встановлює лише основну модель. - - Об’єктна форма встановлює основну модель плюс впорядковані резервні моделі. + - Рядкова форма задає лише основну модель. + - Об’єктна форма задає основну модель плюс упорядковані failover-моделі. - `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується в шляху інструмента `image` як конфігурація vision-моделі. - - Також використовується як резервна маршрутизація, коли вибрана/типова модель не може приймати зображення. + - Використовується шляхом інструмента `image` як конфігурація vision model. + - Також використовується як fallback routing, коли вибрана/default модель не може приймати вхідні зображення. - `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, яка генерує зображення. + - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, що генерує зображення. - Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images. - - Якщо ви прямо вибираєте provider/model, також налаштуйте відповідну автентифікацію провайдера/API key (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). - - Якщо не задано, `image_generate` усе ще може вивести типове значення провайдера на основі автентифікації. Спочатку він пробує поточного провайдера за замовчуванням, потім — інші зареєстровані провайдери генерації зображень у порядку provider-id. + - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). + - Якщо пропущено, `image_generate` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації зображень у порядку provider-id. - `musicGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується спільною можливістю генерації музики та вбудованим інструментом `music_generate`. + - Використовується спільною можливістю генерації музики і вбудованим інструментом `music_generate`. - Типові значення: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` або `minimax/music-2.5+`. - - Якщо не задано, `music_generate` усе ще може вивести типове значення провайдера на основі автентифікації. Спочатку він пробує поточного провайдера за замовчуванням, потім — інші зареєстровані провайдери генерації музики у порядку provider-id. - - Якщо ви прямо вибираєте provider/model, також налаштуйте відповідну автентифікацію провайдера/API key. + - Якщо пропущено, `music_generate` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації музики у порядку provider-id. + - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key. - `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`. + - Використовується спільною можливістю генерації відео і вбудованим інструментом `video_generate`. - Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`. - - Якщо не задано, `video_generate` усе ще може вивести типове значення провайдера на основі автентифікації. Спочатку він пробує поточного провайдера за замовчуванням, потім — інші зареєстровані провайдери генерації відео у порядку provider-id. - - Якщо ви прямо вибираєте provider/model, також налаштуйте відповідну автентифікацію провайдера/API key. - - Пакетний провайдер генерації відео Qwen наразі підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. + - Якщо пропущено, `video_generate` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації відео у порядку provider-id. + - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key. + - Bundled постачальник генерації відео Qwen наразі підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня постачальника `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. - `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується інструментом `pdf` для маршрутизації моделі. - - Якщо не задано, інструмент PDF резервно використовує `imageModel`, а потім визначену модель сесії/типову модель. -- `pdfMaxBytesMb`: типовий ліміт розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. -- `pdfMaxPages`: типова максимальна кількість сторінок, що враховується в режимі резервного вилучення інструмента `pdf`. -- `verboseDefault`: типовий рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. Типово: `"off"`. -- `elevatedDefault`: типовий рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. Типово: `"on"`. -- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо ви опускаєте провайдера, OpenClaw спочатку пробує псевдонім, потім унікальний збіг налаштованого провайдера для точного id моделі, і лише після цього повертається до налаштованого провайдера за замовчуванням (застаріла поведінка сумісності, тому краще явно використовувати `provider/model`). Якщо цей провайдер більше не надає налаштовану модель за замовчуванням, OpenClaw повертається до першого налаштованого provider/model замість того, щоб показувати застаріле типове значення видаленого провайдера. -- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може включати `alias` (скорочення) і `params` (специфічні для провайдера параметри, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`). -- `params`: глобальні параметри провайдера за замовчуванням, які застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`). -- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для конкретної моделі), після чого `agents.list[].params` (відповідний agent id) перевизначає значення за ключами. Докладніше див. [Кешування prompt](/uk/reference/prompt-caching). -- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних варіантів), зберігають канонічну об’єктну форму й за можливості зберігають наявні списки fallback. -- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). Типово: 4. + - Використовується інструментом `pdf` для маршрутизації моделей. + - Якщо пропущено, PDF-інструмент повертається до `imageModel`, а потім — до розв’язаної моделі сесії/default. +- `pdfMaxBytesMb`: ліміт розміру PDF за замовчуванням для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. +- `pdfMaxPages`: максимальна кількість сторінок за замовчуванням, що враховуються в режимі резервного вилучення інструмента `pdf`. +- `verboseDefault`: рівень verbose за замовчуванням для агентів. Значення: `"off"`, `"on"`, `"full"`. За замовчуванням: `"off"`. +- `elevatedDefault`: рівень elevated output за замовчуванням для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. За замовчуванням: `"on"`. +- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо пропустити постачальника, OpenClaw спочатку пробує alias, потім — унікальний збіг exact model id серед налаштованих постачальників, і лише після цього повертається до налаштованого default provider (застаріла поведінка сумісності, тому надавайте перевагу явному `provider/model`). Якщо цей постачальник більше не надає налаштовану default model, OpenClaw повертається до першої налаштованої provider/model замість показу застарілого default від видаленого постачальника. +- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може включати `alias` (скорочення) і `params` (специфічні для постачальника, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`). +- `params`: глобальні default provider params, що застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`). +- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для конкретної моделі), потім `agents.list[].params` (відповідний agent id) перевизначає за ключем. Подробиці див. у [Prompt Caching](/uk/reference/prompt-caching). +- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення fallback), зберігають канонічну форму об’єкта й за можливості зберігають наявні списки fallback. +- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). За замовчуванням: 4. -**Вбудовані скорочені псевдоніми** (застосовуються лише тоді, коли модель є в `agents.defaults.models`): +**Вбудовані скорочення alias** (застосовуються лише коли модель є в `agents.defaults.models`): -| Псевдонім | Модель | +| Alias | Модель | | ------------------- | -------------------------------------- | | `opus` | `anthropic/claude-opus-4-6` | | `sonnet` | `anthropic/claude-sonnet-4-6` | @@ -1084,15 +1123,15 @@ IRC працює через extension і налаштовується в `channe | `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -Ваші налаштовані псевдоніми завжди мають пріоритет над типовими. +Ваші налаштовані aliases завжди мають пріоритет над значеннями за замовчуванням. -Для моделей Z.AI GLM-4.x thinking mode увімкнено автоматично, якщо ви не задасте `--thinking off` або не визначите `agents.defaults.models["zai/"].params.thinking` самостійно. -Для моделей Z.AI `tool_stream` типово увімкнено для потокової передачі викликів інструментів. Установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути його. -Для моделей Anthropic Claude 4.6 типово використовується `adaptive` thinking, коли не задано явний рівень thinking. +Моделі Z.AI GLM-4.x автоматично вмикають thinking mode, якщо ви не встановите `--thinking off` або не задасте `agents.defaults.models["zai/"].params.thinking` самостійно. +Моделі Z.AI за замовчуванням вмикають `tool_stream` для потокового передавання викликів інструментів. Встановіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це. +Моделі Anthropic Claude 4.6 за замовчуванням використовують `adaptive` thinking, коли явний рівень thinking не задано. ### `agents.defaults.cliBackends` -Необов’язкові CLI backends для резервних текстових запусків (без викликів інструментів). Корисно як запасний варіант, коли API-провайдери не працюють. +Необов’язкові CLI-бекенди для резервних запусків лише з текстом (без викликів інструментів). Корисно як запасний варіант, коли API-постачальники відмовляють. ```json5 { @@ -1120,29 +1159,29 @@ IRC працює через extension і налаштовується в `channe } ``` -- CLI backends орієнтовані насамперед на текст; інструменти завжди вимкнено. -- Сесії підтримуються, коли задано `sessionArg`. +- CLI-бекенди орієнтовані на текст; інструменти завжди вимкнено. +- Сесії підтримуються, коли встановлено `sessionArg`. - Передавання зображень підтримується, коли `imageArg` приймає шляхи до файлів. ### `agents.defaults.heartbeat` -Періодичні запуски heartbeat. +Періодичні heartbeat-запуски. ```json5 { agents: { defaults: { heartbeat: { - every: "30m", // 0m вимикає + every: "30m", // 0m disables model: "openai/gpt-5.4-mini", includeReasoning: false, - lightContext: false, // типово: false; true залишає лише HEARTBEAT.md із файлів bootstrap workspace - isolatedSession: false, // типово: false; true запускає кожен heartbeat у новій сесії (без історії розмови) + lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files + isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (типово) | block - target: "none", // типово: none | варіанти: last | whatsapp | telegram | discord | ... - prompt: "Прочитай HEARTBEAT.md, якщо він існує...", + directPolicy: "allow", // allow (default) | block + target: "none", // default: none | options: last | whatsapp | telegram | discord | ... + prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, suppressToolErrorWarnings: false, }, @@ -1151,12 +1190,12 @@ IRC працює через extension і налаштовується в `channe } ``` -- `every`: рядок тривалості (ms/s/m/h). Типово: `30m` (автентифікація API-key) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути. -- `suppressToolErrorWarnings`: якщо true, приглушує payload-и попереджень про помилки інструментів під час запусків heartbeat. -- `directPolicy`: політика прямої доставки/DM. `allow` (типово) дозволяє доставку до прямої цілі. `block` пригнічує доставку до прямої цілі та видає `reason=dm-blocked`. -- `lightContext`: якщо true, запуски heartbeat використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із файлів bootstrap workspace. -- `isolatedSession`: якщо true, кожен heartbeat запускається в новій сесії без попередньої історії розмови. Той самий шаблон ізоляції, що й для cron `sessionTarget: "isolated"`. Зменшує вартість одного heartbeat із приблизно 100K до 2-5K токенів. -- Для кожного агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat виконуються **лише для цих агентів**. +- `every`: рядок тривалості (ms/s/m/h). За замовчуванням: `30m` (автентифікація через API key) або `1h` (автентифікація через OAuth). Установіть `0m`, щоб вимкнути. +- `suppressToolErrorWarnings`: якщо true, приглушує payload-и попереджень про помилки інструментів під час heartbeat-запусків. +- `directPolicy`: політика прямої/DM доставки. `allow` (default) дозволяє доставку за прямою ціллю. `block` приглушує доставку за прямою ціллю та генерує `reason=dm-blocked`. +- `lightContext`: якщо true, heartbeat-запуски використовують полегшений bootstrap-контекст і зберігають із bootstrap-файлів workspace лише `HEARTBEAT.md`. +- `isolatedSession`: якщо true, кожен heartbeat-запуск відбувається в новій сесії без попередньої історії розмови. Така сама схема ізоляції, як у cron `sessionTarget: "isolated"`. Зменшує витрати токенів на heartbeat приблизно зі ~100K до ~2-5K токенів. +- Для кожного агента: установіть `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**. - Heartbeat виконують повні ходи агента — коротші інтервали спалюють більше токенів. ### `agents.defaults.compaction` @@ -1167,19 +1206,19 @@ IRC працює через extension і налаштовується в `channe defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // id зареєстрованого plugin провайдера compaction (необов’язково) + provider: "my-provider", // id of a registered compaction provider plugin (optional) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "Точно зберігайте deployment ID, ticket ID та пари host:port.", // використовується, коли identifierPolicy=custom - postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне вбудовування - model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для compaction - notifyUser: true, // надсилати коротке повідомлення, коли починається compaction (типово: false) + identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection + model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override + notifyUser: true, // send a brief notice when compaction starts (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, - systemPrompt: "Сесія наближається до compaction. Збережіть тривалі спогади зараз.", - prompt: "Запишіть будь-які тривалі нотатки в memory/YYYY-MM-DD.md; відповідайте точним тихим токеном NO_REPLY, якщо зберігати нічого.", + systemPrompt: "Session nearing compaction. Store durable memories now.", + prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.", }, }, }, @@ -1187,15 +1226,15 @@ IRC працює через extension і налаштовується в `channe } ``` -- `mode`: `default` або `safeguard` (узагальнення шматками для довгої історії). Див. [Compaction](/uk/concepts/compaction). -- `provider`: id зареєстрованого plugin провайдера compaction. Якщо встановлено, замість вбудованого LLM-узагальнення викликається `summarize()` провайдера. У разі помилки резервно використовується вбудований механізм. Установлення провайдера примушує `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction). -- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції compaction, після чого OpenClaw її перериває. Типово: `900`. -- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовані вказівки щодо збереження непрозорих ідентифікаторів під час узагальнення compaction. -- `identifierInstructions`: необов’язковий власний текст про збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`. -- `postCompactionSections`: необов’язкові назви секцій AGENTS.md H2/H3, які слід повторно вбудувати після compaction. Типово `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне вбудовування. Якщо не задано або явно задано цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як застарілий резервний варіант. -- `model`: необов’язкове перевизначення `provider/model-id` лише для узагальнення compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а узагальнення compaction повинні виконуватися на іншій; якщо не задано, compaction використовує основну модель сесії. -- `notifyUser`: коли `true`, надсилає коротке повідомлення користувачу, коли починається compaction (наприклад, «Ущільнення контексту...»). Типово вимкнено, щоб compaction була тихою. -- `memoryFlush`: тихий агентний хід перед auto-compaction для збереження тривалих спогадів. Пропускається, коли workspace лише для читання. +- `mode`: `default` або `safeguard` (ущільнення чанками для довгої історії). Див. [Compaction](/uk/concepts/compaction). +- `provider`: id зареєстрованого plugin compaction provider. Якщо встановлено, замість вбудованого LLM summarization викликається `summarize()` постачальника. У разі помилки повертається до вбудованого механізму. Встановлення provider примусово задає `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction). +- `timeoutSeconds`: максимальна кількість секунд, дозволених для однієї операції compaction, після чого OpenClaw її перериває. За замовчуванням: `900`. +- `identifierPolicy`: `strict` (default), `off` або `custom`. `strict` додає вбудовані інструкції щодо збереження непрозорих ідентифікаторів під час summarization compaction. +- `identifierInstructions`: необов’язковий власний текст про збереження ідентифікаторів, що використовується, коли `identifierPolicy=custom`. +- `postCompactionSections`: необов’язкові назви секцій AGENTS.md H2/H3 для повторного вбудовування після compaction. За замовчуванням `["Session Startup", "Red Lines"]`; встановіть `[]`, щоб вимкнути повторне вбудовування. Коли значення не встановлено або явно дорівнює цій парі за замовчуванням, старі заголовки `Every Session`/`Safety` також приймаються як застарілий резервний варіант. +- `model`: необов’язкове перевизначення `provider/model-id` лише для summarization compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а summary compaction мають виконуватися на іншій; якщо не встановлено, compaction використовує основну модель сесії. +- `notifyUser`: коли `true`, надсилає коротке сповіщення користувачу, коли починається compaction (наприклад, "Compacting context..."). За замовчуванням вимкнено, щоб compaction була тихою. +- `memoryFlush`: тиха агентна дія перед auto-compaction для збереження довготривалої пам’яті. Пропускається, коли workspace доступний лише для читання. ### `agents.defaults.contextPruning` @@ -1207,13 +1246,13 @@ IRC працює через extension і налаштовується в `channe defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // тривалість (ms/s/m/h), одиниця за замовчуванням: хвилини + ttl: "1h", // duration (ms/s/m/h), default unit: minutes keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, minPrunableToolChars: 50000, softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }, - hardClear: { enabled: true, placeholder: "[Вміст старого результату інструмента очищено]" }, + hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" }, tools: { deny: ["browser", "canvas"] }, }, }, @@ -1224,24 +1263,24 @@ IRC працює через extension і налаштовується в `channe - `mode: "cache-ttl"` вмикає проходи обрізання. -- `ttl` керує тим, як часто обрізання може запускатися знову (після останнього торкання кешу). -- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів. +- `ttl` керує тим, як часто обрізання може виконатися знову (після останнього торкання кешу). +- Обрізання спочатку м’яко скорочує надто великі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів. -**М’яке обрізання** зберігає початок і кінець та вставляє `...` посередині. +**Soft-trim** зберігає початок + кінець і вставляє `...` посередині. -**Повне очищення** замінює весь результат інструмента заповнювачем. +**Hard-clear** замінює весь результат інструмента на placeholder. Примітки: -- Блоки зображень ніколи не обрізаються й не очищаються. -- Співвідношення базуються на символах (приблизно), а не на точній кількості токенів. -- Якщо є менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається. +- Блоки зображень ніколи не обрізаються/очищаються. +- Співвідношення базуються на символах (приблизно), а не на точних підрахунках токенів. +- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається. -Докладніше про поведінку див. у [Session Pruning](/uk/concepts/session-pruning). +Подробиці поведінки див. у [Session Pruning](/uk/concepts/session-pruning). -### Блокова потокова передача +### Блоковий стримінг ```json5 { @@ -1251,17 +1290,17 @@ IRC працює через extension і налаштовується в `channe blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (використовуйте minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) }, }, } ``` -- Для каналів, відмінних від Telegram, потрібен явний `*.blockStreaming: true`, щоб увімкнути блокові відповіді. -- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для кожного акаунта). Signal/Slack/Discord/Google Chat типово мають `minChars: 1500`. -- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500 ms. Перевизначення для агента: `agents.list[].humanDelay`. +- Канали, окрім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути блокові відповіді. +- Перевизначення каналів: `channels..blockStreamingCoalesce` (і варіанти для кожного облікового запису). За замовчуванням для Signal/Slack/Discord/Google Chat: `minChars: 1500`. +- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`. -Докладніше про поведінку й розбиття див. у [Streaming](/uk/concepts/streaming). +Подробиці поведінки і чанкування див. у [Streaming](/uk/concepts/streaming). ### Індикатори набору тексту @@ -1276,7 +1315,7 @@ IRC працює через extension і налаштовується в `channe } ``` -- Типові значення: `instant` для приватних чатів/згадок, `message` для групових чатів без згадки. +- За замовчуванням: `instant` для прямих чатів/згадок, `message` для групових чатів без згадки. - Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`. Див. [Typing Indicators](/uk/concepts/typing-indicators). @@ -1285,7 +1324,7 @@ IRC працює через extension і налаштовується в `channe ### `agents.defaults.sandbox` -Необов’язкове sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). +Необов’язкова sandbox-ізоляція для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). ```json5 { @@ -1331,7 +1370,7 @@ IRC працює через extension і налаштовується в `channe identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // Також підтримуються SecretRef / inline вміст: + // SecretRefs / inline contents also supported: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1382,52 +1421,52 @@ IRC працює через extension і налаштовується в `channe -**Backend:** +**Бекенд:** -- `docker`: локальний runtime Docker (типово) -- `ssh`: загальний віддалений runtime на основі SSH +- `docker`: локальний Docker runtime (default) +- `ssh`: загальний віддалений runtime на базі SSH - `openshell`: runtime OpenShell -Коли вибрано `backend: "openshell"`, специфічні для runtime налаштування переносяться до +Коли вибрано `backend: "openshell"`, специфічні для runtime налаштування переміщуються до `plugins.entries.openshell.config`. -**Конфігурація backend SSH:** +**Конфігурація SSH-бекенда:** - `target`: SSH-ціль у форматі `user@host[:port]` -- `command`: команда SSH-клієнта (типово: `ssh`) -- `workspaceRoot`: абсолютний віддалений корінь, який використовується для workspace за кожною областю +- `command`: команда клієнта SSH (за замовчуванням: `ssh`) +- `workspaceRoot`: абсолютний віддалений корінь, що використовується для workspace за scope - `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані в OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: inline вміст або SecretRef, який OpenClaw матеріалізує у тимчасові файли під час виконання -- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: inline-вміст або SecretRef, який OpenClaw матеріалізує у тимчасові файли під час виконання +- `strictHostKeyChecking` / `updateHostKeys`: параметри політики host key для OpenSSH **Пріоритет SSH auth:** - `identityData` має пріоритет над `identityFile` - `certificateData` має пріоритет над `certificateFile` - `knownHostsData` має пріоритет над `knownHostsFile` -- Значення `*Data` на основі SecretRef визначаються з активного знімка runtime secrets до початку sandbox-сесії +- Значення `*Data` на базі SecretRef визначаються з активного знімка runtime secrets перед початком sandbox session -**Поведінка backend SSH:** +**Поведінка SSH-бекенда:** -- один раз ініціалізує віддалений workspace після створення або повторного створення +- один раз засіває віддалений workspace після create або recreate - потім зберігає віддалений SSH workspace як канонічний -- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH +- маршрутизує `exec`, файлові інструменти й media paths через SSH - не синхронізує віддалені зміни назад на хост автоматично -- не підтримує браузерні контейнери sandbox +- не підтримує sandbox browser containers **Доступ до workspace:** -- `none`: workspace sandbox за кожною областю під `~/.openclaw/sandboxes` -- `ro`: workspace sandbox у `/workspace`, workspace агента монтується лише для читання в `/agent` +- `none`: sandbox workspace за scope у `~/.openclaw/sandboxes` +- `ro`: sandbox workspace в `/workspace`, workspace агента монтується лише для читання в `/agent` - `rw`: workspace агента монтується для читання/запису в `/workspace` **Scope:** -- `session`: контейнер + workspace для кожної сесії -- `agent`: один контейнер + workspace на агента (типово) -- `shared`: спільний контейнер і workspace (без ізоляції між сесіями) +- `session`: окремий container + workspace для кожної сесії +- `agent`: один container + workspace на агента (default) +- `shared`: спільний container і workspace (без міжсесійної ізоляції) -**Конфігурація plugin OpenShell:** +**Конфігурація плагіна OpenShell:** ```json5 { @@ -1440,10 +1479,10 @@ IRC працює через extension і налаштовується в `channe from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // необов’язково - gatewayEndpoint: "https://lab.example", // необов’язково - policy: "strict", // необов’язковий policy id OpenShell - providers: ["openai"], // необов’язково + gateway: "lab", // optional + gatewayEndpoint: "https://lab.example", // optional + policy: "strict", // optional OpenShell policy id + providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, @@ -1455,30 +1494,30 @@ IRC працює через extension і налаштовується в `channe **Режим OpenShell:** -- `mirror`: ініціалізувати віддалений простір з локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним -- `remote`: один раз ініціалізувати віддалений простір під час створення sandbox, а далі зберігати віддалений workspace як канонічний +- `mirror`: засіяти віддалений із локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним +- `remote`: засіяти віддалений один раз при створенні sandbox, потім зберігати віддалений workspace канонічним -У режимі `remote` локальні редагування хоста, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації. -Транспортом є SSH до sandbox OpenShell, але plugin володіє життєвим циклом sandbox і необов’язковою mirror-синхронізацією. +У режимі `remote` локальні зміни хоста, зроблені поза OpenClaw, не синхронізуються автоматично в sandbox після кроку засівання. +Транспорт — SSH у sandbox OpenShell, але життєвим циклом sandbox і необов’язковою mirror-синхронізацією володіє плагін. -**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує мережевого egress, доступного для запису root та користувача root. +**`setupCommand`** запускається один раз після створення контейнера (через `sh -lc`). Потребує виходу в мережу, записуваного root і користувача root. -**Для контейнерів типово `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихідний доступ. -`"host"` заблоковано. `"container:"` типово заблоковано, якщо ви явно не встановите +**Контейнери за замовчуванням мають `network: "none"`** — встановіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихід назовні. +`"host"` заблоковано. `"container:"` заблоковано за замовчуванням, якщо ви явно не встановите `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass). -**Вхідні вкладення** зберігаються в `media/inbound/*` в активному workspace. +**Вхідні вкладення** staging-уються в `media/inbound/*` в активному workspace. -**`docker.binds`** монтує додаткові каталоги хоста; глобальні прив’язки та прив’язки для кожного агента зливаються. +**`docker.binds`** монтує додаткові каталоги хоста; глобальні й агентні binds об’єднуються. -**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний prompt. Не потребує `browser.enabled` в `openclaw.json`. -Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає URL із короткочасним токеном (замість відкривати пароль у спільному URL). +**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в system prompt. Не вимагає `browser.enabled` у `openclaw.json`. +Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає короткоживучий token URL (замість показу пароля у спільному URL). -- `allowHostControl: false` (типово) блокує націлювання sandboxed-сесій на браузер хоста. -- `network` типово має `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібна глобальна bridge-зв’язність. -- `cdpSourceRange` за потреби обмежує вхід CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`). -- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер sandbox browser. Якщо задано (включно з `[]`), воно замінює `docker.binds` для контейнера browser. -- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів: +- `allowHostControl: false` (default) блокує націлювання sandboxed session на browser хоста. +- `network` за замовчуванням — `openclaw-sandbox-browser` (виділена bridge-мережа). Встановлюйте `bridge` лише тоді, коли вам свідомо потрібна глобальна bridge connectivity. +- `cdpSourceRange` необов’язково обмежує вхід CDP на межі контейнера CIDR-діапазоном (наприклад `172.21.0.1/32`). +- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер sandbox browser. Якщо встановлено (включно з `[]`), воно замінює `docker.binds` для контейнера browser. +- Значення запуску за замовчуванням визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1495,31 +1534,30 @@ IRC працює через extension і налаштовується в `channe - `--renderer-process-limit=2` - `--no-zygote` - `--metrics-recording-only` - - `--disable-extensions` (типово увімкнено) + - `--disable-extensions` (увімкнено за замовчуванням) - `--disable-3d-apis`, `--disable-software-rasterizer` і `--disable-gpu` - типово увімкнені та можуть бути вимкнені через - `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо робочий процес WebGL/3D цього потребує. - - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає extensions, якщо ваш робочий процес - залежить від них. + увімкнені за замовчуванням і можуть бути вимкнені через + `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для використання WebGL/3D це потрібно. + - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає extensions, якщо вони потрібні вашому workflow. - `--renderer-process-limit=2` можна змінити за допомогою - `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати - типове обмеження процесів Chromium. - - плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`. - - Типові значення — це базовий рівень контейнерного образу; використовуйте власний браузерний образ із власним - entrypoint, щоб змінити типові значення контейнера. + `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; встановіть `0`, щоб використовувати + стандартний ліміт процесів Chromium. + - а також `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`. + - Значення за замовчуванням — це базовий стан контейнерного образу; використовуйте власний образ browser із власним + entrypoint, щоб змінити поведінку контейнера за замовчуванням. -Browser sandboxing і `sandbox.docker.binds` наразі доступні лише для Docker. +Browser sandboxing і `sandbox.docker.binds` наразі підтримуються лише для Docker. Збірка образів: ```bash -scripts/sandbox-setup.sh # основний sandbox-образ -scripts/sandbox-browser-setup.sh # необов’язковий browser-образ +scripts/sandbox-setup.sh # main sandbox image +scripts/sandbox-browser-setup.sh # optional browser image ``` -### `agents.list` (перевизначення для кожного агента) +### `agents.list` (перевизначення для окремих агентів) ```json5 { @@ -1528,15 +1566,15 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об { id: "main", default: true, - name: "Головний агент", + name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - model: "anthropic/claude-opus-4-6", // або { primary, fallbacks } - thinkingDefault: "high", // перевизначення рівня thinking для агента - reasoningDefault: "on", // перевизначення видимості reasoning для агента - fastModeDefault: false, // перевизначення fast mode для агента - params: { cacheRetention: "none" }, // перевизначає params для відповідного defaults.models за ключами - skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано + model: "anthropic/claude-opus-4-6", // or { primary, fallbacks } + thinkingDefault: "high", // per-agent thinking level override + reasoningDefault: "on", // per-agent reasoning visibility override + fastModeDefault: false, // per-agent fast mode override + params: { cacheRetention: "none" }, // overrides matching defaults.models params by key + skills: ["docs-search"], // replaces agents.defaults.skills when set identity: { name: "Samantha", theme: "helpful sloth", @@ -1568,25 +1606,25 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ``` - `id`: стабільний id агента (обов’язково). -- `default`: якщо встановлено для кількох, перемагає перший (логуються попередження). Якщо не встановлено для жодного, типовим є перший запис у списку. +- `default`: коли встановлено кілька, перший має пріоритет (журналюється попередження). Якщо не встановлено жодного, за замовчуванням використовується перший запис у списку. - `model`: рядкова форма перевизначає лише `primary`; об’єктна форма `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback). Cron jobs, які перевизначають лише `primary`, усе одно успадковують fallback за замовчуванням, якщо ви не встановите `fallbacks: []`. -- `params`: параметри потоку для агента, злиті поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. -- `skills`: необов’язковий allowlist Skills для агента. Якщо опущено, агент успадковує `agents.defaults.skills`, якщо їх задано; явний список замінює типові значення замість злиття, а `[]` означає відсутність Skills. -- `thinkingDefault`: необов’язковий типовий рівень thinking для агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано перевизначення для повідомлення або сесії. -- `reasoningDefault`: необов’язкове типове значення видимості reasoning для агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для повідомлення або сесії. -- `fastModeDefault`: необов’язкове типове значення fast mode для агента (`true | false`). Застосовується, коли не задано перевизначення fast-mode для повідомлення або сесії. -- `runtime`: необов’язковий дескриптор runtime для агента. Використовуйте `type: "acp"` із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент повинен типово використовувати сесії ACP harness. +- `params`: параметри потоку для окремого агента, що зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, без дублювання всього каталогу моделей. +- `skills`: необов’язковий allowlist Skills для окремого агента. Якщо пропущено, агент успадковує `agents.defaults.skills`, якщо вони задані; явний список замінює значення за замовчуванням замість злиття, а `[]` означає відсутність skills. +- `thinkingDefault`: необов’язковий рівень thinking за замовчуванням для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не встановлено перевизначення на рівні повідомлення чи сесії. +- `reasoningDefault`: необов’язкове значення видимості reasoning за замовчуванням для окремого агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning на рівні повідомлення або сесії. +- `fastModeDefault`: необов’язкове значення fast mode за замовчуванням для окремого агента (`true | false`). Застосовується, коли не задано перевизначення fast mode на рівні повідомлення або сесії. +- `runtime`: необов’язковий дескриптор runtime для окремого агента. Використовуйте `type: "acp"` із defaults `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент за замовчуванням має використовувати ACP harness sessions. - `identity.avatar`: шлях відносно workspace, URL `http(s)` або URI `data:`. -- `identity` виводить типові значення: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`. -- `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент). -- Захист успадкування sandbox: якщо сесія запитувача працює в sandbox, `sessions_spawn` відхиляє цілі, які працювали б без sandbox. -- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, які не містять `agentId` (примушує до явного вибору профілю; типово: false). +- `identity` виводить значення за замовчуванням: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`. +- `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; за замовчуванням: лише той самий агент). +- Захист успадкування sandbox: якщо сесія-запитувач sandboxed, `sessions_spawn` відхиляє цілі, які виконувалися б без sandbox. +- `subagents.requireAgentId`: коли true, блокує виклики `sessions_spawn`, які пропускають `agentId` (примушує до явного вибору профілю; за замовчуванням false). --- -## Маршрутизація між кількома агентами +## Багатоагентна маршрутизація -Запускайте кілька ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent). +Запускайте кілька ізольованих агентів в одному шлюзі. Див. [Multi-Agent](/uk/concepts/multi-agent). ```json5 { @@ -1603,29 +1641,29 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об } ``` -### Поля збігу прив’язок +### Поля збігу binding -- `type` (необов’язково): `route` для звичайної маршрутизації (відсутній type за замовчуванням означає route), `acp` для постійних прив’язок розмов ACP. +- `type` (необов’язково): `route` для звичайної маршрутизації (відсутність type означає route), `acp` для постійних ACP-прив’язок розмов. - `match.channel` (обов’язково) -- `match.accountId` (необов’язково; `*` = будь-який акаунт; якщо опущено = акаунт за замовчуванням) +- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; пропущено = обліковий запис за замовчуванням) - `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу) +- `match.guildId` / `match.teamId` (необов’язково; специфічно для каналу) - `acp` (необов’язково; лише для записів `type: "acp"`): `{ mode, label, cwd, backend }` -**Детермінований порядок збігів:** +**Детермінований порядок збігу:** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` 4. `match.accountId` (точний, без peer/guild/team) -5. `match.accountId: "*"` (на весь канал) +5. `match.accountId: "*"` (на рівні каналу) 6. Агент за замовчуванням -У межах кожного рівня перемагає перший відповідний запис `bindings`. +У межах кожного рівня перший відповідний запис у `bindings` має пріоритет. -Для записів `type: "acp"` OpenClaw розв’язує збіг за точною ідентичністю розмови (`match.channel` + акаунт + `match.peer.id`) і не використовує наведений вище порядок рівнів route-прив’язок. +Для записів `type: "acp"` OpenClaw визначає збіг за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує порядок рівнів route binding вище. -### Профілі доступу для кожного агента +### Профілі доступу для окремих агентів @@ -1645,7 +1683,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об - + ```json5 { @@ -1720,7 +1758,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об -Докладніше про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). +Подробиці про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). --- @@ -1746,22 +1784,22 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // пропустити fork від батьківського потоку вище цього числа токенів (0 вимикає) + parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // рядок тривалості або false - maxDiskBytes: "500mb", // необов’язковий жорсткий бюджет - highWaterBytes: "400mb", // необов’язкова ціль очищення + resetArchiveRetention: "30d", // duration or false + maxDiskBytes: "500mb", // optional hard budget + highWaterBytes: "400mb", // optional cleanup target }, threadBindings: { enabled: true, - idleHours: 24, // типове автозняття фокуса через неактивність у годинах (`0` вимикає) - maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає) + idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) + maxAgeHours: 0, // default hard max age in hours (`0` disables) }, - mainKey: "main", // застаріле (runtime завжди використовує "main") + mainKey: "main", // legacy (runtime always uses "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1774,45 +1812,45 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об - **`scope`**: базова стратегія групування сесій для контекстів групового чату. - - `per-sender` (типово): кожен відправник отримує ізольовану сесію в межах контексту каналу. - - `global`: усі учасники в контексті каналу спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст справді потрібен). + - `per-sender` (default): кожен відправник отримує ізольовану сесію в межах контексту каналу. + - `global`: усі учасники в контексті каналу спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст справді задумано). - **`dmScope`**: як групуються DM. - `main`: усі DM спільно використовують основну сесію. - `per-peer`: ізоляція за id відправника між каналами. - `per-channel-peer`: ізоляція для кожного каналу + відправника (рекомендовано для багатокористувацьких inbox). - - `per-account-channel-peer`: ізоляція для кожного акаунта + каналу + відправника (рекомендовано для багатоакаунтних конфігурацій). -- **`identityLinks`**: мапа канонічних id до provider-prefixed peer для спільного використання сесій між каналами. -- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва варіанти, спрацьовує той, що спливає раніше. -- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як псевдонім для `direct`. -- **`parentForkMaxTokens`**: максимальні `totalTokens` батьківської сесії, допустимі під час створення форкнутої сесії потоку (типово `100000`). - - Якщо батьківський `totalTokens` перевищує це значення, OpenClaw запускає нову сесію потоку замість успадкування історії транскрипту батьківської сесії. - - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти fork від батьківської сесії. -- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для основного кошика прямих чатів. -- **`agentToAgent.maxPingPongTurns`**: максимальна кількість зворотних ходів між агентами під час взаємодії агент-до-агента (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжки ping-pong. -- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny перемагає. -- **`maintenance`**: очищення сховища сесій + керування збереженням. - - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення. - - `pruneAfter`: віковий поріг для застарілих записів (типово `30d`). - - `maxEntries`: максимальна кількість записів у `sessions.json` (типово `500`). - - `rotateBytes`: ротує `sessions.json`, коли він перевищує цей розмір (типово `10mb`). - - `resetArchiveRetention`: строк зберігання архівів транскриптів `*.reset.`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. - - `maxDiskBytes`: необов’язковий дисковий бюджет для каталогу сесій. У режимі `warn` логуються попередження; у режимі `enforce` спочатку видаляються найстаріші артефакти/сесії. - - `highWaterBytes`: необов’язкова ціль після очищення за бюджетом. Типово дорівнює `80%` від `maxDiskBytes`. -- **`threadBindings`**: глобальні типові значення для функцій сесій, прив’язаних до потоків. - - `enabled`: головний типовий перемикач (провайдери можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) - - `idleHours`: типове автозняття фокуса через неактивність у годинах (`0` вимикає; провайдери можуть перевизначати) - - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; провайдери можуть перевизначати) + - `per-account-channel-peer`: ізоляція за account + channel + sender (рекомендовано для багатообліковості). +- **`identityLinks`**: зіставляє канонічні id із peer-ами з префіксом постачальника для спільного використання сесій між каналами. +- **`reset`**: основна політика reset. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Коли налаштовано обидва, спрацьовує те, що закінчується першим. +- **`resetByType`**: перевизначення для кожного типу (`direct`, `group`, `thread`). Застарілий `dm` приймається як alias для `direct`. +- **`parentForkMaxTokens`**: максимальне значення `totalTokens` батьківської сесії, дозволене під час створення forked thread session (default `100000`). + - Якщо `totalTokens` батьківської сесії вище цього значення, OpenClaw запускає нову thread session замість успадкування історії транскрипту батька. + - Встановіть `0`, щоб вимкнути цей захист і завжди дозволяти fork від батька. +- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для основного бакета direct chat. +- **`agentToAgent.maxPingPongTurns`**: максимальна кількість ходів відповіді назад між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining. +- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny має пріоритет. +- **`maintenance`**: очищення сховища сесій + контроль retention. + - `mode`: `warn` лише виводить попередження; `enforce` застосовує очищення. + - `pruneAfter`: поріг віку для застарілих записів (default `30d`). + - `maxEntries`: максимальна кількість записів у `sessions.json` (default `500`). + - `rotateBytes`: ротує `sessions.json`, коли він перевищує цей розмір (default `10mb`). + - `resetArchiveRetention`: retention для архівів транскриптів `*.reset.`. За замовчуванням дорівнює `pruneAfter`; встановіть `false`, щоб вимкнути. + - `maxDiskBytes`: необов’язковий бюджет диска для каталогу sessions. У режимі `warn` журналює попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії. + - `highWaterBytes`: необов’язкова ціль після очищення бюджету. За замовчуванням `80%` від `maxDiskBytes`. +- **`threadBindings`**: глобальні значення за замовчуванням для функцій сесій, прив’язаних до thread. + - `enabled`: головний перемикач за замовчуванням (постачальники можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) + - `idleHours`: значення за замовчуванням для auto-unfocus через неактивність у годинах (`0` вимикає; постачальники можуть перевизначати) + - `maxAgeHours`: значення за замовчуванням для жорсткого максимального віку в годинах (`0` вимикає; постачальники можуть перевизначати) --- -## Messages +## Повідомлення ```json5 { messages: { - responsePrefix: "🦞", // або "auto" + responsePrefix: "🦞", // or "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -1827,7 +1865,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об }, }, inbound: { - debounceMs: 2000, // 0 вимикає + debounceMs: 2000, // 0 disables byChannel: { whatsapp: 5000, slack: 1500, @@ -1839,36 +1877,36 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ### Префікс відповіді -Перевизначення для кожного каналу/акаунта: `channels..responsePrefix`, `channels..accounts..responsePrefix`. +Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Розв’язання (найспецифічніше перемагає): акаунт → канал → глобальне. `""` вимикає і зупиняє каскад. `"auto"` виводить `[{identity.name}]`. +Порядок розв’язання (найспецифічніше має пріоритет): account → channel → global. `""` вимикає й зупиняє каскад. `"auto"` виводить `[{identity.name}]`. -**Змінні шаблону:** +**Шаблонні змінні:** -| Змінна | Опис | Приклад | -| ----------------- | ---------------------- | --------------------------- | -| `{model}` | Коротка назва моделі | `claude-opus-4-6` | -| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | -| `{provider}` | Назва провайдера | `anthropic` | -| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` | -| `{identity.name}` | Назва identity агента | (те саме, що й `"auto"`) | +| Змінна | Опис | Приклад | +| ---------------- | ----------------------- | --------------------------- | +| `{model}` | Коротка назва моделі | `claude-opus-4-6` | +| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | +| `{provider}` | Назва постачальника | `anthropic` | +| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` | +| `{identity.name}` | Назва ідентичності агента | (те саме, що `"auto"`) | -Змінні нечутливі до регістру. `{think}` — псевдонім для `{thinkingLevel}`. +Змінні нечутливі до регістру. `{think}` є alias для `{thinkingLevel}`. -### Реакція підтвердження +### Ack reaction -- Типово бере `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути. +- За замовчуванням використовується `identity.emoji` активного агента, інакше `"👀"`. Встановіть `""`, щоб вимкнути. - Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`. -- Порядок розв’язання: акаунт → канал → `messages.ackReaction` → резервне значення identity. -- Scope: `group-mentions` (типово), `group-all`, `direct`, `all`. -- `removeAckAfterReply`: видаляє ack після відповіді в Slack, Discord і Telegram. -- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram. - У Slack і Discord, якщо не задано, статусні реакції залишаються увімкненими, коли активні ack-реакції. - У Telegram установіть це явно в `true`, щоб увімкнути статусні реакції життєвого циклу. +- Порядок розв’язання: account → channel → `messages.ackReaction` → резервна ідентичність. +- Scope: `group-mentions` (default), `group-all`, `direct`, `all`. +- `removeAckAfterReply`: видаляє ack після відповіді у Slack, Discord і Telegram. +- `messages.statusReactions.enabled`: вмикає lifecycle status reactions у Slack, Discord і Telegram. + У Slack і Discord незадане значення залишає status reactions увімкненими, коли активні ack reactions. + У Telegram встановіть це явно в `true`, щоб увімкнути lifecycle status reactions. ### Debounce для вхідних повідомлень -Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення скидаються негайно. Керівні команди обходять debounce. +Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення змиваються негайно. Керувальні команди обходять debounce. ### TTS (text-to-speech) @@ -1911,12 +1949,12 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об } ``` -- `auto` керує auto-TTS. `/tts off|always|inbound|tagged` перевизначає це для кожної сесії. +- `auto` керує режимом auto-TTS за замовчуванням: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні налаштування, а `/tts status` показує фактичний стан. - `summaryModel` перевизначає `agents.defaults.model.primary` для auto-summary. -- `modelOverrides` типово увімкнено; `modelOverrides.allowProvider` типово має `false` (opt-in). -- API keys резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. +- `modelOverrides` увімкнено за замовчуванням; `modelOverrides.allowProvider` за замовчуванням має значення `false` (opt-in). +- API keys повертаються до `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. - `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок розв’язання: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. -- Коли `openai.baseUrl` вказує на не-OpenAI endpoint, OpenClaw розглядає його як OpenAI-сумісний TTS-сервер і послаблює валідацію model/voice. +- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw трактує його як OpenAI-compatible TTS server і послаблює валідацію model/voice. --- @@ -1946,13 +1984,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об } ``` -- `talk.provider` має збігатися з ключем у `talk.providers`, коли налаштовано кілька провайдерів Talk. -- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) призначені лише для сумісності й автоматично мігруються до `talk.providers.`. -- Voice ID резервно беруться з `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. -- `providers.*.apiKey` приймає звичайні рядки або об’єкти SecretRef. -- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли API key Talk не налаштовано. -- `providers.*.voiceAliases` дозволяє директивам Talk використовувати зручні назви. -- `silenceTimeoutMs` визначає, скільки режим Talk чекає після того, як користувач замовкне, перш ніж надсилати транскрипт. Якщо не задано, зберігається типове для платформи вікно паузи (`700 ms на macOS і Android, 900 ms на iOS`). +- `talk.provider` має збігатися з ключем у `talk.providers`, якщо налаштовано кілька постачальників Talk. +- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) сумісні лише для сумісності й автоматично мігруються в `talk.providers.`. +- Voice ID повертаються до `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. +- `providers.*.apiKey` приймає відкриті рядки або об’єкти SecretRef. +- Резервний `ELEVENLABS_API_KEY` застосовується лише тоді, коли не налаштовано Talk API key. +- `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви. +- `silenceTimeoutMs` керує тим, скільки часу режим Talk чекає після тиші користувача, перш ніж надіслати транскрипт. Якщо не встановлено, зберігається вікно паузи платформи за замовчуванням (`700 ms на macOS і Android, 900 ms на iOS`). --- @@ -1960,37 +1998,37 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ### Профілі інструментів -`tools.profile` встановлює базовий allowlist перед `tools.allow`/`tools.deny`: +`tools.profile` задає базовий allowlist перед `tools.allow`/`tools.deny`: -Локальний онбординг у нових локальних конфігураціях за замовчуванням встановлює `tools.profile: "coding"`, якщо це не задано (наявні явні профілі зберігаються). +Локальний onboarding у нових локальних конфігураціях за замовчуванням задає `tools.profile: "coding"`, якщо його не встановлено (наявні явні профілі зберігаються). | Профіль | Включає | | ----------- | ------------------------------------------------------------------------------------------------------------------------------- | | `minimal` | лише `session_status` | | `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` | | `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | -| `full` | Без обмежень (те саме, що не задавати) | +| `full` | Без обмежень (те саме, що не задано) | ### Групи інструментів -| Група | Інструменти | -| ------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як псевдонім для `exec`) | -| `group:fs` | `read`, `write`, `edit`, `apply_patch` | -| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` | -| `group:memory` | `memory_search`, `memory_get` | -| `group:web` | `web_search`, `x_search`, `web_fetch` | -| `group:ui` | `browser`, `canvas` | -| `group:automation` | `cron`, `gateway` | -| `group:messaging` | `message` | -| `group:nodes` | `nodes` | -| `group:agents` | `agents_list` | -| `group:media` | `image`, `image_generate`, `video_generate`, `tts` | -| `group:openclaw` | Усі вбудовані інструменти (без provider plugins) | +| Група | Інструменти | +| ----------------- | ----------------------------------------------------------------------------------------------------------------------- | +| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як alias для `exec`) | +| `group:fs` | `read`, `write`, `edit`, `apply_patch` | +| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` | +| `group:memory` | `memory_search`, `memory_get` | +| `group:web` | `web_search`, `x_search`, `web_fetch` | +| `group:ui` | `browser`, `canvas` | +| `group:automation` | `cron`, `gateway` | +| `group:messaging` | `message` | +| `group:nodes` | `nodes` | +| `group:agents` | `agents_list` | +| `group:media` | `image`, `image_generate`, `video_generate`, `tts` | +| `group:openclaw` | Усі вбудовані інструменти (без provider plugins) | ### `tools.allow` / `tools.deny` -Глобальна політика дозволу/заборони інструментів (deny перемагає). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть тоді, коли Docker sandbox вимкнено. +Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть коли Docker sandbox вимкнено. ```json5 { @@ -2000,7 +2038,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ### `tools.byProvider` -Додатково обмежує інструменти для конкретних провайдерів або моделей. Порядок: базовий профіль → профіль провайдера → allow/deny. +Додатково обмежує інструменти для конкретних постачальників або моделей. Порядок: базовий профіль → профіль постачальника → allow/deny. ```json5 { @@ -2033,8 +2071,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ``` - Перевизначення для агента (`agents.list[].tools.elevated`) може лише додатково обмежувати. -- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline-директиви застосовуються до одного повідомлення. -- Elevated `exec` обходить sandboxing і використовує налаштований шлях виходу (`gateway` за замовчуванням або `node`, коли ціль exec — `node`). +- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline directives застосовуються лише до одного повідомлення. +- Elevated `exec` обходить sandboxing і використовує налаштований escape path (`gateway` за замовчуванням або `node`, коли exec target — `node`). ### `tools.exec` @@ -2058,7 +2096,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ### `tools.loopDetection` -Перевірки безпеки циклів інструментів **типово вимкнені**. Установіть `enabled: true`, щоб увімкнути виявлення. +Перевірки безпеки від циклів інструментів **вимкнені за замовчуванням**. Встановіть `enabled: true`, щоб увімкнути виявлення. Налаштування можна визначати глобально в `tools.loopDetection` і перевизначати для кожного агента в `agents.list[].tools.loopDetection`. ```json5 @@ -2081,13 +2119,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ``` - `historySize`: максимальна історія викликів інструментів, що зберігається для аналізу циклів. -- `warningThreshold`: поріг для попереджень про повторюваний шаблон без прогресу. -- `criticalThreshold`: вищий поріг для блокування критичних циклів. +- `warningThreshold`: поріг повторюваного шаблону без прогресу для попереджень. +- `criticalThreshold`: вищий поріг повторення для блокування критичних циклів. - `globalCircuitBreakerThreshold`: поріг жорсткої зупинки для будь-якого запуску без прогресу. - `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами. - `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll-інструменти (`process.poll`, `command_status` тощо). -- `detectors.pingPong`: попереджати/блокувати чергування пар шаблонів без прогресу. -- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація не проходить. +- `detectors.pingPong`: попереджати/блокувати чергування парних шаблонів без прогресу. +- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація завершується помилкою. ### `tools.web` @@ -2097,14 +2135,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об web: { search: { enabled: true, - apiKey: "brave_api_key", // або BRAVE_API_KEY env + apiKey: "brave_api_key", // or BRAVE_API_KEY env maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // необов’язково; опустіть для auto-detect + provider: "firecrawl", // optional; omit for auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2121,7 +2159,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ### `tools.media` -Налаштовує розуміння вхідних медіа (зображення/аудіо/відео): +Налаштовує розуміння вхідних медіа (image/audio/video): ```json5 { @@ -2129,7 +2167,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об media: { concurrency: 2, asyncCompletion: { - directSend: false, // opt-in: надсилати завершені асинхронні music/video безпосередньо в канал + directSend: false, // opt-in: send finished async music/video directly to the channel }, audio: { enabled: true, @@ -2155,30 +2193,30 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об -**Запис провайдера** (`type: "provider"` або опущено): +**Запис постачальника** (`type: "provider"` або пропущено): -- `provider`: id API-провайдера (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо) +- `provider`: id API-постачальника (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо) - `model`: перевизначення id моделі -- `profile` / `preferredProfile`: вибір профілю `auth-profiles.json` +- `profile` / `preferredProfile`: вибір профілю з `auth-profiles.json` -**Запис CLI** (`type: "cli"`): +**CLI-запис** (`type: "cli"`): -- `command`: виконуваний файл -- `args`: аргументи з шаблонами (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо) +- `command`: виконуваний файл для запуску +- `args`: шаблонні аргументи (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо) **Спільні поля:** -- `capabilities`: необов’язковий список (`image`, `audio`, `video`). Типові значення: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. -- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для кожного запису. -- У разі помилки використовується наступний запис. +- `capabilities`: необов’язковий список (`image`, `audio`, `video`). За замовчуванням: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. +- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для окремого запису. +- У разі збою відбувається перехід до наступного запису. -Автентифікація провайдера відбувається у стандартному порядку: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. +Provider auth follows standard order: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. **Поля async completion:** - `asyncCompletion.directSend`: коли `true`, завершені асинхронні задачі `music_generate` - і `video_generate` спочатку намагаються доставити результат безпосередньо в канал. Типово: `false` - (застарілий шлях пробудження сесії запитувача/доставки моделі). + і `video_generate` спочатку намагаються доставлятися напряму в канал. За замовчуванням: `false` + (застарілий шлях requester-session wake/model-delivery). @@ -2197,9 +2235,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об ### `tools.sessions` -Керує тим, на які сесії можуть націлюватися інструменти сесій (`sessions_list`, `sessions_history`, `sessions_send`). +Керує тим, які сесії можуть бути цілями для інструментів сесій (`sessions_list`, `sessions_history`, `sessions_send`). -Типово: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents). +За замовчуванням: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents). ```json5 { @@ -2216,9 +2254,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об - `self`: лише поточний ключ сесії. - `tree`: поточна сесія + сесії, породжені поточною сесією (subagents). -- `agent`: будь-яка сесія, що належить поточному agent id (може включати інших користувачів, якщо ви запускаєте сесії per-sender під тим самим agent id). -- `all`: будь-яка сесія. Націлювання між агентами все одно потребує `tools.agentToAgent`. -- Обмеження sandbox: коли поточна сесія працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`. +- `agent`: будь-яка сесія, що належить поточному agent id (може включати інших користувачів, якщо ви використовуєте per-sender sessions під тим самим agent id). +- `all`: будь-яка сесія. Націлювання між агентами все ще вимагає `tools.agentToAgent`. +- Sandbox clamp: коли поточна сесія sandboxed і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibility примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` @@ -2229,11 +2267,11 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об tools: { sessions_spawn: { attachments: { - enabled: false, // opt-in: установіть true, щоб дозволити inline file attachments - maxTotalBytes: 5242880, // 5 MB загалом для всіх файлів + enabled: false, // opt-in: set true to allow inline file attachments + maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, - maxFileBytes: 1048576, // 1 MB на файл - retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep" + maxFileBytes: 1048576, // 1 MB per file + retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, }, @@ -2243,21 +2281,21 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об Примітки: - Вкладення підтримуються лише для `runtime: "subagent"`. Runtime ACP їх відхиляє. -- Файли матеріалізуються в дочірньому workspace в `.openclaw/attachments//` із `.manifest.json`. -- Вміст вкладень автоматично редагується під час збереження транскрипту. -- Вхідні дані base64 перевіряються строгими перевірками алфавіту/падінгу та захистом розміру до декодування. -- Дозволи файлів: `0700` для каталогів і `0600` для файлів. -- Очищення слідує політиці `cleanup`: `delete` завжди видаляє вкладення; `keep` залишає їх лише тоді, коли `retainOnSessionKeep: true`. +- Файли матеріалізуються в дочірньому workspace за шляхом `.openclaw/attachments//` з `.manifest.json`. +- Вміст вкладень автоматично редагується під час збереження transcript. +- Входи base64 перевіряються суворою валідацією алфавіту/padding і захистом розміру до декодування. +- Права доступу до файлів: `0700` для каталогів і `0600` для файлів. +- Очищення дотримується політики `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`. ### `tools.experimental` -Експериментальні прапорці вбудованих інструментів. Типово вимкнені, якщо не діє правило auto-enable, специфічне для runtime. +Експериментальні прапорці вбудованих інструментів. За замовчуванням вимкнено, якщо не спрацьовує правило auto-enable, специфічне для runtime. ```json5 { tools: { experimental: { - planTool: true, // увімкнути експериментальний update_plan + planTool: true, // enable experimental update_plan }, }, } @@ -2266,8 +2304,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об Примітки: - `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи. -- Типово: `false` для провайдерів, відмінних від OpenAI. Запуски OpenAI та OpenAI Codex автоматично вмикають його, якщо значення не задано; установіть `false`, щоб вимкнути це auto-enable. -- Коли інструмент увімкнено, системний prompt також додає вказівки щодо використання, щоб модель застосовувала його лише для суттєвої роботи й тримала максимум один крок у стані `in_progress`. +- За замовчуванням: `false` для не-OpenAI постачальників. Запуски OpenAI і OpenAI Codex автоматично вмикають його, якщо значення не встановлено; задайте `false`, щоб вимкнути це auto-enable. +- Коли увімкнено, system prompt також додає інструкції щодо використання, щоб модель застосовувала його лише для суттєвої роботи і тримала не більш як один крок у стані `in_progress`. ### `agents.defaults.subagents` @@ -2287,21 +2325,21 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об } ``` -- `model`: типова модель для породжених sub-agents. Якщо не задано, sub-agents успадковують модель викликача. -- `allowAgents`: типовий allowlist id цільових агентів для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; типово: лише той самий агент). -- `runTimeoutSeconds`: типовий тайм-аут (у секундах) для `sessions_spawn`, коли виклик інструмента опускає `runTimeoutSeconds`. `0` означає відсутність тайм-ауту. +- `model`: модель за замовчуванням для породжених sub-agents. Якщо пропущено, sub-agents успадковують модель викликувача. +- `allowAgents`: allowlist id цільових агентів за замовчуванням для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; за замовчуванням: лише той самий агент). +- `runTimeoutSeconds`: тайм-аут за замовчуванням (секунди) для `sessions_spawn`, коли виклик інструмента пропускає `runTimeoutSeconds`. `0` означає без тайм-ауту. - Політика інструментів для subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## Власні провайдери та base URL +## Користувацькі постачальники і base URL -OpenClaw використовує вбудований каталог моделей. Додавайте власних провайдерів через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`. +OpenClaw використовує вбудований каталог моделей. Додавайте користувацьких постачальників через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`. ```json5 { models: { - mode: "merge", // merge (типово) | replace + mode: "merge", // merge (default) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2325,49 +2363,49 @@ OpenClaw використовує вбудований каталог модел } ``` -- Використовуйте `authHeader: true` + `headers` для власних потреб автентифікації. -- Перевизначте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий псевдонім змінної середовища). -- Пріоритет злиття для однакових ID провайдерів: - - Непорожні значення `baseUrl` з `models.json` агента мають пріоритет. - - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей провайдер не керується SecretRef у поточному контексті конфігурації/auth-profile. - - Значення `apiKey` провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env-ref, `secretref-managed` для file/exec ref) замість збереження розв’язаних секретів. - - Значення header провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env-ref, `secretref-managed` для file/exec ref). - - Порожні або відсутні `apiKey`/`baseUrl` агента повертаються до `models.providers` у конфігурації. - - Для однакових моделей `contextWindow`/`maxTokens` використовують більше значення з явної конфігурації або неявних значень каталогу. - - Для однакових моделей `contextTokens` зберігає явне обмеження runtime, якщо воно задане; використовуйте його, щоб обмежити ефективний контекст без зміни рідних метаданих моделі. - - Використовуйте `models.mode: "replace"`, якщо хочете, щоб конфігурація повністю переписувала `models.json`. - - Збереження маркерів є авторитетним за джерелом: маркери записуються з активного знімка конфігурації джерела (до розв’язання), а не з розв’язаних значень секретів runtime. +- Використовуйте `authHeader: true` + `headers` для нестандартних потреб автентифікації. +- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias змінної середовища). +- Пріоритет злиття для однакових ID постачальників: + - Непорожні значення `baseUrl` з agent `models.json` мають пріоритет. + - Непорожні значення `apiKey` з агента мають пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті config/auth-profile. + - Значення `apiKey` постачальника, керовані SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження розв’язаних секретів. + - Значення заголовків постачальника, керовані SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs). + - Порожній або відсутній `apiKey`/`baseUrl` агента повертається до `models.providers` у конфігурації. + - Для однакових моделей `contextWindow`/`maxTokens` береться вище значення між явною конфігурацією і неявними значеннями каталогу. + - Для однакових моделей `contextTokens` зберігає явне обмеження runtime, якщо воно присутнє; використовуйте це, щоб обмежити фактичний контекст без зміни нативних метаданих моделі. + - Використовуйте `models.mode: "replace"`, коли хочете, щоб конфігурація повністю переписала `models.json`. + - Збереження маркерів є source-authoritative: маркери записуються з активного знімка source config (до розв’язання), а не з розв’язаних значень секретів runtime. -### Деталі полів провайдера +### Деталі полів постачальника -- `models.mode`: поведінка каталогу провайдерів (`merge` або `replace`). -- `models.providers`: мапа власних провайдерів, ключем якої є id провайдера. +- `models.mode`: поведінка каталогу постачальників (`merge` або `replace`). +- `models.providers`: мапа користувацьких постачальників із ключем provider id. - `models.providers.*.api`: адаптер запитів (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо). -- `models.providers.*.apiKey`: облікові дані провайдера (краще використовувати SecretRef/env substitution). +- `models.providers.*.apiKey`: облікові дані постачальника (надавайте перевагу SecretRef/env substitution). - `models.providers.*.auth`: стратегія автентифікації (`api-key`, `token`, `oauth`, `aws-sdk`). -- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вставляє `options.num_ctx` у запити (типово: `true`). -- `models.providers.*.authHeader`: примусово передає облікові дані в заголовку `Authorization`, якщо це потрібно. -- `models.providers.*.baseUrl`: базовий URL API upstream. -- `models.providers.*.headers`: додаткові статичні заголовки для маршрутизації proxy/tenant. -- `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model-provider. - - `request.headers`: додаткові заголовки (зливаються з типовими для провайдера). Значення приймають SecretRef. - - `request.auth`: перевизначення стратегії автентифікації. Режими: `"provider-default"` (використовувати вбудовану auth провайдера), `"authorization-bearer"` (із `token`), `"header"` (із `headerName`, `value`, необов’язковим `prefix`). - - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати змінні середовища `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (із `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`. +- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вставляє `options.num_ctx` у запити (default: `true`). +- `models.providers.*.authHeader`: примусово передає облікові дані в заголовку `Authorization`, коли це потрібно. +- `models.providers.*.baseUrl`: базовий URL upstream API. +- `models.providers.*.headers`: додаткові статичні заголовки для proxy/tenant routing. +- `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model provider. + - `request.headers`: додаткові заголовки (зливаються зі стандартними заголовками постачальника). Значення приймають SecretRef. + - `request.auth`: перевизначення стратегії auth. Режими: `"provider-default"` (використовувати вбудовану auth постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов’язковим `prefix`). + - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати env `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`. - `request.tls`: перевизначення TLS для прямих з’єднань. Поля: `ca`, `cert`, `key`, `passphrase` (усі приймають SecretRef), `serverName`, `insecureSkipVerify`. -- `models.providers.*.models`: явні записи каталогу моделей провайдера. -- `models.providers.*.models.*.contextWindow`: метадані рідного контекстного вікна моделі. -- `models.providers.*.models.*.contextTokens`: необов’язкове runtime-обмеження контексту. Використовуйте це, коли вам потрібен менший ефективний бюджет контексту, ніж рідне `contextWindow` моделі. -- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` із непорожнім нерідним `baseUrl` (host не `api.openai.com`) OpenClaw примусово встановлює це значення в `false` під час runtime. Порожній/відсутній `baseUrl` зберігає типову поведінку OpenAI. -- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-сумісних chat-endpoint, які працюють лише з рядками. Коли `true`, OpenClaw сплющує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням запиту. +- `models.providers.*.models`: явні записи каталогу моделей постачальника. +- `models.providers.*.models.*.contextWindow`: метадані нативного контекстного вікна моделі. +- `models.providers.*.models.*.contextTokens`: необов’язкове runtime-обмеження контексту. Використовуйте це, коли хочете менший фактичний бюджет контексту, ніж нативне `contextWindow` моделі. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` із непорожнім ненативним `baseUrl` (host не `api.openai.com`) OpenClaw під час runtime примусово встановлює це в `false`. Порожній/відсутній `baseUrl` зберігає стандартну поведінку OpenAI. +- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-compatible chat endpoint-ів, які приймають лише рядки. Коли `true`, OpenClaw згладжує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням запиту. - `plugins.entries.amazon-bedrock.config.discovery`: корінь налаштувань auto-discovery Bedrock. -- `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов’язковий фільтр provider-id для цільового виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне контекстне вікно для виявлених моделей. -- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервні максимальні вихідні токени для виявлених моделей. +- `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне discovery. +- `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для discovery. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов’язковий фільтр provider-id для цільового discovery. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення discovery. +- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне context window для виявлених моделей. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервне максимальне число output tokens для виявлених моделей. -### Приклади провайдерів +### Приклади постачальників @@ -2420,7 +2458,7 @@ OpenClaw використовує вбудований каталог модел } ``` -Установіть `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`). Використовуйте посилання `opencode/...` для каталогу Zen або `opencode-go/...` для каталогу Go. Скорочення: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`. +Встановіть `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`). Використовуйте посилання `opencode/...` для каталогу Zen або `opencode-go/...` для каталогу Go. Скорочення: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`. @@ -2437,11 +2475,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Установіть `ZAI_API_KEY`. Псевдоніми `z.ai/*` і `z-ai/*` приймаються. Скорочення: `openclaw onboard --auth-choice zai-api-key`. +Встановіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як aliases. Скорочення: `openclaw onboard --auth-choice zai-api-key`. - Загальний endpoint: `https://api.z.ai/api/paas/v4` -- Endpoint для кодування (типово): `https://api.z.ai/api/coding/paas/v4` -- Для загального endpoint визначте власного провайдера з перевизначенням base URL. +- Coding endpoint (default): `https://api.z.ai/api/coding/paas/v4` +- Для загального endpoint визначте користувацького постачальника з перевизначенням base URL. @@ -2480,11 +2518,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Для endpoint Китаю: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`. +Для китайського endpoint: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`. -Нативні endpoint Moonshot декларують сумісність із потоковим використанням на спільному -транспорті `openai-completions`, і OpenClaw тепер визначає це за -можливостями endpoint, а не лише за вбудованим provider id. +Нативні endpoint-и Moonshot оголошують сумісність із потоковим використанням на спільному +транспорті `openai-completions`, і тепер OpenClaw визначає це за можливостями endpoint-а, +а не лише за вбудованим provider id. @@ -2502,11 +2540,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Anthropic-сумісний, вбудований провайдер. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. +Anthropic-compatible, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. - + ```json5 { @@ -2530,80 +2568,4 @@ Anthropic-сумісний, вбудований провайдер. Скоро name: "MiniMax M2.5", reasoning: true, input: ["text"], - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, - contextWindow: 192000, - maxTokens: 65536, - }, - ], - }, - }, - }, -} -``` - -Base URL має не містити `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`. - - - - - -```json5 -{ - agents: { - defaults: { - model: { primary: "minimax/MiniMax-M2.7" }, - models: { - "minimax/MiniMax-M2.7": { alias: "Minimax" }, - }, - }, - }, - models: { - mode: "merge", - providers: { - minimax: { - baseUrl: "https://api.minimax.io/anthropic", - apiKey: "${MINIMAX_API_KEY}", - api: "anthropic-messages", - models: [ - { - id: "MiniMax-M2.7", - name: "MiniMax M2.7", - reasoning: true, - input: ["text", "image"], - cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 }, - contextWindow: 204800, - maxTokens: 131072, - }, - ], - }, - }, - }, -} -``` - -Установіть `MINIMAX_API_KEY`. Скорочення: -`openclaw onboard --auth-choice minimax-global-api` або -`openclaw onboard --auth-choice minimax-cn-api`. -Тепер каталог моделей за замовчуванням містить лише M2.7. -На Anthropic-сумісному шляху потокової передачі OpenClaw типово вимикає thinking MiniMax, -якщо ви явно не задаєте `thinking` самостійно. `/fast on` або -`params.fastMode: true` переписує `MiniMax-M2.7` на -`MiniMax-M2.7-highspeed`. - - - - - -Див. [Локальні моделі](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; залишайте розміщені моделі злитими для fallback. - - - ---- - -## Skills - -```json5 -{ - skills: { - allowBundled: ["gemini", "peekaboo"], - load: { \ No newline at end of file + cost: \ No newline at end of file