From 99bc4a49a741727d1b77ff4588fd8739bc0450db Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Wed, 8 Apr 2026 06:34:59 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/discord.md | 556 ++++----- docs/uk/concepts/dreaming.md | 119 +- docs/uk/gateway/configuration-reference.md | 1201 ++++++++++---------- docs/uk/plugins/sdk-overview.md | 666 +++++------ docs/uk/providers/google.md | 78 +- docs/uk/providers/ollama.md | 124 +- 6 files changed, 1378 insertions(+), 1366 deletions(-) diff --git a/docs/uk/channels/discord.md b/docs/uk/channels/discord.md index 3f69fd6bd..dd4a8d457 100644 --- a/docs/uk/channels/discord.md +++ b/docs/uk/channels/discord.md @@ -4,66 +4,66 @@ read_when: summary: Статус підтримки бота Discord, можливості та налаштування title: Discord x-i18n: - generated_at: "2026-04-06T02:26:23Z" + generated_at: "2026-04-08T06:31:41Z" model: gpt-5.4 provider: openai - source_hash: 54af2176a1b4fa1681e3f07494def0c652a2730165058848000e71a59e2a9d08 + source_hash: 3cd2886fad941ae2129e681911309539e9a65a2352b777b538d7f4686a68f73f source_path: channels/discord.md workflow: 15 --- # Discord (Bot API) -Статус: готово для приватних повідомлень і каналів серверів через офіційний шлюз Discord. +Статус: готово для приватних повідомлень і каналів сервера через офіційний шлюз Discord. - - Приватні повідомлення Discord за замовчуванням працюють у режимі сполучення. + + Для Discord DM за замовчуванням використовується режим підключення. - Нативна поведінка команд і каталог команд. + Власна поведінка команд і каталог команд. - - Міжканальна діагностика та процес відновлення. + + Діагностика та процес відновлення для всіх каналів. ## Швидке налаштування -Вам потрібно створити нову програму з ботом, додати бота на свій сервер і сполучити його з OpenClaw. Ми рекомендуємо додати бота на ваш власний приватний сервер. Якщо у вас його ще немає, [спочатку створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**). +Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і підключити його до OpenClaw. Рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, [спочатку створіть його](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (виберіть **Create My Own > For me and my friends**). - - Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть її, наприклад, "OpenClaw". + + Перейдіть до [Discord Developer Portal](https://discord.com/developers/applications) і натисніть **New Application**. Назвіть його, наприклад, "OpenClaw". - Натисніть **Bot** на бічній панелі. Установіть **Username** на будь-яке ім’я, яким ви називаєте свого агента OpenClaw. + Натисніть **Bot** на бічній панелі. У полі **Username** вкажіть ім’я, яким ви називаєте свого агента OpenClaw. - Все ще на сторінці **Bot**, прокрутіть вниз до **Privileged Gateway Intents** і ввімкніть: + На сторінці **Bot** прокрутіть до **Privileged Gateway Intents** і увімкніть: - **Message Content Intent** (обов’язково) - - **Server Members Intent** (рекомендовано; обов’язково для allowlist ролей і зіставлення імен з ID) - - **Presence Intent** (необов’язково; потрібен лише для оновлень статусу присутності) + - **Server Members Intent** (рекомендовано; обов’язково для списків дозволів за ролями та зіставлення імен з ID) + - **Presence Intent** (необов’язково; потрібне лише для оновлень статусу присутності) - Прокрутіть угору на сторінці **Bot** і натисніть **Reset Token**. + Прокрутіть назад угору на сторінці **Bot** і натисніть **Reset Token**. - Попри назву, це генерує ваш перший токен — нічого насправді не «скидається». + Попри назву, це створює ваш перший токен — нічого не «скидається». - Скопіюйте токен і збережіть його десь. Це ваш **Bot Token**, і він невдовзі вам знадобиться. + Скопіюйте токен і збережіть його. Це ваш **Bot Token**, і він скоро знадобиться. - - Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL-запрошення з правильними дозволами, щоб додати бота на свій сервер. + + Натисніть **OAuth2** на бічній панелі. Ви згенеруєте URL-запрошення з потрібними дозволами, щоб додати бота на свій сервер. - Прокрутіть вниз до **OAuth2 URL Generator** і ввімкніть: + Прокрутіть до **OAuth2 URL Generator** і увімкніть: - `bot` - `applications.commands` @@ -77,30 +77,30 @@ x-i18n: - Attach Files - Add Reactions (необов’язково) - Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue**, щоб підключити. Тепер ви маєте побачити свого бота на сервері Discord. + Скопіюйте згенерований URL унизу, вставте його в браузер, виберіть свій сервер і натисніть **Continue** для підключення. Тепер ви маєте бачити свого бота на Discord-сервері. - Повернувшись у програму Discord, вам потрібно ввімкнути Developer Mode, щоб мати змогу копіювати внутрішні ID. + Повернувшись у застосунок Discord, увімкніть Developer Mode, щоб можна було копіювати внутрішні ID. 1. Натисніть **User Settings** (значок шестерні поруч із вашим аватаром) → **Advanced** → увімкніть **Developer Mode** 2. Клацніть правою кнопкою миші на **значку сервера** на бічній панелі → **Copy Server ID** - 3. Клацніть правою кнопкою миші на **своєму аватарі** → **Copy User ID** + 3. Клацніть правою кнопкою миші на **власному аватарі** → **Copy User ID** - Збережіть свої **Server ID** і **User ID** разом із Bot Token — на наступному кроці ви надішлете всі три OpenClaw. + Збережіть **Server ID** і **User ID** разом із Bot Token — на наступному кроці ви передасте всі три значення до OpenClaw. - - Щоб сполучення працювало, Discord має дозволяти вашому боту надсилати вам приватні повідомлення. Клацніть правою кнопкою миші на **значку сервера** → **Privacy Settings** → увімкніть **Direct Messages**. + + Щоб підключення працювало, Discord має дозволяти вашому боту надсилати вам DM. Клацніть правою кнопкою миші на **значку сервера** → **Privacy Settings** → увімкніть **Direct Messages**. - Це дозволяє учасникам сервера (включно з ботами) надсилати вам приватні повідомлення. Залиште це ввімкненим, якщо хочете використовувати приватні повідомлення Discord з OpenClaw. Якщо ви плануєте використовувати лише канали серверів, можете вимкнути приватні повідомлення після сполучення. + Це дозволяє учасникам сервера (включно з ботами) надсилати вам DM. Залиште це ввімкненим, якщо хочете використовувати Discord DM з OpenClaw. Якщо ви плануєте використовувати лише канали сервера, можете вимкнути DM після підключення. - - Токен вашого Discord-бота — це секрет (як пароль). Установіть його на машині, де працює OpenClaw, перш ніж надсилати повідомлення своєму агенту. + + Токен вашого Discord-бота — це секретні дані (як пароль). Задайте його на машині, де запущено OpenClaw, перш ніж писати своєму агенту. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -110,20 +110,20 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через програму OpenClaw для Mac або зупинивши й знову запустивши процес `openclaw gateway run`. + Якщо OpenClaw уже працює як фоновий сервіс, перезапустіть його через застосунок OpenClaw Mac або зупинивши й знову запустивши процес `openclaw gateway run`. - + - Поспілкуйтеся зі своїм агентом OpenClaw у будь-якому наявному каналі (наприклад, у Telegram) і повідомте йому це. Якщо Discord — ваш перший канал, натомість використайте вкладку CLI / config. + Напишіть своєму агенту OpenClaw у будь-якому наявному каналі (наприклад, Telegram) і повідомте йому це. Якщо Discord — ваш перший канал, замість цього використайте вкладку CLI / config. - > "Я вже встановив токен свого Discord-бота в конфігурації. Будь ласка, заверши налаштування Discord за допомогою User ID `` і Server ID ``." + > "Я вже задав токен свого Discord-бота в конфігурації. Будь ласка, заверши налаштування Discord з User ID `` і Server ID ``." - Якщо ви віддаєте перевагу файловій конфігурації, установіть: + Якщо ви віддаєте перевагу конфігурації на основі файлу, задайте: ```json5 { @@ -140,27 +140,27 @@ openclaw gateway } ``` - Резервне env-значення для облікового запису за замовчуванням: + Резервне значення env для облікового запису за замовчуванням: ```bash DISCORD_BOT_TOKEN=... ``` - Підтримуються текстові значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Secrets Management](/uk/gateway/secrets). + Підтримуються відкриті значення `token`. Значення SecretRef також підтримуються для `channels.discord.token` у провайдерах env/file/exec. Див. [Керування секретами](/uk/gateway/secrets). - - Дочекайтеся, поки шлюз запуститься, а потім надішліть боту приватне повідомлення в Discord. У відповідь він надішле код сполучення. + + Дочекайтеся запуску шлюзу, а потім надішліть DM своєму боту в Discord. Він відповість кодом підключення. - Надішліть код сполучення своєму агенту в наявному каналі: + Надішліть код підключення своєму агенту в наявному каналі: - > "Підтвердь цей код сполучення Discord: ``" + > "Підтвердь цей код підключення Discord: ``" @@ -172,29 +172,29 @@ openclaw pairing approve discord - Коди сполучення спливають через 1 годину. + Коди підключення дійсні протягом 1 години. - Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через приватні повідомлення. + Тепер ви маєте змогу спілкуватися зі своїм агентом у Discord через DM. -Визначення токена враховує обліковий запис. Значення токена в конфігурації мають пріоритет над резервним значенням із env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. -Для розширених вихідних викликів (message tool/channel actions) явний `token` для виклику використовується для цього виклику. Це стосується дій надсилання та дій у стилі читання/перевірки (наприклад, read/search/fetch/thread/pins/permissions). Налаштування політики облікового запису/повторних спроб усе ще беруться з вибраного облікового запису в активному runtime snapshot. +Розв’язання токена враховує обліковий запис. Значення токена з конфігурації мають пріоритет над резервним env. `DISCORD_BOT_TOKEN` використовується лише для облікового запису за замовчуванням. +Для розширених вихідних викликів (message tool/channel actions) явний `token` для кожного виклику використовується лише для цього виклику. Це стосується дій надсилання та дій читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису та параметри повторних спроб однаково беруться з вибраного облікового запису в активному знімку runtime. ## Рекомендовано: налаштуйте робочий простір сервера -Щойно приватні повідомлення запрацюють, ви можете налаштувати свій сервер Discord як повноцінний робочий простір, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот. +Коли DM уже працюють, ви можете налаштувати свій Discord-сервер як повноцінний робочий простір, де кожен канал матиме власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де єте лише ви і ваш бот. - - Це дозволяє вашому агенту відповідати в будь-якому каналі вашого сервера, а не лише в приватних повідомленнях. + + Це дозволить вашому агенту відповідати в будь-якому каналі на вашому сервері, а не лише в DM. - > "Додай мій Discord Server ID `` до allowlist серверів" + > "Додай мій Discord Server ID `` до списку дозволених серверів" @@ -220,14 +220,14 @@ openclaw pairing approve discord - За замовчуванням ваш агент відповідає в каналах сервера лише тоді, коли його згадують через @mention. Для приватного сервера ви, ймовірно, захочете, щоб він відповідав на кожне повідомлення. + За замовчуванням ваш агент відповідає в каналах сервера лише при згадці через @mention. Для приватного сервера ви, імовірно, захочете, щоб він відповідав на кожне повідомлення. - > "Дозволь моєму агенту відповідати на цьому сервері без потреби в @mentioned" + > "Дозволь моєму агенту відповідати на цьому сервері без обов’язкової @mention" - Установіть `requireMention: false` у конфігурації сервера: + Задайте `requireMention: false` у конфігурації свого сервера: ```json5 { @@ -248,76 +248,76 @@ openclaw pairing approve discord - - За замовчуванням довготривала пам’ять (MEMORY.md) завантажується лише в сесіях приватних повідомлень. У каналах сервера MEMORY.md не завантажується автоматично. + + За замовчуванням довготривала пам’ять (MEMORY.md) завантажується лише в DM-сесіях. У каналах сервера MEMORY.md не завантажується автоматично. > "Коли я ставлю запитання в каналах Discord, використовуй memory_search або memory_get, якщо тобі потрібен довготривалий контекст із MEMORY.md." - Якщо вам потрібен спільний контекст у кожному каналі, розмістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони вбудовуються в кожну сесію). Зберігайте довготривалі нотатки в `MEMORY.md` і звертайтеся до них за потреби за допомогою інструментів пам’яті. + Якщо вам потрібен спільний контекст у кожному каналі, розмістіть стабільні інструкції в `AGENTS.md` або `USER.md` (вони додаються до кожної сесії). Довготривалі нотатки зберігайте в `MEMORY.md` і отримуйте до них доступ за потреби за допомогою інструментів пам’яті. -Тепер створіть кілька каналів на своєму сервері Discord і починайте спілкуватися. Ваш агент може бачити назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що відповідає вашому процесу роботи. +Тепер створіть кілька каналів на своєму Discord-сервері й починайте спілкування. Ваш агент бачить назву каналу, і кожен канал отримує власну ізольовану сесію — тож ви можете налаштувати `#coding`, `#home`, `#research` або будь-що, що відповідає вашому процесу. ## Модель runtime -- Шлюз керує з’єднанням із Discord. +- Шлюз керує підключенням до Discord. - Маршрутизація відповідей детермінована: вхідні повідомлення Discord отримують відповіді назад у Discord. -- За замовчуванням (`session.dmScope=main`) прямі чати спільно використовують основну сесію агента (`agent:main:main`). -- Канали серверів мають ізольовані ключі сесій (`agent::discord:channel:`). -- Групові приватні повідомлення ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`). -- Нативні слеш-команди виконуються в ізольованих сесіях команд (`agent::discord:slash:`), водночас зберігаючи `CommandTargetSessionKey` для маршрутизованої сесії розмови. +- За замовчуванням (`session.dmScope=main`) прямі чати використовують основну сесію агента (`agent:main:main`). +- Канали сервера мають ізольовані ключі сесій (`agent::discord:channel:`). +- Групові DM ігноруються за замовчуванням (`channels.discord.dm.groupEnabled=false`). +- Власні слеш-команди запускаються в ізольованих командних сесіях (`agent::discord:slash:`), але при цьому несуть `CommandTargetSessionKey` до маршрутизованої сесії розмови. -## Канали forum +## Канали форуму -Канали форумів і медіаканали Discord приймають лише дописи в потоках. OpenClaw підтримує два способи їх створення: +Канали форумів і медіа в Discord приймають лише публікації в тредах. OpenClaw підтримує два способи їх створення: -- Надішліть повідомлення до батьківського forum (`channel:`), щоб автоматично створити потік. Заголовок потоку використовує перший непорожній рядок вашого повідомлення. -- Використайте `openclaw message thread create`, щоб створити потік безпосередньо. Не передавайте `--message-id` для каналів forum. +- Надішліть повідомлення батьківському форуму (`channel:`), щоб автоматично створити тред. Заголовок треду береться з першого непорожнього рядка вашого повідомлення. +- Використайте `openclaw message thread create`, щоб створити тред безпосередньо. Не передавайте `--message-id` для каналів форуму. -Приклад: надіслати до батьківського forum, щоб створити потік +Приклад: надсилання до батьківського форуму для створення треду ```bash openclaw message send --channel discord --target channel: \ --message "Topic title\nBody of the post" ``` -Приклад: явно створити потік forum +Приклад: явне створення треду форуму ```bash openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Батьківські forum не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте в сам потік (`channel:`). +Батьківські форуми не приймають компоненти Discord. Якщо вам потрібні компоненти, надсилайте повідомлення до самого треду (`channel:`). ## Інтерактивні компоненти -OpenClaw підтримує контейнери Discord components v2 для повідомлень агента. Використовуйте message tool із payload `components`. Результати взаємодій маршрутизуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. +OpenClaw підтримує контейнери Discord components v2 для повідомлень агента. Використовуйте інструмент повідомлень із payload `components`. Результати взаємодії повертаються агенту як звичайні вхідні повідомлення та дотримуються наявних налаштувань Discord `replyToMode`. Підтримувані блоки: - `text`, `section`, `separator`, `actions`, `media-gallery`, `file` -- Рядки дій підтримують до 5 кнопок або одне меню вибору +- Рядки дій дозволяють до 5 кнопок або одне меню вибору - Типи вибору: `string`, `user`, `role`, `mentionable`, `channel` -За замовчуванням компоненти одноразові. Установіть `components.reusable=true`, щоб дозволити використовувати кнопки, елементи вибору та форми кілька разів, доки вони не спливуть. +За замовчуванням компоненти одноразові. Задайте `components.reusable=true`, щоб дозволити багаторазове використання кнопок, меню вибору та форм до завершення строку їх дії. -Щоб обмежити, хто може натискати кнопку, установіть `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Якщо це налаштовано, користувачі, які не відповідають умові, отримають ефемерну відмову. +Щоб обмежити, хто може натискати кнопку, задайте `allowedUsers` для цієї кнопки (ID користувачів Discord, теги або `*`). Якщо це налаштовано, користувачі без збігу отримають тимчасову відмову, видиму лише їм. -Слеш-команди `/model` і `/models` відкривають інтерактивний засіб вибору моделі з випадними списками провайдера та моделі, а також кроком Submit. Відповідь засобу вибору є ефемерною, і використовувати її може лише користувач, який його викликав. +Слеш-команди `/model` і `/models` відкривають інтерактивний вибір моделі зі списками провайдера й моделі та кроком Submit. Відповідь вибору є тимчасовою й доступна лише користувачеві, який викликав команду. Вкладення файлів: - Блоки `file` мають вказувати на посилання вкладення (`attachment://`) -- Надайте вкладення через `media`/`path`/`filePath` (один файл); використовуйте `media-gallery` для кількох файлів -- Використовуйте `filename`, щоб перевизначити ім’я завантаження, коли воно має відповідати посиланню вкладення +- Надайте вкладення через `media`/`path`/`filePath` (один файл); для кількох файлів використовуйте `media-gallery` +- Використовуйте `filename`, щоб перевизначити ім’я завантаження, коли воно має збігатися з посиланням вкладення Модальні форми: @@ -382,20 +382,20 @@ OpenClaw підтримує контейнери Discord components v2 для п ## Керування доступом і маршрутизація - - `channels.discord.dmPolicy` керує доступом до приватних повідомлень (застаріле: `channels.discord.dm.policy`): + + `channels.discord.dmPolicy` керує доступом до DM (застаріле: `channels.discord.dm.policy`): - `pairing` (за замовчуванням) - `allowlist` - - `open` (потребує, щоб `channels.discord.allowFrom` включав `"*"`; застаріле: `channels.discord.dm.allowFrom`) + - `open` (потрібно, щоб `channels.discord.allowFrom` містив `"*"`; застаріле: `channels.discord.dm.allowFrom`) - `disabled` - Якщо політика приватних повідомлень не є open, невідомі користувачі блокуються (або отримують запит на сполучення в режимі `pairing`). + Якщо політика DM не є open, невідомі користувачі блокуються (або отримують запит на підключення в режимі `pairing`). - Пріоритет для кількох облікових записів: + Пріоритет у multi-account: - `channels.discord.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - - Іменовані облікові записи успадковують `channels.discord.allowFrom`, коли їхній власний `allowFrom` не встановлено. + - Іменовані облікові записи успадковують `channels.discord.allowFrom`, якщо їхній власний `allowFrom` не задано. - Іменовані облікові записи не успадковують `channels.discord.accounts.default.allowFrom`. Формат DM-цілі для доставки: @@ -403,27 +403,27 @@ OpenClaw підтримує контейнери Discord components v2 для п - `user:` - згадка `<@id>` - Голі числові ID неоднозначні й відхиляються, якщо явно не вказано вид цілі користувача/каналу. + Просте числове ID є неоднозначним і відхиляється, якщо явно не вказано тип цілі user/channel. - + Обробка серверів керується через `channels.discord.groupPolicy`: - `open` - `allowlist` - `disabled` - Безпечна базова конфігурація, коли існує `channels.discord`, — `allowlist`. + Безпечне базове значення, коли існує `channels.discord`, — `allowlist`. Поведінка `allowlist`: - - сервер має збігатися з `channels.discord.guilds` (бажано `id`, slug теж приймається) - - необов’язкові allowlist відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо налаштовано будь-який із них, відправники дозволяються, коли збігаються з `users` АБО `roles` - - пряме зіставлення за іменем/тегом вимкнене за замовчуванням; увімкніть `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності - - імена/теги підтримуються для `users`, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами - - якщо для сервера налаштовано `channels`, канали, яких немає в списку, забороняються - - якщо сервер не має блоку `channels`, дозволяються всі канали в цьому сервері з allowlist + - сервер має збігатися з `channels.discord.guilds` (переважно `id`, також приймається slug) + - необов’язкові списки дозволених відправників: `users` (рекомендовано стабільні ID) і `roles` (лише ID ролей); якщо задано будь-який із них, відправники дозволяються, коли збігаються з `users` АБО `roles` + - пряме зіставлення за ім’ям/тегом за замовчуванням вимкнено; вмикайте `channels.discord.dangerouslyAllowNameMatching: true` лише як аварійний режим сумісності + - для `users` підтримуються імена/теги, але ID безпечніші; `openclaw security audit` попереджає, коли використовуються записи з іменами/тегами + - якщо для сервера налаштовано `channels`, канали, яких немає в списку, відхиляються + - якщо сервер не має блоку `channels`, дозволяються всі канали в цьому сервері зі списку дозволених Приклад: @@ -449,33 +449,33 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Якщо ви лише встановите `DISCORD_BOT_TOKEN` і не створите блок `channels.discord`, резервна поведінка runtime буде `groupPolicy="allowlist"` (з попередженням у журналах), навіть якщо `channels.defaults.groupPolicy` дорівнює `open`. + Якщо ви задаєте лише `DISCORD_BOT_TOKEN` і не створюєте блок `channels.discord`, резервне значення runtime буде `groupPolicy="allowlist"` (із попередженням у логах), навіть якщо `channels.defaults.groupPolicy` має значення `open`. - - Повідомлення серверів за замовчуванням вимагають згадки. + + Повідомлення серверів за замовчуванням потребують згадки. - Визначення згадки включає: + Виявлення згадок включає: - явну згадку бота - налаштовані шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) - - неявну поведінку відповіді боту у підтримуваних випадках + - неявну поведінку reply-to-bot у підтримуваних випадках `requireMention` налаштовується для кожного сервера/каналу (`channels.discord.guilds...`). `ignoreOtherMentions` за потреби відкидає повідомлення, які згадують іншого користувача/роль, але не бота (за винятком @everyone/@here). - Групові приватні повідомлення: + Групові DM: - за замовчуванням: ігноруються (`dm.groupEnabled=false`) - - необов’язковий allowlist через `dm.groupChannels` (ID каналів або slug) + - необов’язковий список дозволених через `dm.groupChannels` (ID каналів або slug) ### Маршрутизація агентів за ролями -Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників Discord-сервера до різних агентів за ID ролі. Прив’язки за ролями приймають лише ID ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише за сервером. Якщо прив’язка також задає інші поля відповідності (наприклад, `peer` + `guildId` + `roles`), мають збігатися всі налаштовані поля. +Використовуйте `bindings[].match.roles`, щоб маршрутизувати учасників серверів Discord до різних агентів за ID ролі. Прив’язки на основі ролей приймають лише ID ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише для сервера. Якщо прив’язка також задає інші поля відповідності (наприклад `peer` + `guildId` + `roles`), усі налаштовані поля мають збігатися. ```json5 { @@ -502,7 +502,7 @@ OpenClaw підтримує контейнери Discord components v2 для п ## Налаштування Developer Portal - + 1. Discord Developer Portal -> **Applications** -> **New Application** 2. **Bot** -> **Add Bot** @@ -516,7 +516,7 @@ OpenClaw підтримує контейнери Discord components v2 для п - Message Content Intent - Server Members Intent (рекомендовано) - Presence intent є необов’язковим і потрібен лише якщо ви хочете отримувати оновлення статусу присутності. Установлення статусу присутності бота (`setPresence`) не потребує ввімкнення оновлень присутності для учасників. + Presence intent є необов’язковим і потрібний лише якщо ви хочете отримувати оновлення присутності. Установлення присутності бота (`setPresence`) не вимагає ввімкнення оновлень присутності для учасників. @@ -538,8 +538,8 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Увімкніть Discord Developer Mode, потім скопіюйте: + + Увімкніть Discord Developer Mode, а потім скопіюйте: - ID сервера - ID каналу @@ -550,24 +550,24 @@ OpenClaw підтримує контейнери Discord components v2 для п -## Нативні команди та авторизація команд +## Власні команди та авторизація команд -- `commands.native` за замовчуванням має значення `"auto"` і ввімкнений для Discord. -- Перевизначення для конкретного каналу: `channels.discord.commands.native`. -- `commands.native=false` явно очищає раніше зареєстровані нативні команди Discord. -- Авторизація нативних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень. -- Команди все ще можуть бути видимими в інтерфейсі Discord для користувачів, які не мають доступу; виконання все одно застосовує авторизацію OpenClaw і повертає "not authorized". +- `commands.native` за замовчуванням дорівнює `"auto"` і увімкнене для Discord. +- Перевизначення для каналу: `channels.discord.commands.native`. +- `commands.native=false` явно очищує раніше зареєстровані власні команди Discord. +- Авторизація власних команд використовує ті самі списки дозволених і політики Discord, що й звичайна обробка повідомлень. +- Команди все ще можуть бути видимими в UI Discord для користувачів без авторизації; виконання однаково застосовує авторизацію OpenClaw і повертає "not authorized". -Див. [Slash commands](/uk/tools/slash-commands) для каталогу команд і поведінки. +Див. [Слеш-команди](/uk/tools/slash-commands) щодо каталогу команд і поведінки. -Налаштування слеш-команд за замовчуванням: +Стандартні налаштування слеш-команд: - `ephemeral: true` -## Деталі функцій +## Подробиці функцій - + Discord підтримує теги відповідей у виводі агента: - `[[reply_to_current]]` @@ -580,26 +580,26 @@ OpenClaw підтримує контейнери Discord components v2 для п - `all` - `batched` - Примітка: `off` вимикає неявне впорядкування відповідей у потоки. Явні теги `[[reply_to_*]]` усе одно враховуються. - `first` завжди додає неявне посилання нативної відповіді до першого вихідного повідомлення Discord у межах ходу. - `batched` додає неявне посилання нативної відповіді Discord лише коли + Примітка: `off` вимикає неявне ниткування відповідей. Явні теги `[[reply_to_*]]` однаково враховуються. + `first` завжди додає неявне власне посилання reply до першого вихідного повідомлення Discord за поточний хід. + `batched` додає неявне власне посилання reply Discord лише тоді, коли вхідний хід був дебаунсованим пакетом із кількох повідомлень. Це корисно, - якщо ви хочете використовувати нативні відповіді переважно для неоднозначних - активних чатів із серіями повідомлень, а не для кожного окремого повідомлення. + коли ви хочете використовувати власні replies переважно для неоднозначних + сплесків чату, а не для кожного окремого повідомлення. - ID повідомлень передаються в контексті/історії, щоб агенти могли націлюватися на конкретні повідомлення. + ID повідомлень потрапляють у контекст/історію, тож агенти можуть націлюватися на конкретні повідомлення. - - OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення та редагуючи його в міру надходження тексту. + + OpenClaw може транслювати чернетки відповідей, надсилаючи тимчасове повідомлення й редагуючи його в міру надходження тексту. - `channels.discord.streaming` керує потоковим попереднім переглядом (`off` | `partial` | `block` | `progress`, за замовчуванням: `off`). - - За замовчуванням залишається `off`, оскільки редагування попереднього перегляду в Discord може швидко впертися в обмеження частоти, особливо коли кілька ботів або шлюзів використовують один обліковий запис або трафік сервера. - - `progress` приймається для міжканальної узгодженості та відображається як `partial` у Discord. - - `channels.discord.streamMode` — це застарілий псевдонім, і він автоматично мігрується. + - Значення за замовчуванням залишається `off`, оскільки редагування попереднього перегляду в Discord може швидко впиратися в обмеження швидкості, особливо коли один обліковий запис або трафік сервера використовують кілька ботів чи шлюзів. + - `progress` приймається для узгодженості між каналами й у Discord зіставляється з `partial`. + - `channels.discord.streamMode` — це застарілий псевдонім, що мігрує автоматично. - `partial` редагує одне повідомлення попереднього перегляду в міру надходження токенів. - - `block` виводить фрагменти розміру чернетки (використовуйте `draftChunk` для налаштування розміру та точок розриву). + - `block` надсилає частини розміру чернетки (для налаштування розміру й точок поділу використовуйте `draftChunk`). Приклад: @@ -613,7 +613,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Типові значення фрагментації для режиму `block` (обмежуються `channels.discord.textChunkLimit`): + Значення chunking за замовчуванням для режиму `block` (обмежуються `channels.discord.textChunkLimit`): ```json5 { @@ -632,45 +632,45 @@ OpenClaw підтримує контейнери Discord components v2 для п Потоковий попередній перегляд підтримує лише текст; медіавідповіді повертаються до звичайної доставки. - Примітка: потоковий попередній перегляд відокремлений від block streaming. Коли block streaming явно - увімкнено для Discord, OpenClaw пропускає потоковий попередній перегляд, щоб уникнути подвійного потокового передавання. + Примітка: потоковий попередній перегляд відокремлений від block streaming. Коли для Discord явно + увімкнено block streaming, OpenClaw пропускає preview stream, щоб уникнути подвійного потокового передавання. - + Контекст історії сервера: - `channels.discord.historyLimit` за замовчуванням `20` - - резервно: `messages.groupChat.historyLimit` + - резервне значення: `messages.groupChat.historyLimit` - `0` вимикає - Елементи керування історією приватних повідомлень: + Керування історією DM: - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` - Поведінка потоків: + Поведінка тредів: - - Потоки Discord маршрутизуються як сесії каналів - - метадані батьківського потоку можуть використовуватися для зв’язування з батьківською сесією - - конфігурація потоку успадковує конфігурацію батьківського каналу, якщо не існує запису, специфічного для потоку + - Треди Discord маршрутизуються як сесії каналів + - метадані батьківського треду можна використовувати для прив’язки до батьківської сесії + - конфігурація треду успадковує конфігурацію батьківського каналу, якщо не існує окремого запису для треду - Теми каналів вбудовуються як **недовірений** контекст (не як системний prompt). - Контекст відповідей і процитованих повідомлень наразі залишається таким, як отримано. - Allowlist Discord переважно визначають, хто може активувати агента, а не є повноцінною межею редагування додаткового контексту. + Теми каналів додаються як **недовірений** контекст (не як system prompt). + Контекст reply і цитованих повідомлень наразі залишається таким, як був отриманий. + Списки дозволених у Discord насамперед обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту. - - Discord може прив’язати потік до цілі сесії, щоб подальші повідомлення в цьому потоці продовжували маршрутизуватися до тієї самої сесії (включно із сесіями субагентів). + + Discord може прив’язувати тред до цільової сесії, щоб подальші повідомлення в цьому треді й надалі маршрутизувалися до тієї самої сесії (включно із сесіями субагентів). Команди: - - `/focus ` прив’язати поточний/новий потік до цілі субагента/сесії - - `/unfocus` видалити поточну прив’язку потоку + - `/focus ` прив’язати поточний/новий тред до цілі субагента/сесії + - `/unfocus` прибрати поточну прив’язку треду - `/agents` показати активні запуски та стан прив’язки - - `/session idle ` переглянути/оновити автоматичне скасування фокусу через неактивність для прив’язаних фокусованих сесій - - `/session max-age ` переглянути/оновити жорсткий максимальний вік для прив’язаних фокусованих сесій + - `/session idle ` переглянути/оновити автоматичне скасування фокусу через неактивність для фокусованих прив’язок + - `/session max-age ` переглянути/оновити жорсткий максимальний вік для фокусованих прив’язок Конфігурація: @@ -700,16 +700,16 @@ OpenClaw підтримує контейнери Discord components v2 для п - `session.threadBindings.*` задає глобальні значення за замовчуванням. - `channels.discord.threadBindings.*` перевизначає поведінку Discord. - - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати потоки для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). - - Якщо прив’язки потоків вимкнені для облікового запису, `/focus` і пов’язані операції прив’язки потоків недоступні. + - `spawnSubagentSessions` має бути true, щоб автоматично створювати/прив’язувати треди для `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` має бути true, щоб автоматично створювати/прив’язувати треди для ACP (`/acp spawn ... --thread ...` або `sessions_spawn({ runtime: "acp", thread: true })`). + - Якщо прив’язки тредів вимкнені для облікового запису, `/focus` і пов’язані операції прив’язки тредів недоступні. - Див. [Sub-agents](/uk/tools/subagents), [ACP Agents](/uk/tools/acp-agents) і [Configuration Reference](/uk/gateway/configuration-reference). + Див. [Субагенти](/uk/tools/subagents), [ACP Agents](/uk/tools/acp-agents) і [Довідник із конфігурації](/uk/gateway/configuration-reference). - Для стабільних «завжди ввімкнених» ACP-робочих просторів налаштуйте верхньорівневі типізовані ACP-прив’язки, націлені на розмови Discord. + Для стабільних «завжди активних» робочих просторів ACP налаштуйте типізовані прив’язки ACP верхнього рівня, націлені на розмови Discord. Шлях конфігурації: @@ -765,15 +765,15 @@ OpenClaw підтримує контейнери Discord components v2 для п Примітки: - - `/acp spawn codex --bind here` прив’язує поточний канал або потік Discord на місці й надалі спрямовує майбутні повідомлення до тієї самої ACP-сесії. - - Це все ще може означати «запустити свіжу ACP-сесію Codex», але саме по собі не створює новий потік Discord. Наявний канал залишається поверхнею чату. - - Codex усе ще може працювати у власному `cwd` або робочому просторі backend на диску. Цей робочий простір є станом runtime, а не потоком Discord. - - Повідомлення в потоках можуть успадковувати ACP-прив’язку батьківського каналу. - - У прив’язаному каналі або потоці `/new` і `/reset` скидають ту саму ACP-сесію на місці. - - Тимчасові прив’язки потоків усе ще працюють і можуть перевизначати визначення цілі, поки активні. - - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірній потік через `--thread auto|here`. Він не потрібен для `/acp spawn ... --bind here` у поточному каналі. + - `/acp spawn codex --bind here` прив’язує поточний канал або тред Discord на місці та спрямовує всі майбутні повідомлення до тієї самої ACP-сесії. + - Це все ще може означати «запустити нову ACP-сесію Codex», але саме по собі не створює новий тред Discord. Наявний канал залишається поверхнею чату. + - Codex однаково може працювати у власному `cwd` або робочому просторі backend на диску. Цей робочий простір — стан runtime, а не тред Discord. + - Повідомлення треду можуть успадковувати ACP-прив’язку батьківського каналу. + - У прив’язаному каналі або треді `/new` і `/reset` скидають ту саму ACP-сесію на місці. + - Тимчасові прив’язки тредів усе ще працюють і можуть перевизначати розв’язання цілі, доки вони активні. + - `spawnAcpSessions` потрібен лише тоді, коли OpenClaw має створити/прив’язати дочірній тред через `--thread auto|here`. Для `/acp spawn ... --bind here` у поточному каналі він не потрібен. - Докладніше про поведінку прив’язок див. у [ACP Agents](/uk/tools/acp-agents). + Див. [ACP Agents](/uk/tools/acp-agents) щодо подробиць поведінки прив’язок. @@ -785,31 +785,31 @@ OpenClaw підтримує контейнери Discord components v2 для п - `all` - `allowlist` (використовує `guilds..users`) - Події реакцій перетворюються на системні події й приєднуються до маршрутизованої Discord-сесії. + Події реакцій перетворюються на system events і прикріплюються до маршрутизованої Discord-сесії. - - `ackReaction` надсилає емодзі-підтвердження, поки OpenClaw обробляє вхідне повідомлення. + + `ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення. - Порядок визначення: + Порядок розв’язання: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - резервне емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") + - резервне emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: - - Discord приймає emoji Unicode або назви власних emoji. + - Discord приймає unicode emoji або назви власних emoji. - Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису. - - Записи конфігурації, ініційовані з каналу, увімкнені за замовчуванням. + + Записи в конфігурацію, ініційовані з каналу, увімкнені за замовчуванням. - Це впливає на потоки `/config set|unset` (коли функції команд увімкнено). + Це впливає на потоки `/config set|unset` (коли функції команд увімкнені). Вимкнення: @@ -825,8 +825,8 @@ OpenClaw підтримує контейнери Discord components v2 для п - - Спрямовуйте трафік WebSocket шлюзу Discord і стартові REST-запити (ID програми + визначення allowlist) через HTTP(S) проксі за допомогою `channels.discord.proxy`. + + Спрямовуйте трафік WebSocket шлюзу Discord і REST-запити під час запуску (ID застосунку + розв’язання списку дозволених) через HTTP(S)-проксі за допомогою `channels.discord.proxy`. ```json5 { @@ -857,7 +857,7 @@ OpenClaw підтримує контейнери Discord components v2 для п - Увімкніть визначення PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: + Увімкніть розв’язання PluralKit, щоб зіставляти проксійовані повідомлення з ідентичністю учасника системи: ```json5 { @@ -874,17 +874,17 @@ OpenClaw підтримує контейнери Discord components v2 для п Примітки: - - allowlist можуть використовувати `pk:` - - відображувані імена учасників зіставляються за name/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` - - пошуки використовують ID оригінального повідомлення та обмежені часовим вікном - - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо `allowBots=true` не встановлено + - списки дозволених можуть використовувати `pk:` + - відображувані імена учасників зіставляються за ім’ям/slug лише коли `channels.discord.dangerouslyAllowNameMatching: true` + - пошук використовує ID початкового повідомлення й обмежується часовим вікном + - якщо пошук не вдається, проксійовані повідомлення вважаються повідомленнями бота й відкидаються, якщо тільки не задано `allowBots=true` - - Оновлення статусу присутності застосовуються, коли ви встановлюєте поле статусу або активності, або коли вмикаєте автоматичний статус присутності. + + Оновлення присутності застосовуються, коли ви задаєте поле статусу або активності, або коли вмикаєте автоматичну присутність. - Приклад лише зі статусом: + Приклад лише статусу: ```json5 { @@ -896,7 +896,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Приклад активності (користувацький статус є типом активності за замовчуванням): + Приклад активності (власний статус — тип активності за замовчуванням): ```json5 { @@ -909,7 +909,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Приклад стриму: + Приклад стримінгу: ```json5 { @@ -923,7 +923,7 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Відповідність типів активності: + Карта типів активності: - 0: Playing - 1: Streaming (потрібен `activityUrl`) @@ -932,7 +932,7 @@ OpenClaw підтримує контейнери Discord components v2 для п - 4: Custom (використовує текст активності як стан статусу; emoji необов’язкове) - 5: Competing - Приклад автоматичного статусу присутності (сигнал працездатності runtime): + Приклад автоматичної присутності (сигнал стану runtime): ```json5 { @@ -949,50 +949,50 @@ OpenClaw підтримує контейнери Discord components v2 для п } ``` - Auto presence зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту: + Автоматична присутність зіставляє доступність runtime зі статусом Discord: healthy => online, degraded або unknown => idle, exhausted або unavailable => dnd. Необов’язкові перевизначення тексту: - `autoPresence.healthyText` - `autoPresence.degradedText` - - `autoPresence.exhaustedText` (підтримує заповнювач `{reason}`) + - `autoPresence.exhaustedText` (підтримує placeholder `{reason}`) - Discord підтримує обробку підтверджень за допомогою кнопок у приватних повідомленнях і може за бажанням публікувати запити на підтвердження у вихідному каналі. + Discord підтримує обробку підтверджень за допомогою кнопок у DM і за бажанням може публікувати запити на підтвердження у вихідному каналі. Шлях конфігурації: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (необов’язково; за можливості резервно використовується `commands.ownerAllowFrom`) + - `channels.discord.execApprovals.approvers` (необов’язково; за можливості резервно використовує `commands.ownerAllowFrom`) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord автоматично вмикає нативні exec approvals, коли `enabled` не встановлено або дорівнює `"auto"` і принаймні одного затверджувача можна визначити або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить затверджувачів exec із `allowFrom` каналу, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Установіть `enabled: false`, щоб явно вимкнути Discord як нативний клієнт підтверджень. + Discord автоматично вмикає власні exec approvals, коли `enabled` не задано або має значення `"auto"` і можна розв’язати принаймні одного затверджувача — або з `execApprovals.approvers`, або з `commands.ownerAllowFrom`. Discord не виводить затверджувачів exec із `allowFrom` каналу, застарілого `dm.allowFrom` або `defaultTo` для прямих повідомлень. Явно задайте `enabled: false`, щоб вимкнути Discord як власний клієнт підтверджень. - Коли `target` має значення `channel` або `both`, запит на підтвердження видимий у каналі. Лише визначені затверджувачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на підтвердження містять текст команди, тож вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу не вдається вивести з ключа сесії, OpenClaw повертається до доставки через приватні повідомлення. + Коли `target` має значення `channel` або `both`, запит на підтвердження видно в каналі. Лише розв’язані затверджувачі можуть використовувати кнопки; інші користувачі отримують тимчасову відмову, видиму лише їм. Запити на підтвердження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо отримати з ключа сесії, OpenClaw переходить до доставки через DM. - Discord також відображає спільні кнопки підтвердження, які використовуються іншими чат-каналами. Нативний адаптер Discord переважно додає маршрутизацію приватних повідомлень для затверджувачів і fanout у канал. - Коли ці кнопки присутні, вони є основним UX підтверджень; OpenClaw - має включати ручну команду `/approve` лише тоді, коли результат інструмента каже, - що підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом. + Discord також відображає спільні кнопки підтвердження, які використовуються іншими чат-каналами. Власний адаптер Discord головним чином додає маршрутизацію DM для затверджувачів і fanout у канали. + Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw + має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, + що підтвердження в чаті недоступні або ручне підтвердження — єдиний шлях. - Авторизація шлюзу для цього обробника використовує той самий спільний контракт визначення облікових даних, що й інші клієнти Gateway: + Авторизація шлюзу для цього обробника використовує той самий спільний контракт розв’язання облікових даних, що й інші клієнти Gateway: - локальна авторизація env-first (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`, потім `gateway.auth.*`) - - у локальному режимі `gateway.remote.*` може використовуватися як резерв лише якщо `gateway.auth.*` не встановлено; налаштовані, але нерозв’язані локальні SecretRef завершуються з закриттям доступу - - підтримка remote-mode через `gateway.remote.*`, коли застосовно - - перевизначення URL безпечні щодо перевизначень: перевизначення CLI не повторно використовують неявні облікові дані, а перевизначення env використовують лише облікові дані env + - у локальному режимі `gateway.remote.*` може використовуватися як резервне значення лише коли `gateway.auth.*` не задано; налаштовані, але нерозв’язані локальні SecretRef закриваються безпечно + - підтримка remote-mode через `gateway.remote.*`, коли це застосовно + - перевизначення URL є безпечними щодо перевизначень: перевизначення CLI не повторно використовують неявні облікові дані, а перевизначення env використовують лише облікові дані env - Поведінка визначення підтверджень: + Поведінка розв’язання підтверджень: - - ID з префіксом `plugin:` визначаються через `plugin.approval.resolve`. - - Інші ID визначаються через `exec.approval.resolve`. - - Discord не робить тут додаткового резервного переходу exec-to-plugin; саме - префікс id визначає, який метод шлюзу викликається. + - ID з префіксом `plugin:` розв’язуються через `plugin.approval.resolve`. + - Інші ID розв’язуються через `exec.approval.resolve`. + - Discord тут не виконує додатковий резервний перехід exec-to-plugin; префікс + id визначає, який метод шлюзу викликається. - Exec approvals спливають за замовчуванням через 30 хвилин. Якщо підтвердження не працюють через - невідомі ID підтвердження, перевірте визначення затверджувачів, увімкнення функції та - те, що доставлений тип ID підтвердження відповідає очікуваному запиту. + Строк дії exec approvals за замовчуванням спливає через 30 хвилин. Якщо підтвердження не вдаються з + невідомими ID підтверджень, перевірте розв’язання затверджувачів, увімкнення функції й + відповідність типу доставленого id очікуваному pending request. Пов’язана документація: [Exec approvals](/uk/tools/exec-approvals) @@ -1001,29 +1001,31 @@ OpenClaw підтримує контейнери Discord components v2 для п ## Інструменти та шлюзи дій -Дії з повідомленнями Discord включають обмін повідомленнями, адміністрування каналів, модерацію, статус присутності та дії з метаданими. +Дії з повідомленнями Discord включають повідомлення, адміністрування каналів, модерацію, присутність і дії з метаданими. Основні приклади: -- обмін повідомленнями: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` +- повідомлення: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` - реакції: `react`, `reactions`, `emojiList` - модерація: `timeout`, `kick`, `ban` -- статус присутності: `setPresence` +- присутність: `setPresence` -Шлюзи дій розташовані в `channels.discord.actions.*`. +Дія `event-create` приймає необов’язковий параметр `image` (URL або локальний шлях до файлу), щоб задати обкладинку запланованої події. -Поведінка шлюзів за замовчуванням: +Шлюзи дій розміщені в `channels.discord.actions.*`. -| Група дій | За замовчуванням | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | -| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | -| roles | вимкнено | -| moderation | вимкнено | -| presence | вимкнено | +Стандартна поведінка шлюзів: -## Components v2 UI +| Група дій | Стандартно | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено | +| roles | вимкнено | +| moderation | вимкнено | +| presence | вимкнено | -OpenClaw використовує Discord components v2 для exec approvals і міжконтекстних маркерів. Дії з повідомленнями Discord також можуть приймати `components` для користувацького UI (розширено; потребує побудови payload компонента через discord tool), тоді як застарілі `embeds` усе ще доступні, але не рекомендовані. +## UI Components v2 + +OpenClaw використовує Discord components v2 для exec approvals і маркерів між контекстами. Дії з повідомленнями Discord також можуть приймати `components` для власного UI (розширено; потрібно сконструювати payload компонента через інструмент discord), тоді як застарілі `embeds` залишаються доступними, але не рекомендовані. - `channels.discord.ui.components.accentColor` задає акцентний колір, який використовується контейнерами компонентів Discord (hex). - Для окремого облікового запису задається через `channels.discord.accounts..ui.components.accentColor`. @@ -1047,17 +1049,17 @@ OpenClaw використовує Discord components v2 для exec approvals і ## Голосові канали -OpenClaw може приєднуватися до голосових каналів Discord для безперервних розмов у реальному часі. Це окремо від вкладень голосових повідомлень. +OpenClaw може приєднуватися до голосових каналів Discord для розмов у реальному часі безперервного формату. Це окрема функція від голосових повідомлень-вкладень. Вимоги: -- Увімкніть нативні команди (`commands.native` або `channels.discord.commands.native`). +- Увімкніть власні команди (`commands.native` або `channels.discord.commands.native`). - Налаштуйте `channels.discord.voice`. - Бот має мати дозволи Connect + Speak у цільовому голосовому каналі. -Використовуйте нативну команду лише для Discord `/vc join|leave|status` для керування сесіями. Команда використовує агента за замовчуванням для облікового запису й дотримується тих самих правил allowlist і group policy, що й інші команди Discord. +Для керування сесіями використовуйте лише Discord-власну команду `/vc join|leave|status`. Команда використовує агента за замовчуванням для облікового запису й дотримується тих самих правил allowlist і group policy, що й інші команди Discord. -Приклад auto-join: +Приклад автоматичного підключення: ```json5 { @@ -1086,22 +1088,22 @@ OpenClaw може приєднуватися до голосових канал Примітки: - `voice.tts` перевизначає `messages.tts` лише для відтворення голосу. -- Ходи транскрипції голосу визначають статус власника з `allowFrom` Discord (або `dm.allowFrom`); мовці, які не є власниками, не можуть використовувати інструменти лише для власника (наприклад, `gateway` і `cron`). -- Голос увімкнений за замовчуванням; установіть `channels.discord.voice.enabled=false`, щоб вимкнути його. -- `voice.daveEncryption` і `voice.decryptionFailureTolerance` передаються далі до параметрів приєднання `@discordjs/voice`. -- Типові значення `@discordjs/voice` — `daveEncryption=true` і `decryptionFailureTolerance=24`, якщо не встановлено. -- OpenClaw також відстежує помилки розшифрування під час прийому й автоматично відновлюється, виходячи та повторно приєднуючись до голосового каналу після повторних помилок за короткий проміжок часу. -- Якщо журнали прийому постійно показують `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, це може бути помилка прийому у `@discordjs/voice`, відстежувана в [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). +- Ходи транскрипції голосу виводять статус власника з Discord `allowFrom` (або `dm.allowFrom`); мовці, які не є власниками, не можуть отримувати доступ до інструментів лише для власника (наприклад `gateway` і `cron`). +- Голос увімкнено за замовчуванням; задайте `channels.discord.voice.enabled=false`, щоб вимкнути його. +- `voice.daveEncryption` і `voice.decryptionFailureTolerance` напряму передаються в параметри підключення `@discordjs/voice`. +- Якщо не задано, `@discordjs/voice` за замовчуванням використовує `daveEncryption=true` і `decryptionFailureTolerance=24`. +- OpenClaw також відстежує помилки receive decrypt і автоматично відновлюється, виходячи з голосового каналу й повторно приєднуючись після повторних помилок у короткому вікні часу. +- Якщо в receive logs постійно з’являється `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, це може бути upstream bug в `@discordjs/voice`, відстежуваний у [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). ## Голосові повідомлення -Голосові повідомлення Discord показують попередній перегляд хвильової форми й потребують аудіо OGG/Opus разом із метаданими. OpenClaw генерує хвильову форму автоматично, але для перевірки й конвертації аудіофайлів на вузлі шлюзу мають бути доступні `ffmpeg` і `ffprobe`. +Голосові повідомлення Discord відображають попередній перегляд waveform і вимагають аудіо OGG/Opus плюс метадані. OpenClaw автоматично генерує waveform, але на хості шлюзу мають бути доступні `ffmpeg` і `ffprobe` для перевірки й перетворення аудіофайлів. Вимоги та обмеження: - Надавайте **локальний шлях до файлу** (URL відхиляються). - Не додавайте текстовий вміст (Discord не дозволяє текст + голосове повідомлення в одному payload). -- Приймається будь-який аудіоформат; OpenClaw за потреби конвертує його в OGG/Opus. +- Підтримується будь-який аудіоформат; OpenClaw за потреби конвертує його в OGG/Opus. Приклад: @@ -1112,18 +1114,18 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Усунення проблем - + - увімкніть Message Content Intent - - увімкніть Server Members Intent, якщо ви залежите від визначення користувачів/учасників + - увімкніть Server Members Intent, якщо ви залежите від розв’язання користувачів/учасників - перезапустіть шлюз після зміни intents - + - перевірте `groupPolicy` - - перевірте allowlist сервера в `channels.discord.guilds` + - перевірте список дозволених серверів у `channels.discord.guilds` - якщо існує мапа `channels` сервера, дозволені лише перелічені канали - перевірте поведінку `requireMention` і шаблони згадок @@ -1137,16 +1139,16 @@ openclaw logs --follow - - Поширені причини: + + Типові причини: - - `groupPolicy="allowlist"` без відповідного allowlist сервера/каналу - - `requireMention` налаштовано не там, де потрібно (має бути в `channels.discord.guilds` або записі каналу) - - відправника блокує allowlist `users` сервера/каналу + - `groupPolicy="allowlist"` без відповідного списку дозволених серверів/каналів + - `requireMention` налаштовано не в тому місці (має бути в `channels.discord.guilds` або в записі каналу) + - відправника заблоковано списком дозволених `users` сервера/каналу - + Типові журнали: @@ -1154,18 +1156,18 @@ openclaw logs --follow - `Slow listener detected ...` - `discord inbound worker timed out after ...` - Параметр бюджету слухача: + Параметр бюджету listener: - - один обліковий запис: `channels.discord.eventQueue.listenerTimeout` - - кілька облікових записів: `channels.discord.accounts..eventQueue.listenerTimeout` + - single-account: `channels.discord.eventQueue.listenerTimeout` + - multi-account: `channels.discord.accounts..eventQueue.listenerTimeout` Параметр тайм-ауту виконання worker: - - один обліковий запис: `channels.discord.inboundWorker.runTimeoutMs` - - кілька облікових записів: `channels.discord.accounts..inboundWorker.runTimeoutMs` - - за замовчуванням: `1800000` (30 хвилин); установіть `0`, щоб вимкнути + - single-account: `channels.discord.inboundWorker.runTimeoutMs` + - multi-account: `channels.discord.accounts..inboundWorker.runTimeoutMs` + - за замовчуванням: `1800000` (30 хвилин); задайте `0`, щоб вимкнути - Рекомендована базова конфігурація: + Рекомендоване базове значення: ```json5 { @@ -1186,82 +1188,82 @@ openclaw logs --follow } ``` - Використовуйте `eventQueue.listenerTimeout` для повільного налаштування слухача, а `inboundWorker.runTimeoutMs` - лише якщо вам потрібен окремий запобіжник для агентських ходів у черзі. + Використовуйте `eventQueue.listenerTimeout` для повільного запуску listener, а `inboundWorker.runTimeoutMs` + лише якщо вам потрібен окремий запобіжник для поставлених у чергу ходів агента. - - Перевірки дозволів `channels status --probe` працюють лише для числових ID каналів. + + Перевірки дозволів у `channels status --probe` працюють лише для числових ID каналів. - Якщо ви використовуєте ключі slug, зіставлення під час runtime все ще може працювати, але перевірка не зможе повністю верифікувати дозволи. + Якщо ви використовуєте slug-ключі, зіставлення під час runtime усе одно може працювати, але probe не зможе повністю перевірити дозволи. - + - - приватні повідомлення вимкнено: `channels.discord.dm.enabled=false` - - політику приватних повідомлень вимкнено: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) - - очікується підтвердження сполучення в режимі `pairing` + - DM вимкнено: `channels.discord.dm.enabled=false` + - політика DM вимкнена: `channels.discord.dmPolicy="disabled"` (застаріле: `channels.discord.dm.policy`) + - очікується підтвердження підключення в режимі `pairing` - - За замовчуванням повідомлення, створені ботами, ігноруються. + + За замовчуванням повідомлення, створені ботом, ігноруються. - Якщо ви встановите `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки. - Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення ботів, які згадують бота. + Якщо ви задаєте `channels.discord.allowBots=true`, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки. + Віддавайте перевагу `channels.discord.allowBots="mentions"`, щоб приймати лише повідомлення від ботів, які згадують бота. - + - - підтримуйте актуальність OpenClaw (`openclaw update`), щоб логіка відновлення прийому голосу Discord була на місці - - підтвердьте `channels.discord.voice.daveEncryption=true` (за замовчуванням) - - почніть з `channels.discord.voice.decryptionFailureTolerance=24` (типове значення upstream) і налаштовуйте лише за потреби - - стежте за журналами на предмет: + - підтримуйте OpenClaw в актуальному стані (`openclaw update`), щоб була присутня логіка відновлення прийому голосу Discord + - переконайтеся, що `channels.discord.voice.daveEncryption=true` (за замовчуванням) + - починайте з `channels.discord.voice.decryptionFailureTolerance=24` (upstream default) і налаштовуйте лише за потреби + - стежте за логами: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - якщо збої тривають після автоматичного повторного приєднання, зберіть журнали й порівняйте з [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - якщо помилки тривають після автоматичного повторного підключення, зберіть логи й порівняйте з [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) -## Вказівники на довідник конфігурації +## Вказівники на довідник із конфігурації Основний довідник: -- [Configuration reference - Discord](/uk/gateway/configuration-reference#discord) +- [Довідник із конфігурації - Discord](/uk/gateway/configuration-reference#discord) Високосигнальні поля Discord: -- запуск/авторизація: `enabled`, `token`, `accounts.*`, `allowBots` +- запуск/автентифікація: `enabled`, `token`, `accounts.*`, `allowBots` - політика: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` -- команди: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` -- черга подій: `eventQueue.listenerTimeout` (бюджет слухача), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` -- вхідний worker: `inboundWorker.runTimeoutMs` -- відповідь/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` +- команда: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` +- черга подій: `eventQueue.listenerTimeout` (бюджет listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` +- inbound worker: `inboundWorker.runTimeoutMs` +- reply/історія: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` - streaming: `streaming` (застарілий псевдонім: `streamMode`), `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` -- медіа/повторні спроби: `mediaMaxMb`, `retry` +- медіа/retry: `mediaMaxMb`, `retry` - `mediaMaxMb` обмежує вихідні завантаження Discord (за замовчуванням: `100MB`) - дії: `actions.*` -- статус присутності: `activity`, `status`, `activityType`, `activityUrl` +- присутність: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` - функції: `threadBindings`, верхньорівневий `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` -## Безпека та експлуатація +## Безпека та операції -- Розглядайте токени бота як секрети (`DISCORD_BOT_TOKEN` бажаний у керованих середовищах). -- Надавайте Discord лише мінімально необхідні дозволи. -- Якщо стан розгортання/стану команд застарів, перезапустіть шлюз і знову перевірте через `openclaw channels status --probe`. +- Розглядайте токени ботів як секретні дані (`DISCORD_BOT_TOKEN` є бажаним у контрольованих середовищах). +- Надавайте мінімально необхідні дозволи Discord. +- Якщо розгортання/стан команд застаріли, перезапустіть шлюз і перевірте знову через `openclaw channels status --probe`. ## Пов’язане -- [Сполучення](/uk/channels/pairing) +- [Підключення](/uk/channels/pairing) - [Групи](/uk/channels/groups) - [Маршрутизація каналів](/uk/channels/channel-routing) - [Безпека](/uk/gateway/security) -- [Маршрутизація кількох агентів](/uk/concepts/multi-agent) +- [Маршрутизація multi-agent](/uk/concepts/multi-agent) - [Усунення проблем](/uk/channels/troubleshooting) - [Слеш-команди](/uk/tools/slash-commands) diff --git a/docs/uk/concepts/dreaming.md b/docs/uk/concepts/dreaming.md index 0552a68dc..ced9f4074 100644 --- a/docs/uk/concepts/dreaming.md +++ b/docs/uk/concepts/dreaming.md @@ -1,44 +1,44 @@ --- read_when: - - Ви хочете, щоб підвищення пам’яті виконувалося автоматично + - Ви хочете, щоб просування пам’яті виконувалося автоматично - Ви хочете зрозуміти, що робить кожна фаза dreaming - - Ви хочете налаштувати консолідацію, не засмічуючи MEMORY.md -summary: Фонове консолідування пам’яті з фазами light, deep і REM, а також Dream Diary + - Ви хочете налаштувати консолідацію, не засмічуючи `MEMORY.md` +summary: Фонова консолідація пам’яті з легкими, глибокими та REM-фазами, а також Dream Diary title: Dreaming (експериментально) x-i18n: - generated_at: "2026-04-06T04:29:13Z" + generated_at: "2026-04-08T06:28:53Z" model: gpt-5.4 provider: openai - source_hash: 36c4b1e70801d662090dc8ce20608c2f141c23cd7ce53c54e3dcf332c801fd4e + source_hash: 0254f3b0949158264e583c12f36f2b1a83d1b44dc4da01a1b272422d38e8655d source_path: concepts/dreaming.md workflow: 15 --- # Dreaming (експериментально) -Dreaming — це система фонового консолідування пам’яті в `memory-core`. -Вона допомагає OpenClaw переносити сильні короткострокові сигнали до сталої пам’яті, -зберігаючи процес зрозумілим і придатним для перегляду. +Dreaming — це система фонової консолідації пам’яті в `memory-core`. +Вона допомагає OpenClaw переносити сильні короткострокові сигнали до тривалої пам’яті, зберігаючи +процес зрозумілим і придатним для перевірки. -Dreaming є **опційною** функцією і за замовчуванням вимкнена. +Dreaming є **опціональним** і за замовчуванням вимкнений. ## Що записує dreaming -Dreaming зберігає два види виводу: +Dreaming зберігає два типи результатів: -- **Стан машини** у `memory/.dreams/` (сховище recall, сигнали фаз, контрольні точки ingestion, блокування). -- **Зрозумілий для людини вивід** у `DREAMS.md` (або наявному `dreams.md`) і необов’язкових файлах звітів фаз у `memory/dreaming//YYYY-MM-DD.md`. +- **Стан машини** у `memory/.dreams/` (сховище recall, сигнали фаз, контрольні точки поглинання, блокування). +- **Людинозрозумілий вивід** у `DREAMS.md` (або наявному `dreams.md`) і необов’язкових файлах звітів фаз у `memory/dreaming//YYYY-MM-DD.md`. -Підвищення до довгострокової пам’яті, як і раніше, записується лише в `MEMORY.md`. +Просування до довготривалої пам’яті, як і раніше, записується лише в `MEMORY.md`. ## Модель фаз Dreaming використовує три взаємодоповнювальні фази: -| Фаза | Призначення | Стійкий запис | -| ----- | ----------- | ------------- | -| Light | Сортує та готує недавній короткостроковий матеріал | Ні | -| Deep | Оцінює та просуває стійких кандидатів | Так (`MEMORY.md`) | +| Фаза | Призначення | Постійний запис | +| ----- | ----------- | --------------- | +| Light | Сортує та готує нещодавній короткостроковий матеріал | Ні | +| Deep | Оцінює та просуває стійкі кандидати | Так (`MEMORY.md`) | | REM | Осмислює теми та повторювані ідеї | Ні | Ці фази є внутрішніми деталями реалізації, а не окремими @@ -46,72 +46,78 @@ Dreaming використовує три взаємодоповнювальні ### Фаза Light -Фаза Light поглинає недавні щоденні сигнали пам’яті та сліди recall, усуває дублікати +Фаза Light поглинає нещодавні щоденні сигнали пам’яті та сліди recall, усуває дублікати й готує рядки-кандидати. -- Читає короткостроковий стан recall і недавні щоденні файли пам’яті. +- Читає зі стану короткострокового recall, нещодавніх щоденних файлів пам’яті та відредагованих транскриптів сесій, якщо вони доступні. - Записує керований блок `## Light Sleep`, якщо сховище містить вбудований вивід. -- Фіксує сигнали підкріплення для подальшого ранжування у deep. +- Фіксує сигнали підкріплення для подальшого ранжування у фазі Deep. - Ніколи не записує в `MEMORY.md`. ### Фаза Deep -Фаза Deep вирішує, що стане довгостроковою пам’яттю. +Фаза Deep визначає, що стане довготривалою пам’яттю. -- Ранжує кандидатів за допомогою зваженого оцінювання та порогових перевірок. +- Ранжує кандидатів за допомогою зваженої оцінки та порогових фільтрів. - Вимагає проходження `minScore`, `minRecallCount` і `minUniqueQueries`. -- Перед записом повторно гідратує фрагменти з актуальних щоденних файлів, тому застарілі або видалені фрагменти пропускаються. +- Перед записом повторно завантажує фрагменти з актуальних щоденних файлів, тому застарілі або видалені фрагменти пропускаються. - Додає просунуті записи до `MEMORY.md`. -- Записує підсумок `## Deep Sleep` у `DREAMS.md` та за бажанням у `memory/dreaming/deep/YYYY-MM-DD.md`. +- Записує підсумок `## Deep Sleep` у `DREAMS.md` і за потреби записує `memory/dreaming/deep/YYYY-MM-DD.md`. ### Фаза REM Фаза REM витягує шаблони та рефлексивні сигнали. -- Будує підсумки тем і рефлексій на основі недавніх короткострокових слідів. +- Створює підсумки тем і рефлексій на основі нещодавніх короткострокових слідів. - Записує керований блок `## REM Sleep`, якщо сховище містить вбудований вивід. -- Фіксує сигнали підкріплення REM, які використовуються для ранжування у deep. +- Фіксує сигнали підкріплення REM, які використовуються під час ранжування у фазі Deep. - Ніколи не записує в `MEMORY.md`. +## Поглинання транскриптів сесій + +Dreaming може поглинати відредаговані транскрипти сесій до корпусу dreaming. Якщо +транскрипти доступні, вони подаються до фази Light разом із щоденними +сигналами пам’яті та слідами recall. Особистий і чутливий контент редагується +перед поглинанням. + ## Dream Diary Dreaming також веде наративний **Dream Diary** у `DREAMS.md`. -Після того як кожна фаза накопичує достатньо матеріалу, `memory-core` виконує -найкращу можливу фонову сесію subagent (використовуючи типову модель рантайму) -і додає короткий запис щоденника. +Після того як у кожної фази накопичується достатньо матеріалу, `memory-core` запускає фоновий +підлеглий агент у режимі best-effort (з використанням типової моделі середовища виконання) і додає короткий запис щоденника. -Цей щоденник призначений для читання людиною в інтерфейсі Dreams, а не є джерелом підвищення. +Цей щоденник призначений для читання людьми в інтерфейсі Dreams, а не є джерелом для просування. ## Сигнали ранжування Deep Ранжування Deep використовує шість зважених базових сигналів плюс підкріплення фаз: | Сигнал | Вага | Опис | -| ------------------- | ------ | ------------------------------------------------- | +| ------ | ---- | ---- | | Частота | 0.24 | Скільки короткострокових сигналів накопичив запис | | Релевантність | 0.30 | Середня якість отримання для запису | -| Різноманітність запитів | 0.15 | Окремі контексти запитів/днів, у яких він з’являвся | -| Давність | 0.15 | Оцінка свіжості зі згасанням у часі | -| Консолідація | 0.10 | Сила повторення впродовж кількох днів | -| Концептуальна насиченість | 0.06 | Щільність тегів понять із фрагмента/шляху | +| Різноманітність запитів | 0.15 | Відмінні контексти запитів/днів, у яких він з’являвся | +| Актуальність | 0.15 | Оцінка свіжості зі спаданням у часі | +| Консолідація | 0.10 | Сила повторення протягом кількох днів | +| Концептуальна насиченість | 0.06 | Щільність тегів концепцій із фрагмента/шляху | -Збіги у фазах Light і REM додають невелике підсилення зі згасанням у часі з +Спрацьовування фаз Light і REM додають невелике підсилення зі спаданням за часом із `memory/.dreams/phase-signals.json`. ## Планування -Коли dreaming увімкнено, `memory-core` автоматично керує одним cron-завданням для повного -циклу dreaming. Кожен цикл запускає фази в такому порядку: light -> REM -> deep. +Коли dreaming увімкнений, `memory-core` автоматично керує одним cron-завданням для повного +циклу dreaming. Кожен цикл запускає фази по порядку: light -> REM -> deep. -Типова поведінка розкладу: +Поведінка типової періодичності: | Налаштування | Типове значення | -| -------------------- | ----------- | +| ------------ | --------------- | | `dreaming.frequency` | `0 3 * * *` | ## Швидкий початок -Увімкніть dreaming: +Увімкнути dreaming: ```json { @@ -129,7 +135,7 @@ Dreaming також веде наративний **Dream Diary** у `DREAMS.md` } ``` -Увімкніть dreaming із власною частотою циклів: +Увімкнути dreaming із власною періодичністю циклу: ```json { @@ -149,7 +155,7 @@ Dreaming також веде наративний **Dream Diary** у `DREAMS.md` } ``` -## Slash-команда +## Команда зі скісною рискою ``` /dreaming status @@ -160,7 +166,7 @@ Dreaming також веде наративний **Dream Diary** у `DREAMS.md` ## Робочий процес CLI -Використовуйте підвищення через CLI для попереднього перегляду або ручного застосування: +Використовуйте просування через CLI для попереднього перегляду або ручного застосування: ```bash openclaw memory promote @@ -169,17 +175,17 @@ openclaw memory promote --limit 5 openclaw memory status --deep ``` -Ручний `memory promote` за замовчуванням використовує пороги фази deep, якщо їх не перевизначено +Ручна команда `memory promote` за замовчуванням використовує пороги фази Deep, якщо їх не перевизначено прапорцями CLI. -Поясніть, чому конкретний кандидат буде або не буде просунутий: +Пояснити, чому конкретний кандидат буде або не буде просунутий: ```bash openclaw memory promote-explain "router vlan" openclaw memory promote-explain "router vlan" --json ``` -Попередньо перегляньте рефлексії REM, істини кандидатів і вивід просування deep без +Попередньо переглянути рефлексії REM, кандидатні істини та результат просування Deep без будь-якого запису: ```bash @@ -192,29 +198,28 @@ openclaw memory rem-harness --json Усі налаштування розміщені в `plugins.entries.memory-core.config.dreaming`. | Ключ | Типове значення | -| ----------- | ----------- | -| `enabled` | `false` | +| ---- | --------------- | +| `enabled` | `false` | | `frequency` | `0 3 * * *` | -Політика фаз, порогові значення та поведінка сховища є внутрішніми деталями реалізації +Політика фаз, пороги та поведінка сховища є внутрішніми деталями реалізації (не користувацькою конфігурацією). -Перегляньте [довідник конфігурації Memory](/uk/reference/memory-config#dreaming-experimental), -щоб побачити повний список ключів. +Повний список ключів див. у [довіднику з конфігурації Memory](/uk/reference/memory-config#dreaming-experimental). ## Інтерфейс Dreams -Коли dreaming увімкнено, вкладка **Dreams** у Gateway показує: +Коли dreaming увімкнений, вкладка **Dreams** у Gateway показує: - поточний стан увімкнення dreaming - статус на рівні фаз і наявність керованого циклу - кількість короткострокових, довгострокових і просунутих сьогодні записів - час наступного запланованого запуску -- розгортаний читач Dream Diary на основі `doctor.memory.dreamDiary` +- розгортаний читач Dream Diary, що працює через `doctor.memory.dreamDiary` ## Пов’язане - [Memory](/uk/concepts/memory) -- [Memory Search](/uk/concepts/memory-search) -- [memory CLI](/cli/memory) -- [довідник конфігурації Memory](/uk/reference/memory-config) +- [Пошук у Memory](/uk/concepts/memory-search) +- [CLI memory](/cli/memory) +- [довідник з конфігурації Memory](/uk/reference/memory-config) diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md index 485936650..f63a0160d 100644 --- a/docs/uk/gateway/configuration-reference.md +++ b/docs/uk/gateway/configuration-reference.md @@ -1,35 +1,35 @@ --- read_when: - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням - - Ви перевіряєте блоки конфігурації каналів, моделей, шлюзу або інструментів -summary: Довідник з конфігурації шлюзу для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем -title: Довідник з конфігурації + - Ви перевіряєте блоки конфігурації каналу, моделі, gateway або інструментів +summary: Довідник конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем +title: Довідник конфігурації x-i18n: - generated_at: "2026-04-08T05:05:30Z" + generated_at: "2026-04-08T06:34:59Z" model: gpt-5.4 provider: openai - source_hash: 2f9ab34fb56897a77cb038d95bea21e8530d8f0402b66d1ee97c73822a1e8fd4 + source_hash: fd5f69050455e610fc7c825d95f546a16aa867b8a9c0d692a48de36419b0afc2 source_path: gateway/configuration-reference.md workflow: 15 --- -# Довідник з конфігурації +# Довідник конфігурації -Основний довідник з конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration). +Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration). -Ця сторінка охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власний детальніший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/плагіну, або кожен глибокий параметр memory/QMD. +Ця сторінка охоплює основні поверхні конфігурації OpenClaw і містить посилання назовні, коли підсистема має власний глибший довідник. Вона **не** намагається вбудувати на одну сторінку кожен каталог команд, що належить каналу/плагіну, або кожен глибокий параметр memory/QMD. Джерело істини в коді: -- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, із доданими метаданими bundled/plugin/channel, коли вони доступні -- `config.schema.lookup` повертає один вузол схеми, обмежений шляхом, для інструментів деталізації -- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш базового стану документації конфігурації щодо поточної поверхні схеми +- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, з об’єднаними метаданими bundled/plugin/channel, коли вони доступні +- `config.schema.lookup` повертає один вузол схеми для шляху для інструментів детального перегляду +- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш baseline конфігураційної документації щодо поточної поверхні схеми -Окремі поглиблені довідники: +Окремі глибокі довідники: -- [Довідник з конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming` +- [Memory configuration reference](/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 використовує безпечні значення за замовчуванням, якщо їх пропущено. @@ -37,7 +37,7 @@ x-i18n: ## Канали -Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не встановлено `enabled: false`). +Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не задано `enabled: false`). ### Доступ до DM і груп @@ -45,26 +45,26 @@ x-i18n: | Політика DM | Поведінка | | ------------------- | -------------------------------------------------------------- | -| `pairing` (default) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити | +| `pairing` (типово) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити | | `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) | | `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) | | `disabled` | Ігнорувати всі вхідні DM | -| Політика груп | Поведінка | -| --------------------- | ----------------------------------------------------- | -| `allowlist` (default) | Лише групи, що відповідають налаштованому allowlist | -| `open` | Обійти group allowlists (gating за згадками все ще застосовується) | -| `disabled` | Блокувати всі повідомлення груп/кімнат | +| Політика груп | Поведінка | +| --------------------- | ------------------------------------------------------ | +| `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist | +| `open` | Обійти group allowlist-и (gating за згадкою все одно застосовується) | +| `disabled` | Блокувати всі повідомлення груп/кімнат | -`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` постачальника не встановлено. -Коди pairing закінчуються через 1 годину. Очікувані запити на DM pairing обмежені **3 на канал**. -Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску. +`channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` постачальника не задано. +Коди pairing діють 1 годину. Очікувальні запити DM pairing обмежені **3 на канал**. +Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп runtime повертається до `allowlist` (закрито за замовчуванням) із попередженням під час запуску. -### Перевизначення моделей каналів +### Перевизначення моделі для каналу -Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Прив’язка каналу застосовується, коли сесія ще не має власного перевизначення моделі (наприклад, встановленого через `/model`). +Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ідентифікатори каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли сеанс ще не має перевизначення моделі (наприклад, заданого через `/model`). ```json5 { @@ -85,9 +85,9 @@ x-i18n: } ``` -### Значення за замовчуванням для каналів і heartbeat +### Типові значення каналів і heartbeat -Використовуйте `channels.defaults` для спільної поведінки group-policy і heartbeat у різних постачальників: +Використовуйте `channels.defaults` для спільної політики груп і поведінки heartbeat у різних постачальників: ```json5 { @@ -105,15 +105,15 @@ x-i18n: } ``` -- `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 у стилі індикатора. +- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні постачальника не задано. +- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь контекст цитат/гілок/історії), `allowlist` (включати контекст лише від відправників з allowlist), `allowlist_quote` (як allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для каналу: `channels..contextVisibility`. +- `channels.defaults.heartbeat.showOk`: включати статуси здорових каналів у вивід heartbeat. +- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід heartbeat. +- `channels.defaults.heartbeat.useIndicator`: відображати компактний heartbeat у стилі індикатора. ### WhatsApp -WhatsApp працює через web-канал шлюзу (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія. +WhatsApp працює через web channel gateway (Baileys Web). Він запускається автоматично, коли існує прив’язаний сеанс. ```json5 { @@ -164,10 +164,10 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він } ``` -- Вихідні команди за замовчуванням використовують обліковий запис `default`, якщо він є; інакше — перший налаштований ID облікового запису (відсортований). -- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. -- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується `openclaw doctor` у `whatsapp/default`. -- Перевизначення для облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше — перший налаштований account id (відсортовано). +- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей вибір типового облікового запису, якщо він збігається з налаштованим account id. +- Застарілий single-account каталог автентифікації Baileys мігрується командою `openclaw doctor` до `whatsapp/default`. +- Перевизначення на рівні облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -185,24 +185,24 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він "*": { requireMention: true }, "-1001234567890": { allowFrom: ["@admin"], - systemPrompt: "Keep answers brief.", + systemPrompt: "Відповідай коротко.", topics: { "99": { requireMention: false, skills: ["search"], - systemPrompt: "Stay on topic.", + systemPrompt: "Тримайся теми.", }, }, }, }, customCommands: [ - { command: "backup", description: "Git backup" }, - { command: "generate", description: "Create an image" }, + { command: "backup", description: "Резервне копіювання Git" }, + { command: "generate", description: "Створити зображення" }, ], historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (default: off; explicitly opt in to avoid preview-edit rate limits) + streaming: "partial", // off | partial | block | progress (типово: off; явно вмикайте, щоб уникнути лімітів rate limit на preview-edit) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -225,13 +225,13 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він } ``` -- Токен бота: `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` (працює в прямих і групових чатах). -- Політика повторних спроб: див. [Політика повторних спроб](/uk/concepts/retry). +- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink-и відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним джерелом для типового облікового запису. +- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. +- У багатооблікових конфігураціях (2+ account id) задайте явне типове значення (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо цього немає або воно невалідне. +- `configWrites: false` блокує ініційовані з Telegram записи конфігурації (міграції ID supergroup, `/config set|unset`). +- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі ACP-прив’язки для тем форумів (використовуйте канонічне `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Попередній перегляд stream у Telegram використовує `sendMessage` + `editMessageText` (працює в особистих і групових чатах). +- Політика retry: див. [Retry policy](/uk/concepts/retry). ### Discord @@ -278,7 +278,7 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він requireMention: true, users: ["987654321098765432"], skills: ["docs"], - systemPrompt: "Short answers only.", + systemPrompt: "Лише короткі відповіді.", }, }, }, @@ -286,7 +286,7 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (progress maps to partial on Discord) + streaming: "off", // off | partial | block | progress (progress відображається як partial у Discord) maxLinesPerMessage: 17, ui: { components: { @@ -297,7 +297,7 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true }) + spawnSubagentSessions: false, // opt-in для sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -333,36 +333,36 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він } ``` -- Токен: `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` вимикає) +- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним джерелом для типового облікового запису. +- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; параметри retry/політик облікового запису все одно беруться з вибраного облікового запису в активному runtime snapshot. +- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. +- Використовуйте `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 для авто-unfocus через неактивність у годинах (`0` вимикає) - `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає) - - `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 зі схваленням після схвалення, відхилення або тайм-ауту. + - `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` вмикає розмови у voice channel Discord і необов’язкові перевизначення auto-join + TTS. +- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються в параметри DAVE `@discordjs/voice` (типово `true` і `24`). +- OpenClaw додатково намагається відновити voice receive, виходячи/повторно входячи в voice session після повторних збоїв дешифрування. +- `channels.discord.streaming` — канонічний ключ режиму stream. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично. +- `channels.discord.autoPresence` відображає доступність runtime у присутність бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. +- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінними ім’ям/тегом (режим сумісності аварійного використання). +- `channels.discord.execApprovals`: нативна доставка Discord для схвалення exec і авторизація тих, хто схвалює. + - `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"` — в обидва місця. Якщо ціль містить `"channel"`, кнопки доступні лише визначеним схвалювачам. + - `cleanupAfterResolve`: якщо `true`, видаляє DM із запитом на схвалення після схвалення, відхилення або тайм-ауту. -**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, default), `all` (усі повідомлення), `allowlist` (від `guilds..users` для всіх повідомлень). +**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень). ### Google Chat @@ -393,11 +393,11 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він } ``` -- 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). +- JSON service account: вбудовано (`serviceAccount`) або з файлу (`serviceAccountFile`). +- Також підтримується Service account SecretRef (`serviceAccountRef`). +- Резервні env-змінні: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- Використовуйте `spaces/` або `users/` як цілі доставки. +- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінним email principal (режим аварійної сумісності). ### Slack @@ -419,7 +419,7 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він allowBots: false, users: ["U123"], skills: ["docs"], - systemPrompt: "Short answers only.", + systemPrompt: "Лише короткі відповіді.", }, }, historyLimit: 50, @@ -449,7 +449,7 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він chunkMode: "length", streaming: { mode: "partial", // off | partial | block | progress - nativeTransport: true, // use Slack native streaming API when mode=partial + nativeTransport: true, // використовувати нативний streaming API Slack, коли mode=partial }, mediaMaxMb: 20, execApprovals: { @@ -464,35 +464,35 @@ WhatsApp працює через web-канал шлюзу (Baileys Web). Він } ``` -- **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, +- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервні env для типового облікового запису). +- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або на рівні облікового запису). +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті рядки + або об’єкти SecretRef. +- Snapshots облікових записів Slack відкривають поля джерела/стану облікових даних, такі як + `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в режимі HTTP — `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис - налаштовано через SecretRef, але поточний шлях команди/runtime не зміг - визначити значення секрету. -- `configWrites: false` блокує ініційовані Slack записи в конфігурацію. -- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. -- `channels.slack.streaming.mode` — канонічний ключ режиму потоку для Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично. -- Використовуйте `user:` (DM) або `channel:` для цілей доставки. + налаштований через SecretRef, але поточний шлях команди/runtime не зміг + визначити значення secret. +- `configWrites: false` блокує записи конфігурації, ініційовані зі Slack. +- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. +- `channels.slack.streaming.mode` — канонічний ключ режиму stream Slack. `channels.slack.streaming.nativeTransport` керує нативним транспортом stream у Slack. Застарілі `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично. +- Використовуйте `user:` (DM) або `channel:` як цілі доставки. -**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (з `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`). -**Ізоляція сесій у thread:** `thread.historyScope` — для кожного thread окремо (default) або спільно для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові threads. +**Ізоляція сеансів гілок:** `thread.historyScope` — на рівні гілки (типово) або спільно для каналу. `thread.inheritParent` копіює стенограму батьківського каналу в нові гілки. -- Нативний стримінг 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"`). +- Нативний streaming Slack плюс assistant-style статус Slack «is typing...» у гілці вимагають цілі відповіді в гілці. DM верхнього рівня типово залишаються поза гілками, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі гілки. +- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`. +- `channels.slack.execApprovals`: нативна доставка Slack для схвалення exec і авторизація тих, хто схвалює. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). -| Група дій | За замовчуванням | Примітки | -| ------------ | ---------------- | ------------------------ | -| reactions | увімкнено | Реагувати + перелік реакцій | -| messages | увімкнено | Читати/надсилати/редагувати/видаляти | -| pins | увімкнено | Закріпити/відкріпити/перелік | -| memberInfo | увімкнено | Інформація про учасника | -| emojiList | увімкнено | Список кастомних емодзі | +| Група дій | Типово | Примітки | +| ------------ | -------- | ------------------------ | +| reactions | увімкнено | Реакції + список реакцій | +| messages | увімкнено | Читання/надсилання/редагування/видалення | +| pins | увімкнено | Закріпити/відкріпити/список | +| memberInfo | увімкнено | Інформація про учасника | +| emojiList | увімкнено | Список кастомних emoji | ### Mattermost @@ -516,7 +516,7 @@ Mattermost постачається як плагін: `openclaw plugins install native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // Optional explicit URL for reverse-proxy/public deployments + // Необов’язкова явна URL-адреса для reverse-proxy/публічних розгортань callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -526,23 +526,23 @@ Mattermost постачається як плагін: `openclaw plugins install } ``` -Режими чату: `oncall` (відповідати на @-mention, default), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з тригерного префікса). +Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса тригера). -Коли нативні команди Mattermost увімкнено: +Коли нативні команди Mattermost увімкнені: -- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повним URL. -- `commands.callbackUrl` має вказувати на endpoint шлюзу OpenClaw і бути досяжним із сервера Mattermost. -- Нативні slash callback-и автентифікуються за допомогою токенів для кожної команди, які Mattermost повертає - під час реєстрації slash command. Якщо реєстрація не вдається або жодну - команду не активовано, OpenClaw відхиляє callback-и з +- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою. +- `commands.callbackUrl` має вказувати на endpoint Gateway OpenClaw і бути досяжним із сервера Mattermost. +- Нативні slash callback-и автентифікуються токенами окремих команд, які повертає + Mattermost під час реєстрації slash command. Якщо реєстрація не вдається або + жодна команда не активована, OpenClaw відхиляє callback-и з `Unauthorized: invalid command token.` -- Для приватних/tailnet/internal callback host-ів Mattermost може вимагати, +- Для приватних/tailnet/internal callback-хостів 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`: перевизначення gating за згадкою для конкретного каналу (`"*"` для значення за замовчуванням). -- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- `channels.mattermost.groups..requireMention`: перевизначення gating за згадкою для каналу (`"*"` для типового значення). +- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. ### Signal @@ -551,7 +551,7 @@ Mattermost постачається як плагін: `openclaw plugins install channels: { signal: { enabled: true, - account: "+15555550123", // optional account binding + account: "+15555550123", // необов’язкова прив’язка до облікового запису dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -563,15 +563,15 @@ Mattermost постачається як плагін: `openclaw plugins install } ``` -**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (з `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`). - `channels.signal.account`: закріпити запуск каналу за конкретною ідентичністю облікового запису Signal. -- `channels.signal.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані Signal. -- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- `channels.signal.configWrites`: дозволяти або забороняти записи конфігурації, ініційовані з Signal. +- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. ### BlueBubbles -BlueBubbles — рекомендований шлях для iMessage (на базі плагіна, налаштовується в `channels.bluebubbles`). +BlueBubbles — рекомендований шлях для iMessage (на основі плагіна, налаштовується в `channels.bluebubbles`). ```json5 { @@ -579,21 +579,21 @@ BlueBubbles — рекомендований шлях для iMessage (на ба bluebubbles: { enabled: true, dmPolicy: "pairing", - // serverUrl, password, webhookPath, group controls, and advanced actions: - // see /channels/bluebubbles + // serverUrl, password, webhookPath, керування групами та розширені дії: + // див. /channels/bluebubbles }, }, } ``` - Основні шляхи ключів, охоплені тут: `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). +- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до сталих ACP-сеансів. Використовуйте BlueBubbles handle або target string (`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). Не потрібні ані daemon, ані порт. +OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон або порт не потрібні. ```json5 { @@ -617,15 +617,15 @@ OpenClaw запускає `imsg rpc` (JSON-RPC поверх stdio). Не пот } ``` -- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису. +- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. - Потрібен Full Disk Access до БД Messages. -- Надавайте перевагу цілям `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). +- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів. +- `cliPath` може вказувати на SSH wrapper; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. +- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`). +- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ relay host уже є в `~/.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). @@ -638,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix працює через розширення і налаштовується в `channels.matrix`. +Matrix підтримується розширенням і налаштовується в `channels.matrix`. ```json5 { @@ -668,25 +668,25 @@ Matrix працює через розширення і налаштовуєть } ``` -- Токен-автентифікація використовує `accessToken`; парольна автентифікація використовує `userId` + `password`. +- Автентифікація токеном використовує `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.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). +- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові DM-style запрошення ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`. +- `channels.matrix.execApprovals`: нативна доставка Matrix для схвалення exec і авторизація тих, хто схвалює. + - `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` (типово) об’єднує за routed peer, а `per-room` ізолює кожну DM room. +- Перевірки статусу Matrix і живі пошуки в каталозі використовують ту саму політику proxy, що й runtime traffic. +- Повну конфігурацію Matrix, правила targeting і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). ### Microsoft Teams -Microsoft Teams працює через розширення і налаштовується в `channels.msteams`. +Microsoft Teams підтримується розширенням і налаштовується в `channels.msteams`. ```json5 { @@ -694,19 +694,19 @@ Microsoft Teams працює через розширення і налаштов msteams: { enabled: true, configWrites: true, - // appId, appPassword, tenantId, webhook, team/channel policies: - // see /channels/msteams + // appId, appPassword, tenantId, webhook, політики team/channel: + // див. /channels/msteams }, }, } ``` - Основні шляхи ключів, охоплені тут: `channels.msteams`, `channels.msteams.configWrites`. -- Повну конфігурацію Teams (облікові дані, webhook, DM/group policy, перевизначення для team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams). +- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams). ### IRC -IRC працює через розширення і налаштовується в `channels.irc`. +IRC підтримується розширенням і налаштовується в `channels.irc`. ```json5 { @@ -728,12 +728,12 @@ 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). +- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id. +- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlist-и/gating за згадкою) задокументовано в [IRC](/uk/channels/irc). ### Багатообліковість (усі канали) -Запускайте кілька облікових записів для одного каналу (кожен зі своїм `accountId`): +Запускайте кілька облікових записів на канал (кожен із власним `accountId`): ```json5 { @@ -741,11 +741,11 @@ IRC працює через розширення і налаштовується telegram: { accounts: { default: { - name: "Primary bot", + name: "Основний бот", botToken: "123456:ABC...", }, alerts: { - name: "Alerts bot", + name: "Бот сповіщень", botToken: "987654:XYZ...", }, }, @@ -754,28 +754,28 @@ IRC працює через розширення і налаштовується } ``` -- `default` використовується, коли `accountId` пропущено (CLI + routing). -- Env-токени застосовуються лише до облікового запису **default**. -- Базові налаштування каналу застосовуються до всіх облікових записів, якщо не перевизначено для конкретного облікового запису. +- `default` використовується, коли `accountId` пропущено (CLI + маршрутизація). +- Env-токени застосовуються лише до **типового** облікового запису. +- Базові налаштування каналу застосовуються до всіх облікових записів, якщо не перевизначено на рівні облікового запису. - Використовуйте `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 ціль. +- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або через онбординг каналу), поки ще маєте однооблікову конфігурацію каналу верхнього рівня, OpenClaw спочатку переносить значення верхнього рівня, що належать обліковому запису, до карти облікових записів каналу, щоб початковий обліковий запис і далі працював. Більшість каналів переносить їх у `channels..accounts.default`; Matrix може натомість зберегти наявну відповідну іменовану/типову ціль. +- Існуючі прив’язки лише до каналу (без `accountId`) і далі відповідають типовому обліковому запису; прив’язки на рівні облікового запису залишаються необов’язковими. +- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня однооблікової конфігурації, що належать обліковому запису, до promoted account, вибраного для цього каналу. Більшість каналів використовує `accounts.default`; Matrix може зберегти наявну відповідну іменовану/типову ціль. -### Інші канали-розширення +### Інші канали розширень -Багато каналів-розширень налаштовуються як `channels.` і задокументовані на власних сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). -Див. повний індекс каналів: [Канали](/uk/channels). +Багато каналів розширень налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). +Див. повний індекс каналів: [Channels](/uk/channels). -### Gating за згадкою в груповому чаті +### Gating за згадкою в групових чатах -Повідомлення груп за замовчуванням **вимагають згадки** (метадані згадки або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage. +Повідомлення в групах типово **вимагають згадки** (метадані згадки або безпечні regex-патерни). Це стосується групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. **Типи згадок:** -- **Metadata mentions**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp. -- **Text patterns**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Некоректні шаблони і небезпечне вкладене повторення ігноруються. -- Gating за згадкою застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон). +- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp. +- **Текстові патерни**: безпечні regex-патерни в `agents.list[].groupChat.mentionPatterns`. Невалідні патерни та небезпечне вкладене повторення ігноруються. +- Gating за згадкою застосовується лише тоді, коли можливе виявлення (нативні згадки або принаймні один патерн). ```json5 { @@ -788,7 +788,7 @@ IRC працює через розширення і налаштовується } ``` -`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для кожного облікового запису). Встановіть `0`, щоб вимкнути. +`messages.groupChat.historyLimit` задає глобальне типове значення. Канали можуть перевизначати його через `channels..historyLimit` (або на рівні облікового запису). Установіть `0`, щоб вимкнути. #### Ліміти історії DM @@ -805,13 +805,13 @@ IRC працює через розширення і налаштовується } ``` -Порядок розв’язання: перевизначення для конкретного DM → значення постачальника за замовчуванням → без обмеження (зберігається все). +Розв’язання: перевизначення для конкретного DM → типове значення постачальника → без ліміту (зберігається все). Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. #### Режим self-chat -Додайте власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові шаблони): +Додайте власний номер у `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові патерни): ```json5 { @@ -832,21 +832,21 @@ IRC працює через розширення і налаштовується } ``` -### Команди (обробка команд у чаті) +### Команди (обробка команд чату) ```json5 { commands: { - 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) + native: "auto", // реєструвати нативні команди, коли вони підтримуються + nativeSkills: "auto", // реєструвати нативні skill-команди, коли вони підтримуються + text: true, // розбирати /commands у повідомленнях чату + bash: false, // дозволити ! (псевдонім: /bash) bashForegroundMs: 2000, - config: false, // allow /config - mcp: false, // allow /mcp - plugins: false, // allow /plugins - debug: false, // allow /debug - restart: true, // allow /restart + gateway restart tool + config: false, // дозволити /config + mcp: false, // дозволити /mcp + plugins: false, // дозволити /plugins + debug: false, // дозволити /debug + restart: true, // дозволити /restart + інструмент перезапуску gateway ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", @@ -861,42 +861,42 @@ IRC працює через розширення і налаштовується -- Цей блок налаштовує поверхні команд. Для поточного каталогу вбудованих + 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). +- Цей блок налаштовує поверхні команд. Поточний каталог вбудованих + 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 вимкненим. - `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` не встановлено. +- `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` залишається доступним для звичайних клієнтів із правом запису. +- `mcp: true` вмикає `/mcp` для конфігурації MCP-серверів, керованих OpenClaw, у `mcp.servers`. +- `plugins: true` вмикає `/plugins` для пошуку плагінів, встановлення та керування вмиканням/вимиканням. +- `channels..configWrites` керує мутаціями конфігурації на рівні каналу (типово: true). +- Для багатооблікових каналів `channels..accounts..configWrites` також керує записами, націленими на цей обліковий запис (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`). +- `restart: false` вимикає `/restart` і дії інструмента перезапуску gateway. Типово: `true`. +- `ownerAllowFrom` — явний owner allowlist для owner-only команд/інструментів. Він відокремлений від `allowFrom`. +- `ownerDisplay: "hash"` хешує ID власника в системному prompt. Задайте `ownerDisplaySecret`, щоб керувати хешуванням. +- `allowFrom` — для кожного постачальника окремо. Якщо задано, це **єдине** джерело авторизації (allowlist-и каналу/pairing і `useAccessGroups` ігноруються). +- `useAccessGroups: false` дозволяє командам обходити політики access-group, коли `allowFrom` не задано. - Карта документації команд: - - вбудований + bundled каталог: [Slash Commands](/uk/tools/slash-commands) - - поверхні команд, специфічні для каналів: [Канали](/uk/channels) + - каталог вбудованих + bundled: [Slash Commands](/uk/tools/slash-commands) + - командні поверхні, специфічні для каналів: [Channels](/uk/channels) - команди QQ Bot: [QQ Bot](/uk/channels/qqbot) - команди pairing: [Pairing](/uk/channels/pairing) - - команда картки LINE: [LINE](/uk/channels/line) + - команда карток LINE: [LINE](/uk/channels/line) - memory dreaming: [Dreaming](/uk/concepts/dreaming) --- -## Значення агентів за замовчуванням +## Типові налаштування агента ### `agents.defaults.workspace` -За замовчуванням: `~/.openclaw/workspace`. +Типово: `~/.openclaw/workspace`. ```json5 { @@ -906,7 +906,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.repoRoot` -Необов’язковий корінь репозиторію, що показується в рядку Runtime системного запиту. Якщо не встановлено, OpenClaw визначає його автоматично, піднімаючись вгору від workspace. +Необов’язковий корінь репозиторію, що показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw визначає його автоматично, рухаючись вгору від workspace. ```json5 { @@ -916,7 +916,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.skills` -Необов’язковий allowlist Skills за замовчуванням для агентів, які не задають +Необов’язковий типовий allowlist skill-ів для агентів, які не задають `agents.list[].skills`. ```json5 @@ -925,22 +925,22 @@ IRC працює через розширення і налаштовується defaults: { skills: ["github", "weather"] }, list: [ { id: "writer" }, // успадковує github, weather - { id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням + { id: "docs", skills: ["docs-search"] }, // замінює типові { 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: []`, щоб не було skill-ів. +- Непорожній список `agents.list[].skills` — це фінальний набір для цього агента; він + не об’єднується з типовими значеннями. ### `agents.defaults.skipBootstrap` -Вимикає автоматичне створення файлів bootstrap workspace (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`). +Вимикає автоматичне створення bootstrap-файлів workspace (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`). ```json5 { @@ -950,9 +950,9 @@ IRC працює через розширення і налаштовується ### `agents.defaults.contextInjection` -Керує тим, коли bootstrap-файли workspace вбудовуються в system prompt. За замовчуванням: `"always"`. +Керує тим, коли bootstrap-файли workspace вбудовуються в системний prompt. Типово: `"always"`. -- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Виконання heartbeat і повторні спроби після ущільнення все одно перебудовують контекст. +- `"continuation-skip"`: на безпечних ходах продовження (після завершеної відповіді асистента) повторне вбудовування bootstrap workspace пропускається, що зменшує розмір prompt. Запуски heartbeat і повтори після compaction все одно перебудовують контекст. ```json5 { @@ -962,7 +962,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.bootstrapMaxChars` -Максимальна кількість символів на файл bootstrap workspace перед обрізанням. За замовчуванням: `20000`. +Максимум символів на bootstrap-файл workspace до обрізання. Типово: `20000`. ```json5 { @@ -972,7 +972,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.bootstrapTotalMaxChars` -Максимальна загальна кількість символів, що вбудовуються з усіх файлів bootstrap workspace. За замовчуванням: `150000`. +Максимальна загальна кількість символів, вбудованих через усі bootstrap-файли workspace. Типово: `150000`. ```json5 { @@ -982,12 +982,12 @@ IRC працює через розширення і налаштовується ### `agents.defaults.bootstrapPromptTruncationWarning` -Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізано. -За замовчуванням: `"once"`. +Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізається. +Типово: `"once"`. -- `"off"`: ніколи не вбудовувати текст попередження в system prompt. +- `"off"`: ніколи не вбудовувати текст попередження в системний prompt. - `"once"`: вбудовувати попередження один раз для кожного унікального підпису обрізання (рекомендовано). -- `"always"`: вбудовувати попередження при кожному запуску, якщо обрізання існує. +- `"always"`: вбудовувати попередження під час кожного запуску, коли є обрізання. ```json5 { @@ -997,11 +997,11 @@ IRC працює через розширення і налаштовується ### `agents.defaults.imageMaxDimensionPx` -Максимальний розмір у пікселях для найдовшого боку зображення в блоках зображень transcript/tool перед викликами постачальника. -За замовчуванням: `1200`. +Максимальний розмір у пікселях для довшої сторони зображення в блоках transcript/tool перед викликами постачальника. +Типово: `1200`. -Нижчі значення зазвичай зменшують використання vision-token і розмір payload запиту для запусків із великою кількістю скриншотів. -Вищі значення зберігають більше візуальних деталей. +Менші значення зазвичай зменшують використання vision-token і розмір payload запиту для сценаріїв з великою кількістю скриншотів. +Більші значення зберігають більше візуальних деталей. ```json5 { @@ -1011,7 +1011,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.userTimezone` -Часовий пояс для контексту system prompt (не для позначок часу повідомлень). Якщо не встановлено, використовується часовий пояс хоста. +Часовий пояс для контексту системного prompt (не для міток часу повідомлень). Якщо не задано, використовується часовий пояс хоста. ```json5 { @@ -1021,7 +1021,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.timeFormat` -Формат часу в system prompt. За замовчуванням: `auto` (налаштування ОС). +Формат часу в системному prompt. Типово: `auto` (налаштування ОС). ```json5 { @@ -1059,7 +1059,7 @@ IRC працює через розширення і налаштовується primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // global default provider params + params: { cacheRetention: "long" }, // глобальні типові параметри постачальника pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", @@ -1075,42 +1075,42 @@ IRC працює через розширення і налаштовується ``` - `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Рядкова форма задає лише основну модель. - - Об’єктна форма задає основну модель плюс упорядковані failover-моделі. + - Форма рядка задає лише основну модель. + - Форма об’єкта задає основну модель плюс упорядковані резервні моделі. - `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується шляхом інструмента `image` як конфігурація vision model. - - Також використовується як fallback routing, коли вибрана/default модель не може приймати вхідні зображення. + - Використовується шляхом інструмента `image` як конфігурація vision-model. + - Також використовується для резервної маршрутизації, коли вибрана/типова модель не приймає зображення. - `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею 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` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації зображень у порядку provider-id. + - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію/API key постачальника (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). + - Якщо пропущено, `image_generate` все одно може вивести типове значення постачальника з автентифікацією. Спочатку пробується поточний типовий постачальник, потім інші зареєстровані постачальники генерації зображень у порядку 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` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації музики у порядку provider-id. - - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key. + - Якщо пропущено, `music_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку пробується поточний типовий постачальник, потім інші зареєстровані постачальники генерації музики в порядку 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` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації відео у порядку provider-id. - - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key. - - Bundled постачальник генерації відео Qwen наразі підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня постачальника `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. + - Якщо пропущено, `video_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку пробується поточний типовий постачальник, потім інші зареєстровані постачальники генерації відео в порядку 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`, а потім — до розв’язаної моделі сесії/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. + - Якщо пропущено, інструмент PDF повертається до `imageModel`, а потім до визначеної моделі сеансу/типової моделі. +- `pdfMaxBytesMb`: типовий ліміт розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. +- `pdfMaxPages`: типова максимальна кількість сторінок, яка враховується в режимі extraction fallback інструмента `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 серед налаштованих постачальників, і лише потім повертається до типового налаштованого постачальника (застаріла сумісна поведінка, тому надавайте перевагу явному `provider/model`). Якщо цей постачальник більше не відкриває налаштовану типову модель, OpenClaw повертається до першого налаштованого provider/model замість використання застарілого removed-provider default. +- `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` (для відповідного id агента) перевизначає за ключем. Докладніше див. [Prompt Caching](/uk/reference/prompt-caching). +- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних моделей), зберігають канонічну форму об’єкта й по можливості зберігають наявні списки fallback. +- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сеансами (кожен сеанс усе одно серіалізований). Типово: 4. -**Вбудовані скорочення alias** (застосовуються лише коли модель є в `agents.defaults.models`): +**Вбудовані скорочення alias** (застосовуються лише тоді, коли модель є в `agents.defaults.models`): | Alias | Модель | | ------------------- | -------------------------------------- | @@ -1123,15 +1123,15 @@ IRC працює через розширення і налаштовується | `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -Ваші налаштовані aliases завжди мають пріоритет над значеннями за замовчуванням. +Ваші налаштовані alias завжди мають вищий пріоритет за типові. -Моделі 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, якщо ви не задасте `--thinking off` або самостійно не визначите `agents.defaults.models["zai/"].params.thinking`. +Моделі Z.AI типово вмикають `tool_stream` для stream викликів інструментів. Задайте `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це. +Моделі Anthropic Claude 4.6 типово використовують `adaptive` thinking, якщо явний рівень thinking не задано. ### `agents.defaults.cliBackends` -Необов’язкові CLI-бекенди для резервних запусків лише з текстом (без викликів інструментів). Корисно як запасний варіант, коли API-постачальники відмовляють. +Необов’язкові CLI backends для текстових fallback-запусків (без викликів інструментів). Корисно як резерв, коли API-постачальники недоступні. ```json5 { @@ -1159,29 +1159,44 @@ IRC працює через розширення і налаштовується } ``` -- CLI-бекенди орієнтовані на текст; інструменти завжди вимкнено. -- Сесії підтримуються, коли встановлено `sessionArg`. -- Передавання зображень підтримується, коли `imageArg` приймає шляхи до файлів. +- CLI backends орієнтовані на текст; інструменти завжди вимкнені. +- Сеанси підтримуються, коли задано `sessionArg`. +- Наскрізна передача зображень підтримується, коли `imageArg` приймає шляхи до файлів. + +### `agents.defaults.systemPromptOverride` + +Замінити весь системний prompt, зібраний OpenClaw, на фіксований рядок. Задається на типовому рівні (`agents.defaults.systemPromptOverride`) або для конкретного агента (`agents.list[].systemPromptOverride`). Значення для конкретного агента мають вищий пріоритет; порожнє або таке, що містить лише пробіли, значення ігнорується. Корисно для контрольованих експериментів із prompt. + +```json5 +{ + agents: { + defaults: { + systemPromptOverride: "You are a helpful assistant.", + }, + }, +} +``` ### `agents.defaults.heartbeat` -Періодичні heartbeat-запуски. +Періодичні запуски heartbeat. ```json5 { agents: { defaults: { heartbeat: { - every: "30m", // 0m disables + every: "30m", // 0m вимикає model: "openai/gpt-5.4-mini", includeReasoning: false, - 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) + includeSystemPromptSection: true, // типово: true; false прибирає розділ Heartbeat із системного prompt + lightContext: false, // типово: false; true залишає тільки HEARTBEAT.md з bootstrap-файлів workspace + isolatedSession: false, // типово: false; true запускає кожен heartbeat у новому сеансі (без історії розмови) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (default) | block - target: "none", // default: none | options: last | whatsapp | telegram | discord | ... - prompt: "Read HEARTBEAT.md if it exists...", + directPolicy: "allow", // allow (типово) | block + target: "none", // типово: none | варіанти: last | whatsapp | telegram | discord | ... + prompt: "Прочитайте HEARTBEAT.md, якщо він існує...", ackMaxChars: 300, suppressToolErrorWarnings: false, }, @@ -1190,13 +1205,14 @@ IRC працює через розширення і налаштовується } ``` -- `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 виконують повні ходи агента — коротші інтервали спалюють більше токенів. +- `every`: рядок тривалості (ms/s/m/h). Типово: `30m` (автентифікація API key) або `1h` (автентифікація OAuth). Задайте `0m`, щоб вимкнути. +- `includeSystemPromptSection`: якщо false, прибирає розділ Heartbeat із системного prompt і пропускає вбудовування `HEARTBEAT.md` у bootstrap-контекст. Типово: `true`. +- `suppressToolErrorWarnings`: якщо true, пригнічує payload-и попереджень про помилки інструментів під час запусків heartbeat. +- `directPolicy`: політика прямої доставки/доставки в DM. `allow` (типово) дозволяє пряму доставку до цілі. `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` @@ -1206,19 +1222,19 @@ IRC працює через розширення і налаштовується defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // id of a registered compaction provider plugin (optional) + provider: "my-provider", // id зареєстрованого плагіна постачальника compaction (необов’язково) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - 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) + 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) memoryFlush: { enabled: true, softThresholdTokens: 6000, - 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.", + systemPrompt: "Сеанс наближається до compaction. Збережіть довготривалі спогади зараз.", + prompt: "Запишіть усі стійкі нотатки до memory/YYYY-MM-DD.md; відповідайте точним silent token NO_REPLY, якщо нічого зберігати.", }, }, }, @@ -1226,19 +1242,19 @@ IRC працює через розширення і налаштовується } ``` -- `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 доступний лише для читання. +- `mode`: `default` або `safeguard` (покрокове підсумовування для довгих історій). Див. [Compaction](/uk/concepts/compaction). +- `provider`: id зареєстрованого плагіна постачальника compaction. Коли задано, замість вбудованого LLM-підсумовування викликається `summarize()` постачальника. У разі помилки повертається до вбудованого механізму. Задання постачальника примусово встановлює `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction). +- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції compaction, після чого OpenClaw її перериває. Типово: `900`. +- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовані інструкції щодо збереження непрозорих ідентифікаторів під час підсумовування compaction. +- `identifierInstructions`: необов’язковий кастомний текст про збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`. +- `postCompactionSections`: необов’язкові назви секцій H2/H3 з AGENTS.md для повторного вбудовування після compaction. Типово `["Session Startup", "Red Lines"]`; задайте `[]`, щоб вимкнути повторне вбудовування. Якщо значення не задано або явно дорівнює цій типовій парі, старіші заголовки `Every Session`/`Safety` також приймаються як застарілий fallback. +- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування compaction. Використовуйте це, коли основний сеанс має залишатися на одній моделі, а підсумки compaction повинні виконуватися на іншій; якщо не задано, compaction використовує основну модель сеансу. +- `notifyUser`: якщо `true`, надсилає користувачу коротке повідомлення, коли починається compaction (наприклад, "Compacting context..."). Типово вимкнено, щоб compaction залишався непомітним. +- `memoryFlush`: тихий агентний хід перед auto-compaction для збереження довготривалих спогадів. Пропускається, якщо workspace доступний лише для читання. ### `agents.defaults.contextPruning` -Обрізає **старі результати інструментів** із контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сесії на диску. +Обрізає **старі результати інструментів** з контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сеансу на диску. ```json5 { @@ -1246,13 +1262,13 @@ IRC працює через розширення і налаштовується defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // duration (ms/s/m/h), default unit: minutes + ttl: "1h", // тривалість (ms/s/m/h), типова одиниця: хвилини keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, minPrunableToolChars: 50000, softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }, - hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" }, + hardClear: { enabled: true, placeholder: "[Вміст старого результату інструмента очищено]" }, tools: { deny: ["browser", "canvas"] }, }, }, @@ -1262,25 +1278,25 @@ IRC працює через розширення і налаштовується -- `mode: "cache-ttl"` вмикає проходи обрізання. -- `ttl` керує тим, як часто обрізання може виконатися знову (після останнього торкання кешу). -- Обрізання спочатку м’яко скорочує надто великі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів. +- `mode: "cache-ttl"` вмикає проходи pruning. +- `ttl` визначає, як часто pruning може запускатися повторно (після останнього дотику до cache). +- Pruning спочатку м’яко обрізає завеликі результати інструментів, а потім жорстко очищає старіші результати інструментів, якщо потрібно. -**Soft-trim** зберігає початок + кінець і вставляє `...` посередині. +**Soft-trim** зберігає початок і кінець та вставляє `...` посередині. -**Hard-clear** замінює весь результат інструмента на placeholder. +**Hard-clear** замінює весь результат інструмента placeholder-ом. Примітки: - Блоки зображень ніколи не обрізаються/очищаються. -- Співвідношення базуються на символах (приблизно), а не на точних підрахунках токенів. -- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається. +- Співвідношення базуються на символах (приблизно), а не на точних токенах. +- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, pruning пропускається. -Подробиці поведінки див. у [Session Pruning](/uk/concepts/session-pruning). +Докладніше про поведінку див. [Session Pruning](/uk/concepts/session-pruning). -### Блоковий стримінг +### Block streaming ```json5 { @@ -1290,17 +1306,17 @@ IRC працює через розширення і налаштовується blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (використовуйте minMs/maxMs) }, }, } ``` -- Канали, окрім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути блокові відповіді. -- Перевизначення каналів: `channels..blockStreamingCoalesce` (і варіанти для кожного облікового запису). За замовчуванням для Signal/Slack/Discord/Google Chat: `minChars: 1500`. -- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`. +- Канали, крім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути block replies. +- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat типово `minChars: 1500`. +- `humanDelay`: випадкова пауза між block replies. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`. -Подробиці поведінки і чанкування див. у [Streaming](/uk/concepts/streaming). +Докладніше про поведінку та розбиття на частини див. [Streaming](/uk/concepts/streaming). ### Індикатори набору тексту @@ -1315,8 +1331,8 @@ IRC працює через розширення і налаштовується } ``` -- За замовчуванням: `instant` для прямих чатів/згадок, `message` для групових чатів без згадки. -- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`. +- Типові значення: `instant` для особистих чатів/згадок, `message` для групових чатів без згадки. +- Перевизначення для сеансу: `session.typingMode`, `session.typingIntervalSeconds`. Див. [Typing Indicators](/uk/concepts/typing-indicators). @@ -1324,7 +1340,7 @@ IRC працює через розширення і налаштовується ### `agents.defaults.sandbox` -Необов’язкова sandbox-ізоляція для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). +Необов’язковий sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). ```json5 { @@ -1370,7 +1386,7 @@ IRC працює через розширення і налаштовується identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // SecretRefs / inline contents also supported: + // Також підтримуються SecretRef / вбудований вміст: // 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" }, @@ -1421,50 +1437,50 @@ IRC працює через розширення і налаштовується -**Бекенд:** +**Backend:** -- `docker`: локальний Docker runtime (default) -- `ssh`: загальний віддалений runtime на базі SSH +- `docker`: локальний runtime Docker (типово) +- `ssh`: універсальний віддалений runtime на основі SSH - `openshell`: runtime OpenShell -Коли вибрано `backend: "openshell"`, специфічні для runtime налаштування переміщуються до +Коли вибрано `backend: "openshell"`, налаштування, специфічні для runtime, переносяться до `plugins.entries.openshell.config`. -**Конфігурація SSH-бекенда:** +**Конфігурація SSH backend:** -- `target`: SSH-ціль у форматі `user@host[:port]` -- `command`: команда клієнта SSH (за замовчуванням: `ssh`) -- `workspaceRoot`: абсолютний віддалений корінь, що використовується для workspace за scope -- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані в OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: inline-вміст або SecretRef, який OpenClaw матеріалізує у тимчасові файли під час виконання -- `strictHostKeyChecking` / `updateHostKeys`: параметри політики host key для OpenSSH +- `target`: SSH-ціль у формі `user@host[:port]` +- `command`: команда SSH-клієнта (типово: `ssh`) +- `workspaceRoot`: абсолютний віддалений корінь, що використовується для workspace на кожен scope +- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, що передаються в OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRef-и, які OpenClaw матеріалізує у тимчасові файли під час runtime +- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH **Пріоритет SSH auth:** - `identityData` має пріоритет над `identityFile` - `certificateData` має пріоритет над `certificateFile` - `knownHostsData` має пріоритет над `knownHostsFile` -- Значення `*Data` на базі SecretRef визначаються з активного знімка runtime secrets перед початком sandbox session +- Значення `*Data` на основі SecretRef визначаються з активного secrets runtime snapshot перед початком sandbox session -**Поведінка SSH-бекенда:** +**Поведінка SSH backend:** -- один раз засіває віддалений workspace після create або recreate -- потім зберігає віддалений SSH workspace як канонічний -- маршрутизує `exec`, файлові інструменти й media paths через SSH -- не синхронізує віддалені зміни назад на хост автоматично +- ініціалізує віддалений workspace один раз після створення або перевідтворення +- потім зберігає віддалений SSH workspace канонічним +- маршрутизує `exec`, файлові інструменти та шляхи до медіа через SSH +- автоматично не синхронізує віддалені зміни назад на хост - не підтримує sandbox browser containers **Доступ до workspace:** -- `none`: sandbox workspace за scope у `~/.openclaw/sandboxes` -- `ro`: sandbox workspace в `/workspace`, workspace агента монтується лише для читання в `/agent` -- `rw`: workspace агента монтується для читання/запису в `/workspace` +- `none`: workspace sandbox на кожен scope у `~/.openclaw/sandboxes` +- `ro`: workspace sandbox у `/workspace`, workspace агента монтується лише для читання у `/agent` +- `rw`: workspace агента монтується для читання/запису у `/workspace` **Scope:** -- `session`: окремий container + workspace для кожної сесії -- `agent`: один container + workspace на агента (default) -- `shared`: спільний container і workspace (без міжсесійної ізоляції) +- `session`: контейнер + workspace на сеанс +- `agent`: один контейнер + workspace на агента (типово) +- `shared`: спільний контейнер і workspace (без ізоляції між сеансами) **Конфігурація плагіна OpenShell:** @@ -1479,10 +1495,10 @@ IRC працює через розширення і налаштовується from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // optional - gatewayEndpoint: "https://lab.example", // optional - policy: "strict", // optional OpenShell policy id - providers: ["openai"], // optional + gateway: "lab", // необов’язково + gatewayEndpoint: "https://lab.example", // необов’язково + policy: "strict", // необов’язковий id політики OpenShell + providers: ["openai"], // необов’язково autoProviders: true, timeoutSeconds: 120, }, @@ -1494,30 +1510,30 @@ IRC працює через розширення і налаштовується **Режим OpenShell:** -- `mirror`: засіяти віддалений із локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним -- `remote`: засіяти віддалений один раз при створенні sandbox, потім зберігати віддалений workspace канонічним +- `mirror`: ініціалізувати віддалене середовище з локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним +- `remote`: ініціалізувати віддалене середовище один раз під час створення sandbox, потім зберігати віддалений workspace канонічним -У режимі `remote` локальні зміни хоста, зроблені поза OpenClaw, не синхронізуються автоматично в sandbox після кроку засівання. -Транспорт — SSH у sandbox OpenShell, але життєвим циклом sandbox і необов’язковою mirror-синхронізацією володіє плагін. +У режимі `remote` локальні зміни хоста, зроблені поза OpenClaw, не синхронізуються автоматично в sandbox після початкового кроку. +Транспорт — SSH у sandbox OpenShell, але плагін володіє життєвим циклом sandbox і необов’язковою синхронізацією mirror. -**`setupCommand`** запускається один раз після створення контейнера (через `sh -lc`). Потребує виходу в мережу, записуваного root і користувача root. +**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує вихідного мережевого доступу, записуваного root і користувача root. -**Контейнери за замовчуванням мають `network: "none"`** — встановіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихід назовні. -`"host"` заблоковано. `"container:"` заблоковано за замовчуванням, якщо ви явно не встановите -`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass). +**Контейнери типово використовують `network: "none"`** — задайте `"bridge"` (або кастомну мережу bridge), якщо агенту потрібен вихідний доступ. +`"host"` заблоковано. `"container:"` типово заблоковано, якщо ви явно не встановите +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (аварійний режим). -**Вхідні вкладення** staging-уються в `media/inbound/*` в активному workspace. +**Вхідні вкладення** розміщуються у `media/inbound/*` в активному workspace. -**`docker.binds`** монтує додаткові каталоги хоста; глобальні й агентні binds об’єднуються. +**`docker.binds`** монтує додаткові каталоги хоста; глобальні та per-agent bind-и об’єднуються. -**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в system prompt. Не вимагає `browser.enabled` у `openclaw.json`. -Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає короткоживучий token URL (замість показу пароля у спільному URL). +**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний prompt. Не потребує `browser.enabled` в `openclaw.json`. +Доступ спостерігача noVNC типово використовує VNC auth, і OpenClaw видає короткоживучий token URL (замість відкриття пароля у спільному URL). -- `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` і налаштовано для контейнерних хостів: +- `allowHostControl: false` (типово) блокує спроби sandboxed session-ів керувати браузером хоста. +- `network` типово дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Задавайте `bridge` лише тоді, коли вам явно потрібна глобальна bridge-зв’язність. +- `cdpSourceRange` за потреби обмежує вхідний доступ CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`). +- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер sandbox browser. Коли його задано (включно з `[]`), він замінює `docker.binds` для контейнера браузера. +- Типові параметри запуску визначені в `scripts/sandbox-browser-entrypoint.sh` і налаштовані для контейнерних хостів: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1534,30 +1550,31 @@ IRC працює через розширення і налаштовується - `--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, якщо вони потрібні вашому workflow. - - `--renderer-process-limit=2` можна змінити за допомогою - `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; встановіть `0`, щоб використовувати - стандартний ліміт процесів Chromium. - - а також `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`. - - Значення за замовчуванням — це базовий стан контейнерного образу; використовуйте власний образ browser із власним - entrypoint, щоб змінити поведінку контейнера за замовчуванням. + типово увімкнені й можуть бути вимкнені через + `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для WebGL/3D це потрібно. + - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає розширення, якщо ваш workflow + від них залежить. + - `--renderer-process-limit=2` можна змінити через + `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; задайте `0`, щоб використовувати + типове обмеження процесів Chromium. + - плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`. + - Типові значення є baseline образу контейнера; щоб змінити типові значення контейнера, + використовуйте власний образ browser з власним entrypoint. -Browser sandboxing і `sandbox.docker.binds` наразі підтримуються лише для Docker. +Browser sandboxing і `sandbox.docker.binds` наразі працюють лише з Docker. Збірка образів: ```bash -scripts/sandbox-setup.sh # main sandbox image -scripts/sandbox-browser-setup.sh # optional browser image +scripts/sandbox-setup.sh # основний sandbox image +scripts/sandbox-browser-setup.sh # необов’язковий browser image ``` -### `agents.list` (перевизначення для окремих агентів) +### `agents.list` (перевизначення для конкретного агента) ```json5 { @@ -1566,18 +1583,18 @@ scripts/sandbox-browser-setup.sh # optional browser image { id: "main", default: true, - name: "Main Agent", + name: "Основний агент", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - 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 + model: "anthropic/claude-opus-4-6", // або { primary, fallbacks } + thinkingDefault: "high", // перевизначення типового рівня thinking для агента + reasoningDefault: "on", // перевизначення типової видимості reasoning для агента + fastModeDefault: false, // перевизначення fast mode для агента + params: { cacheRetention: "none" }, // перевизначає matching defaults.models params за ключем + skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано identity: { name: "Samantha", - theme: "helpful sloth", + theme: "кориснивий лінивець", emoji: "🦥", avatar: "avatars/samantha.png", }, @@ -1606,25 +1623,25 @@ scripts/sandbox-browser-setup.sh # optional browser image ``` - `id`: стабільний id агента (обов’язково). -- `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"` із 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: якщо сесія-запитувач sandboxed, `sessions_spawn` відхиляє цілі, які виконувалися б без sandbox. -- `subagents.requireAgentId`: коли true, блокує виклики `sessions_spawn`, які пропускають `agentId` (примушує до явного вибору профілю; за замовчуванням false). +- `default`: якщо задано кілька, перемагає перший (логуватиметься попередження). Якщо не задано жодного, типовим є перший елемент списку. +- `model`: форма рядка перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback-и). Cron jobs, які перевизначають лише `primary`, усе одно успадковують типові fallback-и, якщо ви не задасте `fallbacks: []`. +- `params`: параметри потоку для конкретного агента, які зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. +- `skills`: необов’язковий allowlist skill-ів для конкретного агента. Якщо пропущено, агент успадковує `agents.defaults.skills`, коли воно задане; явний список замінює типові значення, а не зливається з ними, і `[]` означає відсутність skill-ів. +- `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 sessions. +- `identity.avatar`: шлях відносно workspace, `http(s)` URL або 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). --- -## Багатоагентна маршрутизація +## Маршрутизація багатьох агентів -Запускайте кілька ізольованих агентів в одному шлюзі. Див. [Multi-Agent](/uk/concepts/multi-agent). +Запускайте кілька ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent). ```json5 { @@ -1641,29 +1658,29 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` -### Поля збігу binding +### Поля відповідності прив’язок -- `type` (необов’язково): `route` для звичайної маршрутизації (відсутність type означає route), `acp` для постійних ACP-прив’язок розмов. +- `type` (необов’язково): `route` для звичайної маршрутизації (якщо відсутній, типово route), `acp` для сталих ACP-прив’язок розмов. - `match.channel` (обов’язково) -- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; пропущено = обліковий запис за замовчуванням) +- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; пропущено = типовий обліковий запис) - `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`) - `match.guildId` / `match.teamId` (необов’язково; специфічно для каналу) -- `acp` (необов’язково; лише для записів `type: "acp"`): `{ mode, label, cwd, backend }` +- `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: "*"` (на рівні каналу) -6. Агент за замовчуванням +5. `match.accountId: "*"` (для всього каналу) +6. Типовий агент -У межах кожного рівня перший відповідний запис у `bindings` має пріоритет. +У межах кожного рівня перемагає перший відповідний запис `bindings`. -Для записів `type: "acp"` OpenClaw визначає збіг за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує порядок рівнів route binding вище. +Для записів `type: "acp"` OpenClaw визначає збіг за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує порядок рівнів route binding, описаний вище. -### Профілі доступу для окремих агентів +### Профілі доступу для конкретного агента @@ -1683,7 +1700,7 @@ scripts/sandbox-browser-setup.sh # optional browser image - + ```json5 { @@ -1712,7 +1729,7 @@ scripts/sandbox-browser-setup.sh # optional browser image - + ```json5 { @@ -1758,7 +1775,7 @@ scripts/sandbox-browser-setup.sh # optional browser image -Подробиці про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). +Докладніше про пріоритети див. [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). --- @@ -1784,22 +1801,22 @@ scripts/sandbox-browser-setup.sh # optional browser image }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) + parentForkMaxTokens: 100000, // пропустити fork батьківської гілки вище цього значення токенів (0 вимикає) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // duration or false - maxDiskBytes: "500mb", // optional hard budget - highWaterBytes: "400mb", // optional cleanup target + resetArchiveRetention: "30d", // тривалість або false + maxDiskBytes: "500mb", // необов’язковий жорсткий бюджет + highWaterBytes: "400mb", // необов’язкова ціль очищення }, threadBindings: { enabled: true, - idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) - maxAgeHours: 0, // default hard max age in hours (`0` disables) + idleHours: 24, // типове auto-unfocus через неактивність у годинах (`0` вимикає) + maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає) }, - mainKey: "main", // legacy (runtime always uses "main") + mainKey: "main", // застаріле (runtime завжди використовує "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1811,46 +1828,46 @@ scripts/sandbox-browser-setup.sh # optional browser image -- **`scope`**: базова стратегія групування сесій для контекстів групового чату. - - `per-sender` (default): кожен відправник отримує ізольовану сесію в межах контексту каналу. - - `global`: усі учасники в контексті каналу спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст справді задумано). +- **`scope`**: базова стратегія групування сеансів для контекстів групових чатів. + - `per-sender` (типово): кожен відправник отримує ізольований сеанс у межах контексту каналу. + - `global`: усі учасники контексту каналу спільно використовують один сеанс (використовуйте лише тоді, коли потрібен спільний контекст). - **`dmScope`**: як групуються DM. - - `main`: усі DM спільно використовують основну сесію. + - `main`: усі DM використовують головний сеанс. - `per-peer`: ізоляція за id відправника між каналами. - - `per-channel-peer`: ізоляція для кожного каналу + відправника (рекомендовано для багатокористувацьких inbox). - - `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` вимикає; постачальники можуть перевизначати) + - `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для inbox з кількома користувачами). + - `per-account-channel-peer`: ізоляція за обліковим записом + каналом + відправником (рекомендовано для багатообліковості). +- **`identityLinks`**: зіставлення канонічних id з peer-ами з префіксом постачальника для спільного використання сеансу між каналами. +- **`reset`**: основна політика reset. `daily` скидає о `atHour` за локальним часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує те, що закінчується раніше. +- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як псевдонім для `direct`. +- **`parentForkMaxTokens`**: максимальне `totalTokens` батьківського сеансу, дозволене при створенні forked thread session (типово `100000`). + - Якщо батьківський `totalTokens` перевищує це значення, OpenClaw запускає новий thread session замість успадкування історії transcript батьківського сеансу. + - Задайте `0`, щоб вимкнути цей захист і завжди дозволяти fork батьківського сеансу. +- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для головного бакета direct chat. +- **`agentToAgent.maxPingPongTurns`**: максимальна кількість reply-back ходів між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining. +- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny перемагає. +- **`maintenance`**: очищення та контроль зберігання session-store. + - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення. + - `pruneAfter`: віковий поріг для застарілих записів (типово `30d`). + - `maxEntries`: максимальна кількість записів у `sessions.json` (типово `500`). + - `rotateBytes`: обертати `sessions.json`, коли він перевищує цей розмір (типово `10mb`). + - `resetArchiveRetention`: строк зберігання архівів transcript `*.reset.`. Типово дорівнює `pruneAfter`; задайте `false`, щоб вимкнути. + - `maxDiskBytes`: необов’язковий бюджет диска для каталогу сеансів. У режимі `warn` логуються попередження; у режимі `enforce` спочатку видаляються найстаріші артефакти/сеанси. + - `highWaterBytes`: необов’язкова ціль після очищення бюджету. Типово `80%` від `maxDiskBytes`. +- **`threadBindings`**: глобальні типові значення для функцій сеансів, прив’язаних до гілок. + - `enabled`: головний типовий перемикач (постачальники можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) + - `idleHours`: типове auto-unfocus через неактивність у годинах (`0` вимикає; постачальники можуть перевизначати) + - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; постачальники можуть перевизначати) --- -## Повідомлення +## Messages ```json5 { messages: { - responsePrefix: "🦞", // or "auto" + responsePrefix: "🦞", // або "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -1865,7 +1882,7 @@ scripts/sandbox-browser-setup.sh # optional browser image }, }, inbound: { - debounceMs: 2000, // 0 disables + debounceMs: 2000, // 0 вимикає byChannel: { whatsapp: 5000, slack: 1500, @@ -1879,34 +1896,34 @@ scripts/sandbox-browser-setup.sh # optional browser image Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Порядок розв’язання (найспецифічніше має пріоритет): account → channel → global. `""` вимикає й зупиняє каскад. `"auto"` виводить `[{identity.name}]`. +Розв’язання (перемагає найспецифічніше): обліковий запис → канал → глобально. `""` вимикає та зупиняє каскад. `"auto"` виводить `[{identity.name}]`. **Шаблонні змінні:** -| Змінна | Опис | Приклад | -| ---------------- | ----------------------- | --------------------------- | -| `{model}` | Коротка назва моделі | `claude-opus-4-6` | -| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | -| `{provider}` | Назва постачальника | `anthropic` | +| Змінна | Опис | Приклад | +| ----------------- | ------------------------ | --------------------------- | +| `{model}` | Коротка назва моделі | `claude-opus-4-6` | +| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | +| `{provider}` | Назва постачальника | `anthropic` | | `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` | -| `{identity.name}` | Назва ідентичності агента | (те саме, що `"auto"`) | +| `{identity.name}` | Назва identity агента | (те саме, що `"auto"`) | -Змінні нечутливі до регістру. `{think}` є alias для `{thinkingLevel}`. +Змінні нечутливі до регістру. `{think}` — псевдонім для `{thinkingLevel}`. ### Ack reaction -- За замовчуванням використовується `identity.emoji` активного агента, інакше `"👀"`. Встановіть `""`, щоб вимкнути. +- Типово береться з `identity.emoji` активного агента, інакше `"👀"`. Задайте `""`, щоб вимкнути. - Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`. -- Порядок розв’язання: 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. +- Порядок розв’язання: обліковий запис → канал → `messages.ackReaction` → резервне значення identity. +- Scope: `group-mentions` (типово), `group-all`, `direct`, `all`. +- `removeAckAfterReply`: прибирає ack після відповіді в Slack, Discord і Telegram. +- `messages.statusReactions.enabled`: вмикає статусні реакції життєвого циклу в Slack, Discord і Telegram. + У Slack і Discord, якщо не задано, статусні реакції залишаються увімкненими, коли активні ack reaction. + У Telegram задайте це явно в `true`, щоб увімкнути статусні реакції життєвого циклу. -### Debounce для вхідних повідомлень +### Вхідний debounce -Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення змиваються негайно. Керувальні команди обходять debounce. +Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Media/attachments негайно скидаються. Команди керування обходять debounce. ### TTS (text-to-speech) @@ -1949,18 +1966,18 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` -- `auto` керує режимом auto-TTS за замовчуванням: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні налаштування, а `/tts status` показує фактичний стан. +- `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`. -- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок розв’язання: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. -- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw трактує його як OpenAI-compatible TTS server і послаблює валідацію model/voice. +- `modelOverrides` типово увімкнено; `modelOverrides.allowProvider` типово `false` (opt-in). +- API key резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. +- `openai.baseUrl` перевизначає endpoint TTS OpenAI. Порядок розв’язання: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. +- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw обробляє його як OpenAI-compatible TTS server і послаблює валідацію model/voice. --- ## Talk -Значення за замовчуванням для режиму Talk (macOS/iOS/Android). +Типові значення для режиму Talk (macOS/iOS/Android). ```json5 { @@ -1984,13 +2001,13 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` -- `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`. +- `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. +- Резервне `ELEVENLABS_API_KEY` застосовується лише тоді, коли API key Talk не налаштований. - `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви. -- `silenceTimeoutMs` керує тим, скільки часу режим Talk чекає після тиші користувача, перш ніж надіслати транскрипт. Якщо не встановлено, зберігається вікно паузи платформи за замовчуванням (`700 ms на macOS і Android, 900 ms на iOS`). +- `silenceTimeoutMs` визначає, скільки режим Talk чекає після мовчання користувача, перш ніж надіслати transcript. Якщо не задано, зберігається типове платформне вікно паузи (`700 ms на macOS і Android, 900 ms на iOS`). --- @@ -2000,35 +2017,35 @@ scripts/sandbox-browser-setup.sh # optional browser image `tools.profile` задає базовий allowlist перед `tools.allow`/`tools.deny`: -Локальний onboarding у нових локальних конфігураціях за замовчуванням задає `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` приймається як alias для `exec`) | -| `group:fs` | `read`, `write`, `edit`, `apply_patch` | +| Група | Інструменти | +| ----------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `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: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 plugin-ів) | ### `tools.allow` / `tools.deny` -Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть коли Docker sandbox вимкнено. +Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує `*` wildcard-и. Застосовується навіть коли sandbox Docker вимкнено. ```json5 { @@ -2070,9 +2087,9 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` -- Перевизначення для агента (`agents.list[].tools.elevated`) може лише додатково обмежувати. -- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline directives застосовуються лише до одного повідомлення. -- Elevated `exec` обходить sandboxing і використовує налаштований escape path (`gateway` за замовчуванням або `node`, коли exec target — `node`). +- Перевизначення для конкретного агента (`agents.list[].tools.elevated`) може лише додатково обмежувати. +- `/elevated on|off|ask|full` зберігає стан для кожного сеансу; inline-директиви застосовуються до одного повідомлення. +- Elevated `exec` обходить sandboxing і використовує налаштований escape path (`gateway` типово або `node`, коли ціллю exec є `node`). ### `tools.exec` @@ -2096,8 +2113,8 @@ scripts/sandbox-browser-setup.sh # optional browser image ### `tools.loopDetection` -Перевірки безпеки від циклів інструментів **вимкнені за замовчуванням**. Встановіть `enabled: true`, щоб увімкнути виявлення. -Налаштування можна визначати глобально в `tools.loopDetection` і перевизначати для кожного агента в `agents.list[].tools.loopDetection`. +Перевірки безпеки loop для інструментів **типово вимкнені**. Задайте `enabled: true`, щоб увімкнути виявлення. +Налаштування можна визначити глобально в `tools.loopDetection` і перевизначати для конкретного агента в `agents.list[].tools.loopDetection`. ```json5 { @@ -2118,14 +2135,14 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` -- `historySize`: максимальна історія викликів інструментів, що зберігається для аналізу циклів. -- `warningThreshold`: поріг повторюваного шаблону без прогресу для попереджень. -- `criticalThreshold`: вищий поріг повторення для блокування критичних циклів. -- `globalCircuitBreakerThreshold`: поріг жорсткої зупинки для будь-якого запуску без прогресу. +- `historySize`: максимальний розмір історії викликів інструментів, що зберігається для аналізу loop. +- `warningThreshold`: поріг повторюваних шаблонів без прогресу для попереджень. +- `criticalThreshold`: вищий поріг повторень для блокування критичних loop. +- `globalCircuitBreakerThreshold`: жорсткий поріг зупинки для будь-якого запуску без прогресу. - `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами. -- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll-інструменти (`process.poll`, `command_status` тощо). +- `detectors.knownPollNoProgress`: попереджати/блокувати відомі polling tools (`process.poll`, `command_status` тощо). - `detectors.pingPong`: попереджати/блокувати чергування парних шаблонів без прогресу. -- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація завершується помилкою. +- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація не проходить. ### `tools.web` @@ -2135,14 +2152,14 @@ scripts/sandbox-browser-setup.sh # optional browser image web: { search: { enabled: true, - apiKey: "brave_api_key", // or BRAVE_API_KEY env + apiKey: "brave_api_key", // або env BRAVE_API_KEY maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // optional; omit for auto-detect + provider: "firecrawl", // необов’язково; пропустіть для auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2167,7 +2184,7 @@ scripts/sandbox-browser-setup.sh # optional browser image media: { concurrency: 2, asyncCompletion: { - directSend: false, // opt-in: send finished async music/video directly to the channel + directSend: false, // opt-in: надсилати завершені async music/video безпосередньо в канал }, audio: { enabled: true, @@ -2191,32 +2208,32 @@ scripts/sandbox-browser-setup.sh # optional browser image } ``` - + **Запис постачальника** (`type: "provider"` або пропущено): - `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}}` тощо) +- `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`: перевизначення для конкретного запису. +- У разі помилки використовується наступний запис. -Provider auth follows standard order: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. +Автентифікація постачальника виконується у стандартному порядку: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. **Поля async completion:** -- `asyncCompletion.directSend`: коли `true`, завершені асинхронні задачі `music_generate` - і `video_generate` спочатку намагаються доставлятися напряму в канал. За замовчуванням: `false` - (застарілий шлях requester-session wake/model-delivery). +- `asyncCompletion.directSend`: коли `true`, завершені async-задачі `music_generate` + і `video_generate` спочатку намагаються доставлятися безпосередньо в канал. Типово: `false` + (застарілий шлях пробудження requester-session/model-delivery). @@ -2235,9 +2252,9 @@ Provider auth follows standard order: `auth-profiles.json` → env vars → `mod ### `tools.sessions` -Керує тим, які сесії можуть бути цілями для інструментів сесій (`sessions_list`, `sessions_history`, `sessions_send`). +Керує тим, які сеанси можуть бути ціллю для session tools (`sessions_list`, `sessions_history`, `sessions_send`). -За замовчуванням: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents). +Типово: `tree` (поточний сеанс + сеанси, породжені ним, наприклад subagents). ```json5 { @@ -2252,11 +2269,11 @@ Provider auth follows standard order: `auth-profiles.json` → env vars → `mod Примітки: -- `self`: лише поточний ключ сесії. -- `tree`: поточна сесія + сесії, породжені поточною сесією (subagents). -- `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"`. +- `self`: лише поточний ключ сеансу. +- `tree`: поточний сеанс + сеанси, породжені поточним сеансом (subagents). +- `agent`: будь-який сеанс, що належить поточному id агента (може включати інших користувачів, якщо ви використовуєте сеанси per-sender під тим самим id агента). +- `all`: будь-який сеанс. Націлення між агентами все одно потребує `tools.agentToAgent`. +- Sandbox clamp: коли поточний сеанс працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibility примусово стає `tree`, навіть якщо `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` @@ -2267,11 +2284,11 @@ Provider auth follows standard order: `auth-profiles.json` → env vars → `mod tools: { sessions_spawn: { attachments: { - enabled: false, // opt-in: set true to allow inline file attachments - maxTotalBytes: 5242880, // 5 MB total across all files + enabled: false, // opt-in: задайте true, щоб дозволити inline file attachments + maxTotalBytes: 5242880, // 5 MB загалом для всіх файлів maxFiles: 50, - maxFileBytes: 1048576, // 1 MB per file - retainOnSessionKeep: false, // keep attachments when cleanup="keep" + maxFileBytes: 1048576, // 1 MB на файл + retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep" }, }, }, @@ -2281,21 +2298,21 @@ Provider auth follows standard order: `auth-profiles.json` → env vars → `mod Примітки: - Вкладення підтримуються лише для `runtime: "subagent"`. Runtime ACP їх відхиляє. -- Файли матеріалізуються в дочірньому workspace за шляхом `.openclaw/attachments//` з `.manifest.json`. -- Вміст вкладень автоматично редагується під час збереження transcript. -- Входи base64 перевіряються суворою валідацією алфавіту/padding і захистом розміру до декодування. +- Файли матеріалізуються в child workspace у `.openclaw/attachments//` із `.manifest.json`. +- Вміст вкладень автоматично редагується в збереженні transcript. +- Входи Base64 перевіряються з суворою перевіркою алфавіту/відступів і захистом розміру до декодування. - Права доступу до файлів: `0700` для каталогів і `0600` для файлів. -- Очищення дотримується політики `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`. +- Очищення слідує політиці `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`. ### `tools.experimental` -Експериментальні прапорці вбудованих інструментів. За замовчуванням вимкнено, якщо не спрацьовує правило auto-enable, специфічне для runtime. +Експериментальні прапорці вбудованих інструментів. Типово вимкнено, якщо не діє правило авто-вмикання, специфічне для runtime. ```json5 { tools: { experimental: { - planTool: true, // enable experimental update_plan + planTool: true, // увімкнути експериментальний update_plan }, }, } @@ -2304,8 +2321,8 @@ Provider auth follows standard order: `auth-profiles.json` → env vars → `mod Примітки: - `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи. -- За замовчуванням: `false` для не-OpenAI постачальників. Запуски OpenAI і OpenAI Codex автоматично вмикають його, якщо значення не встановлено; задайте `false`, щоб вимкнути це auto-enable. -- Коли увімкнено, system prompt також додає інструкції щодо використання, щоб модель застосовувала його лише для суттєвої роботи і тримала не більш як один крок у стані `in_progress`. +- Типово: `false` для постачальників, відмінних від OpenAI. Запуски OpenAI і OpenAI Codex автоматично вмикають його, якщо значення не задано; задайте `false`, щоб вимкнути це авто-вмикання. +- Коли увімкнено, системний prompt також додає інструкції з використання, щоб модель застосовувала його лише для суттєвої роботи й тримала щонайбільше один крок у стані `in_progress`. ### `agents.defaults.subagents` @@ -2325,21 +2342,21 @@ Provider auth follows standard order: `auth-profiles.json` → env vars → `mod } ``` -- `model`: модель за замовчуванням для породжених sub-agents. Якщо пропущено, sub-agents успадковують модель викликувача. -- `allowAgents`: allowlist id цільових агентів за замовчуванням для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; за замовчуванням: лише той самий агент). -- `runTimeoutSeconds`: тайм-аут за замовчуванням (секунди) для `sessions_spawn`, коли виклик інструмента пропускає `runTimeoutSeconds`. `0` означає без тайм-ауту. +- `model`: типова модель для spawned 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 (default) | replace + mode: "merge", // merge (типово) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2363,47 +2380,47 @@ OpenClaw використовує вбудований каталог модел } ``` -- Використовуйте `authHeader: true` + `headers` для нестандартних потреб автентифікації. -- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias змінної середовища). +- Використовуйте `authHeader: true` + `headers` для спеціальних потреб автентифікації. +- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий псевдонім змінної середовища). - Пріоритет злиття для однакових ID постачальників: - - Непорожні значення `baseUrl` з agent `models.json` мають пріоритет. - - Непорожні значення `apiKey` з агента мають пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті config/auth-profile. - - Значення `apiKey` постачальника, керовані SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження розв’язаних секретів. + - Непорожні значення `baseUrl` в agent `models.json` мають пріоритет. + - Непорожні значення `apiKey` в agent мають пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті config/auth-profile. + - Значення `apiKey` постачальника, керовані SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження розв’язаних secret-ів. - Значення заголовків постачальника, керовані 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. + - Порожні або відсутні `apiKey`/`baseUrl` в agent повертаються до `models.providers` у конфігурації. + - Для однакових моделей `contextWindow`/`maxTokens` використовують вище значення між явною конфігурацією та неявними значеннями каталогу. + - Для однакових моделей `contextTokens` зберігає явне runtime-обмеження, якщо воно є; використовуйте його, щоб обмежити ефективний контекст без зміни нативних метаданих моделі. + - Використовуйте `models.mode: "replace"`, якщо хочете, щоб конфігурація повністю переписала `models.json`. + - Збереження маркерів є авторитетним із боку джерела: маркери записуються з активного snapshot конфігурації джерела (до розв’язання), а не з розв’язаних runtime secret values. ### Деталі полів постачальника - `models.mode`: поведінка каталогу постачальників (`merge` або `replace`). -- `models.providers`: мапа користувацьких постачальників із ключем provider id. -- `models.providers.*.api`: адаптер запитів (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо). +- `models.providers`: карта кастомних постачальників, ключем якої є id постачальника. +- `models.providers.*.api`: адаптер запиту (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо). - `models.providers.*.apiKey`: облікові дані постачальника (надавайте перевагу SecretRef/env substitution). - `models.providers.*.auth`: стратегія автентифікації (`api-key`, `token`, `oauth`, `aws-sdk`). -- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вставляє `options.num_ctx` у запити (default: `true`). -- `models.providers.*.authHeader`: примусово передає облікові дані в заголовку `Authorization`, коли це потрібно. -- `models.providers.*.baseUrl`: базовий URL upstream API. +- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вбудовувати `options.num_ctx` у запити (типово: `true`). +- `models.providers.*.authHeader`: примусово передавати облікові дані в заголовку `Authorization`, коли це потрібно. +- `models.providers.*.baseUrl`: base URL API upstream. - `models.providers.*.headers`: додаткові статичні заголовки для proxy/tenant routing. -- `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model provider. - - `request.headers`: додаткові заголовки (зливаються зі стандартними заголовками постачальника). Значення приймають SecretRef. +- `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.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати env vars `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 під час 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. +- `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-compatible chat endpoint-ів, що приймають лише рядок. Коли `true`, OpenClaw сплющує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням запиту. +- `plugins.entries.amazon-bedrock.config.discovery`: корінь налаштувань auto-discovery для Bedrock. - `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.refreshInterval`: інтервал polling для оновлення discovery. - `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне context window для виявлених моделей. -- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервне максимальне число output tokens для виявлених моделей. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервне максимальне число вихідних токенів для виявлених моделей. ### Приклади постачальників @@ -2441,7 +2458,7 @@ OpenClaw використовує вбудований каталог модел } ``` -Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` — для прямого Z.AI. +Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` для прямого Z.AI. @@ -2458,7 +2475,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`. @@ -2475,11 +2492,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Встановіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як aliases. Скорочення: `openclaw onboard --auth-choice zai-api-key`. +Задайте `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як псевдоніми. Скорочення: `openclaw onboard --auth-choice zai-api-key`. - Загальний endpoint: `https://api.z.ai/api/paas/v4` -- Coding endpoint (default): `https://api.z.ai/api/coding/paas/v4` -- Для загального endpoint визначте користувацького постачальника з перевизначенням base URL. +- Endpoint для кодування (типово): `https://api.z.ai/api/coding/paas/v4` +- Для загального endpoint задайте кастомного постачальника з перевизначенням base URL. @@ -2518,11 +2535,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 оголошують сумісність зі streaming на спільному +транспорті `openai-completions`, і OpenClaw тепер визначає це за можливостями endpoint-у, +а не лише за id вбудованого постачальника. @@ -2540,32 +2557,8 @@ OpenClaw використовує вбудований каталог модел } ``` -Anthropic-compatible, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. +Сумісний з Anthropic, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. - - -```json5 -{ - env: { SYNTHETIC_API_KEY: "sk-..." }, - agents: { - defaults: { - model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" }, - models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } }, - }, - }, - models: { - mode: "merge", - providers: { - synthetic: { - baseUrl: "https://api.synthetic.new/anthropic", - apiKey: "${SYNTHETIC_API_KEY}", - api: "anthropic-messages", - models: [ - { - id: "hf:MiniMaxAI/MiniMax-M2.5", - name: "MiniMax M2.5", - reasoning: true, - input: ["text"], - cost: \ No newline at end of file +< \ No newline at end of file diff --git a/docs/uk/plugins/sdk-overview.md b/docs/uk/plugins/sdk-overview.md index be27d64d8..728eed127 100644 --- a/docs/uk/plugins/sdk-overview.md +++ b/docs/uk/plugins/sdk-overview.md @@ -1,33 +1,33 @@ --- read_when: - - Потрібно знати, з якого підшляху SDK імпортувати - - Потрібен довідник для всіх методів реєстрації в OpenClawPluginApi + - Вам потрібно знати, з якого підшляху SDK імпортувати + - Вам потрібен довідник для всіх методів реєстрації в OpenClawPluginApi - Ви шукаєте конкретний експорт SDK sidebarTitle: SDK Overview summary: Карта імпорту, довідник API реєстрації та архітектура SDK title: Огляд Plugin SDK x-i18n: - generated_at: "2026-04-07T20:09:50Z" + generated_at: "2026-04-08T06:30:42Z" model: gpt-5.4 provider: openai - source_hash: c5a41bd82d165dfbb7fbd6e4528cf322e9133a51efe55fa8518a7a0a626d9d30 + source_hash: a9141dc0303c91974fe693ce48ad9f7dc4179418ae262a96011ad565aae87d21 source_path: plugins/sdk-overview.md workflow: 15 --- # Огляд Plugin SDK -Plugin SDK — це типізований контракт між plugins і core. Ця сторінка є -довідником щодо **що імпортувати** і **що можна реєструвати**. +Plugin SDK — це типізований контракт між плагінами та ядром. Ця сторінка є +довідником про **що імпортувати** і **що можна реєструвати**. **Шукаєте практичний посібник?** - - Перший plugin? Почніть із [Getting Started](/uk/plugins/building-plugins) - - Channel plugin? Див. [Channel Plugins](/uk/plugins/sdk-channel-plugins) - - Provider plugin? Див. [Provider Plugins](/uk/plugins/sdk-provider-plugins) + - Перший плагін? Почніть із [Getting Started](/uk/plugins/building-plugins) + - Плагін каналу? Див. [Channel Plugins](/uk/plugins/sdk-channel-plugins) + - Плагін провайдера? Див. [Provider Plugins](/uk/plugins/sdk-provider-plugins) -## Угода щодо імпорту +## Угода про імпорт Завжди імпортуйте з конкретного підшляху: @@ -36,327 +36,330 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; ``` -Кожен підшлях — це невеликий самодостатній модуль. Це зберігає швидкий запуск і -запобігає проблемам із циклічними залежностями. Для специфічних для channel -допоміжних засобів entry/build віддавайте перевагу `openclaw/plugin-sdk/channel-core`; `openclaw/plugin-sdk/core` -залишайте для ширшої узагальненої поверхні та спільних допоміжних засобів, таких як +Кожен підшлях — це невеликий самодостатній модуль. Це забезпечує швидкий +запуск і запобігає проблемам із циклічними залежностями. Для специфічних для +каналів допоміжних функцій entry/build надавайте перевагу +`openclaw/plugin-sdk/channel-core`; `openclaw/plugin-sdk/core` залишайте для +ширшої узагальненої поверхні та спільних допоміжних функцій, таких як `buildChannelConfigSchema`. -Не додавайте і не використовуйте зручні шви з назвами provider, такі як +Не додавайте й не використовуйте зручні шари з іменами провайдерів, такі як `openclaw/plugin-sdk/slack`, `openclaw/plugin-sdk/discord`, -`openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp`, або -допоміжні шви з брендингом channel. Bundled plugins мають компонувати загальні -підшляхи SDK у власних barrel-файлах `api.ts` або `runtime-api.ts`, а core -має або використовувати ці локальні barrel-файли plugin, або додавати вузький загальний SDK -контракт, коли потреба справді є міжchannel-ною. +`openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp`, або допоміжні +шари з брендуванням каналів. Вбудовані плагіни мають поєднувати узагальнені +підшляхи SDK у власних barrel-файлах `api.ts` або `runtime-api.ts`, а ядро +має або використовувати ці локальні для плагіна barrel-файли, або додавати +вузький узагальнений контракт SDK, коли потреба справді є міжканальною. -Згенерована карта експортів усе ще містить невеликий набір допоміжних -швів bundled-plugin, таких як `plugin-sdk/feishu`, `plugin-sdk/feishu-setup`, -`plugin-sdk/zalo`, `plugin-sdk/zalo-setup` і `plugin-sdk/matrix*`. Ці -підшляхи існують лише для підтримки та сумісності bundled-plugin; вони -навмисно не включені до загальної таблиці нижче і не є рекомендованим -шляхом імпорту для нових сторонніх plugins. +Згенерована карта експортів усе ще містить невеликий набір допоміжних шарів +для вбудованих плагінів, таких як `plugin-sdk/feishu`, +`plugin-sdk/feishu-setup`, `plugin-sdk/zalo`, `plugin-sdk/zalo-setup` і +`plugin-sdk/matrix*`. Ці підшляхи існують лише для підтримки вбудованих +плагінів і сумісності; їх навмисно не включено до загальної таблиці нижче, і +вони не є рекомендованим шляхом імпорту для нових сторонніх плагінів. ## Довідник підшляхів Найуживаніші підшляхи, згруповані за призначенням. Згенерований повний список із -понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`. +понад 200 підшляхів міститься у `scripts/lib/plugin-sdk-entrypoints.json`. -Зарезервовані допоміжні підшляхи bundled-plugin усе ще з’являються в цьому -згенерованому списку. Розглядайте їх як поверхні деталей реалізації/сумісності, якщо лише сторінка документації -явно не просуває одну з них як публічну. +Зарезервовані допоміжні підшляхи для вбудованих плагінів усе ще з’являються в +цьому згенерованому списку. Вважайте їх деталями реалізації/поверхнями +сумісності, якщо лише якась сторінка документації явно не проголошує одну з +них публічною. -### Plugin entry +### Точка входу плагіна -| Subpath | Ключові експорти | -| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `plugin-sdk/plugin-entry` | `definePluginEntry` | +| Subpath | Ключові експорти | +| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `plugin-sdk/plugin-entry` | `definePluginEntry` | | `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` | -| `plugin-sdk/config-schema` | `OpenClawSchema` | -| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | +| `plugin-sdk/config-schema` | `OpenClawSchema` | +| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | - + | Subpath | Ключові експорти | | --- | --- | | `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` | - | `plugin-sdk/config-schema` | Експорт кореневої Zod-схеми `openclaw.json` (`OpenClawSchema`) | + | `plugin-sdk/config-schema` | Експорт кореневої схеми Zod для `openclaw.json` (`OpenClawSchema`) | | `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` | - | `plugin-sdk/setup` | Спільні допоміжні засоби майстра налаштування, підказки allowlist, побудовники стану налаштування | + | `plugin-sdk/setup` | Спільні допоміжні функції майстра налаштування, запити списку дозволених, побудовники статусу налаштування | | `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | | `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` | | `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | - | `plugin-sdk/account-core` | Допоміжні засоби для конфігурації/гейтів дій з кількома акаунтами та резервного використання акаунта за замовчуванням | - | `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні засоби нормалізації account-id | - | `plugin-sdk/account-resolution` | Пошук акаунта + допоміжні засоби резервного використання акаунта за замовчуванням | - | `plugin-sdk/account-helpers` | Вузькі допоміжні засоби для списків акаунтів/дій з акаунтами | + | `plugin-sdk/account-core` | Допоміжні функції багатoакаунтної конфігурації/контролю дій, допоміжні функції резервного вибору акаунта за замовчуванням | + | `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні функції нормалізації ID акаунта | + | `plugin-sdk/account-resolution` | Пошук акаунта + допоміжні функції резервного вибору за замовчуванням | + | `plugin-sdk/account-helpers` | Вузькі допоміжні функції для списку акаунтів/дій з акаунтами | | `plugin-sdk/channel-pairing` | `createChannelPairingController` | | `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` | | `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` | - | `plugin-sdk/channel-config-schema` | Типи схеми конфігурації channel | - | `plugin-sdk/telegram-command-config` | Допоміжні засоби нормалізації/валідації користувацьких команд Telegram з резервною bundled-contract підтримкою | + | `plugin-sdk/channel-config-schema` | Типи схеми конфігурації каналу | + | `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації/валідації кастомних команд Telegram з резервною підтримкою вбудованого контракту | | `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` | | `plugin-sdk/channel-lifecycle` | `createAccountStatusSink` | - | `plugin-sdk/inbound-envelope` | Спільні допоміжні засоби маршрутизації вхідних повідомлень + побудови envelope | - | `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні засоби запису та диспетчеризації вхідних повідомлень | - | `plugin-sdk/messaging-targets` | Допоміжні засоби розбору/зіставлення target | - | `plugin-sdk/outbound-media` | Спільні допоміжні засоби завантаження вихідних медіа | - | `plugin-sdk/outbound-runtime` | Допоміжні засоби вихідної ідентичності/делегування надсилання | - | `plugin-sdk/thread-bindings-runtime` | Життєвий цикл thread-binding і допоміжні засоби adapter | - | `plugin-sdk/agent-media-payload` | Legacy побудовник agent media payload | - | `plugin-sdk/conversation-runtime` | Допоміжні засоби binding розмов/thread, pairing і configured-binding | - | `plugin-sdk/runtime-config-snapshot` | Допоміжний засіб snapshot конфігурації runtime | - | `plugin-sdk/runtime-group-policy` | Допоміжні засоби визначення group-policy під час runtime | - | `plugin-sdk/channel-status` | Спільні допоміжні засоби snapshot/summary статусу channel | - | `plugin-sdk/channel-config-primitives` | Вузькі примітиви схеми конфігурації channel | - | `plugin-sdk/channel-config-writes` | Допоміжні засоби авторизації запису конфігурації channel | - | `plugin-sdk/channel-plugin-common` | Спільні експорти prelude plugin channel | - | `plugin-sdk/allowlist-config-edit` | Допоміжні засоби редагування/читання конфігурації allowlist | - | `plugin-sdk/group-access` | Спільні допоміжні засоби прийняття рішень щодо group-access | - | `plugin-sdk/direct-dm` | Спільні допоміжні засоби auth/guard для прямих DM | - | `plugin-sdk/interactive-runtime` | Допоміжні засоби нормалізації/скорочення payload інтерактивних відповідей | - | `plugin-sdk/channel-inbound` | Допоміжні засоби debounce вхідних повідомлень, зіставлення mention, політики mention і envelope | + | `plugin-sdk/inbound-envelope` | Спільні допоміжні функції побудови вхідних маршрутів та envelope | + | `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні функції запису та диспетчеризації вхідних даних | + | `plugin-sdk/messaging-targets` | Допоміжні функції парсингу/зіставлення цілей | + | `plugin-sdk/outbound-media` | Спільні допоміжні функції завантаження вихідних медіа | + | `plugin-sdk/outbound-runtime` | Допоміжні функції для вихідної ідентичності/делегування надсилання | + | `plugin-sdk/thread-bindings-runtime` | Життєвий цикл прив’язок потоків та допоміжні функції адаптерів | + | `plugin-sdk/agent-media-payload` | Застарілий побудовник медіапейлоадів агента | + | `plugin-sdk/conversation-runtime` | Допоміжні функції прив’язки розмов/потоків, pairing і налаштованих прив’язок | + | `plugin-sdk/runtime-config-snapshot` | Допоміжна функція знімка конфігурації runtime | + | `plugin-sdk/runtime-group-policy` | Допоміжні функції визначення політики груп у runtime | + | `plugin-sdk/channel-status` | Спільні допоміжні функції знімка/зведення статусу каналу | + | `plugin-sdk/channel-config-primitives` | Вузькі примітиви схеми конфігурації каналу | + | `plugin-sdk/channel-config-writes` | Допоміжні функції авторизації запису конфігурації каналу | + | `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти плагінів каналів | + | `plugin-sdk/allowlist-config-edit` | Допоміжні функції редагування/читання конфігурації списку дозволених | + | `plugin-sdk/group-access` | Спільні допоміжні функції рішень щодо доступу до груп | + | `plugin-sdk/direct-dm` | Спільні допоміжні функції авторизації/захисту прямих DM | + | `plugin-sdk/interactive-runtime` | Допоміжні функції нормалізації/зведення інтерактивних пейлоадів відповідей | + | `plugin-sdk/channel-inbound` | Допоміжні функції debounce для вхідних повідомлень, зіставлення згадок, політики згадок і допоміжні функції envelope | | `plugin-sdk/channel-send-result` | Типи результатів відповіді | | `plugin-sdk/channel-actions` | `createMessageToolButtonsSchema`, `createMessageToolCardSchema` | - | `plugin-sdk/channel-targets` | Допоміжні засоби розбору/зіставлення target | - | `plugin-sdk/channel-contract` | Типи контракту channel | - | `plugin-sdk/channel-feedback` | Підключення feedback/reaction | - | `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні засоби secret-contract, такі як `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, і типи secret target | + | `plugin-sdk/channel-targets` | Допоміжні функції парсингу/зіставлення цілей | + | `plugin-sdk/channel-contract` | Типи контракту каналу | + | `plugin-sdk/channel-feedback` | Підключення зворотного зв’язку/реакцій | + | `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції secret-контракту, такі як `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, і типи secret-цілей | - + | Subpath | Ключові експорти | | --- | --- | | `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` | - | `plugin-sdk/provider-setup` | Кураторські допоміжні засоби налаштування локального/self-hosted provider | - | `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні засоби налаштування self-hosted provider, сумісного з OpenAI | - | `plugin-sdk/cli-backend` | Стандарти конфігурації backend CLI + константи watchdog | - | `plugin-sdk/provider-auth-runtime` | Допоміжні засоби визначення API key під час runtime для provider plugins | - | `plugin-sdk/provider-auth-api-key` | Допоміжні засоби онбордингу/запису профілю API key, такі як `upsertApiKeyProfile` | - | `plugin-sdk/provider-auth-result` | Стандартний побудовник результату OAuth auth | - | `plugin-sdk/provider-auth-login` | Спільні допоміжні засоби інтерактивного входу для provider plugins | - | `plugin-sdk/provider-env-vars` | Допоміжні засоби пошуку env vars для auth provider | + | `plugin-sdk/provider-setup` | Кураторські допоміжні функції налаштування локальних/self-hosted провайдерів | + | `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні функції налаштування self-hosted провайдерів, сумісних з OpenAI | + | `plugin-sdk/cli-backend` | Значення за замовчуванням для CLI backend + константи watchdog | + | `plugin-sdk/provider-auth-runtime` | Допоміжні функції визначення API-ключів у runtime для плагінів провайдерів | + | `plugin-sdk/provider-auth-api-key` | Допоміжні функції онбордингу/запису профілю API-ключів, такі як `upsertApiKeyProfile` | + | `plugin-sdk/provider-auth-result` | Стандартний побудовник результатів OAuth-автентифікації | + | `plugin-sdk/provider-auth-login` | Спільні інтерактивні допоміжні функції входу для плагінів провайдерів | + | `plugin-sdk/provider-env-vars` | Допоміжні функції пошуку env var для автентифікації провайдерів | | `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` | - | `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні побудовники replay-policy, допоміжні засоби endpoint provider і допоміжні засоби нормалізації model-id, такі як `normalizeNativeXaiModelId` | + | `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні побудовники політик replay, допоміжні функції endpoint провайдера та нормалізації ID моделей, такі як `normalizeNativeXaiModelId` | | `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` | - | `plugin-sdk/provider-http` | Загальні допоміжні засоби HTTP/endpoint capability для provider | - | `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні засоби contract для конфігурації/вибору web-fetch, такі як `enablePluginInConfig` і `WebFetchProviderPlugin` | - | `plugin-sdk/provider-web-fetch` | Допоміжні засоби реєстрації/кешування web-fetch provider | - | `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні засоби contract для конфігурації/облікових даних web-search, такі як `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setter/getter для облікових даних | - | `plugin-sdk/provider-web-search` | Допоміжні засоби реєстрації/кешування/runtime web-search provider | - | `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика і допоміжні засоби сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | + | `plugin-sdk/provider-http` | Узагальнені допоміжні функції для HTTP/можливостей endpoint провайдера | + | `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні функції контракту конфігурації/вибору web-fetch, такі як `enablePluginInConfig` і `WebFetchProviderPlugin` | + | `plugin-sdk/provider-web-fetch` | Допоміжні функції реєстрації/кешування провайдерів web-fetch | + | `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні функції контракту конфігурації/облікових даних web-search, такі як `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setter/getter для облікових даних | + | `plugin-sdk/provider-web-search` | Допоміжні функції реєстрації/кешування/runtime для провайдерів web-search | + | `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика, а також допоміжні функції сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` | | `plugin-sdk/provider-usage` | `fetchClaudeUsage` та подібні | - | `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи stream wrapper і спільні допоміжні засоби wrapper для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | - | `plugin-sdk/provider-onboard` | Допоміжні засоби patch конфігурації онбордингу | - | `plugin-sdk/global-singleton` | Допоміжні засоби process-local singleton/map/cache | + | `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи stream wrapper і спільні допоміжні wrapper-функції для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot | + | `plugin-sdk/provider-onboard` | Допоміжні функції внесення патчів у конфігурацію онбордингу | + | `plugin-sdk/global-singleton` | Допоміжні функції process-local singleton/map/cache | - + | Subpath | Ключові експорти | | --- | --- | - | `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні засоби реєстру команд, допоміжні засоби авторизації відправника | - | `plugin-sdk/approval-auth-runtime` | Допоміжні засоби визначення approver і auth дій у тому самому chat | - | `plugin-sdk/approval-client-runtime` | Допоміжні засоби профілю/фільтра native exec approval | - | `plugin-sdk/approval-delivery-runtime` | Adapter-и можливостей/доставки native approval | - | `plugin-sdk/approval-gateway-runtime` | Спільний допоміжний засіб визначення gateway approval | - | `plugin-sdk/approval-handler-adapter-runtime` | Легкі допоміжні засоби завантаження adapter native approval для гарячих entrypoint-ів channel | - | `plugin-sdk/approval-handler-runtime` | Ширші допоміжні засоби runtime для handler approval; віддавайте перевагу вужчим швам adapter/gateway, коли їх достатньо | - | `plugin-sdk/approval-native-runtime` | Допоміжні засоби native approval target + account-binding | - | `plugin-sdk/approval-reply-runtime` | Допоміжні засоби payload відповідей для exec/plugin approval | - | `plugin-sdk/command-auth-native` | Native auth команд + допоміжні засоби native session-target | - | `plugin-sdk/command-detection` | Спільні допоміжні засоби виявлення команд | - | `plugin-sdk/command-surface` | Нормалізація тіла команд і допоміжні засоби поверхні команд | + | `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні функції реєстру команд, допоміжні функції авторизації відправника | + | `plugin-sdk/approval-auth-runtime` | Допоміжні функції визначення approver і авторизації дій у тому самому чаті | + | `plugin-sdk/approval-client-runtime` | Допоміжні функції профілів/фільтрів підтвердження native exec | + | `plugin-sdk/approval-delivery-runtime` | Адаптери можливостей/доставки native confirmation | + | `plugin-sdk/approval-gateway-runtime` | Спільна допоміжна функція визначення approval gateway | + | `plugin-sdk/approval-handler-adapter-runtime` | Полегшені допоміжні функції завантаження native approval adapter для гарячих точок входу каналів | + | `plugin-sdk/approval-handler-runtime` | Ширші допоміжні функції runtime для approval handler; віддавайте перевагу вужчим adapter/gateway seams, якщо їх достатньо | + | `plugin-sdk/approval-native-runtime` | Допоміжні функції цілей native approval + прив’язки акаунтів | + | `plugin-sdk/approval-reply-runtime` | Допоміжні функції пейлоадів відповідей exec/plugin approval | + | `plugin-sdk/command-auth-native` | Допоміжні функції native command auth + native session-target | + | `plugin-sdk/command-detection` | Спільні допоміжні функції виявлення команд | + | `plugin-sdk/command-surface` | Допоміжні функції нормалізації тіла команди та command-surface | | `plugin-sdk/allow-from` | `formatAllowFromLowercase` | - | `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні засоби збирання secret-contract для поверхонь secret channel/plugin | - | `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні засоби `coerceSecretRef` і типізації SecretRef для розбору secret-contract/config | - | `plugin-sdk/security-runtime` | Спільні допоміжні засоби довіри, DM gating, зовнішнього контенту та збирання secret | - | `plugin-sdk/ssrf-policy` | Допоміжні засоби allowlist хостів і SSRF policy приватних мереж | - | `plugin-sdk/ssrf-runtime` | Допоміжні засоби pinned-dispatcher, fetch із SSRF-захистом і SSRF policy | - | `plugin-sdk/secret-input` | Допоміжні засоби розбору secret input | - | `plugin-sdk/webhook-ingress` | Допоміжні засоби webhook request/target | - | `plugin-sdk/webhook-request-guards` | Допоміжні засоби для розміру body request/timeout | + | `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції збирання secret-контрактів для secret-surface каналів/плагінів | + | `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні функції `coerceSecretRef` і типізації SecretRef для парсингу secret-контрактів/конфігурації | + | `plugin-sdk/security-runtime` | Спільні допоміжні функції довіри, DM-gating, зовнішнього вмісту та збирання секретів | + | `plugin-sdk/ssrf-policy` | Допоміжні функції політики SSRF для host allowlist і приватних мереж | + | `plugin-sdk/ssrf-runtime` | Допоміжні функції pinned-dispatcher, fetch із захистом SSRF і політики SSRF | + | `plugin-sdk/secret-input` | Допоміжні функції парсингу secret input | + | `plugin-sdk/webhook-ingress` | Допоміжні функції запитів/цілей webhook | + | `plugin-sdk/webhook-request-guards` | Допоміжні функції розміру тіла запиту/тайм-ауту | - + | Subpath | Ключові експорти | | --- | --- | - | `plugin-sdk/runtime` | Широкі допоміжні засоби runtime/logging/backup/встановлення plugin | - | `plugin-sdk/runtime-env` | Вузькі допоміжні засоби env runtime, logger, timeout, retry і backoff | - | `plugin-sdk/channel-runtime-context` | Загальні допоміжні засоби реєстрації та пошуку runtime-context channel | + | `plugin-sdk/runtime` | Широкі допоміжні функції runtime/логування/резервного копіювання/встановлення плагінів | + | `plugin-sdk/runtime-env` | Вузькі допоміжні функції runtime env, logger, timeout, retry і backoff | + | `plugin-sdk/channel-runtime-context` | Узагальнені допоміжні функції реєстрації та пошуку channel runtime-context | | `plugin-sdk/runtime-store` | `createPluginRuntimeStore` | - | `plugin-sdk/plugin-runtime` | Спільні допоміжні засоби для команд/hook/http/interactive plugin | - | `plugin-sdk/hook-runtime` | Спільні допоміжні засоби pipeline для webhook/internal hook | - | `plugin-sdk/lazy-runtime` | Допоміжні засоби lazy імпорту/binding runtime, такі як `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` | - | `plugin-sdk/process-runtime` | Допоміжні засоби exec процесів | - | `plugin-sdk/cli-runtime` | Допоміжні засоби форматування CLI, очікування та версій | - | `plugin-sdk/gateway-runtime` | Допоміжні засоби client gateway і patch статусу channel | - | `plugin-sdk/config-runtime` | Допоміжні засоби завантаження/запису конфігурації | - | `plugin-sdk/telegram-command-config` | Нормалізація name/description команд Telegram і перевірки дублікатів/конфліктів, навіть коли bundled Telegram contract surface недоступна | - | `plugin-sdk/approval-runtime` | Допоміжні засоби exec/plugin approval, побудовники approval-capability, допоміжні засоби auth/profile, native routing/runtime | - | `plugin-sdk/reply-runtime` | Спільні допоміжні засоби inbound/reply runtime, chunking, dispatch, heartbeat, планувальник reply | - | `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні засоби dispatch/finalize для reply | - | `plugin-sdk/reply-history` | Спільні допоміжні засоби short-window reply-history, такі як `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` | + | `plugin-sdk/plugin-runtime` | Спільні допоміжні функції для команд/хуків/http/interactive плагінів | + | `plugin-sdk/hook-runtime` | Спільні допоміжні функції pipeline для webhook/internal hook | + | `plugin-sdk/lazy-runtime` | Допоміжні функції lazy-імпорту та прив’язки runtime, такі як `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` | + | `plugin-sdk/process-runtime` | Допоміжні функції виконання процесів | + | `plugin-sdk/cli-runtime` | Допоміжні функції форматування, очікування та версій для CLI | + | `plugin-sdk/gateway-runtime` | Допоміжні функції клієнта gateway і patch статусу каналу | + | `plugin-sdk/config-runtime` | Допоміжні функції завантаження/запису конфігурації | + | `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації назв/описів команд Telegram і перевірки дублікатів/конфліктів, навіть коли поверхня вбудованого контракту Telegram недоступна | + | `plugin-sdk/approval-runtime` | Допоміжні функції exec/plugin approval, побудовники approval-capability, допоміжні функції auth/profile, native routing/runtime | + | `plugin-sdk/reply-runtime` | Спільні допоміжні функції runtime для вхідних повідомлень/відповідей, chunking, dispatch, heartbeat, planner відповідей | + | `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні функції dispatch/finalize відповіді | + | `plugin-sdk/reply-history` | Спільні допоміжні функції коротковіконної історії відповідей, такі як `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` | | `plugin-sdk/reply-reference` | `createReplyReferencePlanner` | - | `plugin-sdk/reply-chunking` | Вузькі допоміжні засоби chunking тексту/markdown | - | `plugin-sdk/session-store-runtime` | Допоміжні засоби path сховища сесій + updated-at | - | `plugin-sdk/state-paths` | Допоміжні засоби path для state/OAuth директорій | - | `plugin-sdk/routing` | Допоміжні засоби для route/session-key/account binding, такі як `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` | - | `plugin-sdk/status-helpers` | Спільні допоміжні засоби summary статусу channel/account, стандарти runtime-state і допоміжні засоби метаданих issues | - | `plugin-sdk/target-resolver-runtime` | Спільні допоміжні засоби resolver target | - | `plugin-sdk/string-normalization-runtime` | Допоміжні засоби нормалізації slug/string | + | `plugin-sdk/reply-chunking` | Вузькі допоміжні функції chunking для тексту/markdown | + | `plugin-sdk/session-store-runtime` | Допоміжні функції шляху сховища сесій + updated-at | + | `plugin-sdk/state-paths` | Допоміжні функції шляхів до каталогів state/OAuth | + | `plugin-sdk/routing` | Допоміжні функції маршруту/ключа сесії/прив’язки акаунта, такі як `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` | + | `plugin-sdk/status-helpers` | Спільні допоміжні функції зведення статусу каналу/акаунта, значення runtime-state за замовчуванням і допоміжні функції метаданих проблем | + | `plugin-sdk/target-resolver-runtime` | Спільні допоміжні функції визначення цілей | + | `plugin-sdk/string-normalization-runtime` | Допоміжні функції нормалізації slug/рядків | | `plugin-sdk/request-url` | Витягування рядкових URL із fetch/request-подібних вхідних даних | - | `plugin-sdk/run-command` | Запуск команд із таймером і нормалізованими результатами stdout/stderr | - | `plugin-sdk/param-readers` | Загальні рідери параметрів tool/CLI | - | `plugin-sdk/tool-send` | Витягування канонічних полів target надсилання з аргументів tool | - | `plugin-sdk/temp-path` | Спільні допоміжні засоби path тимчасових завантажень | - | `plugin-sdk/logging-core` | Допоміжні засоби logger підсистеми та редагування чутливих даних | - | `plugin-sdk/markdown-table-runtime` | Допоміжні засоби режиму markdown-таблиць | - | `plugin-sdk/json-store` | Невеликі допоміжні засоби читання/запису JSON state | - | `plugin-sdk/file-lock` | Допоміжні засоби повторно вхідних file-lock | - | `plugin-sdk/persistent-dedupe` | Допоміжні засоби disk-backed dedupe cache | - | `plugin-sdk/acp-runtime` | Допоміжні засоби ACP runtime/session і reply-dispatch | - | `plugin-sdk/agent-config-primitives` | Вузькі примітиви схеми конфігурації runtime agent | - | `plugin-sdk/boolean-param` | Рідер вільних boolean-параметрів | - | `plugin-sdk/dangerous-name-runtime` | Допоміжні засоби визначення відповідності небезпечних імен | - | `plugin-sdk/device-bootstrap` | Допоміжні засоби bootstrap пристрою та pairing token | + | `plugin-sdk/run-command` | Runner команд із таймуванням і нормалізованими результатами stdout/stderr | + | `plugin-sdk/param-readers` | Загальні читачі параметрів tool/CLI | + | `plugin-sdk/tool-send` | Витягування канонічних полів цілей надсилання з аргументів tool | + | `plugin-sdk/temp-path` | Спільні допоміжні функції шляхів до тимчасових завантажень | + | `plugin-sdk/logging-core` | Допоміжні функції subsystem logger і redaction | + | `plugin-sdk/markdown-table-runtime` | Допоміжні функції режиму таблиць Markdown | + | `plugin-sdk/json-store` | Невеликі допоміжні функції читання/запису стану JSON | + | `plugin-sdk/file-lock` | Допоміжні функції реентерабельного file-lock | + | `plugin-sdk/persistent-dedupe` | Допоміжні функції дискового кешу дедуплікації | + | `plugin-sdk/acp-runtime` | Допоміжні функції ACP runtime/session і reply-dispatch | + | `plugin-sdk/agent-config-primitives` | Вузькі примітиви схеми конфігурації runtime агента | + | `plugin-sdk/boolean-param` | Гнучкий читач булевих параметрів | + | `plugin-sdk/dangerous-name-runtime` | Допоміжні функції визначення збігів небезпечних назв | + | `plugin-sdk/device-bootstrap` | Допоміжні функції bootstrap пристрою та токенів pairing | | `plugin-sdk/extension-shared` | Спільні примітиви для passive-channel, status і ambient proxy helper | - | `plugin-sdk/models-provider-runtime` | Допоміжні засоби відповіді `/models` command/provider | - | `plugin-sdk/skill-commands-runtime` | Допоміжні засоби для переліку Skills command | - | `plugin-sdk/native-command-registry` | Допоміжні засоби реєстру/build/serialize native команд | - | `plugin-sdk/provider-zai-endpoint` | Допоміжні засоби виявлення endpoint Z.AI | - | `plugin-sdk/infra-runtime` | Допоміжні засоби системних подій/heartbeat | - | `plugin-sdk/collection-runtime` | Невеликі допоміжні засоби bounded cache | - | `plugin-sdk/diagnostic-runtime` | Допоміжні засоби діагностичних прапорців і подій | - | `plugin-sdk/error-runtime` | Граф помилок, форматування, спільні допоміжні засоби класифікації помилок, `isApprovalNotFoundError` | - | `plugin-sdk/fetch-runtime` | Обгорнутий fetch, proxy і допоміжні засоби pinned lookup | - | `plugin-sdk/host-runtime` | Допоміжні засоби нормалізації hostname і SCP host | - | `plugin-sdk/retry-runtime` | Допоміжні засоби конфігурації retry і виконання retry | - | `plugin-sdk/agent-runtime` | Допоміжні засоби директорії/ідентичності/workspace agent | - | `plugin-sdk/directory-runtime` | Запит/усунення дублікатів директорій на основі конфігурації | + | `plugin-sdk/models-provider-runtime` | Допоміжні функції відповіді провайдера/команди `/models` | + | `plugin-sdk/skill-commands-runtime` | Допоміжні функції перелічення команд Skills | + | `plugin-sdk/native-command-registry` | Допоміжні функції реєстру/build/serialize native command | + | `plugin-sdk/provider-zai-endpoint` | Допоміжні функції виявлення endpoint Z.AI | + | `plugin-sdk/infra-runtime` | Допоміжні функції системних подій/heartbeat | + | `plugin-sdk/collection-runtime` | Невеликі допоміжні функції обмеженого кешу | + | `plugin-sdk/diagnostic-runtime` | Допоміжні функції діагностичних прапорців і подій | + | `plugin-sdk/error-runtime` | Допоміжні функції графа помилок, форматування, спільної класифікації помилок, `isApprovalNotFoundError` | + | `plugin-sdk/fetch-runtime` | Допоміжні функції обгорнутого fetch, proxy і pinned lookup | + | `plugin-sdk/host-runtime` | Допоміжні функції нормалізації hostname і SCP host | + | `plugin-sdk/retry-runtime` | Допоміжні функції конфігурації retry і виконання retry | + | `plugin-sdk/agent-runtime` | Допоміжні функції каталогу/ідентичності/workspace агента | + | `plugin-sdk/directory-runtime` | Запит/дедуплікація каталогів на основі конфігурації | | `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` | | Subpath | Ключові експорти | | --- | --- | - | `plugin-sdk/media-runtime` | Спільні допоміжні засоби fetch/transform/store для медіа, а також побудовники media payload | - | `plugin-sdk/media-generation-runtime` | Спільні допоміжні засоби failover для генерації медіа, вибір кандидатів і повідомлення про відсутню модель | - | `plugin-sdk/media-understanding` | Типи provider для розуміння медіа, а також provider-oriented експорти допоміжних засобів для зображень/аудіо | - | `plugin-sdk/text-runtime` | Спільні допоміжні засоби тексту/markdown/logging, такі як видалення тексту, видимого помічнику, допоміжні засоби render/chunking/table для markdown, редагування чутливих даних, допоміжні засоби тегів директив і утиліти safe-text | - | `plugin-sdk/text-chunking` | Допоміжний засіб chunking вихідного тексту | - | `plugin-sdk/speech` | Типи speech provider, а також provider-oriented допоміжні засоби для директив, реєстру й валідації | - | `plugin-sdk/speech-core` | Спільні типи speech provider, а також допоміжні засоби реєстру, директив і нормалізації | - | `plugin-sdk/realtime-transcription` | Типи provider для realtime transcription і допоміжні засоби реєстру | - | `plugin-sdk/realtime-voice` | Типи provider для realtime voice і допоміжні засоби реєстру | - | `plugin-sdk/image-generation` | Типи provider для генерації зображень | - | `plugin-sdk/image-generation-core` | Спільні типи image-generation, а також допоміжні засоби failover, auth і реєстру | - | `plugin-sdk/music-generation` | Типи provider/request/result для генерації музики | - | `plugin-sdk/music-generation-core` | Спільні типи music-generation, допоміжні засоби failover, пошук provider і розбір model-ref | - | `plugin-sdk/video-generation` | Типи provider/request/result для генерації відео | - | `plugin-sdk/video-generation-core` | Спільні типи video-generation, допоміжні засоби failover, пошук provider і розбір model-ref | - | `plugin-sdk/webhook-targets` | Реєстр webhook target і допоміжні засоби встановлення route | - | `plugin-sdk/webhook-path` | Допоміжні засоби нормалізації webhook path | - | `plugin-sdk/web-media` | Спільні допоміжні засоби завантаження віддалених/локальних медіа | + | `plugin-sdk/media-runtime` | Спільні допоміжні функції fetch/transform/store для медіа, а також побудовники медіапейлоадів | + | `plugin-sdk/media-generation-runtime` | Спільні допоміжні функції failover для генерації медіа, вибору кандидатів і повідомлень про відсутні моделі | + | `plugin-sdk/media-understanding` | Типи провайдерів media understanding, а також provider-facing експорти допоміжних функцій для зображень/аудіо | + | `plugin-sdk/text-runtime` | Спільні допоміжні функції тексту/markdown/логування, такі як видалення видимого для асистента тексту, допоміжні функції render/chunking/table для markdown, redaction helpers, directive-tag helpers і safe-text utilities | + | `plugin-sdk/text-chunking` | Допоміжна функція chunking вихідного тексту | + | `plugin-sdk/speech` | Типи провайдерів мовлення, а також provider-facing допоміжні функції directive, registry і validation | + | `plugin-sdk/speech-core` | Спільні типи провайдерів мовлення, допоміжні функції registry, directive і normalization | + | `plugin-sdk/realtime-transcription` | Типи провайдерів realtime transcription і допоміжні функції registry | + | `plugin-sdk/realtime-voice` | Типи провайдерів realtime voice і допоміжні функції registry | + | `plugin-sdk/image-generation` | Типи провайдерів генерації зображень | + | `plugin-sdk/image-generation-core` | Спільні типи генерації зображень, допоміжні функції failover, auth і registry | + | `plugin-sdk/music-generation` | Типи провайдерів/запитів/результатів генерації музики | + | `plugin-sdk/music-generation-core` | Спільні типи генерації музики, допоміжні функції failover, пошуку провайдера і парсингу model-ref | + | `plugin-sdk/video-generation` | Типи провайдерів/запитів/результатів генерації відео | + | `plugin-sdk/video-generation-core` | Спільні типи генерації відео, допоміжні функції failover, пошуку провайдера і парсингу model-ref | + | `plugin-sdk/webhook-targets` | Допоміжні функції реєстру webhook targets і встановлення маршрутів | + | `plugin-sdk/webhook-path` | Допоміжні функції нормалізації шляху webhook | + | `plugin-sdk/web-media` | Спільні допоміжні функції завантаження віддалених/локальних медіа | | `plugin-sdk/zod` | Повторний експорт `zod` для споживачів plugin SDK | | `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` | - + | Subpath | Ключові експорти | | --- | --- | - | `plugin-sdk/memory-core` | Поверхня допоміжних засобів bundled memory-core для manager/config/file/CLI helper-ів | - | `plugin-sdk/memory-core-engine-runtime` | Runtime facade індексації/пошуку memory | - | `plugin-sdk/memory-core-host-engine-foundation` | Експорти foundation engine для host memory | - | `plugin-sdk/memory-core-host-engine-embeddings` | Експорти embedding engine для host memory | - | `plugin-sdk/memory-core-host-engine-qmd` | Експорти QMD engine для host memory | - | `plugin-sdk/memory-core-host-engine-storage` | Експорти storage engine для host memory | - | `plugin-sdk/memory-core-host-multimodal` | Мультимодальні допоміжні засоби для host memory | - | `plugin-sdk/memory-core-host-query` | Допоміжні засоби запитів для host memory | - | `plugin-sdk/memory-core-host-secret` | Допоміжні засоби secret для host memory | - | `plugin-sdk/memory-core-host-events` | Допоміжні засоби журналу подій для host memory | - | `plugin-sdk/memory-core-host-status` | Допоміжні засоби статусу для host memory | - | `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні засоби runtime CLI для host memory | - | `plugin-sdk/memory-core-host-runtime-core` | Допоміжні засоби core runtime для host memory | - | `plugin-sdk/memory-core-host-runtime-files` | Допоміжні засоби file/runtime для host memory | - | `plugin-sdk/memory-host-core` | Vendor-neutral псевдонім для допоміжних засобів core runtime host memory | - | `plugin-sdk/memory-host-events` | Vendor-neutral псевдонім для допоміжних засобів журналу подій host memory | - | `plugin-sdk/memory-host-files` | Vendor-neutral псевдонім для допоміжних засобів file/runtime host memory | - | `plugin-sdk/memory-host-markdown` | Спільні допоміжні засоби managed-markdown для plugins, суміжних із memory | - | `plugin-sdk/memory-host-search` | Active memory runtime facade для доступу до search-manager | - | `plugin-sdk/memory-host-status` | Vendor-neutral псевдонім для допоміжних засобів статусу host memory | - | `plugin-sdk/memory-lancedb` | Поверхня допоміжних засобів bundled memory-lancedb | + | `plugin-sdk/memory-core` | Поверхня допоміжних функцій вбудованого memory-core для manager/config/file/CLI helpers | + | `plugin-sdk/memory-core-engine-runtime` | Фасад runtime для memory index/search | + | `plugin-sdk/memory-core-host-engine-foundation` | Експорти foundation engine для memory host | + | `plugin-sdk/memory-core-host-engine-embeddings` | Експорти embedding engine для memory host | + | `plugin-sdk/memory-core-host-engine-qmd` | Експорти QMD engine для memory host | + | `plugin-sdk/memory-core-host-engine-storage` | Експорти storage engine для memory host | + | `plugin-sdk/memory-core-host-multimodal` | Допоміжні функції multimodal для memory host | + | `plugin-sdk/memory-core-host-query` | Допоміжні функції query для memory host | + | `plugin-sdk/memory-core-host-secret` | Допоміжні функції secret для memory host | + | `plugin-sdk/memory-core-host-events` | Допоміжні функції журналу подій для memory host | + | `plugin-sdk/memory-core-host-status` | Допоміжні функції статусу для memory host | + | `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні функції runtime CLI для memory host | + | `plugin-sdk/memory-core-host-runtime-core` | Допоміжні функції core runtime для memory host | + | `plugin-sdk/memory-core-host-runtime-files` | Допоміжні функції файлів/runtime для memory host | + | `plugin-sdk/memory-host-core` | Вендорно-нейтральний псевдонім для допоміжних функцій core runtime memory host | + | `plugin-sdk/memory-host-events` | Вендорно-нейтральний псевдонім для допоміжних функцій журналу подій memory host | + | `plugin-sdk/memory-host-files` | Вендорно-нейтральний псевдонім для допоміжних функцій файлів/runtime memory host | + | `plugin-sdk/memory-host-markdown` | Спільні допоміжні функції managed-markdown для плагінів, суміжних із пам’яттю | + | `plugin-sdk/memory-host-search` | Активний фасад runtime пам’яті для доступу до search-manager | + | `plugin-sdk/memory-host-status` | Вендорно-нейтральний псевдонім для допоміжних функцій статусу memory host | + | `plugin-sdk/memory-lancedb` | Поверхня допоміжних функцій вбудованого memory-lancedb | - - | Family | Current subpaths | Intended use | + + | Family | Поточні підшляхи | Призначення | | --- | --- | --- | - | Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні засоби підтримки bundled browser plugin (`browser-support` залишається barrel-файлом сумісності) | - | Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня допоміжних засобів/runtime bundled Matrix | - | Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня допоміжних засобів/runtime bundled LINE | - | IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Поверхня допоміжних засобів bundled IRC | - | Допоміжні засоби, специфічні для channel | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Шви сумісності/допоміжні засоби bundled channel | - | Допоміжні засоби, специфічні для auth/plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Шви допоміжних засобів bundled feature/plugin; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` | + | Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні функції підтримки вбудованого browser plugin (`browser-support` залишається barrel-файлом сумісності) | + | Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня допоміжних функцій/runtime для вбудованого Matrix | + | Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня допоміжних функцій/runtime для вбудованого LINE | + | IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Поверхня допоміжних функцій для вбудованого IRC | + | Допоміжні функції, специфічні для каналів | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Поверхні сумісності/допоміжних функцій для вбудованих каналів | + | Допоміжні функції, специфічні для auth/плагінів | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Допоміжні шари для вбудованих можливостей/плагінів; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` | ## API реєстрації -Колбек `register(api)` отримує об’єкт `OpenClawPluginApi` із такими +Зворотний виклик `register(api)` отримує об’єкт `OpenClawPluginApi` з такими методами: ### Реєстрація можливостей -| Method | Що реєструє | -| ------------------------------------------------ | ------------------------------- | -| `api.registerProvider(...)` | Текстовий inference (LLM) | -| `api.registerCliBackend(...)` | Локальний CLI backend inference | -| `api.registerChannel(...)` | Канал обміну повідомленнями | -| `api.registerSpeechProvider(...)` | Синтез text-to-speech / STT | -| `api.registerRealtimeTranscriptionProvider(...)` | Потокова transcription realtime | -| `api.registerRealtimeVoiceProvider(...)` | Дуплексні сеанси voice realtime | -| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео | -| `api.registerImageGenerationProvider(...)` | Генерація зображень | -| `api.registerMusicGenerationProvider(...)` | Генерація музики | -| `api.registerVideoGenerationProvider(...)` | Генерація відео | -| `api.registerWebFetchProvider(...)` | Provider web fetch / scrape | -| `api.registerWebSearchProvider(...)` | Web search | +| Method | Що реєструє | +| ------------------------------------------------ | ------------------------------ | +| `api.registerProvider(...)` | Текстовий inference (LLM) | +| `api.registerCliBackend(...)` | Локальний backend inference CLI | +| `api.registerChannel(...)` | Канал обміну повідомленнями | +| `api.registerSpeechProvider(...)` | Синтез text-to-speech / STT | +| `api.registerRealtimeTranscriptionProvider(...)` | Потокова realtime transcription | +| `api.registerRealtimeVoiceProvider(...)` | Двосторонні realtime voice sessions | +| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео | +| `api.registerImageGenerationProvider(...)` | Генерація зображень | +| `api.registerMusicGenerationProvider(...)` | Генерація музики | +| `api.registerVideoGenerationProvider(...)` | Генерація відео | +| `api.registerWebFetchProvider(...)` | Провайдер web fetch / scrape | +| `api.registerWebSearchProvider(...)` | Вебпошук | -### Інструменти та команди +### Інструменти й команди -| Method | Що реєструє | -| ------------------------------- | -------------------------------------------- | -| `api.registerTool(tool, opts?)` | Інструмент agent (обов’язковий або `{ optional: true }`) | -| `api.registerCommand(def)` | Користувацька команда (обходить LLM) | +| Method | Що реєструє | +| ------------------------------- | --------------------------------------------- | +| `api.registerTool(tool, opts?)` | Інструмент агента (обов’язковий або `{ optional: true }`) | +| `api.registerCommand(def)` | Користувацьку команду (оминає LLM) | ### Інфраструктура -| Method | Що реєструє | -| ---------------------------------------------- | ------------------------------------ | -| `api.registerHook(events, handler, opts?)` | Event hook | -| `api.registerHttpRoute(params)` | Gateway HTTP endpoint | -| `api.registerGatewayMethod(name, handler)` | Gateway RPC method | -| `api.registerCli(registrar, opts?)` | Підкоманда CLI | -| `api.registerService(service)` | Фонова служба | -| `api.registerInteractiveHandler(registration)` | Інтерактивний handler | -| `api.registerMemoryPromptSupplement(builder)` | Адитивний розділ prompt, суміжний із memory | -| `api.registerMemoryCorpusSupplement(adapter)` | Адитивний корпус пошуку/читання memory | +| Method | Що реєструє | +| ---------------------------------------------- | -------------------------------------- | +| `api.registerHook(events, handler, opts?)` | Хук подій | +| `api.registerHttpRoute(params)` | HTTP endpoint gateway | +| `api.registerGatewayMethod(name, handler)` | RPC-метод gateway | +| `api.registerCli(registrar, opts?)` | Підкоманду CLI | +| `api.registerService(service)` | Фоновий сервіс | +| `api.registerInteractiveHandler(registration)` | Інтерактивний handler | +| `api.registerMemoryPromptSupplement(builder)` | Додатковий розділ prompt, суміжний із пам’яттю | +| `api.registerMemoryCorpusSupplement(adapter)` | Додатковий корпус пошуку/читання пам’яті | -Зарезервовані простори імен core admin (`config.*`, `exec.approvals.*`, `wizard.*`, -`update.*`) завжди залишаються `operator.admin`, навіть якщо plugin намагається призначити -вужчу область gateway method. Для методів, що належать plugin, -віддавайте перевагу префіксам, специфічним для plugin. +Зарезервовані простори імен адміністратора ядра (`config.*`, `exec.approvals.*`, +`wizard.*`, `update.*`) завжди залишаються `operator.admin`, навіть якщо +плагін намагається призначити вужчу область видимості для методу gateway. +Для методів, що належать плагіну, надавайте перевагу префіксам, специфічним +для цього плагіна. ### Метадані реєстрації CLI `api.registerCli(registrar, opts?)` приймає два типи метаданих верхнього рівня: - `commands`: явні корені команд, якими володіє registrar -- `descriptors`: дескриптори команд на етапі парсингу, що використовуються для кореневої довідки CLI, - маршрутизації та лінивої реєстрації CLI plugin +- `descriptors`: дескриптори команд часу парсингу, що використовуються для + довідки кореневого CLI, маршрутизації та лінивої реєстрації CLI плагінів -Якщо ви хочете, щоб команда plugin залишалася ліниво завантажуваною у звичайному кореневому шляху CLI, -надайте `descriptors`, які охоплюють кожен корінь команди верхнього рівня, який відкриває цей -registrar. +Якщо ви хочете, щоб команда плагіна залишалася ліниво завантажуваною у +звичайному шляху кореневого CLI, надайте `descriptors`, які охоплюють кожен +корінь команди верхнього рівня, що експонується цим registrar. ```typescript api.registerCli( @@ -368,7 +371,7 @@ api.registerCli( descriptors: [ { name: "matrix", - description: "Керуйте акаунтами Matrix, верифікацією, пристроями та станом профілю", + description: "Керування акаунтами Matrix, верифікацією, пристроями та станом профілю", hasSubcommands: true, }, ], @@ -376,128 +379,131 @@ api.registerCli( ); ``` -Використовуйте лише `commands`, коли вам не потрібна лінива реєстрація кореневого CLI. -Цей eager шлях сумісності залишається підтримуваним, але він не встановлює -placeholder-и на основі descriptors для лінивого завантаження під час парсингу. +Використовуйте лише `commands`, якщо вам не потрібна лінива реєстрація +кореневого CLI. Цей eager-шлях сумісності все ще підтримується, але він не +встановлює placeholder-елементи з підтримкою descriptor для лінивого +завантаження під час парсингу. -### Реєстрація backend CLI +### Реєстрація CLI backend -`api.registerCliBackend(...)` дає plugin змогу володіти стандартною конфігурацією для локального -backend AI CLI, такого як `codex-cli`. +`api.registerCliBackend(...)` дає змогу плагіну володіти конфігурацією за +замовчуванням для локального AI CLI backend, такого як `codex-cli`. -- `id` backend стає префіксом provider у model ref, наприклад `codex-cli/gpt-5`. +- `id` backend стає префіксом провайдера в model ref, таких як `codex-cli/gpt-5`. - `config` backend використовує ту саму форму, що й `agents.defaults.cliBackends.`. - Конфігурація користувача все одно має пріоритет. OpenClaw об’єднує `agents.defaults.cliBackends.` поверх - стандартів plugin перед запуском CLI. -- Використовуйте `normalizeConfig`, коли backend потребує переписування для сумісності після злиття - (наприклад, нормалізації старих форм прапорців). + значення плагіна за замовчуванням перед запуском CLI. +- Використовуйте `normalizeConfig`, коли backend потребує перезаписів сумісності після об’єднання + (наприклад, для нормалізації старих форм прапорців). ### Ексклюзивні слоти -| Method | Що реєструє | -| ------------------------------------------ | ------------------------------------ | -| `api.registerContextEngine(id, factory)` | Context engine (одночасно активний лише один) | -| `api.registerMemoryCapability(capability)` | Єдину можливість memory | -| `api.registerMemoryPromptSection(builder)` | Побудовник розділу prompt memory | -| `api.registerMemoryFlushPlan(resolver)` | Resolver плану flush memory | -| `api.registerMemoryRuntime(runtime)` | Adapter runtime memory | +| Method | Що реєструє | +| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `api.registerContextEngine(id, factory)` | Механізм контексту (одночасно активний лише один). Зворотний виклик `assemble()` отримує `availableTools` і `citationsMode`, щоб механізм міг адаптувати додавання до prompt. | +| `api.registerMemoryCapability(capability)` | Уніфіковану можливість пам’яті | +| `api.registerMemoryPromptSection(builder)` | Побудовник розділу prompt для пам’яті | +| `api.registerMemoryFlushPlan(resolver)` | Визначник плану очищення пам’яті | +| `api.registerMemoryRuntime(runtime)` | Адаптер runtime пам’яті | -### Адаптери embedding для memory +### Адаптери вбудовування пам’яті -| Method | Що реєструє | -| ---------------------------------------------- | ----------------------------------------------- | -| `api.registerMemoryEmbeddingProvider(adapter)` | Adapter embedding для memory активного plugin | +| Method | Що реєструє | +| ---------------------------------------------- | ------------------------------------------------ | +| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер вбудовування пам’яті для активного плагіна | -- `registerMemoryCapability` — це рекомендований API ексклюзивного memory-plugin. -- `registerMemoryCapability` також може надавати `publicArtifacts.listArtifacts(...)`, - щоб companion plugins могли споживати експортовані memory artifacts через - `openclaw/plugin-sdk/memory-host-core` замість звернення до приватного - layout конкретного memory plugin. +- `registerMemoryCapability` — це рекомендований API ексклюзивного плагіна пам’яті. +- `registerMemoryCapability` також може експонувати `publicArtifacts.listArtifacts(...)`, + щоб допоміжні плагіни могли споживати експортовані артефакти пам’яті через + `openclaw/plugin-sdk/memory-host-core` замість доступу до приватного + макета конкретного плагіна пам’яті. - `registerMemoryPromptSection`, `registerMemoryFlushPlan` і - `registerMemoryRuntime` — це legacy-сумісні API ексклюзивного memory-plugin. -- `registerMemoryEmbeddingProvider` дає активному memory plugin змогу зареєструвати один - або більше id adapter embedding (наприклад, `openai`, `gemini` або власний id, - визначений plugin). + `registerMemoryRuntime` — це застарілі, але сумісні API ексклюзивних + плагінів пам’яті. +- `registerMemoryEmbeddingProvider` дозволяє активному плагіну пам’яті + реєструвати один або кілька ID адаптерів вбудовування (наприклад `openai`, + `gemini` або власний ID, визначений плагіном). - Конфігурація користувача, така як `agents.defaults.memorySearch.provider` і - `agents.defaults.memorySearch.fallback`, визначається відносно зареєстрованих id - цих adapter. + `agents.defaults.memorySearch.fallback`, визначається відносно цих + зареєстрованих ID адаптерів. ### Події та життєвий цикл | Method | Що робить | | -------------------------------------------- | ---------------------------- | -| `api.on(hookName, handler, opts?)` | Типізований lifecycle hook | -| `api.onConversationBindingResolved(handler)` | Колбек binding розмови | +| `api.on(hookName, handler, opts?)` | Типізований хук життєвого циклу | +| `api.onConversationBindingResolved(handler)` | Зворотний виклик прив’язки розмови | -### Семантика рішень hook +### Семантика рішень хуків -- `before_tool_call`: повернення `{ block: true }` є фінальним. Щойно будь-який handler встановлює це значення, handler-и з нижчим пріоритетом пропускаються. -- `before_tool_call`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення. -- `before_install`: повернення `{ block: true }` є фінальним. Щойно будь-який handler встановлює це значення, handler-и з нижчим пріоритетом пропускаються. -- `before_install`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення. -- `reply_dispatch`: повернення `{ handled: true, ... }` є фінальним. Щойно будь-який handler заявляє про диспетчеризацію, handler-и з нижчим пріоритетом і стандартний шлях диспетчеризації моделі пропускаються. -- `message_sending`: повернення `{ cancel: true }` є фінальним. Щойно будь-який handler встановлює це значення, handler-и з нижчим пріоритетом пропускаються. -- `message_sending`: повернення `{ cancel: false }` трактується як відсутність рішення (так само, як пропуск `cancel`), а не як перевизначення. +- `before_tool_call`: повернення `{ block: true }` є термінальним. Щойно будь-який handler встановлює його, handlers із нижчим пріоритетом пропускаються. +- `before_tool_call`: повернення `{ block: false }` вважається відсутністю рішення (так само, як пропуск `block`), а не перевизначенням. +- `before_install`: повернення `{ block: true }` є термінальним. Щойно будь-який handler встановлює його, handlers із нижчим пріоритетом пропускаються. +- `before_install`: повернення `{ block: false }` вважається відсутністю рішення (так само, як пропуск `block`), а не перевизначенням. +- `reply_dispatch`: повернення `{ handled: true, ... }` є термінальним. Щойно будь-який handler заявляє диспетчеризацію, handlers із нижчим пріоритетом і типовий шлях диспетчеризації моделі пропускаються. +- `message_sending`: повернення `{ cancel: true }` є термінальним. Щойно будь-який handler встановлює його, handlers із нижчим пріоритетом пропускаються. +- `message_sending`: повернення `{ cancel: false }` вважається відсутністю рішення (так само, як пропуск `cancel`), а не перевизначенням. ### Поля об’єкта API -| Field | Type | Опис | -| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------ | -| `api.id` | `string` | ID plugin | -| `api.name` | `string` | Назва для відображення | -| `api.version` | `string?` | Версія plugin (необов’язково) | -| `api.description` | `string?` | Опис plugin (необов’язково) | -| `api.source` | `string` | Шлях до джерела plugin | -| `api.rootDir` | `string?` | Коренева директорія plugin (необов’язково) | -| `api.config` | `OpenClawConfig` | Поточний snapshot конфігурації (активний snapshot runtime в пам’яті, коли доступний) | -| `api.pluginConfig` | `Record` | Конфігурація plugin із `plugins.entries..config` | -| `api.runtime` | `PluginRuntime` | [Допоміжні засоби runtime](/uk/plugins/sdk-runtime) | -| `api.logger` | `PluginLogger` | Logger з областю видимості (`debug`, `info`, `warn`, `error`) | -| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легковагове вікно запуску/налаштування до повного entry | -| `api.resolvePath(input)` | `(string) => string` | Визначення path відносно кореня plugin | +| Field | Type | Description | +| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- | +| `api.id` | `string` | ID плагіна | +| `api.name` | `string` | Відображувана назва | +| `api.version` | `string?` | Версія плагіна (необов’язково) | +| `api.description` | `string?` | Опис плагіна (необов’язково) | +| `api.source` | `string` | Шлях до джерела плагіна | +| `api.rootDir` | `string?` | Кореневий каталог плагіна (необов’язково) | +| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок runtime у пам’яті, якщо доступний) | +| `api.pluginConfig` | `Record` | Специфічна для плагіна конфігурація з `plugins.entries..config` | +| `api.runtime` | `PluginRuntime` | [Допоміжні функції runtime](/uk/plugins/sdk-runtime) | +| `api.logger` | `PluginLogger` | Локалізований logger (`debug`, `info`, `warn`, `error`) | +| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це полегшене вікно запуску/налаштування до повного entry | +| `api.resolvePath(input)` | `(string) => string` | Визначити шлях відносно кореня плагіна | -## Угода щодо внутрішніх модулів +## Угода про внутрішні модулі -Усередині вашого plugin використовуйте локальні barrel-файли для внутрішніх імпортів: +Усередині вашого плагіна використовуйте локальні barrel-файли для внутрішніх імпортів: ``` my-plugin/ api.ts # Публічні експорти для зовнішніх споживачів - runtime-api.ts # Внутрішні експорти лише для runtime - index.ts # Entry point plugin - setup-entry.ts # Легковаговий entry лише для налаштування (необов’язково) + runtime-api.ts # Лише внутрішні runtime-експорти + index.ts # Точка входу плагіна + setup-entry.ts # Полегшена точка входу лише для налаштування (необов’язково) ``` - Ніколи не імпортуйте власний plugin через `openclaw/plugin-sdk/` - з production-коду. Спрямовуйте внутрішні імпорти через `./api.ts` або + Ніколи не імпортуйте власний плагін через `openclaw/plugin-sdk/` + у production-коді. Спрямовуйте внутрішні імпорти через `./api.ts` або `./runtime-api.ts`. Шлях SDK — це лише зовнішній контракт. -Facade-loaded публічні поверхні bundled plugin (`api.ts`, `runtime-api.ts`, -`index.ts`, `setup-entry.ts` та подібні публічні entry-файли) тепер віддають перевагу -активному snapshot конфігурації runtime, якщо OpenClaw уже запущено. Якщо snapshot runtime -ще не існує, вони повертаються до визначеного файлу конфігурації на диску. +Публічні поверхні вбудованих плагінів, що завантажуються через фасад (`api.ts`, `runtime-api.ts`, +`index.ts`, `setup-entry.ts` та подібні публічні entry-файли), тепер віддають перевагу +активному знімку конфігурації runtime, якщо OpenClaw уже запущено. Якщо +знімок runtime ще не існує, вони повертаються до визначеного файлу конфігурації на диску. -Provider plugins також можуть надавати вузький barrel локального контракту plugin, коли допоміжний засіб -навмисно є специфічним для provider і ще не належить до загального -підшляху SDK. Поточний bundled приклад: provider Anthropic зберігає свої -допоміжні засоби Claude stream у власному публічному шві `api.ts` / `contract-api.ts` замість -просування логіки Anthropic beta-header і `service_tier` до загального -контракту `plugin-sdk/*`. +Плагіни провайдерів також можуть експонувати вузький локальний barrel-контракт +плагіна, якщо допоміжна функція навмисно є специфічною для провайдера й поки що +не належить до узагальненого підшляху SDK. Поточний вбудований приклад: +провайдер Anthropic зберігає свої допоміжні функції потоків Claude у власному +публічному шарі `api.ts` / `contract-api.ts`, замість того щоб просувати логіку +Anthropic beta-header і `service_tier` в узагальнений контракт `plugin-sdk/*`. -Інші поточні bundled приклади: +Інші поточні вбудовані приклади: -- `@openclaw/openai-provider`: `api.ts` експортує побудовники provider, - допоміжні засоби стандартних моделей і побудовники realtime provider -- `@openclaw/openrouter-provider`: `api.ts` експортує побудовник provider, а також - допоміжні засоби онбордингу/конфігурації +- `@openclaw/openai-provider`: `api.ts` експортує побудовники провайдерів, + допоміжні функції моделей за замовчуванням і побудовники realtime-провайдерів +- `@openclaw/openrouter-provider`: `api.ts` експортує побудовник провайдера та + допоміжні функції онбордингу/конфігурації - Production-код extension також має уникати імпортів `openclaw/plugin-sdk/`. - Якщо допоміжний засіб справді є спільним, перемістіть його до нейтрального підшляху SDK, - такого як `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або іншої - поверхні, орієнтованої на можливості, замість жорсткого зв’язування двох plugins. + Production-код розширень також має уникати імпортів + `openclaw/plugin-sdk/`. Якщо допоміжна функція справді є + спільною, перенесіть її до нейтрального підшляху SDK, такого як + `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або іншої + поверхні, орієнтованої на можливості, замість зв’язування двох плагінів між собою. ## Пов’язане @@ -505,6 +511,6 @@ Provider plugins також можуть надавати вузький barrel - [Entry Points](/uk/plugins/sdk-entrypoints) — параметри `definePluginEntry` і `defineChannelPluginEntry` - [Runtime Helpers](/uk/plugins/sdk-runtime) — повний довідник простору імен `api.runtime` - [Setup and Config](/uk/plugins/sdk-setup) — пакування, маніфести, схеми конфігурації -- [Testing](/uk/plugins/sdk-testing) — утиліти тестування та правила lint +- [Testing](/uk/plugins/sdk-testing) — тестові утиліти та правила lint - [SDK Migration](/uk/plugins/sdk-migration) — міграція із застарілих поверхонь -- [Plugin Internals](/uk/plugins/architecture) — детальна архітектура та модель можливостей +- [Plugin Internals](/uk/plugins/architecture) — поглиблена архітектура та модель можливостей diff --git a/docs/uk/providers/google.md b/docs/uk/providers/google.md index 60a78f425..c34be11bf 100644 --- a/docs/uk/providers/google.md +++ b/docs/uk/providers/google.md @@ -1,14 +1,14 @@ --- read_when: - Ви хочете використовувати моделі Google Gemini з OpenClaw - - Вам потрібен API-ключ або потік автентифікації OAuth -summary: Налаштування Google Gemini (API-ключ + OAuth, генерація зображень, розуміння медіа, вебпошук) + - Вам потрібен потік автентифікації API key або OAuth +summary: Налаштування Google Gemini (API key + OAuth, генерація зображень, розуміння медіа, вебпошук) title: Google (Gemini) x-i18n: - generated_at: "2026-04-07T09:37:43Z" + generated_at: "2026-04-08T06:28:55Z" model: gpt-5.4 provider: openai - source_hash: e9e558f5ce35c853e0240350be9a1890460c5f7f7fd30b05813a656497dee516 + source_hash: fad2ff68987301bd86145fa6e10de8c7b38d5bd5dbcd13db9c883f7f5b9a4e01 source_path: providers/google.md workflow: 15 --- @@ -26,7 +26,7 @@ Gemini Grounding. ## Швидкий старт -1. Установіть API-ключ: +1. Установіть API key: ```bash openclaw onboard --auth-choice gemini-api-key @@ -55,13 +55,13 @@ openclaw onboard --non-interactive \ ## OAuth (Gemini CLI) -Альтернативний провайдер `google-gemini-cli` використовує PKCE OAuth замість API-ключа. -Це неофіційна інтеграція; деякі користувачі повідомляють про обмеження -облікового запису. Використовуйте на власний ризик. +Альтернативний провайдер `google-gemini-cli` використовує PKCE OAuth замість API +key. Це неофіційна інтеграція; деякі користувачі повідомляють про обмеження +облікових записів. Використовуйте на власний ризик. - Модель за замовчуванням: `google-gemini-cli/gemini-3-flash-preview` -- Аліас: `gemini-cli` -- Необхідна умова для встановлення: локальний Gemini CLI доступний як `gemini` +- Псевдонім: `gemini-cli` +- Обов’язкова умова для встановлення: локальний Gemini CLI, доступний як `gemini` - Homebrew: `brew install gemini-cli` - npm: `npm install -g @google/gemini-cli` - Вхід: @@ -77,20 +77,21 @@ openclaw models auth login --provider google-gemini-cli --set-default (Або варіанти `GEMINI_CLI_*`.) -Якщо запити Gemini CLI OAuth не вдаються після входу, установіть -`GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості шлюзу й +Якщо OAuth-запити Gemini CLI не вдаються після входу, установіть +`GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості gateway і повторіть спробу. -Якщо вхід не вдається до запуску потоку в браузері, переконайтеся, що локальна команда `gemini` -установлена та доступна в `PATH`. OpenClaw підтримує як установлення через Homebrew, -так і глобальні встановлення через npm, включно з поширеними макетами Windows/npm. +Якщо вхід не вдається ще до запуску потоку в браузері, переконайтеся, що +локальну команду `gemini` встановлено й вона доступна в `PATH`. OpenClaw +підтримує як встановлення через Homebrew, так і глобальні встановлення npm, +зокрема поширені схеми Windows/npm. Нотатки щодо використання JSON у Gemini CLI: - Текст відповіді береться з поля CLI JSON `response`. -- Використання повертається до `stats`, якщо CLI залишає `usage` порожнім. -- `stats.cached` нормалізується в OpenClaw `cacheRead`. -- Якщо `stats.input` відсутній, OpenClaw виводить кількість вхідних токенів із +- Показники використання беруться з резервного поля `stats`, якщо CLI залишає `usage` порожнім. +- `stats.cached` нормалізується в `cacheRead` OpenClaw. +- Якщо `stats.input` відсутній, OpenClaw обчислює вхідні токени з `stats.input_tokens - stats.cached`. ## Можливості @@ -104,19 +105,22 @@ openclaw models auth login --provider google-gemini-cli --set-default | Транскрибування аудіо | Так | | Розуміння відео | Так | | Вебпошук (Grounding) | Так | -| Thinking/reasoning | Так (Gemini 3.1+) | +| Мислення/міркування | Так (Gemini 3.1+) | +| Моделі Gemma 4 | Так | + +Моделі Gemma 4 (наприклад, `gemma-4-26b-a4b-it`) підтримують режим thinking. OpenClaw переписує `thinkingBudget` у підтримуваний Google `thinkingLevel` для Gemma 4. Установлення thinking в `off` зберігає його вимкненим замість зіставлення з `MINIMAL`. ## Пряме повторне використання кешу Gemini Для прямих запусків Gemini API (`api: "google-generative-ai"`) OpenClaw тепер передає налаштований дескриптор `cachedContent` у запити Gemini. -- Налаштовуйте параметри для моделі або глобальні параметри через +- Налаштовуйте параметри для моделі або глобально через `cachedContent` або застарілий `cached_content` - Якщо присутні обидва, пріоритет має `cachedContent` - Приклад значення: `cachedContents/prebuilt-context` -- Використання при влучанні в кеш Gemini нормалізується в OpenClaw `cacheRead` із - висхідного `cachedContentTokenCount` +- Використання cache-hit у Gemini нормалізується в `cacheRead` OpenClaw з + вихідного `cachedContentTokenCount` Приклад: @@ -146,11 +150,11 @@ openclaw models auth login --provider google-gemini-cli --set-default - Режим редагування: увімкнено, до 5 вхідних зображень - Керування геометрією: `size`, `aspectRatio` і `resolution` -Провайдер `google-gemini-cli`, що працює лише через OAuth, є окремою поверхнею -текстового виведення. Генерація зображень, розуміння медіа та Gemini Grounding залишаються на -ідентифікаторі провайдера `google`. +Провайдер `google-gemini-cli`, який працює лише через OAuth, є окремою +поверхнею для текстового inference. Генерація зображень, розуміння медіа та +Gemini Grounding залишаються на ідентифікаторі провайдера `google`. -Щоб використовувати Google як провайдер зображень за замовчуванням: +Щоб використовувати Google як провайдера зображень за замовчуванням: ```json5 { @@ -164,8 +168,8 @@ openclaw models auth login --provider google-gemini-cli --set-default } ``` -Див. [Генерація зображень](/uk/tools/image-generation), щоб дізнатися про спільні -параметри інструмента, вибір провайдера та поведінку перемикання при збої. +Перегляньте [Генерація зображень](/uk/tools/image-generation), щоб дізнатися про +спільні параметри інструмента, вибір провайдера та поведінку failover. ## Генерація відео @@ -173,11 +177,11 @@ openclaw models auth login --provider google-gemini-cli --set-default інструмент `video_generate`. - Модель відео за замовчуванням: `google/veo-3.1-fast-generate-preview` -- Режими: text-to-video, image-to-video та потоки з одним референсним відео +- Режими: text-to-video, image-to-video і потоки з посиланням на одне відео - Підтримує `aspectRatio`, `resolution` і `audio` - Поточне обмеження тривалості: **від 4 до 8 секунд** -Щоб використовувати Google як провайдер відео за замовчуванням: +Щоб використовувати Google як провайдера відео за замовчуванням: ```json5 { @@ -191,8 +195,8 @@ openclaw models auth login --provider google-gemini-cli --set-default } ``` -Див. [Генерація відео](/uk/tools/video-generation), щоб дізнатися про спільні -параметри інструмента, вибір провайдера та поведінку перемикання при збої. +Перегляньте [Генерація відео](/uk/tools/video-generation), щоб дізнатися про +спільні параметри інструмента, вибір провайдера та поведінку failover. ## Генерація музики @@ -203,10 +207,10 @@ openclaw models auth login --provider google-gemini-cli --set-default - Також підтримує `google/lyria-3-pro-preview` - Керування підказкою: `lyrics` і `instrumental` - Формат виводу: `mp3` за замовчуванням, а також `wav` у `google/lyria-3-pro-preview` -- Референсні входи: до 10 зображень -- Запуски з підтримкою сесій від'єднуються через спільний потік завдань/статусу, включно з `action: "status"` +- Вхідні дані-посилання: до 10 зображень +- Запуски з підтримкою сесій від’єднуються через спільний потік завдань/статусу, зокрема `action: "status"` -Щоб використовувати Google як музичний провайдер за замовчуванням: +Щоб використовувати Google як провайдера музики за замовчуванням: ```json5 { @@ -220,8 +224,8 @@ openclaw models auth login --provider google-gemini-cli --set-default } ``` -Див. [Генерація музики](/uk/tools/music-generation), щоб дізнатися про спільні -параметри інструмента, вибір провайдера та поведінку перемикання при збої. +Перегляньте [Генерація музики](/uk/tools/music-generation), щоб дізнатися про +спільні параметри інструмента, вибір провайдера та поведінку failover. ## Примітка щодо середовища diff --git a/docs/uk/providers/ollama.md b/docs/uk/providers/ollama.md index f0e6cce34..7bf57ff48 100644 --- a/docs/uk/providers/ollama.md +++ b/docs/uk/providers/ollama.md @@ -1,27 +1,27 @@ --- read_when: - Ви хочете запускати OpenClaw із хмарними або локальними моделями через Ollama - - Вам потрібні вказівки щодо налаштування та конфігурації Ollama + - Вам потрібні вказівки з налаштування та конфігурації Ollama summary: Запуск OpenClaw з Ollama (хмарні та локальні моделі) title: Ollama x-i18n: - generated_at: "2026-04-07T18:55:15Z" + generated_at: "2026-04-08T06:29:09Z" model: gpt-5.4 provider: openai - source_hash: 222ec68f7d4bb29cc7796559ddef1d5059f5159e7a51e2baa3a271ddb3abb716 + source_hash: d3295a7c879d3636a2ffdec05aea6e670e54a990ef52bd9b0cae253bc24aa3f7 source_path: providers/ollama.md workflow: 15 --- # Ollama -Ollama — це локальне середовище виконання LLM, яке спрощує запуск моделей з відкритим кодом на вашому комп’ютері. OpenClaw інтегрується з нативним API Ollama (`/api/chat`), підтримує потокову передачу та виклик інструментів, а також може автоматично виявляти локальні моделі Ollama, якщо ви ввімкнете це за допомогою `OLLAMA_API_KEY` (або профілю автентифікації) і не визначите явний запис `models.providers.ollama`. +Ollama — це локальне середовище виконання LLM, яке полегшує запуск моделей з відкритим кодом на вашому комп’ютері. OpenClaw інтегрується з нативним API Ollama (`/api/chat`), підтримує потокове передавання та виклик інструментів, а також може автоматично виявляти локальні моделі Ollama, якщо ви вкажете `OLLAMA_API_KEY` (або профіль автентифікації) і не визначите явний запис `models.providers.ollama`. -**Користувачі віддаленої Ollama**: не використовуйте OpenAI-сумісну URL-адресу `/v1` (`http://host:11434/v1`) з OpenClaw. Це порушує виклик інструментів, і моделі можуть виводити необроблений JSON інструментів як звичайний текст. Натомість використовуйте нативну URL-адресу API Ollama: `baseUrl: "http://host:11434"` (без `/v1`). +**Користувачі віддаленої Ollama**: не використовуйте URL OpenAI-сумісного `/v1` (`http://host:11434/v1`) з OpenClaw. Це ламає виклик інструментів, і моделі можуть виводити сирий JSON інструментів як звичайний текст. Натомість використовуйте URL нативного API Ollama: `baseUrl: "http://host:11434"` (без `/v1`). -## Швидкий старт +## Швидкий початок ### Онбординг (рекомендовано) @@ -31,13 +31,13 @@ Ollama — це локальне середовище виконання LLM, я openclaw onboard ``` -Виберіть **Ollama** зі списку провайдерів. Онбординг: +Виберіть **Ollama** зі списку провайдерів. Під час онбордингу буде зроблено таке: -1. Запитає базову URL-адресу Ollama, за якою доступний ваш інстанс (типово `http://127.0.0.1:11434`). -2. Дозволить вибрати **Cloud + Local** (хмарні й локальні моделі) або **Local** (лише локальні моделі). -3. Відкриє потік входу через браузер, якщо ви виберете **Cloud + Local** і не ввійшли в ollama.com. -4. Виявить доступні моделі та запропонує типові значення. -5. Автоматично виконає завантаження вибраної моделі, якщо вона недоступна локально. +1. Запитано базовий URL Ollama, за яким можна звернутися до вашого екземпляра (типово `http://127.0.0.1:11434`). +2. Запропоновано вибрати **Cloud + Local** (хмарні та локальні моделі) або **Local** (лише локальні моделі). +3. Відкрито в браузері потік входу, якщо ви виберете **Cloud + Local** і не ввійшли в ollama.com. +4. Виявлено доступні моделі та запропоновано типові варіанти. +5. Автоматично завантажено вибрану модель, якщо вона недоступна локально. Також підтримується неінтерактивний режим: @@ -47,7 +47,7 @@ openclaw onboard --non-interactive \ --accept-risk ``` -За потреби вкажіть власну базову URL-адресу або модель: +За потреби можна вказати власний базовий URL або модель: ```bash openclaw onboard --non-interactive \ @@ -61,7 +61,7 @@ openclaw onboard --non-interactive \ 1. Установіть Ollama: [https://ollama.com/download](https://ollama.com/download) -2. Завантажте локальну модель, якщо хочете локальний інференс: +2. Завантажте локальну модель, якщо хочете використовувати локальний інференс: ```bash ollama pull gemma4 @@ -71,7 +71,7 @@ ollama pull gpt-oss:20b ollama pull llama3.3 ``` -3. Якщо вам також потрібні хмарні моделі, увійдіть: +3. Якщо ви також хочете використовувати хмарні моделі, увійдіть: ```bash ollama signin @@ -84,25 +84,25 @@ openclaw onboard ``` - `Local`: лише локальні моделі -- `Cloud + Local`: локальні моделі плюс хмарні моделі +- `Cloud + Local`: локальні моделі та хмарні моделі - Хмарні моделі, як-от `kimi-k2.5:cloud`, `minimax-m2.7:cloud` і `glm-5.1:cloud`, **не** потребують локального `ollama pull` Наразі OpenClaw пропонує: -- локальне типове значення: `gemma4` -- хмарні типові значення: `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud` +- типовий локальний варіант: `gemma4` +- типові хмарні варіанти: `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud` 5. Якщо ви віддаєте перевагу ручному налаштуванню, увімкніть Ollama для OpenClaw напряму (підійде будь-яке значення; Ollama не потребує справжнього ключа): ```bash -# Set environment variable +# Встановіть змінну середовища export OLLAMA_API_KEY="ollama-local" -# Or configure in your config file +# Або налаштуйте у вашому файлі конфігурації openclaw config set models.providers.ollama.apiKey "ollama-local" ``` -6. Перегляньте або змініть моделі: +6. Перегляньте або перемкніть моделі: ```bash openclaw models list @@ -123,15 +123,16 @@ openclaw models set ollama/gemma4 ## Виявлення моделей (неявний провайдер) -Коли ви задаєте `OLLAMA_API_KEY` (або профіль автентифікації) і **не** визначаєте `models.providers.ollama`, OpenClaw виявляє моделі з локального інстансу Ollama за адресою `http://127.0.0.1:11434`: +Коли ви задаєте `OLLAMA_API_KEY` (або профіль автентифікації) і **не** визначаєте `models.providers.ollama`, OpenClaw виявляє моделі з локального екземпляра Ollama за адресою `http://127.0.0.1:11434`: - Виконує запити до `/api/tags` -- Використовує best-effort-запити до `/api/show`, щоб читати `contextWindow`, якщо він доступний -- Позначає `reasoning` за допомогою евристики назви моделі (`r1`, `reasoning`, `think`) -- Установлює `maxTokens` на типове максимальне обмеження токенів Ollama, яке використовує OpenClaw -- Установлює всі вартості в `0` +- Використовує best-effort запити до `/api/show`, щоб зчитати `contextWindow` і визначити можливості (зокрема vision), коли це доступно +- Моделі з можливістю `vision`, про яку повідомляє `/api/show`, позначаються як здатні працювати із зображеннями (`input: ["text", "image"]`), тож OpenClaw автоматично додає зображення до підказки для таких моделей +- Позначає `reasoning` за евристикою назви моделі (`r1`, `reasoning`, `think`) +- Встановлює `maxTokens` на типове максимальне обмеження токенів Ollama, яке використовує OpenClaw +- Встановлює всі вартості в `0` -Це дозволяє уникнути ручного додавання моделей і водночас зберігати каталог узгодженим із локальним інстансом Ollama. +Це дає змогу уникнути ручного додавання моделей, зберігаючи каталог узгодженим із локальним екземпляром Ollama. Щоб побачити, які моделі доступні: @@ -148,7 +149,7 @@ ollama pull mistral Нова модель буде автоматично виявлена та стане доступною для використання. -Якщо ви явно задасте `models.providers.ollama`, автоматичне виявлення буде пропущено, і вам доведеться визначати моделі вручну (див. нижче). +Якщо ви явно задаєте `models.providers.ollama`, автоматичне виявлення вимикається, і вам потрібно визначати моделі вручну (див. нижче). ## Конфігурація @@ -160,13 +161,13 @@ ollama pull mistral export OLLAMA_API_KEY="ollama-local" ``` -### Явне налаштування (ручне визначення моделей) +### Явне налаштування (ручні моделі) Використовуйте явну конфігурацію, якщо: - Ollama працює на іншому хості або порту. -- Ви хочете примусово задати конкретні вікна контексту або списки моделей. -- Ви хочете повністю вручну визначати моделі. +- Ви хочете примусово задати конкретні контекстні вікна або списки моделей. +- Ви хочете повністю ручні визначення моделей. ```json5 { @@ -195,9 +196,9 @@ export OLLAMA_API_KEY="ollama-local" Якщо задано `OLLAMA_API_KEY`, ви можете не вказувати `apiKey` у записі провайдера, і OpenClaw підставить його для перевірок доступності. -### Власна базова URL-адреса (явна конфігурація) +### Власний базовий URL (явна конфігурація) -Якщо Ollama працює на іншому хості або порту (явна конфігурація вимикає автоматичне виявлення, тому моделі потрібно визначати вручну): +Якщо Ollama працює на іншому хості або порту (явна конфігурація вимикає автоматичне виявлення, тож визначте моделі вручну): ```json5 { @@ -205,8 +206,8 @@ export OLLAMA_API_KEY="ollama-local" providers: { ollama: { apiKey: "ollama-local", - baseUrl: "http://ollama-host:11434", // Без /v1 - використовуйте нативну URL-адресу API Ollama - api: "ollama", // Задайте явно, щоб гарантувати нативну поведінку виклику інструментів + baseUrl: "http://ollama-host:11434", // Без /v1 - використовуйте URL нативного API Ollama + api: "ollama", // Вкажіть явно, щоб гарантувати нативну поведінку виклику інструментів }, }, }, @@ -214,7 +215,7 @@ export OLLAMA_API_KEY="ollama-local" ``` -Не додавайте `/v1` до URL-адреси. Шлях `/v1` використовує OpenAI-сумісний режим, у якому виклик інструментів ненадійний. Використовуйте базову URL-адресу Ollama без суфікса шляху. +Не додавайте `/v1` до URL. Шлях `/v1` використовує OpenAI-сумісний режим, у якому виклик інструментів працює ненадійно. Використовуйте базовий URL Ollama без суфікса шляху. ### Вибір моделі @@ -236,9 +237,9 @@ export OLLAMA_API_KEY="ollama-local" ## Хмарні моделі -Хмарні моделі дають змогу використовувати розміщені в хмарі моделі (наприклад, `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud`) разом із вашими локальними моделями. +Хмарні моделі дають змогу запускати розміщені в хмарі моделі (наприклад, `kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud`) разом із вашими локальними моделями. -Щоб використовувати хмарні моделі, виберіть режим **Cloud + Local** під час налаштування. Майстер перевіряє, чи ви ввійшли в систему, і за потреби відкриває потік входу через браузер. Якщо автентифікацію не вдається перевірити, майстер повертається до типових локальних моделей. +Щоб використовувати хмарні моделі, виберіть режим **Cloud + Local** під час налаштування. Майстер перевіряє, чи ви ввійшли, і за потреби відкриває в браузері потік входу. Якщо автентифікацію неможливо перевірити, майстер повертається до типових локальних моделей. Ви також можете ввійти безпосередньо на [ollama.com/signin](https://ollama.com/signin). @@ -247,10 +248,11 @@ export OLLAMA_API_KEY="ollama-local" OpenClaw також підтримує **Ollama Web Search** як вбудований провайдер `web_search`. - Він використовує налаштований вами хост Ollama (`models.providers.ollama.baseUrl`, якщо задано, інакше `http://127.0.0.1:11434`). -- Він не потребує ключа. -- Для нього потрібно, щоб Ollama працювала і ви були авторизовані через `ollama signin`. +- Для нього не потрібен ключ. +- Потрібно, щоб Ollama була запущена і щоб ви ввійшли через `ollama signin`. -Виберіть **Ollama Web Search** під час `openclaw onboard` або `openclaw configure --section web`, або задайте: +Виберіть **Ollama Web Search** під час `openclaw onboard` або +`openclaw configure --section web`, або задайте: ```json5 { @@ -264,13 +266,13 @@ OpenClaw також підтримує **Ollama Web Search** як вбудова } ``` -Повні відомості про налаштування та поведінку див. у [Ollama Web Search](/uk/tools/ollama-search). +Повні відомості про налаштування та поведінку дивіться в [Ollama Web Search](/uk/tools/ollama-search). ## Додатково -### Моделі міркування +### Моделі з reasoning -OpenClaw типово вважає моделі з назвами на кшталт `deepseek-r1`, `reasoning` або `think` такими, що підтримують міркування: +OpenClaw за замовчуванням вважає моделі з назвами на кшталт `deepseek-r1`, `reasoning` або `think` здатними до reasoning: ```bash ollama pull deepseek-r1:32b @@ -278,19 +280,19 @@ ollama pull deepseek-r1:32b ### Вартість моделей -Ollama є безкоштовною і працює локально, тому вартість усіх моделей встановлена на рівні $0. +Ollama є безкоштовною та працює локально, тому вартість усіх моделей встановлено в $0. -### Конфігурація потокової передачі +### Налаштування потокового передавання -Інтеграція OpenClaw з Ollama типово використовує **нативний API Ollama** (`/api/chat`), який повністю підтримує одночасно потокову передачу та виклик інструментів. Жодного спеціального налаштування не потрібно. +Інтеграція Ollama в OpenClaw типово використовує **нативний API Ollama** (`/api/chat`), який повністю підтримує одночасно потокове передавання та виклик інструментів. Додаткового налаштування не потрібно. #### Застарілий OpenAI-сумісний режим -**Виклик інструментів у OpenAI-сумісному режимі ненадійний.** Використовуйте цей режим лише якщо вам потрібен формат OpenAI для проксі й ви не залежите від нативної поведінки виклику інструментів. +**Виклик інструментів в OpenAI-сумісному режимі працює ненадійно.** Використовуйте цей режим лише якщо вам потрібен формат OpenAI для проксі й ви не покладаєтеся на нативну поведінку виклику інструментів. -Якщо вам потрібно використовувати натомість OpenAI-сумісну кінцеву точку (наприклад, за проксі, який підтримує лише формат OpenAI), явно задайте `api: "openai-completions"`: +Якщо замість цього вам потрібно використовувати OpenAI-сумісну кінцеву точку (наприклад, за проксі, який підтримує лише формат OpenAI), явно задайте `api: "openai-completions"`: ```json5 { @@ -308,9 +310,9 @@ Ollama є безкоштовною і працює локально, тому в } ``` -Цей режим може не підтримувати одночасно потокову передачу й виклик інструментів. Може знадобитися вимкнути потокову передачу за допомогою `params: { streaming: false }` у конфігурації моделі. +У цьому режимі може не підтримуватися одночасне потокове передавання та виклик інструментів. Можливо, вам доведеться вимкнути потокове передавання за допомогою `params: { streaming: false }` у конфігурації моделі. -Коли з Ollama використовується `api: "openai-completions"`, OpenClaw типово додає `options.num_ctx`, щоб Ollama не переходила непомітно на вікно контексту 4096. Якщо ваш проксі або upstream відхиляє невідомі поля `options`, вимкніть цю поведінку: +Коли з Ollama використовується `api: "openai-completions"`, OpenClaw типово додає `options.num_ctx`, щоб Ollama не переходила мовчки до контекстного вікна 4096. Якщо ваш проксі або upstream відхиляє невідомі поля `options`, вимкніть цю поведінку: ```json5 { @@ -328,9 +330,9 @@ Ollama є безкоштовною і працює локально, тому в } ``` -### Вікна контексту +### Контекстні вікна -Для автоматично виявлених моделей OpenClaw використовує вікно контексту, яке повідомляє Ollama, якщо воно доступне; інакше використовується типове вікно контексту Ollama, яке застосовує OpenClaw. Ви можете перевизначити `contextWindow` і `maxTokens` у явній конфігурації провайдера. +Для автоматично виявлених моделей OpenClaw використовує контекстне вікно, про яке повідомляє Ollama, коли воно доступне; інакше використовується типове контекстне вікно Ollama, яке застосовує OpenClaw. Ви можете перевизначити `contextWindow` і `maxTokens` в явній конфігурації провайдера. ## Усунення несправностей @@ -342,7 +344,7 @@ Ollama є безкоштовною і працює локально, тому в ollama serve ``` -І що API доступний: +А також що API доступне: ```bash curl http://localhost:11434/api/tags @@ -350,7 +352,7 @@ curl http://localhost:11434/api/tags ### Немає доступних моделей -Якщо вашої моделі немає у списку, виконайте одну з дій: +Якщо вашу модель не показано в списку, зробіть одне з такого: - Завантажте модель локально, або - Явно визначте модель у `models.providers.ollama`. @@ -358,7 +360,7 @@ curl http://localhost:11434/api/tags Щоб додати моделі: ```bash -ollama list # Переглянути, що встановлено +ollama list # Подивіться, що встановлено ollama pull gemma4 ollama pull gpt-oss:20b ollama pull llama3.3 # Або іншу модель @@ -366,18 +368,18 @@ ollama pull llama3.3 # Або іншу модель ### У з’єднанні відмовлено -Переконайтеся, що Ollama працює на правильному порту: +Перевірте, що Ollama працює на правильному порту: ```bash -# Перевірити, чи запущена Ollama +# Перевірте, чи запущена Ollama ps aux | grep ollama -# Або перезапустити Ollama +# Або перезапустіть Ollama ollama serve ``` -## Див. також +## Дивіться також - [Провайдери моделей](/uk/concepts/model-providers) - Огляд усіх провайдерів - [Вибір моделі](/uk/concepts/models) - Як вибирати моделі -- [Конфігурація](/uk/gateway/configuration) - Повний довідник з конфігурації +- [Конфігурація](/uk/gateway/configuration) - Повний довідник із конфігурації