diff --git a/docs/uk/gateway/config-agents.md b/docs/uk/gateway/config-agents.md index 72a7c5eac..b465876d7 100644 --- a/docs/uk/gateway/config-agents.md +++ b/docs/uk/gateway/config-agents.md @@ -1,15 +1,15 @@ --- read_when: - - Налаштування типових параметрів агента (моделі, thinking, робочий простір, Heartbeat, медіа, Skills) - - Налаштування маршрутизації між кількома агентами та прив’язок - - Налаштування сеансу, доставки повідомлень і поведінки режиму talk -summary: Типові параметри агента, маршрутизація між кількома агентами, сеанс, повідомлення та конфігурація talk + - Налаштування стандартних параметрів агента (моделі, мислення, робочий простір, Heartbeat, медіа, Skills) + - Налаштування маршрутизації та прив’язок між кількома агентами + - Налаштування сесії, доставки повідомлень і поведінки режиму розмови +summary: Стандартні налаштування агента, маршрутизація між кількома агентами, сесія, повідомлення та конфігурація розмови title: Конфігурація — агенти x-i18n: - generated_at: "2026-04-25T06:22:38Z" + generated_at: "2026-04-25T07:53:40Z" model: gpt-5.4 provider: openai - source_hash: a3a67914120f567c1d0e4740a320cd285c21ddeb05cbffbec1b9c6ea1e950a6e + source_hash: ec43da7bb26dc2b0e99e972d0373b9b3f4dd443cc4ed95fc9807bc4d04483e45 source_path: gateway/config-agents.md workflow: 15 --- @@ -18,7 +18,7 @@ x-i18n: `messages.*` і `talk.*`. Для каналів, інструментів, середовища виконання Gateway та інших ключів верхнього рівня див. [Довідник із конфігурації](/uk/gateway/configuration-reference). -## Типові параметри агента +## Стандартні параметри агента ### `agents.defaults.workspace` @@ -32,7 +32,7 @@ x-i18n: ### `agents.defaults.repoRoot` -Необов’язковий корінь репозиторію, який показується в рядку Runtime системного запиту. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись вгору від робочого простору. +Необов’язковий корінь репозиторію, що показується в рядку Runtime системного запиту. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись угору від робочого простору. ```json5 { @@ -58,7 +58,7 @@ x-i18n: } ``` -- Не вказуйте `agents.defaults.skills`, якщо типово потрібні необмежені Skills. +- Не вказуйте `agents.defaults.skills`, щоб Skills типово не були обмежені. - Не вказуйте `agents.list[].skills`, щоб успадкувати типові значення. - Установіть `agents.list[].skills: []`, щоб вимкнути всі Skills. - Непорожній список `agents.list[].skills` є остаточним набором для цього агента; @@ -78,8 +78,8 @@ x-i18n: Керує тим, коли bootstrap-файли робочого простору додаються до системного запиту. Типове значення: `"always"`. -- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне додавання bootstrap-контексту робочого простору, що зменшує розмір запиту. Запуски Heartbeat і повторні спроби після Compaction усе одно перебудовують контекст. -- `"never"`: вимикає додавання bootstrap-файлів робочого простору та файлів контексту на кожному ході. Використовуйте це лише для агентів, які повністю керують життєвим циклом свого запиту (власні рушії контексту, нативні середовища виконання, що самі будують контекст, або спеціалізовані робочі процеси без bootstrap). Ходи Heartbeat і відновлення після compaction також пропускають додавання. +- `"continuation-skip"`: для безпечних ходів продовження (після завершеної відповіді асистента) повторне додавання bootstrap-контексту робочого простору пропускається, що зменшує розмір запиту. Запуски Heartbeat і повторні спроби після Compaction усе одно перебудовують контекст. +- `"never"`: вимикає додавання bootstrap-файлів робочого простору та файлів контексту на кожному ході. Використовуйте це лише для агентів, які повністю керують власним життєвим циклом запиту (власні рушії контексту, нативні середовища виконання, що самі будують контекст, або спеціалізовані робочі процеси без bootstrap). Ходи Heartbeat і відновлення після Compaction також пропускають додавання. ```json5 { @@ -89,7 +89,7 @@ x-i18n: ### `agents.defaults.bootstrapMaxChars` -Максимальна кількість символів на bootstrap-файл робочого простору до обрізання. Типове значення: `12000`. +Максимальна кількість символів у кожному bootstrap-файлі робочого простору до обрізання. Типове значення: `12000`. ```json5 { @@ -112,9 +112,9 @@ x-i18n: Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізано. Типове значення: `"once"`. -- `"off"`: ніколи не додає текст попередження до системного запиту. -- `"once"`: додає попередження один раз для кожного унікального сигнатурного випадку обрізання (рекомендовано). -- `"always"`: додає попередження під час кожного запуску, якщо є обрізання. +- `"off"`: ніколи не додавати текст попередження до системного запиту. +- `"once"`: додавати попередження один раз для кожного унікального сигнатурного обрізання (рекомендовано). +- `"always"`: додавати попередження під час кожного запуску, якщо є обрізання. ```json5 { @@ -124,32 +124,33 @@ x-i18n: ### Карта відповідальності за бюджет контексту -OpenClaw має кілька високонавантажених бюджетів запиту/контексту, і вони -навмисно розділені за підсистемами, замість того щоб проходити через один -універсальний параметр. +OpenClaw має кілька великих бюджетів запиту/контексту, і вони +навмисно розділені між підсистемами, а не проходять через одну загальну +ручку налаштування. - `agents.defaults.bootstrapMaxChars` / `agents.defaults.bootstrapTotalMaxChars`: - звичайне додавання bootstrap-контексту робочого простору. + звичайне додавання bootstrap робочого простору. - `agents.defaults.startupContext.*`: - одноразова вступна частина запуску `/new` і `/reset`, включно з нещодавніми - щоденними файлами `memory/*.md`. + одноразова стартова преамбула для `/new` і `/reset`, включно з нещодавніми + файлами `memory/*.md` за день. - `skills.limits.*`: - компактний список Skills, що додається до системного запиту. + компактний список Skills, доданий до системного запиту. - `agents.defaults.contextLimits.*`: - обмежені витяги середовища виконання та додані блоки, якими володіє середовище виконання. + обмежені уривки середовища виконання та додані блоки, що належать середовищу виконання. - `memory.qmd.limits.*`: - фрагмент індексованого пошуку пам’яті та розмір додавання. + розмір фрагментів і додавання для індексованого пошуку в пам’яті. Використовуйте відповідне перевизначення для конкретного агента лише тоді, коли -одному агенту потрібен інший бюджет: +одному агенту потрібен інший +бюджет: - `agents.list[].skillsLimits.maxSkillsPromptChars` - `agents.list[].contextLimits.*` #### `agents.defaults.startupContext` -Керує вступною частиною першого ходу, яка додається під час простих запусків `/new` і `/reset`. +Керує стартовою преамбулою першого ходу, що додається під час базових запусків `/new` і `/reset`. ```json5 { @@ -187,18 +188,17 @@ OpenClaw має кілька високонавантажених бюджеті } ``` -- `memoryGetMaxChars`: типовий ліміт витягу `memory_get` до додавання метаданих - обрізання та повідомлення про продовження. -- `memoryGetDefaultLines`: типове вікно рядків для `memory_get`, якщо `lines` +- `memoryGetMaxChars`: типове обмеження уривка `memory_get` до того, як буде додано + метадані обрізання та повідомлення про продовження. +- `memoryGetDefaultLines`: типове вікно рядків для `memory_get`, коли `lines` не вказано. -- `toolResultMaxChars`: ліміт результату інструмента в реальному часі, який використовується для збережених результатів і +- `toolResultMaxChars`: обмеження результату інструмента в реальному часі, що використовується для збережених результатів і відновлення після переповнення. -- `postCompactionMaxChars`: ліміт витягу AGENTS.md, що використовується під час додавання - оновлення після Compaction. +- `postCompactionMaxChars`: обмеження уривка `AGENTS.md`, що використовується під час додавання оновлення після Compaction. #### `agents.list[].contextLimits` -Перевизначення для конкретного агента для спільних параметрів `contextLimits`. Не вказані поля успадковуються +Перевизначення для конкретного агента для спільних параметрів `contextLimits`. Поля, які не вказано, успадковуються з `agents.defaults.contextLimits`. ```json5 @@ -225,7 +225,7 @@ OpenClaw має кілька високонавантажених бюджеті #### `skills.limits.maxSkillsPromptChars` -Глобальний ліміт для компактного списку Skills, що додається до системного запиту. Це +Глобальне обмеження для компактного списку Skills, що додається до системного запиту. Це не впливає на читання файлів `SKILL.md` на вимогу. ```json5 @@ -259,11 +259,11 @@ OpenClaw має кілька високонавантажених бюджеті ### `agents.defaults.imageMaxDimensionPx` -Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень транскрипту/інструментів перед викликами провайдера. +Максимальний розмір у пікселях для довшого боку зображення в блоках зображень транскрипту/інструментів перед викликами провайдера. Типове значення: `1200`. -Менші значення зазвичай зменшують використання vision-токенів і розмір корисного навантаження запиту для сценаріїв із великою кількістю знімків екрана. -Більші значення зберігають більше візуальних деталей. +Нижчі значення зазвичай зменшують використання візуальних токенів і розмір корисного навантаження запиту для сценаріїв із великою кількістю знімків екрана. +Вищі значення зберігають більше візуальних деталей. ```json5 { @@ -323,7 +323,7 @@ OpenClaw має кілька високонавантажених бюджеті }, params: { cacheRetention: "long" }, // глобальні типові параметри провайдера embeddedHarness: { - runtime: "pi", // pi | auto | ідентифікатор зареєстрованого harness, наприклад codex + runtime: "pi", // pi | auto | registered harness id, e.g. codex fallback: "pi", // pi | none }, pdfMaxBytesMb: 10, @@ -342,50 +342,50 @@ OpenClaw має кілька високонавантажених бюджеті - `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Форма рядка задає лише основну модель. - - Форма об’єкта задає основну модель і впорядкований список резервних моделей. + - Форма об’єкта задає основну модель і впорядкований список моделей для відмовостійкого перемикання. - `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується шляхом інструмента `image` як конфігурація його vision-моделі. - - Також використовується як маршрут резервного вибору, коли вибрана/типова модель не може приймати вхідні зображення. + - Використовується шляхом інструмента `image` як його конфігурація моделі візуального аналізу. + - Також використовується для резервної маршрутизації, коли вибрана/типова модель не може приймати вхідні зображення. - `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею інструмента/Plugin, що генерує зображення. - Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-2` для OpenAI Images. - - Якщо ви напряму вибираєте `provider/model`, також налаштуйте відповідну автентифікацію провайдера (наприклад, `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` або OpenAI Codex OAuth для `openai/gpt-image-2`, `FAL_KEY` для `fal/*`). - - Якщо не вказано, `image_generate` усе одно може визначити типове значення провайдера з налаштованою автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації зображень у порядку ідентифікаторів провайдерів. + - Якщо ви безпосередньо вибираєте провайдера/модель, також налаштуйте відповідну автентифікацію провайдера (наприклад, `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` або OpenAI Codex OAuth для `openai/gpt-image-2`, `FAL_KEY` для `fal/*`). + - Якщо не вказано, `image_generate` усе одно може визначити типовий провайдер на основі автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації зображень у порядку ідентифікаторів провайдерів. - `musicGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується спільною можливістю генерації музики та вбудованим інструментом `music_generate`. - Типові значення: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` або `minimax/music-2.5+`. - - Якщо не вказано, `music_generate` усе одно може визначити типове значення провайдера з налаштованою автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації музики в порядку ідентифікаторів провайдерів. - - Якщо ви напряму вибираєте `provider/model`, також налаштуйте відповідну автентифікацію/API-ключ провайдера. + - Якщо не вказано, `music_generate` усе одно може визначити типовий провайдер на основі автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації музики в порядку ідентифікаторів провайдерів. + - Якщо ви безпосередньо вибираєте провайдера/модель, також налаштуйте відповідну автентифікацію провайдера/API-ключ. - `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`. - Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`. - - Якщо не вказано, `video_generate` усе одно може визначити типове значення провайдера з налаштованою автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації відео в порядку ідентифікаторів провайдерів. - - Якщо ви напряму вибираєте `provider/model`, також налаштуйте відповідну автентифікацію/API-ключ провайдера. - - Вбудований провайдер генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість до 10 секунд, а також параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` і `watermark`. + - Якщо не вказано, `video_generate` усе одно може визначити типовий провайдер на основі автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації відео в порядку ідентифікаторів провайдерів. + - Якщо ви безпосередньо вибираєте провайдера/модель, також налаштуйте відповідну автентифікацію провайдера/API-ключ. + - Вбудований провайдер генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість до 10 секунд і параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. - `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується інструментом `pdf` для маршрутизації моделі. - - Якщо не вказано, інструмент PDF повертається до `imageModel`, а потім до визначеної моделі сеансу/типової моделі. -- `pdfMaxBytesMb`: типовий ліміт розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. -- `pdfMaxPages`: типова максимальна кількість сторінок, яку враховує резервний режим витягування в інструменті `pdf`. -- `verboseDefault`: типовий рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. Типове значення: `"off"`. + - Використовується інструментом `pdf` для маршрутизації моделей. + - Якщо не вказано, інструмент PDF використовує `imageModel`, а потім визначену модель сесії/типову модель. +- `pdfMaxBytesMb`: типове обмеження розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. +- `pdfMaxPages`: типова максимальна кількість сторінок, що враховуються режимом резервного вилучення в інструменті `pdf`. +- `verboseDefault`: типовий рівень докладності для агентів. Значення: `"off"`, `"on"`, `"full"`. Типове значення: `"off"`. - `elevatedDefault`: типовий рівень розширеного виводу для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. Типове значення: `"on"`. -- `model.primary`: формат `provider/model` (наприклад, `openai/gpt-5.4` для доступу через API-ключ або `openai-codex/gpt-5.5` для Codex OAuth). Якщо опустити провайдера, OpenClaw спочатку пробує псевдонім, потім унікальний збіг налаштованого провайдера для цього точного ідентифікатора моделі, і лише після цього повертається до налаштованого типового провайдера (застаріла поведінка сумісності, тому краще явно вказувати `provider/model`). Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw повертається до першого налаштованого провайдера/моделі замість показу застарілого типового значення видаленого провайдера. -- `models`: налаштований каталог моделей і список дозволених значень для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для провайдера, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`, `responsesServerCompaction`, `responsesCompactThreshold`, `extra_body`/`extraBody`). - - Безпечне редагування: використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додавати записи. `config set` відмовляється від замін, які видалили б наявні записи списку дозволених значень, якщо не передати `--replace`. - - Потоки configure/onboarding з областю дії провайдера об’єднують вибрані моделі провайдера в цю мапу й зберігають уже налаштованих не пов’язаних провайдерів. - - Для прямих моделей OpenAI Responses автоматично вмикається серверний Compaction. Використовуйте `params.responsesServerCompaction: false`, щоб припинити додавання `context_management`, або `params.responsesCompactThreshold`, щоб перевизначити поріг. Див. [Серверний Compaction OpenAI](/uk/providers/openai#server-side-compaction-responses-api). +- `model.primary`: формат `provider/model` (наприклад, `openai/gpt-5.4` для доступу через API-ключ або `openai-codex/gpt-5.5` для Codex OAuth). Якщо ви не вкажете провайдера, OpenClaw спочатку спробує псевдонім, потім унікальний збіг серед налаштованих провайдерів для цього точного ідентифікатора моделі, і лише потім повернеться до налаштованого типового провайдера (застаріла сумісна поведінка, тому краще вказувати явний `provider/model`). Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw переключиться на першу налаштовану пару провайдер/модель замість показу застарілої типової моделі вилученого провайдера. +- `models`: налаштований каталог моделей і список дозволів для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для провайдера, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`, `responsesServerCompaction`, `responsesCompactThreshold`, `extra_body`/`extraBody`). + - Безпечні зміни: використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додавати записи. `config set` відхиляє заміни, які видалили б наявні записи зі списку дозволів, якщо не передати `--replace`. + - Потоки налаштування/онбордингу в межах провайдера об’єднують вибрані моделі провайдера в цю мапу та зберігають уже налаштованих, не пов’язаних із цим провайдерів. + - Для безпосередніх моделей OpenAI Responses ущільнення на стороні сервера вмикається автоматично. Використовуйте `params.responsesServerCompaction: false`, щоб припинити додавати `context_management`, або `params.responsesCompactThreshold`, щоб перевизначити поріг. Див. [Server-side Compaction OpenAI](/uk/providers/openai#server-side-compaction-responses-api). - `params`: глобальні типові параметри провайдера, що застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад, `{ cacheRetention: "long" }`). -- Пріоритет об’єднання `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для моделі), потім `agents.list[].params` (відповідний `id` агента) перевизначає за ключем. Подробиці див. у [Кешування запитів](/uk/reference/prompt-caching). -- `params.extra_body`/`params.extraBody`: розширений JSON прямої передачі, що об’єднується з тілами запитів `api: "openai-completions"` для OpenAI-сумісних проксі. Якщо він конфліктує зі згенерованими ключами запиту, додаткове тіло має пріоритет; після цього не нативні маршрути completions усе одно прибирають специфічний для OpenAI параметр `store`. -- `embeddedHarness`: типова політика низькорівневого середовища виконання вбудованого агента. Якщо `runtime` не вказано, типовим є OpenClaw Pi. Використовуйте `runtime: "pi"`, щоб примусово вибрати вбудований harness PI, `runtime: "auto"`, щоб дозволити зареєстрованим Plugin harness перехоплювати підтримувані моделі, або зареєстрований ідентифікатор harness, наприклад `runtime: "codex"`. Установіть `fallback: "none"`, щоб вимкнути автоматичний резервний перехід на PI. Явні середовища виконання Plugin, як-от `codex`, типово завершуються із забороною, якщо в тій самій області перевизначення не встановити `fallback: "pi"`. Використовуйте канонічний формат посилань на моделі `provider/model`; вибирайте Codex, Claude CLI, Gemini CLI та інші бекенди виконання через конфігурацію середовища виконання, а не через застарілі префікси провайдерів середовища виконання. Див. [Середовища виконання агента](/uk/concepts/agent-runtimes), щоб зрозуміти, чим це відрізняється від вибору провайдера/моделі. -- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних значень), зберігають канонічну форму об’єкта й за можливості зберігають наявні списки резервних значень. -- `maxConcurrent`: максимальна кількість паралельних запусків агентів у межах сеансів (кожен сеанс усе одно серіалізовано). Типове значення: 4. +- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається через `agents.defaults.models["provider/model"].params` (для конкретної моделі), а потім `agents.list[].params` (для відповідного ідентифікатора агента) перевизначає за ключем. Докладніше див. у [Кешування запитів](/uk/reference/prompt-caching). +- `params.extra_body`/`params.extraBody`: розширений JSON для прямої передачі, який об’єднується з тілами запитів `api: "openai-completions"` для OpenAI-сумісних проксі. Якщо він конфліктує зі згенерованими ключами запиту, додаткове тіло має пріоритет; маршрути завершення, що не є нативними, усе одно потім видаляють специфічний для OpenAI параметр `store`. +- `embeddedHarness`: типова політика низькорівневого середовища виконання вбудованого агента. Якщо `runtime` не вказано, типово використовується OpenClaw Pi. Використовуйте `runtime: "pi"`, щоб примусово застосовувати вбудований harness PI, `runtime: "auto"`, щоб дозволити зареєстрованим harness із Plugin перехоплювати підтримувані моделі, або зареєстрований ідентифікатор harness, наприклад `runtime: "codex"`. Установіть `fallback: "none"`, щоб вимкнути автоматичний резервний перехід на PI. Явні середовища виконання Plugin, такі як `codex`, типово працюють у режимі fail closed, якщо в тій самій області перевизначення не встановити `fallback: "pi"`. Зберігайте посилання на моделі в канонічному форматі `provider/model`; вибирайте Codex, Claude CLI, Gemini CLI та інші бекенди виконання через конфігурацію середовища виконання, а не через застарілі префікси провайдерів середовища виконання. Див. [Середовища виконання агента](/uk/concepts/agent-runtimes), щоб зрозуміти, чим це відрізняється від вибору провайдера/моделі. +- Засоби запису конфігурації, що змінюють ці поля (наприклад, `/models set`, `/models set-image` і команди додавання/видалення резервних варіантів), зберігають канонічну форму об’єкта та, за можливості, зберігають наявні списки резервних варіантів. +- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно послідовна). Типове значення: 4. ### `agents.defaults.embeddedHarness` `embeddedHarness` керує тим, який низькорівневий виконавець запускає ходи вбудованого агента. -Більшість розгортань мають залишати типове середовище виконання OpenClaw Pi. -Використовуйте це, коли довірений Plugin надає нативний harness, наприклад вбудований +У більшості розгортань варто залишити типове середовище виконання OpenClaw Pi. +Використовуйте його, коли довірений Plugin надає нативний harness, наприклад вбудований harness сервера застосунку Codex. Для розуміння моделі див. [Середовища виконання агента](/uk/concepts/agent-runtimes). @@ -403,14 +403,14 @@ harness сервера застосунку Codex. Для розуміння м } ``` -- `runtime`: `"auto"`, `"pi"` або ідентифікатор зареєстрованого Plugin harness. Вбудований Plugin Codex реєструє `codex`. -- `fallback`: `"pi"` або `"none"`. У режимі `runtime: "auto"` пропущене резервне значення типово дорівнює `"pi"`, щоб старі конфігурації могли й далі використовувати PI, коли жоден Plugin harness не перехоплює запуск. У режимі явного середовища виконання Plugin, наприклад `runtime: "codex"`, пропущене резервне значення типово дорівнює `"none"`, щоб відсутній harness призводив до помилки замість тихого використання PI. Перевизначення середовища виконання не успадковують `fallback` із ширшої області; задайте `fallback: "pi"` разом з явним `runtime`, коли навмисно хочете таку сумісність. Помилки вибраного Plugin harness завжди показуються напряму. +- `runtime`: `"auto"`, `"pi"` або зареєстрований ідентифікатор harness Plugin. Вбудований Plugin Codex реєструє `codex`. +- `fallback`: `"pi"` або `"none"`. У режимі `runtime: "auto"` не вказаний `fallback` типово дорівнює `"pi"`, щоб старі конфігурації могли й далі використовувати PI, коли жоден harness Plugin не перехоплює запуск. У режимі явного середовища виконання Plugin, наприклад `runtime: "codex"`, не вказаний `fallback` типово дорівнює `"none"`, щоб відсутній harness завершувався помилкою замість мовчазного переходу на PI. Перевизначення середовища виконання не успадковують `fallback` із ширшої області; установіть `fallback: "pi"` поруч із явним `runtime`, якщо ви свідомо хочете таку сумісність. Помилки вибраного harness Plugin завжди показуються безпосередньо. - Перевизначення через змінні середовища: `OPENCLAW_AGENT_RUNTIME=` перевизначає `runtime`; `OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` перевизначає `fallback` для цього процесу. -- Для розгортань лише з Codex установіть `model: "openai/gpt-5.5"` і `embeddedHarness.runtime: "codex"`. Ви також можете явно встановити `embeddedHarness.fallback: "none"` для читабельності; це типове значення для явних середовищ виконання Plugin. -- Вибір harness фіксується для кожного `session id` після першого вбудованого запуску. Зміни конфігурації/змінних середовища впливають на нові або скинуті сеанси, але не на наявний транскрипт. Застарілі сеанси з історією транскрипту, але без записаної фіксації, вважаються прив’язаними до PI. `/status` показує фактичне середовище виконання, наприклад `Runtime: OpenClaw Pi Default` або `Runtime: OpenAI Codex`. -- Це керує лише вбудованим chat harness. Генерація медіа, vision, PDF, музика, відео та TTS і далі використовують свої налаштування провайдера/моделі. +- Для розгортань лише з Codex установіть `model: "openai/gpt-5.5"` і `embeddedHarness.runtime: "codex"`. Для наочності також можна явно встановити `embeddedHarness.fallback: "none"`; це типове значення для явних середовищ виконання Plugin. +- Вибір harness фіксується для кожного ідентифікатора сесії після першого вбудованого запуску. Зміни конфігурації/змінних середовища впливають на нові або скинуті сесії, але не на наявну транскрипцію. Застарілі сесії з історією транскрипту, але без зафіксованого вибору, вважаються прив’язаними до PI. `/status` повідомляє про фактичне середовище виконання, наприклад `Runtime: OpenClaw Pi Default` або `Runtime: OpenAI Codex`. +- Це керує лише harness вбудованого чату. Генерація медіа, візуальний аналіз, PDF, музика, відео й TTS усе одно використовують свої параметри провайдера/моделі. -**Вбудовані скорочення-псевдоніми** (застосовуються лише коли модель є в `agents.defaults.models`): +**Вбудовані скорочені псевдоніми** (застосовуються лише тоді, коли модель є в `agents.defaults.models`): | Псевдонім | Модель | | ------------------- | -------------------------------------------------- | @@ -423,11 +423,11 @@ harness сервера застосунку Codex. Для розуміння м | `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -Ваші налаштовані псевдоніми завжди мають пріоритет над типовими. +Налаштовані вами псевдоніми завжди мають пріоритет над типовими. -Для моделей Z.AI GLM-4.x автоматично вмикається режим thinking, якщо ви не встановите `--thinking off` або самі не визначите `agents.defaults.models["zai/"].params.thinking`. -Для моделей Z.AI за замовчуванням увімкнено `tool_stream` для потокової передачі викликів інструментів. Установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути його. -Для моделей Anthropic Claude 4.6 типово використовується thinking `adaptive`, якщо не задано явний рівень thinking. +Для моделей Z.AI GLM-4.x режим мислення вмикається автоматично, якщо ви не встановите `--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`, якщо явний рівень мислення не задано. ### `agents.defaults.cliBackends` @@ -460,8 +460,8 @@ harness сервера застосунку Codex. Для розуміння м ``` - CLI-бекенди орієнтовані насамперед на текст; інструменти завжди вимкнені. -- Сеанси підтримуються, якщо задано `sessionArg`. -- Передача зображень підтримується, якщо `imageArg` приймає шляхи до файлів. +- Сесії підтримуються, якщо задано `sessionArg`. +- Пряма передача зображень підтримується, коли `imageArg` приймає шляхи до файлів. ### `agents.defaults.systemPromptOverride` @@ -479,7 +479,7 @@ harness сервера застосунку Codex. Для розуміння м ### `agents.defaults.promptOverlays` -Незалежні від провайдера накладки запитів, що застосовуються за сімейством моделей. Ідентифікатори моделей сімейства GPT-5 отримують спільний контракт поведінки між провайдерами; `personality` керує лише шаром дружнього стилю взаємодії. +Незалежні від провайдера накладки запиту, що застосовуються за сімейством моделей. Ідентифікатори моделей сімейства GPT-5 отримують спільний контракт поведінки між провайдерами; `personality` керує лише шаром дружнього стилю взаємодії. ```json5 { @@ -496,7 +496,7 @@ harness сервера застосунку Codex. Для розуміння м ``` - `"friendly"` (типове значення) і `"on"` вмикають шар дружнього стилю взаємодії. -- `"off"` вимикає лише дружній шар; позначений контракт поведінки GPT-5 залишається увімкненим. +- `"off"` вимикає лише дружній шар; позначений контракт поведінки GPT-5 залишається ввімкненим. - Застаріле `plugins.entries.openai.config.personality` усе ще зчитується, якщо цей спільний параметр не задано. ### `agents.defaults.heartbeat` @@ -511,12 +511,12 @@ harness сервера застосунку Codex. Для розуміння м every: "30m", // 0m вимикає model: "openai/gpt-5.4-mini", includeReasoning: false, - includeSystemPromptSection: true, // типове значення: true; false прибирає розділ Heartbeat із системного запиту - lightContext: false, // типове значення: false; true залишає лише HEARTBEAT.md з bootstrap-файлів робочого простору - isolatedSession: false, // типове значення: false; true запускає кожен heartbeat у новому сеансі (без історії розмови) + includeSystemPromptSection: true, // типове значення: true; false не додає розділ Heartbeat до системного запиту + lightContext: false, // типове значення: false; true залишає лише HEARTBEAT.md із bootstrap-файлів робочого простору + isolatedSession: false, // типове значення: false; true запускає кожен Heartbeat у новій сесії (без історії розмови) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (типово) | block + directPolicy: "allow", // allow (типове значення) | block target: "none", // типове значення: none | варіанти: last | whatsapp | telegram | discord | ... prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, @@ -528,15 +528,15 @@ harness сервера застосунку Codex. Для розуміння м } ``` -- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація API-ключем) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути. -- `includeSystemPromptSection`: якщо `false`, прибирає розділ Heartbeat із системного запиту та пропускає додавання `HEARTBEAT.md` до bootstrap-контексту. Типове значення: `true`. +- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація API-ключем) або `1h` (OAuth-автентифікація). Установіть `0m`, щоб вимкнути. +- `includeSystemPromptSection`: якщо `false`, не додає розділ Heartbeat до системного запиту й пропускає додавання `HEARTBEAT.md` до bootstrap-контексту. Типове значення: `true`. - `suppressToolErrorWarnings`: якщо `true`, пригнічує корисні навантаження попереджень про помилки інструментів під час запусків Heartbeat. -- `timeoutSeconds`: максимальний час у секундах, дозволений для одного ходу агента Heartbeat, після чого його буде перервано. Якщо не задано, використовується `agents.defaults.timeoutSeconds`. -- `directPolicy`: політика доставки напряму/в DM. `allow` (типово) дозволяє доставку безпосередньо цілі. `block` пригнічує доставку безпосередньо цілі та видає `reason=dm-blocked`. -- `lightContext`: якщо `true`, запуски Heartbeat використовують полегшений bootstrap-контекст і залишають лише `HEARTBEAT.md` із bootstrap-файлів робочого простору. -- `isolatedSession`: якщо `true`, кожен Heartbeat запускається в новому сеансі без попередньої історії розмови. Такий самий шаблон ізоляції, як у Cron `sessionTarget: "isolated"`. Зменшує вартість токенів на один Heartbeat приблизно зі ~100K до ~2-5K токенів. -- Для конкретного агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, **запуски Heartbeat виконуються лише для цих агентів**. -- Heartbeat виконує повні ходи агента — коротші інтервали спалюють більше токенів. +- `timeoutSeconds`: максимальний час у секундах, дозволений для одного ходу агента Heartbeat перед примусовим завершенням. Якщо не вказано, використовується `agents.defaults.timeoutSeconds`. +- `directPolicy`: політика прямої доставки/DM. `allow` (типове значення) дозволяє доставку до прямої цілі. `block` пригнічує доставку до прямої цілі й видає `reason=dm-blocked`. +- `lightContext`: якщо `true`, запуски Heartbeat використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів робочого простору. +- `isolatedSession`: якщо `true`, кожен Heartbeat запускається в новій сесії без попередньої історії розмови. Такий самий шаблон ізоляції, як у Cron `sessionTarget: "isolated"`. Зменшує витрати токенів на один Heartbeat приблизно зі ~100K до ~2-5K токенів. +- Для конкретного агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, Heartbeat запускається **лише для цих агентів**. +- Heartbeat запускає повноцінні ходи агента — коротші інтервали спалюють більше токенів. ### `agents.defaults.compaction` @@ -546,7 +546,7 @@ harness сервера застосунку Codex. Для розуміння м defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // id зареєстрованого Plugin провайдера compaction (необов’язково) + provider: "my-provider", // id зареєстрованого Plugin провайдера Compaction (необов’язково) timeoutSeconds: 900, reserveTokensFloor: 24000, keepRecentTokens: 50000, @@ -554,8 +554,8 @@ harness сервера застосунку Codex. Для розуміння м identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // використовується, коли identifierPolicy=custom qualityGuard: { enabled: true, maxRetries: 1 }, postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне додавання - model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для compaction - notifyUser: true, // надсилати короткі сповіщення користувачу, коли compaction починається й завершується (типове значення: false) + model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для Compaction + notifyUser: true, // надсилати короткі повідомлення на початку й після завершення Compaction (типове значення: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, @@ -568,21 +568,21 @@ harness сервера застосунку Codex. Для розуміння м } ``` -- `mode`: `default` або `safeguard` (підсумовування довгих історій частинами). Див. [Compaction](/uk/concepts/compaction). -- `provider`: `id` зареєстрованого Plugin провайдера compaction. Якщо задано, замість вбудованого підсумовування LLM викликається `summarize()` провайдера. У разі помилки повертається до вбудованого варіанта. Установлення провайдера примусово вмикає `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction). -- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції compaction, після чого OpenClaw її перериває. Типове значення: `900`. -- `keepRecentTokens`: бюджет точки зрізу Pi для буквального збереження найновішого хвоста транскрипту. Ручний `/compact` враховує це, коли значення явно задано; інакше ручний compaction є жорсткою контрольною точкою. -- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовані вказівки щодо збереження непрозорих ідентифікаторів під час підсумовування compaction. -- `identifierInstructions`: необов’язковий власний текст для збереження ідентифікаторів, що використовується, коли `identifierPolicy=custom`. -- `qualityGuard`: перевірки з повторною спробою при некоректному виводі для підсумків safeguard. Типово ввімкнено в режимі safeguard; установіть `enabled: false`, щоб пропустити аудит. -- `postCompactionSections`: необов’язкові назви розділів AGENTS.md рівня H2/H3 для повторного додавання після compaction. Типове значення: `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне додавання. Якщо параметр не задано або явно встановлено цю типову пару, старіші заголовки `Every Session`/`Safety` також приймаються як застарілий резервний варіант. -- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування compaction. Використовуйте це, коли основний сеанс має залишатися на одній моделі, а підсумки compaction мають працювати на іншій; якщо не задано, compaction використовує основну модель сеансу. -- `notifyUser`: якщо `true`, надсилає користувачу короткі сповіщення, коли compaction починається і коли він завершується (наприклад, "Compacting context..." і "Compaction complete"). Типово вимкнено, щоб compaction залишався безшумним. -- `memoryFlush`: тихий агентний хід перед автоматичним compaction для збереження довготривалих спогадів. Пропускається, якщо робочий простір доступний лише для читання. +- `mode`: `default` або `safeguard` (підсумовування частинами для довгих історій). Див. [Compaction](/uk/concepts/compaction). +- `provider`: id зареєстрованого Plugin провайдера Compaction. Якщо задано, замість вбудованого підсумовування LLM викликається `summarize()` цього провайдера. У разі помилки повертається до вбудованого варіанта. Установлення провайдера примусово задає `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction). +- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції Compaction, після чого OpenClaw її перериває. Типове значення: `900`. +- `keepRecentTokens`: бюджет точки відсікання Pi для дослівного збереження найновішого хвоста транскрипту. Ручний `/compact` враховує це, якщо значення явно задано; інакше ручна Compaction є жорсткою контрольною точкою. +- `identifierPolicy`: `strict` (типове значення), `off` або `custom`. `strict` додає вбудовані інструкції щодо збереження непрозорих ідентифікаторів під час підсумовування Compaction. +- `identifierInstructions`: необов’язковий власний текст щодо збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`. +- `qualityGuard`: перевірки повторної спроби в разі неправильного формату виводу для підсумків safeguard. Типово ввімкнено в режимі safeguard; установіть `enabled: false`, щоб пропустити перевірку. +- `postCompactionSections`: необов’язкові назви розділів H2/H3 у `AGENTS.md`, які повторно додаються після Compaction. Типове значення — `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне додавання. Якщо не задано або явно задано цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як резервний варіант для застарілих конфігурацій. +- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування Compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а підсумки Compaction повинні виконуватися на іншій; якщо не задано, Compaction використовує основну модель сесії. +- `notifyUser`: якщо `true`, надсилає користувачеві короткі повідомлення, коли Compaction починається й коли завершується (наприклад, "Compacting context..." і "Compaction complete"). Типово вимкнено, щоб Compaction виконувалася безшумно. +- `memoryFlush`: безшумний агентний хід перед автоматичною Compaction для збереження довготривалих спогадів. Пропускається, якщо робочий простір доступний лише для читання. ### `agents.defaults.contextPruning` -Обрізає **старі результати інструментів** із контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сеансу на диску. +Обрізає **старі результати інструментів** із контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сесії на диску. ```json5 { @@ -607,24 +607,24 @@ harness сервера застосунку Codex. Для розуміння м - `mode: "cache-ttl"` вмикає проходи обрізання. -- `ttl` визначає, як часто обрізання можна запускати знову (після останнього торкання кешу). -- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів. +- `ttl` керує тим, як часто обрізання може виконуватися знову (після останнього звернення до кешу). +- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім, за потреби, повністю очищає старіші результати інструментів. **М’яке обрізання** зберігає початок і кінець та вставляє `...` посередині. -**Повне очищення** замінює весь результат інструмента на заповнювач. +**Повне очищення** замінює весь результат інструмента заповнювачем. Примітки: -- Блоки зображень ніколи не обрізаються і не очищаються. -- Співвідношення обчислюються за символами (приблизно), а не за точною кількістю токенів. -- Якщо повідомлень асистента менше, ніж `keepLastAssistants`, обрізання пропускається. +- Блоки зображень ніколи не обрізаються й не очищаються. +- Співвідношення базуються на кількості символів (приблизно), а не на точній кількості токенів. +- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається. -Подробиці поведінки див. у [Обрізання сеансів](/uk/concepts/session-pruning). +Докладніше про поведінку див. у [Обрізання сесії](/uk/concepts/session-pruning). -### Потокова передача блоками +### Блокове потокове передавання ```json5 { @@ -640,11 +640,11 @@ harness сервера застосунку Codex. Для розуміння м } ``` -- Для каналів, відмінних від Telegram, щоб увімкнути блокові відповіді, потрібно явно вказати `*.blockStreaming: true`. -- Перевизначення для каналів: `channels..blockStreamingCoalesce` (і варіанти для конкретного облікового запису). Для Signal/Slack/Discord/Google Chat типове значення `minChars: 1500`. +- Для каналів, відмінних від Telegram, потрібно явно вказати `*.blockStreaming: true`, щоб увімкнути блокові відповіді. +- Перевизначення для каналів: `channels..blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat типовим є `minChars: 1500`. - `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500 мс. Перевизначення для конкретного агента: `agents.list[].humanDelay`. -Подробиці поведінки й розбиття на частини див. у [Потокова передача](/uk/concepts/streaming). +Докладніше про поведінку та розбиття на частини див. у [Потокове передавання](/uk/concepts/streaming). ### Індикатори набору тексту @@ -660,7 +660,7 @@ harness сервера застосунку Codex. Для розуміння м ``` - Типові значення: `instant` для прямих чатів/згадок, `message` для групових чатів без згадки. -- Перевизначення для конкретного сеансу: `session.typingMode`, `session.typingIntervalSeconds`. +- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`. Див. [Індикатори набору тексту](/uk/concepts/typing-indicators). @@ -668,7 +668,7 @@ harness сервера застосунку Codex. Для розуміння м ### `agents.defaults.sandbox` -Необов’язкова ізоляція sandbox для вбудованого агента. Повний посібник див. у [Ізоляція sandbox](/uk/gateway/sandboxing). +Необов’язкова пісочниця для вбудованого агента. Повний посібник див. у [Пісочниця](/uk/gateway/sandboxing). ```json5 { @@ -763,52 +763,52 @@ harness сервера застосунку Codex. Для розуміння м } ``` - + **Бекенд:** -- `docker`: локальне середовище виконання Docker (типово) -- `ssh`: універсальне віддалене середовище виконання на основі SSH +- `docker`: локальне середовище виконання Docker (типове) +- `ssh`: загальне віддалене середовище виконання на базі SSH - `openshell`: середовище виконання OpenShell -Коли вибрано `backend: "openshell"`, налаштування, специфічні для середовища виконання, переносяться до +Коли вибрано `backend: "openshell"`, параметри, специфічні для середовища виконання, переміщуються до `plugins.entries.openshell.config`. **Конфігурація SSH-бекенда:** - `target`: ціль SSH у форматі `user@host[:port]` - `command`: команда клієнта SSH (типове значення: `ssh`) -- `workspaceRoot`: абсолютний віддалений корінь, що використовується для робочих просторів за областю дії -- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, які передаються в OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує у тимчасові файли під час виконання -- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хостів OpenSSH +- `workspaceRoot`: абсолютний віддалений корінь, що використовується для робочих просторів у межах області +- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, що передаються до OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує в тимчасові файли під час виконання +- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH -**Пріоритет SSH-автентифікації:** +**Пріоритет автентифікації SSH:** - `identityData` має пріоритет над `identityFile` - `certificateData` має пріоритет над `certificateFile` - `knownHostsData` має пріоритет над `knownHostsFile` -- Значення `*Data`, що спираються на SecretRef, визначаються з активного знімка середовища виконання секретів до початку сеансу sandbox +- Значення `*Data`, прив’язані до SecretRef, розв’язуються з активного знімка середовища виконання секретів до початку сесії sandbox **Поведінка SSH-бекенда:** - один раз ініціалізує віддалений робочий простір після створення або повторного створення -- потім зберігає віддалений робочий простір SSH як канонічний -- маршрутизує `exec`, файлові інструменти та шляхи до медіа через SSH -- не синхронізує автоматично віддалені зміни назад на хост +- потім підтримує віддалений робочий простір SSH як канонічний +- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH +- не синхронізує віддалені зміни назад на хост автоматично - не підтримує браузерні контейнери sandbox **Доступ до робочого простору:** -- `none`: робочий простір sandbox за областю дії в `~/.openclaw/sandboxes` -- `ro`: робочий простір sandbox у `/workspace`, робочий простір агента монтується лише для читання в `/agent` -- `rw`: робочий простір агента монтується для читання й запису в `/workspace` +- `none`: робочий простір sandbox у межах області під `~/.openclaw/sandboxes` +- `ro`: робочий простір sandbox у `/workspace`, робочий простір агента змонтовано лише для читання в `/agent` +- `rw`: робочий простір агента змонтовано для читання/запису в `/workspace` -**Область дії:** +**Область:** -- `session`: окремий контейнер і робочий простір для кожного сеансу -- `agent`: один контейнер і робочий простір для кожного агента (типово) -- `shared`: спільний контейнер і робочий простір (без ізоляції між сеансами) +- `session`: окремий контейнер + робочий простір для кожної сесії +- `agent`: один контейнер + робочий простір на агента (типове значення) +- `shared`: спільний контейнер і робочий простір (без ізоляції між сесіями) **Конфігурація Plugin OpenShell:** @@ -839,29 +839,29 @@ harness сервера застосунку Codex. Для розуміння м **Режим OpenShell:** - `mirror`: перед `exec` ініціалізує віддалене середовище з локального, після `exec` синхронізує назад; локальний робочий простір залишається канонічним -- `remote`: один раз ініціалізує віддалене середовище, коли створюється sandbox, а потім зберігає віддалений робочий простір як канонічний +- `remote`: один раз ініціалізує віддалене середовище під час створення sandbox, а потім підтримує віддалений робочий простір як канонічний -У режимі `remote` зміни на локальному хості, зроблені поза OpenClaw, не синхронізуються автоматично до sandbox після кроку ініціалізації. +У режимі `remote` локальні зміни на хості, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації. Транспортом є SSH до sandbox OpenShell, але Plugin керує життєвим циклом sandbox і необов’язковою синхронізацією mirror. -**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує виходу в мережу, записуваного кореня та користувача root. +**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує вихідного доступу до мережі, кореневої файлової системи з можливістю запису та користувача root. -**Для контейнерів типово використовується `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихідний доступ. +**Для контейнерів типово задано `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихідний доступ. `"host"` заблоковано. `"container:"` типово заблоковано, якщо ви явно не встановите -`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (аварійний обхід). +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (аварійний режим). **Вхідні вкладення** розміщуються в `media/inbound/*` в активному робочому просторі. **`docker.binds`** монтує додаткові каталоги хоста; глобальні прив’язки та прив’язки для конкретного агента об’єднуються. **Браузер у sandbox** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC додається до системного запиту. Не потребує `browser.enabled` у `openclaw.json`. -Доступ спостерігача noVNC типово використовує автентифікацію VNC, і OpenClaw видає URL із короткоживучим токеном (замість розкриття пароля у спільному URL). +Доступ спостерігача noVNC типово використовує автентифікацію VNC, а OpenClaw видає URL із короткоживучим токеном (замість того щоб розкривати пароль у спільному URL). -- `allowHostControl: false` (типово) блокує для сеансів у sandbox націлювання на браузер хоста. -- `network` типово дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge`, лише якщо вам явно потрібна глобальна зв’язність bridge. -- `cdpSourceRange` за потреби обмежує вхідний доступ CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`). -- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер браузера sandbox. Якщо задано (включно з `[]`), воно замінює `docker.binds` для контейнера браузера. -- Типові параметри запуску визначені в `scripts/sandbox-browser-entrypoint.sh` і налаштовані для хостів контейнерів: +- `allowHostControl: false` (типове значення) блокує спрямування сесій у sandbox до браузера хоста. +- `network` типово дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібна глобальна зв’язність bridge. +- `cdpSourceRange` за потреби обмежує вхідний доступ CDP на межі контейнера до діапазону CIDR (наприклад, `172.21.0.1/32`). +- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер браузера sandbox. Якщо задано (включно з `[]`), замінює `docker.binds` для контейнера браузера. +- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для хостів контейнерів: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -880,16 +880,16 @@ harness сервера застосунку Codex. Для розуміння м - `--metrics-recording-only` - `--disable-extensions` (типово ввімкнено) - `--disable-3d-apis`, `--disable-software-rasterizer` і `--disable-gpu` - типово ввімкнені, і їх можна вимкнути через - `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для використання WebGL/3D це потрібно. + типово ввімкнені й можуть бути вимкнені через + `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо цього вимагає використання WebGL/3D. - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає розширення, якщо ваш робочий процес залежить від них. - `--renderer-process-limit=2` можна змінити через `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати - типове обмеження кількості процесів Chromium. + типове обмеження процесів Chromium. - а також `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`. - - Типові значення — це базова конфігурація образу контейнера; використовуйте власний образ браузера з власною - entrypoint, щоб змінити типові параметри контейнера. + - Типові значення є базовими для образу контейнера; щоб змінити типові параметри контейнера, використовуйте власний браузерний образ із власною + точкою входу. @@ -915,11 +915,11 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", model: "anthropic/claude-opus-4-6", // або { primary, fallbacks } - thinkingDefault: "high", // перевизначення рівня thinking для конкретного агента + thinkingDefault: "high", // перевизначення рівня мислення для конкретного агента reasoningDefault: "on", // перевизначення видимості reasoning для конкретного агента - fastModeDefault: false, // перевизначення fast mode для конкретного агента + fastModeDefault: false, // перевизначення швидкого режиму для конкретного агента embeddedHarness: { runtime: "auto", fallback: "pi" }, - params: { cacheRetention: "none" }, // перевизначає за ключем відповідні params у defaults.models + params: { cacheRetention: "none" }, // перевизначає ключі у matching defaults.models params skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано identity: { name: "Samantha", @@ -952,20 +952,20 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ``` - `id`: стабільний ідентифікатор агента (обов’язково). -- `default`: якщо задано для кількох агентів, перемагає перший (записується попередження). Якщо не задано ні для кого, типовим стає перший запис у списку. -- `model`: форма рядка перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні резервні значення). Завдання Cron, які перевизначають лише `primary`, усе одно успадковують типові `fallbacks`, якщо не встановити `fallbacks: []`. -- `params`: параметри потоку для конкретного агента, об’єднані поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних для агента перевизначень, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. -- `skills`: необов’язковий список дозволених Skills для конкретного агента. Якщо не задано, агент успадковує `agents.defaults.skills`, коли його задано; явний список замінює типові значення замість об’єднання, а `[]` означає відсутність Skills. -- `thinkingDefault`: необов’язковий типовий рівень thinking для конкретного агента (`off | minimal | low | medium | high | xhigh | adaptive | max`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не встановлено перевизначення для конкретного повідомлення або сеансу. Вибраний профіль провайдера/моделі визначає, які значення припустимі; для Google Gemini `adaptive` зберігає динамічний thinking, яким керує провайдер (`thinkingLevel` не передається в Gemini 3/3.1, `thinkingBudget: -1` у Gemini 2.5). -- `reasoningDefault`: необов’язкове типове значення видимості reasoning для конкретного агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для конкретного повідомлення або сеансу. -- `fastModeDefault`: необов’язкове типове значення fast mode для конкретного агента (`true | false`). Застосовується, коли не задано перевизначення fast mode для конкретного повідомлення або сеансу. -- `embeddedHarness`: необов’язкове перевизначення політики низькорівневого harness для конкретного агента. Використовуйте `{ runtime: "codex" }`, щоб зробити один агент лише Codex, тоді як інші агенти зберігатимуть типовий резервний PI у режимі `auto`. -- `runtime`: необов’язковий дескриптор середовища виконання для конкретного агента. Використовуйте `type: "acp"` разом із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово працювати в сеансах ACP harness. +- `default`: якщо задано для кількох агентів, перший має пріоритет (записується попередження). Якщо не задано ні для кого, типовим стає перший запис у списку. +- `model`: форма рядка перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні резервні варіанти). Завдання Cron, які перевизначають лише `primary`, усе одно успадковують типові `fallbacks`, якщо не встановити `fallbacks: []`. +- `params`: параметри потоку для конкретного агента, що об’єднуються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних перевизначень агента, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. +- `skills`: необов’язковий список дозволених Skills для конкретного агента. Якщо не задано, агент успадковує `agents.defaults.skills`, коли його вказано; явний список замінює типові значення замість об’єднання, а `[]` означає відсутність Skills. +- `thinkingDefault`: необов’язковий типовий рівень мислення для конкретного агента (`off | minimal | low | medium | high | xhigh | adaptive | max`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано перевизначення для повідомлення або сесії. Вибраний профіль провайдера/моделі керує тим, які значення допустимі; для Google Gemini значення `adaptive` зберігає динамічне мислення, яким керує провайдер (`thinkingLevel` пропущено в Gemini 3/3.1, `thinkingBudget: -1` у Gemini 2.5). +- `reasoningDefault`: необов’язкове типове значення видимості reasoning для конкретного агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для повідомлення або сесії. +- `fastModeDefault`: необов’язкове типове значення швидкого режиму для конкретного агента (`true | false`). Застосовується, коли не задано перевизначення швидкого режиму для повідомлення або сесії. +- `embeddedHarness`: необов’язкове перевизначення політики низькорівневого harness для конкретного агента. Використовуйте `{ runtime: "codex" }`, щоб зробити один агент лише Codex, тоді як інші агенти зберігатимуть типовий резервний перехід на PI в режимі `auto`. +- `runtime`: необов’язковий дескриптор середовища виконання для конкретного агента. Використовуйте `type: "acp"` разом із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово використовувати сесії harness ACP. - `identity.avatar`: шлях відносно робочого простору, URL `http(s)` або URI `data:`. -- `identity` виводить типові значення: `ackReaction` із `emoji`, `mentionPatterns` із `name`/`emoji`. -- `subagents.allowAgents`: список дозволених ідентифікаторів агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент). -- Захист успадкування sandbox: якщо сеанс-ініціатор працює в sandbox, `sessions_spawn` відхиляє цілі, які запускалися б без sandbox. -- `subagents.requireAgentId`: якщо `true`, блокує виклики `sessions_spawn`, де не вказано `agentId` (примушує до явного вибору профілю; типове значення: `false`). +- Для `identity` виводяться типові значення: `ackReaction` із `emoji`, `mentionPatterns` із `name`/`emoji`. +- `subagents.allowAgents`: список дозволених ідентифікаторів агентів для `sessions_spawn` (`["*"]` = будь-який; типове значення: лише той самий агент). +- Захист успадкування sandbox: якщо сесія ініціатора працює в sandbox, `sessions_spawn` відхиляє цілі, які запускалися б без sandbox. +- `subagents.requireAgentId`: якщо `true`, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує до явного вибору профілю; типове значення: false). --- @@ -988,27 +988,27 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -### Поля відповідності прив’язок +### Поля збігу прив’язки -- `type` (необов’язково): `route` для звичайної маршрутизації (якщо тип відсутній, типовим є `route`), `acp` для постійних прив’язок розмов ACP. +- `type` (необов’язково): `route` для звичайної маршрутизації (якщо тип пропущено, типово використовується route), `acp` для постійних прив’язок розмов ACP. - `match.channel` (обов’язково) - `match.accountId` (необов’язково; `*` = будь-який обліковий запис; якщо пропущено = типовий обліковий запис) - `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (необов’язково; специфічно для каналу) -- `acp` (необов’язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }` +- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу) +- `acp` (необов’язково; лише для записів `type: "acp"`): `{ mode, label, cwd, backend }` -**Детермінований порядок відповідності:** +**Детермінований порядок збігу:** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` 4. `match.accountId` (точний збіг, без peer/guild/team) -5. `match.accountId: "*"` (на рівні каналу) +5. `match.accountId: "*"` (на рівні всього каналу) 6. Типовий агент -У межах кожного рівня перемагає перший відповідний запис у `bindings`. +У межах кожного рівня перший відповідний запис у `bindings` має пріоритет. -Для записів `type: "acp"` OpenClaw визначає відповідність за точною ідентичністю розмови (`match.channel` + обліковий запис + `match.peer.id`) і не використовує наведений вище порядок рівнів прив’язки маршруту. +Для записів `type: "acp"` OpenClaw виконує зіставлення за точною ідентичністю розмови (`match.channel` + обліковий запис + `match.peer.id`) і не використовує наведений вище порядок рівнів прив’язки route. ### Профілі доступу для конкретного агента @@ -1105,11 +1105,11 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б -Подробиці пріоритетів див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). +Докладніше про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). --- -## Сеанс +## Сесія ```json5 { @@ -1131,7 +1131,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // пропускати відгалуження від батьківського потоку вище за цю кількість токенів (0 вимикає) + parentForkMaxTokens: 100000, // пропускати розгалуження від батьківського потоку вище цього ліміту токенів (0 вимикає) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", @@ -1143,8 +1143,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б }, threadBindings: { enabled: true, - idleHours: 24, // типове автоматичне зняття фокуса після бездіяльності в годинах (`0` вимикає) - maxAgeHours: 0, // типове жорстке максимальне обмеження віку в годинах (`0` вимикає) + idleHours: 24, // типове автозняття фокуса через неактивність у годинах (`0` вимикає) + maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає) }, mainKey: "main", // застаріле (runtime завжди використовує "main") agentToAgent: { maxPingPongTurns: 5 }, @@ -1156,37 +1156,37 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` - + -- **`scope`**: базова стратегія групування сеансів для контекстів групових чатів. - - `per-sender` (типово): кожен відправник отримує ізольований сеанс у межах контексту каналу. - - `global`: усі учасники в контексті каналу спільно використовують один сеанс (використовуйте лише тоді, коли потрібен спільний контекст). -- **`dmScope`**: як групуються DM. - - `main`: усі DM використовують спільний основний сеанс. +- **`scope`**: базова стратегія групування сесій для контекстів групового чату. + - `per-sender` (типове значення): кожен відправник отримує ізольовану сесію в межах контексту каналу. + - `global`: усі учасники в контексті каналу ділять одну сесію (використовуйте лише тоді, коли спільний контекст справді потрібен). +- **`dmScope`**: спосіб групування DM. + - `main`: усі DM ділять основну сесію. - `per-peer`: ізоляція за ідентифікатором відправника між каналами. - - `per-channel-peer`: ізоляція для кожної пари канал + відправник (рекомендовано для вхідних скриньок із кількома користувачами). - - `per-account-channel-peer`: ізоляція для кожної пари обліковий запис + канал + відправник (рекомендовано для кількох облікових записів). -- **`identityLinks`**: мапа канонічних ідентифікаторів на peers із префіксами провайдерів для спільного використання сеансів між каналами. -- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, перемагає той варіант, що спливає раніше. -- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як псевдонім для `direct`. -- **`parentForkMaxTokens`**: максимальна кількість `totalTokens` у батьківському сеансі, дозволена під час створення відгалуженого сеансу потоку (типове значення `100000`). - - Якщо `totalTokens` батьківського сеансу перевищує це значення, OpenClaw запускає новий сеанс потоку замість успадкування історії транскрипту батьківського сеансу. - - Установіть `0`, щоб вимкнути цей запобіжник і завжди дозволяти відгалуження від батьківського сеансу. + - `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для вхідних скриньок із кількома користувачами). + - `per-account-channel-peer`: ізоляція за обліковим записом + каналом + відправником (рекомендовано для кількох облікових записів). +- **`identityLinks`**: мапа канонічних ідентифікаторів до peer із префіксом провайдера для спільного використання сесії між каналами. +- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує те, що завершується раніше. +- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застаріле `dm` також приймається як псевдонім для `direct`. +- **`parentForkMaxTokens`**: максимальна кількість `totalTokens` у батьківській сесії, дозволена під час створення розгалуженої сесії потоку (типове значення `100000`). + - Якщо значення `totalTokens` у батьківській сесії перевищує це значення, OpenClaw починає нову сесію потоку замість успадкування історії транскрипту батьківської сесії. + - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти розгалуження від батьківської сесії. - **`mainKey`**: застаріле поле. Runtime завжди використовує `"main"` для основного кошика прямих чатів. -- **`agentToAgent.maxPingPongTurns`**: максимальна кількість ходів зворотної відповіді між агентами під час обміну агент-до-агента (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжки ping-pong. -- **`sendPolicy`**: відповідність за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перша заборона має пріоритет. -- **`maintenance`**: очищення сховища сеансів і керування зберіганням. - - `mode`: `warn` лише виводить попередження; `enforce` застосовує очищення. - - `pruneAfter`: поріг віку для застарілих записів (типове значення `30d`). +- **`agentToAgent.maxPingPongTurns`**: максимальна кількість відповідей у зворотному напрямку між агентами під час обміну агент-агент (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжок ping-pong. +- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перша заборона має пріоритет. +- **`maintenance`**: очищення сховища сесій і керування зберіганням. + - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення. + - `pruneAfter`: поріг давності для застарілих записів (типове значення `30d`). - `maxEntries`: максимальна кількість записів у `sessions.json` (типове значення `500`). - - `rotateBytes`: ротує `sessions.json`, коли його розмір перевищує це значення (типове значення `10mb`). - - `resetArchiveRetention`: термін зберігання архівів транскриптів `*.reset.`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. - - `maxDiskBytes`: необов’язковий бюджет місця на диску для каталогу сеансів. У режимі `warn` лише записує попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сеанси. - - `highWaterBytes`: необов’язкова ціль після очищення бюджету. Типово `80%` від `maxDiskBytes`. -- **`threadBindings`**: глобальні типові значення для функцій сеансів, прив’язаних до потоків. + - `rotateBytes`: ротувати `sessions.json`, коли він перевищує цей розмір (типове значення `10mb`). + - `resetArchiveRetention`: строк зберігання архівів транскриптів `*.reset.`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. + - `maxDiskBytes`: необов’язковий бюджет місця на диску для каталогу сесій. У режимі `warn` записує попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії. + - `highWaterBytes`: необов’язкова ціль після очищення за бюджетом. Типово дорівнює `80%` від `maxDiskBytes`. +- **`threadBindings`**: глобальні типові значення для функцій сесій, прив’язаних до потоків. - `enabled`: головний типовий перемикач (провайдери можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) - - `idleHours`: типове автоматичне зняття фокуса після бездіяльності в годинах (`0` вимикає; провайдери можуть перевизначати) - - `maxAgeHours`: типове жорстке максимальне обмеження віку в годинах (`0` вимикає; провайдери можуть перевизначати) + - `idleHours`: типове автозняття фокуса через неактивність у годинах (`0` вимикає; провайдери можуть перевизначати) + - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; провайдери можуть перевизначати) @@ -1226,36 +1226,36 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Визначення (перемагає найспецифічніше): обліковий запис → канал → глобальне значення. `""` вимикає і зупиняє каскад. `"auto"` виводить `[{identity.name}]`. +Порядок визначення (найспецифічніше має пріоритет): обліковий запис → канал → глобальний. `""` вимикає та зупиняє каскад. `"auto"` виводить `[{identity.name}]`. -**Шаблонні змінні:** +**Змінні шаблону:** -| Змінна | Опис | Приклад | -| ----------------- | ---------------------------- | --------------------------- | -| `{model}` | Коротка назва моделі | `claude-opus-4-6` | -| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | -| `{provider}` | Назва провайдера | `anthropic` | -| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` | -| `{identity.name}` | Ім’я ідентичності агента | (те саме, що й `"auto"`) | +| Змінна | Опис | Приклад | +| ----------------- | ------------------------ | --------------------------- | +| `{model}` | Коротка назва моделі | `claude-opus-4-6` | +| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | +| `{provider}` | Назва провайдера | `anthropic` | +| `{thinkingLevel}` | Поточний рівень мислення | `high`, `low`, `off` | +| `{identity.name}` | Назва ідентичності агента | (те саме, що й `"auto"`) | Змінні нечутливі до регістру. `{think}` — це псевдонім для `{thinkingLevel}`. ### Реакція підтвердження -- Типово дорівнює `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути. +- Типово використовується `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути. - Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`. -- Порядок визначення: обліковий запис → канал → `messages.ackReaction` → резервне значення identity. -- Область дії: `group-mentions` (типово), `group-all`, `direct`, `all`. -- `removeAckAfterReply`: прибирає реакцію підтвердження після відповіді в Slack, Discord і Telegram. -- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram. - У Slack і Discord, якщо значення не задано, реакції статусу залишаються ввімкненими, коли активні реакції підтвердження. - У Telegram, щоб увімкнути реакції статусу життєвого циклу, явно встановіть `true`. +- Порядок визначення: обліковий запис → канал → `messages.ackReaction` → резервне значення з ідентичності. +- Область: `group-mentions` (типове значення), `group-all`, `direct`, `all`. +- `removeAckAfterReply`: видаляє підтвердження після відповіді у Slack, Discord і Telegram. +- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу у Slack, Discord і Telegram. + У Slack і Discord, якщо не задано, реакції статусу залишаються ввімкненими, коли активні реакції підтвердження. + У Telegram для ввімкнення реакцій статусу життєвого циклу треба явно встановити `true`. -### Debounce для вхідних повідомлень +### Затримка вхідних повідомлень -Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення скидаються негайно. Команди керування оминають debounce. +Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення скидаються негайно. Керівні команди обходять цю затримку. -### TTS (перетворення тексту на мовлення) +### TTS (синтез мовлення) ```json5 { @@ -1304,16 +1304,16 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ``` - `auto` керує типовим режимом автоматичного TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні налаштування, а `/tts status` показує фактичний стан. -- `summaryModel` перевизначає `agents.defaults.model.primary` для автоматичного підсумку. -- `modelOverrides` типово ввімкнено; `modelOverrides.allowProvider` типово дорівнює `false` (явне ввімкнення). -- Для API-ключів використовуються резервні значення `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. -- Вбудовані мовленнєві провайдери належать Plugin. Якщо задано `plugins.allow`, включіть кожен Plugin провайдера TTS, який хочете використовувати, наприклад `microsoft` для Edge TTS. Застарілий ідентифікатор провайдера `edge` приймається як псевдонім для `microsoft`. +- `summaryModel` перевизначає `agents.defaults.model.primary` для автоматичного підсумовування. +- `modelOverrides` типово ввімкнено; `modelOverrides.allowProvider` типово дорівнює `false` (вмикається за бажанням). +- API-ключі резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. +- Вбудовані провайдери мовлення належать Plugin. Якщо задано `plugins.allow`, включіть кожен Plugin провайдера TTS, який хочете використовувати, наприклад `microsoft` для Edge TTS. Застарілий ідентифікатор провайдера `edge` приймається як псевдонім для `microsoft`. - `providers.openai.baseUrl` перевизначає кінцеву точку OpenAI TTS. Порядок визначення: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. -- Коли `providers.openai.baseUrl` вказує на кінцеву точку, відмінну від OpenAI, OpenClaw розглядає її як OpenAI-сумісний TTS-сервер і послаблює перевірку моделі/голосу. +- Коли `providers.openai.baseUrl` вказує на кінцеву точку, відмінну від OpenAI, OpenClaw трактує її як OpenAI-сумісний TTS-сервер і послаблює перевірку моделі/голосу. --- -## Talk +## Розмова Типові значення для режиму Talk (macOS/iOS/Android). @@ -1332,6 +1332,10 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б outputFormat: "mp3_44100_128", apiKey: "elevenlabs_api_key", }, + mlx: { + modelId: "mlx-community/Soprano-80M-bf16", + }, + system: {}, }, silenceTimeoutMs: 1500, interruptOnSpeech: true, @@ -1339,13 +1343,15 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -- `talk.provider` має відповідати ключу в `talk.providers`, коли налаштовано кількох провайдерів Talk. -- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) призначені лише для сумісності й автоматично мігруються в `talk.providers.`. -- Для ідентифікаторів голосу використовуються резервні значення `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. -- `providers.*.apiKey` приймає рядки відкритого тексту або об’єкти SecretRef. -- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли API-ключ Talk не налаштовано. -- `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви. -- `silenceTimeoutMs` визначає, скільки часу режим Talk чекає після тиші користувача, перш ніж надіслати транскрипт. Якщо не задано, зберігається типове для платформи вікно паузи (`700 ms` на macOS і Android, `900 ms` на iOS). +- `talk.provider` має збігатися з ключем у `talk.providers`, коли налаштовано кілька провайдерів Talk. +- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) існують лише для сумісності й автоматично мігрують до `talk.providers.`. +- Ідентифікатори голосів резервно беруться з `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. +- `providers.*.apiKey` приймає звичайні рядки або об’єкти SecretRef. +- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли ключ API Talk не налаштовано. +- `providers.*.voiceAliases` дає змогу директивам Talk використовувати зручні назви. +- `providers.mlx.modelId` вибирає репозиторій Hugging Face, який використовує локальний помічник MLX у macOS. Якщо не задано, macOS використовує `mlx-community/Soprano-80M-bf16`. +- Відтворення MLX у macOS виконується через вбудований помічник `openclaw-mlx-tts`, якщо він є, або через виконуваний файл у `PATH`; `OPENCLAW_MLX_TTS_BIN` перевизначає шлях до помічника для розробки. +- `silenceTimeoutMs` керує тим, скільки часу режим Talk чекає після тиші користувача перед надсиланням транскрипту. Якщо не задано, зберігається типове вікно паузи платформи (`700 ms у macOS і Android, 900 ms в iOS`). --- diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md index 60bb687d0..247463408 100644 --- a/docs/uk/gateway/configuration-reference.md +++ b/docs/uk/gateway/configuration-reference.md @@ -1,73 +1,74 @@ --- read_when: - - Вам потрібні точні семантики або значення за замовчуванням конфігурації на рівні полів + - Вам потрібні точні семантики полів конфігурації або значення за замовчуванням - Ви перевіряєте блоки конфігурації каналу, моделі, Gateway або інструмента summary: Довідник конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем title: Довідник конфігурації x-i18n: - generated_at: "2026-04-25T07:01:56Z" + generated_at: "2026-04-25T07:53:43Z" model: gpt-5.4 provider: openai - source_hash: a0f69861c754e0f6d3e41ac357fa56612b90da69249c6f24ec9f6ade21acc1d3 + source_hash: fd4ebfce263df22d2daa8e0a01e8ab7f590f86b424c534a85d39a25cee98e053 source_path: gateway/configuration-reference.md workflow: 15 --- -Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration). +Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration). -Охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власний глибший довідник. Каталоги команд, що належать каналам і Plugin, а також детальні параметри пам’яті/QMD розміщені на окремих сторінках, а не тут. +Охоплює основні поверхні конфігурації OpenClaw і дає посилання назовні, коли підсистема має власний глибший довідник. Каталоги команд, що належать каналам і Plugin, а також глибокі параметри пам’яті/QMD розміщено на окремих сторінках, а не тут. Джерело істини в коді: - `openclaw config schema` виводить актуальну JSON Schema, яка використовується для валідації та Control UI, із об’єднаними метаданими bundled/plugin/channel, коли вони доступні -- `config.schema.lookup` повертає один вузол схеми для вказаного шляху для інструментів детального перегляду +- `config.schema.lookup` повертає один вузол схеми з прив’язкою до шляху для інструментів деталізованого перегляду - `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий хеш документації конфігурації відносно поточної поверхні схеми -Окремі поглиблені довідники: +Окремі глибокі довідники: -- [Довідник конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming` -- [Slash-команди](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд -- сторінки відповідного каналу/Plugin для поверхонь команд, специфічних для каналу +- [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 каталогу команд +- сторінки відповідних каналів/Plugin для специфічних для каналу поверхонь команд -Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх пропущено. +Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано. --- ## Канали Ключі конфігурації для кожного каналу перенесено на окрему сторінку — див. -[Конфігурація — канали](/uk/gateway/config-channels) для `channels.*`, +[Configuration — channels](/uk/gateway/config-channels) для `channels.*`, зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших -bundled каналів (автентифікація, контроль доступу, кілька облікових записів, керування згадками). +bundled каналів (автентифікація, контроль доступу, кілька облікових записів, gating згадок). -## Значення агента за замовчуванням, multi-agent, сесії та повідомлення +## Типові налаштування агента, мультиагентність, сесії та повідомлення Перенесено на окрему сторінку — див. -[Конфігурація — агенти](/uk/gateway/config-agents) для: +[Configuration — agents](/uk/gateway/config-agents) для: -- `agents.defaults.*` (робочий простір, модель, thinking, Heartbeat, пам’ять, медіа, Skills, sandbox) -- `multiAgent.*` (маршрутизація та прив’язки multi-agent) -- `session.*` (життєвий цикл сесії, Compaction, очищення) +- `agents.defaults.*` (робочий простір, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox) +- `multiAgent.*` (маршрутизація та прив’язки мультиагентності) +- `session.*` (життєвий цикл сесії, compaction, pruning) - `messages.*` (доставка повідомлень, TTS, рендеринг markdown) - `talk.*` (режим Talk) - - `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS та Android, 900 ms на iOS`) + - `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS і Android, 900 ms на iOS`) -## Інструменти та користувацькі провайдери +## Інструменти та власні провайдери -Політика інструментів, експериментальні перемикачі, конфігурація інструментів на базі провайдерів і налаштування користувацьких провайдерів / базових URL перенесено на окрему сторінку — див. -[Конфігурація — інструменти та користувацькі провайдери](/uk/gateway/config-tools). +Політика інструментів, експериментальні перемикачі, конфігурація інструментів із підтримкою провайдерів і налаштування власних +провайдерів / base-URL перенесено на окрему сторінку — див. +[Configuration — tools and custom providers](/uk/gateway/config-tools). ## MCP -Визначення MCP-серверів, якими керує OpenClaw, знаходяться в `mcp.servers` і -використовуються вбудованим Pi та іншими адаптерами часу виконання. Команди `openclaw mcp list`, +Визначення MCP-серверів, керованих OpenClaw, розміщуються в `mcp.servers` і +використовуються вбудованим Pi та іншими адаптерами середовища виконання. Команди `openclaw mcp list`, `show`, `set` і `unset` керують цим блоком без підключення до цільового сервера під час редагування конфігурації. ```json5 { mcp: { - // Необов’язково. За замовчуванням: 600000 ms (10 хвилин). Установіть 0, щоб вимкнути видалення при простої. + // Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction. sessionIdleTtlMs: 600000, servers: { docs: { @@ -87,13 +88,16 @@ bundled каналів (автентифікація, контроль дост ``` - `mcp.servers`: іменовані визначення stdio або віддалених MCP-серверів для середовищ виконання, які - надають налаштовані інструменти MCP. -- `mcp.sessionIdleTtlMs`: TTL простою для bundled MCP runtime з областю дії сесії. - Одноразові вбудовані запуски запитують очищення наприкінці запуску; цей TTL є запасним механізмом для - довготривалих сесій і майбутніх викликів. + надають налаштовані MCP-інструменти. +- `mcp.sessionIdleTtlMs`: idle TTL для bundled MCP runtime, прив’язаних до сесії. + Одноразові вбудовані запуски запитують очищення після завершення запуску; цей TTL є резервним механізмом для + довготривалих сесій і майбутніх викликачів. +- Зміни в `mcp.*` застосовуються на льоту через знищення кешованих session MCP runtime. + Наступне виявлення/використання інструмента створює їх заново з нової конфігурації, тож видалені + записи `mcp.servers` прибираються негайно, а не чекають idle TTL. Див. [MCP](/uk/cli/mcp#openclaw-as-an-mcp-client-registry) і -[CLI backends](/uk/gateway/cli-backends#bundle-mcp-overlays) для поведінки під час виконання. +[CLI backends](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо поведінки середовища виконання. ## Skills @@ -120,18 +124,18 @@ bundled каналів (автентифікація, контроль дост } ``` -- `allowBundled`: необов’язковий список дозволу лише для bundled skills (керовані/workspace skills не зачіпаються). -- `load.extraDirs`: додаткові спільні корені skills (найнижчий пріоритет). -- `install.preferBrew`: якщо `true`, надавати перевагу інсталяторам Homebrew, коли `brew` +- `allowBundled`: необов’язковий список дозволу лише для bundled Skills (керовані/робочі Skills не зачіпаються). +- `load.extraDirs`: додаткові спільні кореневі каталоги Skills (найнижчий пріоритет). +- `install.preferBrew`: якщо `true`, надає перевагу інсталяторам Homebrew, коли `brew` доступний, перш ніж переходити до інших типів інсталяторів. -- `install.nodeManager`: бажаний менеджер вузлів для специфікацій `metadata.openclaw.install` +- `install.nodeManager`: пріоритет node-інсталятора для специфікацій `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- `entries..enabled: false` вимикає skill, навіть якщо він bundled/інстальований. -- `entries..apiKey`: зручне поле для skills, які оголошують основну змінну середовища (простий текстовий рядок або об’єкт SecretRef). +- `entries..enabled: false` вимикає Skill, навіть якщо він bundled/встановлений. +- `entries..apiKey`: зручне поле для Skills, які оголошують основну env-змінну (рядок у відкритому тексті або об’єкт SecretRef). --- -## Plugins +## Plugin ```json5 { @@ -156,42 +160,42 @@ bundled каналів (автентифікація, контроль дост ``` - Завантажуються з `~/.openclaw/extensions`, `/.openclaw/extensions`, а також `plugins.load.paths`. -- Виявлення підтримує нативні Plugins OpenClaw, а також сумісні пакети Codex і Claude, включно з пакетами Claude стандартного макета без маніфесту. -- **Зміни конфігурації потребують перезапуску Gateway.** -- `allow`: необов’язковий список дозволу (завантажуються лише перелічені Plugins). `deny` має пріоритет. -- `plugins.entries..apiKey`: зручне поле API-ключа на рівні Plugin (коли підтримується Plugin). -- `plugins.entries..env`: карта змінних середовища в межах Plugin. -- `plugins.entries..hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` та ігнорує поля зміни prompt із застарілого `before_agent_start`, зберігаючи при цьому застарілі `modelOverride` і `providerOverride`. Застосовується до нативних хуків Plugin і підтримуваних каталогів хуків, наданих пакетами. -- `plugins.entries..hooks.allowConversationAccess`: коли `true`, довірені небандловані Plugins можуть читати сирий вміст розмови з типізованих хуків, таких як `llm_input`, `llm_output` і `agent_end`. -- `plugins.entries..subagent.allowModelOverride`: явно довіряти цьому Plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових підзапусків subagent. -- `plugins.entries..subagent.allowedModels`: необов’язковий список дозволу канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли ви свідомо хочете дозволити будь-яку модель. -- `plugins.entries..config`: об’єкт конфігурації, визначений Plugin (перевіряється схемою нативного Plugin OpenClaw, якщо доступна). -- Налаштування облікових записів/runtime для плагінів каналів містяться в `channels.` і мають описуватися метаданими `channelConfigs` у маніфесті відповідного Plugin, а не центральним реєстром опцій OpenClaw. +- Виявлення підтримує нативні Plugin OpenClaw, а також сумісні пакети Codex і Claude, зокрема пакети Claude стандартного макета без manifest. +- **Зміни конфігурації потребують перезапуску gateway.** +- `allow`: необов’язковий список дозволу (завантажуються лише перелічені Plugin). `deny` має пріоритет. +- `plugins.entries..apiKey`: зручне поле API-ключа на рівні Plugin (коли Plugin це підтримує). +- `plugins.entries..env`: карта env-змінних у межах Plugin. +- `plugins.entries..hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` та ігнорує поля, що змінюють промпт, зі старого `before_agent_start`, зберігаючи при цьому застарілі `modelOverride` і `providerOverride`. Застосовується до нативних hook Plugin і підтримуваних каталогів hook, наданих пакетами. +- `plugins.entries..hooks.allowConversationAccess`: коли `true`, довірені небандловані Plugin можуть читати необроблений вміст розмови з типізованих hook, як-от `llm_input`, `llm_output` і `agent_end`. +- `plugins.entries..subagent.allowModelOverride`: явно довіряє цьому Plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових subagent. +- `plugins.entries..subagent.allowedModels`: необов’язковий список дозволу канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише якщо навмисно хочете дозволити будь-яку модель. +- `plugins.entries..config`: об’єкт конфігурації, визначений Plugin (валідується схемою нативного Plugin OpenClaw, якщо вона доступна). +- Налаштування облікових записів/runtime для channel Plugin розміщуються в `channels.` і мають описуватися метаданими `channelConfigs` у manifest відповідного Plugin, а не центральним реєстром параметрів OpenClaw. - `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера web-fetch Firecrawl. - - `apiKey`: API-ключ Firecrawl (підтримує SecretRef). Використовує як резервне джерело `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілий `tools.web.fetch.firecrawl.apiKey` або змінну середовища `FIRECRAWL_API_KEY`. - - `baseUrl`: базовий URL API Firecrawl (за замовчуванням: `https://api.firecrawl.dev`). - - `onlyMainContent`: витягувати лише основний вміст сторінок (за замовчуванням: `true`). - - `maxAgeMs`: максимальний вік кешу в мілісекундах (за замовчуванням: `172800000` / 2 дні). - - `timeoutSeconds`: тайм-аут запиту на скрапінг у секундах (за замовчуванням: `60`). + - `apiKey`: API-ключ Firecrawl (підтримує SecretRef). Використовує як резервне значення `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілий `tools.web.fetch.firecrawl.apiKey` або env-змінну `FIRECRAWL_API_KEY`. + - `baseUrl`: базовий URL API Firecrawl (типово: `https://api.firecrawl.dev`). + - `onlyMainContent`: витягувати лише основний вміст сторінок (типово: `true`). + - `maxAgeMs`: максимальний вік кешу в мілісекундах (типово: `172800000` / 2 дні). + - `timeoutSeconds`: тайм-аут запиту на скрапінг у секундах (типово: `60`). - `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok). - - `enabled`: увімкнути провайдер X Search. - - `model`: модель Grok для використання в пошуку (наприклад, `"grok-4-1-fast"`). + - `enabled`: увімкнути провайдера X Search. + - `model`: модель Grok для пошуку (наприклад, `"grok-4-1-fast"`). - `plugins.entries.memory-core.config.dreaming`: налаштування dreaming пам’яті. Див. [Dreaming](/uk/concepts/dreaming) щодо фаз і порогів. - - `enabled`: головний перемикач dreaming (за замовчуванням `false`). - - `frequency`: частота Cron для кожного повного циклу dreaming (за замовчуванням `"0 3 * * *"`). + - `enabled`: головний перемикач dreaming (типово `false`). + - `frequency`: Cron-розклад для кожного повного циклу dreaming (типово `"0 3 * * *"`). - політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації). -- Повна конфігурація пам’яті міститься в [Довіднику конфігурації пам’яті](/uk/reference/memory-config): +- Повна конфігурація пам’яті розміщена в [Memory configuration reference](/uk/reference/memory-config): - `agents.defaults.memorySearch.*` - `memory.backend` - `memory.citations` - `memory.qmd.*` - `plugins.entries.memory-core.config.dreaming` -- Увімкнені Plugins Claude bundle також можуть надавати вбудовані значення Pi за замовчуванням із `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі патчі конфігурації OpenClaw. -- `plugins.slots.memory`: вибір id активного плагіна пам’яті або `"none"` для вимкнення плагінів пам’яті. -- `plugins.slots.contextEngine`: вибір id активного плагіна рушія контексту; за замовчуванням `"legacy"`, якщо ви не встановите й не виберете інший рушій. -- `plugins.installs`: метадані інсталяції, керовані CLI, які використовуються `openclaw plugins update`. +- Увімкнені Plugin-пакети Claude також можуть додавати вбудовані типові значення Pi з `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі патчі конфігурації OpenClaw. +- `plugins.slots.memory`: вибрати id активного Plugin пам’яті або `"none"`, щоб вимкнути Plugin пам’яті. +- `plugins.slots.contextEngine`: вибрати id активного Plugin рушія контексту; типове значення — `"legacy"`, доки ви не встановите й не виберете інший рушій. +- `plugins.installs`: метадані встановлення, керовані CLI та використовувані `openclaw plugins update`. - Містять `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`. - - Розглядайте `plugins.installs.*` як керований стан; надавайте перевагу командам CLI над ручними редагуваннями. + - Розглядайте `plugins.installs.*` як керований стан; надавайте перевагу командам CLI замість ручного редагування. Див. [Plugins](/uk/tools/plugin). @@ -206,8 +210,8 @@ bundled каналів (автентифікація, контроль дост evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { - // dangerouslyAllowPrivateNetwork: true, // вмикайте лише для довіреного доступу до приватної мережі - // allowPrivateNetwork: true, // застарілий псевдонім + // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access + // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, @@ -244,34 +248,34 @@ bundled каналів (автентифікація, контроль дост ``` - `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`. -- `tabCleanup` звільняє відстежувані вкладки основного агента після простою або коли +- `tabCleanup` очищає відстежувані вкладки основного агента після простою або коли сесія перевищує свій ліміт. Установіть `idleMinutes: 0` або `maxTabsPerSession: 0`, щоб вимкнути ці окремі режими очищення. -- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тому навігація браузера за замовчуванням залишається суворо обмеженою. +- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тож навігація браузера типово залишається суворою. - Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви свідомо довіряєте навігації браузера в приватній мережі. -- У суворому режимі кінцеві точки віддалених профілів CDP (`profiles.*.cdpUrl`) підлягають такому самому блокуванню приватної мережі під час перевірок доступності/виявлення. +- У суворому режимі віддалені кінцеві точки профілю CDP (`profiles.*.cdpUrl`) підпадають під те саме блокування приватної мережі під час перевірок доступності/виявлення. - `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім. - У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків. -- Віддалені профілі працюють лише в режимі attach-only (запуск/зупинка/скидання вимкнені). +- Віддалені профілі працюють лише в режимі під’єднання (start/stop/reset вимкнені). - `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`. - Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявляв `/json/version`; використовуйте WS(S), - коли ваш провайдер надає вам прямий URL WebSocket DevTools. -- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть підключатися на - вибраному хості або через підключений browser node. + Використовуйте HTTP(S), якщо хочете, щоб OpenClaw виявляв `/json/version`; використовуйте WS(S), + коли ваш провайдер надає прямий URL DevTools WebSocket. +- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть під’єднуватися + на вибраному хості або через під’єднаний вузол браузера. - Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний профіль браузера на базі Chromium, наприклад Brave або Edge. -- Профілі `existing-session` зберігають поточні обмеження маршрутизації Chrome MCP: - дії на основі snapshot/ref замість націлювання за CSS-селекторами, хуки завантаження - одного файла, без перевизначення тайм-аутів діалогів, без `wait --load networkidle`, а також без - `responsebody`, експорту PDF, перехоплення завантажень або пакетних дій. +- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP: + дії на основі snapshot/ref замість націлювання за CSS-селекторами, hook завантаження + одного файлу, без перевизначення тайм-аутів діалогів, без `wait --load networkidle`, а також без + `responsebody`, експорту PDF, перехоплення завантажень чи пакетних дій. - Локальні керовані профілі `openclaw` автоматично призначають `cdpPort` і `cdpUrl`; явно задавайте `cdpUrl` лише для віддаленого CDP. - Локальні керовані профілі можуть задавати `executablePath`, щоб перевизначити глобальний `browser.executablePath` для цього профілю. Використовуйте це, щоб запускати один профіль у Chrome, а інший — у Brave. -- Порядок автовиявлення: браузер за замовчуванням, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. +- Порядок автовиявлення: типовий браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. - `browser.executablePath` приймає `~` для домашнього каталогу вашої ОС. -- Служба керування: лише local loopback (порт визначається з `gateway.port`, за замовчуванням `18791`). +- Служба керування: лише local loopback (порт визначається з `gateway.port`, типово `18791`). - `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад, `--disable-gpu`, розмір вікна або прапорці налагодження). @@ -292,7 +296,7 @@ bundled каналів (автентифікація, контроль дост ``` - `seamColor`: акцентний колір для chrome інтерфейсу нативного застосунку (відтінок бульбашки режиму Talk тощо). -- `assistant`: перевизначення ідентичності для Control UI. Якщо не задано, використовується ідентичність активного агента. +- `assistant`: перевизначення ідентичності для Control UI. Використовує ідентичність активного агента як запасний варіант. --- @@ -367,66 +371,69 @@ bundled каналів (автентифікація, контроль дост } ``` - + -- `mode`: `local` (запустити gateway) або `remote` (підключитися до віддаленого gateway). Gateway відмовляється запускатися, якщо не вказано `local`. +- `mode`: `local` (запустити gateway) або `remote` (під’єднатися до віддаленого gateway). Gateway відмовляється запускатися, якщо не `local`. - `port`: єдиний мультиплексований порт для WS + HTTP. Пріоритет: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. -- `bind`: `auto`, `loopback` (за замовчуванням), `lan` (`0.0.0.0`), `tailnet` (лише IP Tailscale) або `custom`. +- `bind`: `auto`, `loopback` (типово), `lan` (`0.0.0.0`), `tailnet` (лише IP Tailscale) або `custom`. - **Застарілі псевдоніми bind**: використовуйте значення режиму bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хостів (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`). -- **Примітка щодо Docker**: стандартне значення bind `loopback` слухає `127.0.0.1` усередині контейнера. За мережевої конфігурації Docker bridge (`-p 18789:18789`) трафік надходить через `eth0`, тому gateway недоступний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах. -- **Auth**: за замовчуванням обов’язкова. Прив’язки не до loopback вимагають auth gateway. На практиці це означає спільний token/password або reverse proxy з урахуванням ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер початкового налаштування за замовчуванням генерує token. -- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRef), явно встановіть `gateway.auth.mode` у `token` або `password`. Запуск і потоки встановлення/відновлення сервісу завершуються помилкою, якщо налаштовано обидва, а режим не задано. -- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних налаштувань local loopback; цей варіант навмисно не пропонується в запитах початкового налаштування. -- `gateway.auth.mode: "trusted-proxy"`: делегувати auth reverse proxy з урахуванням ідентичності та довіряти заголовкам ідентичності від `gateway.trustedProxies` (див. [Auth через Trusted Proxy](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; reverse proxy loopback на тому ж хості не задовольняють auth trusted-proxy. -- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю auth через заголовки Tailscale; вони натомість дотримуються звичайного режиму HTTP auth gateway. Цей безтокеновий потік передбачає, що хост gateway є довіреним. За замовчуванням `true`, коли `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб auth. Застосовується окремо до IP клієнта і до області auth (спільний секрет і токен пристрою відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`. - - В асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом збою. Тому одночасні хибні спроби від того самого клієнта можуть активувати ліміт уже на другому запиті, замість того щоб обидві пройшли як звичайні невідповідності. - - `gateway.auth.rateLimit.exemptLoopback` за замовчуванням має значення `true`; установіть `false`, якщо ви навмисно хочете також застосовувати rate limit до localhost-трафіку (для тестових середовищ або суворих proxy-розгортань). -- Спроби WS auth з походження browser завжди обмежуються без винятку для loopback (додатковий захист від brute force localhost через browser). -- У loopback ці блокування для походження browser ізольовані за нормалізованим значенням `Origin`, - тож повторні збої з одного localhost-origin не блокують автоматично - інше origin. -- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний доступ, потребує auth). -- `controlUi.allowedOrigins`: явний список дозволених browser-origin для підключень Gateway WebSocket. Обов’язково, якщо очікуються browser-клієнти з origin не-loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, який вмикає резервне визначення origin через заголовок Host для розгортань, що навмисно покладаються на політику origin за заголовком Host. -- `remote.transport`: `ssh` (за замовчуванням) або `direct` (ws/wss). Для `direct` значення `remote.url` має бути `ws://` або `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: аварійний client-side override через змінну середовища процесу, - що дозволяє відкритий `ws://` до довірених IP приватної мережі; за замовчуванням відкритий текст лишається дозволеним лише для loopback. Еквівалента в `openclaw.json` немає, а конфігурація приватної мережі browser, така як - `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на WebSocket-клієнти Gateway. -- `gateway.remote.token` / `.password`: поля облікових даних віддаленого клієнта. Самі по собі вони не налаштовують auth gateway. -- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL зовнішнього relay APNs, який використовують офіційні/TestFlight збірки iOS після публікації в gateway реєстрацій на основі relay. Цей URL має збігатися з URL relay, скомпільованим у збірку iOS. -- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від gateway до relay у мілісекундах. За замовчуванням `10000`. -- Реєстрації на основі relay делегуються конкретній ідентичності gateway. Зв’язаний застосунок iOS отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію relay і пересилає в gateway право надсилання в межах реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові env override для конфігурації relay вище. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний виняток лише для розробки для loopback HTTP URL relay. У production URL relay мають залишатися на HTTPS. -- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану каналів у хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски монітором стану. За замовчуванням: `5`. -- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого socket у хвилинах. Зберігайте це значення більшим або рівним `gateway.channelHealthCheckMinutes`. За замовчуванням: `30`. -- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків монітором стану на канал/обліковий запис за ковзну годину. За замовчуванням: `10`. -- `channels..healthMonitor.enabled`: відмова від перезапусків монітором стану для окремого каналу, зберігаючи глобальний монітор увімкненим. -- `channels..accounts..healthMonitor.enabled`: перевизначення на рівні облікового запису для каналів з кількома обліковими записами. Якщо задано, має пріоритет над перевизначенням на рівні каналу. +- **Примітка щодо Docker**: типовий bind `loopback` слухає на `127.0.0.1` усередині контейнера. Із bridge-мережею Docker (`-p 18789:18789`) трафік надходить через `eth0`, тому gateway недоступний. Використовуйте `--network host` або задайте `bind: "lan"` (чи `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах. +- **Auth**: типово обов’язкова. Bind не на loopback потребують auth gateway. На практиці це означає спільний token/password або reverse proxy з урахуванням ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер onboarding типово генерує token. +- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (зокрема через SecretRef), явно задайте `gateway.auth.mode` як `token` або `password`. Запуск і процеси встановлення/відновлення сервісу завершуються помилкою, коли налаштовано обидва значення, а режим не задано. +- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних налаштувань local loopback; цей варіант навмисно не пропонується в підказках onboarding. +- `gateway.auth.mode: "trusted-proxy"`: делегує auth reverse proxy з урахуванням ідентичності та довіряє заголовкам ідентичності від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; reverse proxy loopback на тому ж хості не задовольняють auth trusted-proxy. +- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю auth за заголовками Tailscale; натомість вони дотримуються звичайного режиму HTTP auth gateway. Цей безтокенний потік передбачає, що хост gateway є довіреним. Типове значення — `true`, коли `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб auth. Застосовується для кожної IP-адреси клієнта і для кожної області auth окремо (shared-secret і device-token відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`. + - В асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом невдачі. Тому одночасні хибні спроби від того самого клієнта можуть спровокувати обмеження вже на другому запиті, замість того щоб обидві одночасно пройти як звичайні невідповідності. + - `gateway.auth.rateLimit.exemptLoopback` типово має значення `true`; установіть `false`, якщо свідомо хочете, щоб трафік localhost теж підлягав rate limit (для тестових налаштувань або суворих proxy-розгортань). +- Спроби WS auth із походження браузера завжди обмежуються, і виняток для loopback вимкнено (додатковий рівень захисту від brute force localhost із браузера). +- На loopback ці блокування для браузерних походжень ізолюються за нормалізованим значенням `Origin`, + тож повторні невдачі з одного походження localhost не блокують автоматично + інше походження. +- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічно, потребує auth). +- `controlUi.allowedOrigins`: явний список дозволених browser-origin для WebSocket-підключень до Gateway. Обов’язковий, коли очікуються браузерні клієнти з не-loopback походжень. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, який вмикає резервну логіку походження через заголовок Host для розгортань, що навмисно покладаються на політику походження Host-header. +- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` значення `remote.url` має бути `ws://` або `wss://`. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: клієнтське аварійне перевизначення через + змінну середовища процесу, яке дозволяє незашифрований `ws://` до довірених IP + приватної мережі; типово незашифрований трафік і далі дозволено лише для loopback. Еквівалента в + `openclaw.json` немає, а конфігурація приватної мережі браузера, така як + `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на клієнтів + WebSocket Gateway. +- `gateway.remote.token` / `.password`: це поля облікових даних віддаленого клієнта. Вони самі собою не налаштовують auth gateway. +- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL зовнішнього APNs relay, який використовується офіційними/TestFlight збірками iOS після того, як вони публікують реєстрації relay-backed у gateway. Цей URL має збігатися з URL relay, скомпільованим у збірку iOS. +- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від gateway до relay у мілісекундах. Типове значення: `10000`. +- Реєстрації relay-backed делегуються конкретній ідентичності gateway. Спарений застосунок iOS отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію relay і пересилає до gateway дозвіл на надсилання в межах цієї реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію. +- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові env-перевизначення для наведеної вище конфігурації relay. +- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний варіант лише для розробки для loopback HTTP URL relay. У production URL relay мають залишатися на HTTPS. +- `gateway.channelHealthCheckMinutes`: інтервал монітора стану каналу в хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски монітора стану. Типове значення: `5`. +- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого socket у хвилинах. Тримайте це значення більшим або рівним `gateway.channelHealthCheckMinutes`. Типове значення: `30`. +- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків монітора стану на канал/обліковий запис протягом ковзної години. Типове значення: `10`. +- `channels..healthMonitor.enabled`: вимкнення на рівні каналу для перезапусків монітора стану за збереження глобального монітора увімкненим. +- `channels..accounts..healthMonitor.enabled`: перевизначення на рівні облікового запису для каналів із кількома обліковими записами. Якщо задано, воно має пріоритет над перевизначенням на рівні каналу. - Локальні шляхи виклику gateway можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано. -- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв’язано, розв’язання завершується за принципом fail closed (без маскування резервним віддаленим варіантом). -- `trustedProxies`: IP reverse proxy, які завершують TLS або додають заголовки forwarded-client. Додавайте лише proxy, які ви контролюєте. Записи loopback усе ще коректні для налаштувань proxy/локального виявлення на тому самому хості (наприклад, Tailscale Serve або локальний reverse proxy), але вони **не** роблять loopback-запити придатними для `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. За замовчуванням `false` для поведінки fail closed. -- `gateway.nodes.pairing.autoApproveCidrs`: необов’язковий список дозволу CIDR/IP для автоматичного схвалення першого pairing пристроїв node без запитаних областей доступу. Якщо не задано, вимкнено. Це не схвалює автоматично pairing operator/browser/Control UI/WebChat, а також не схвалює автоматично оновлення ролей, областей доступу, метаданих або публічних ключів. -- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування дозволу/заборони для оголошених команд node після pairing та оцінки списку дозволу. -- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює стандартний список заборон). -- `gateway.tools.allow`: прибрати назви інструментів зі стандартного HTTP-списку заборон. +- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не вдається розв’язати, розв’язання завершується в режимі fail-closed (без маскування резервним віддаленим шляхом). +- `trustedProxies`: IP-адреси reverse proxy, які завершують TLS або додають заголовки пересланого клієнта. Вказуйте лише proxy, які ви контролюєте. Записи loopback і далі є дійсними для налаштувань proxy на тому ж хості / локального виявлення (наприклад, Tailscale Serve або локальний reverse proxy), але вони **не** роблять запити loopback придатними для `gateway.auth.mode: "trusted-proxy"`. +- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. Типове значення `false` для поведінки fail-closed. +- `gateway.nodes.pairing.autoApproveCidrs`: необов’язковий список дозволених CIDR/IP для автоматичного схвалення першого pairing пристрою Node без запитаних областей доступу. Якщо не задано, вимкнено. Це не схвалює автоматично pairing operator/browser/Control UI/WebChat, а також не схвалює автоматично оновлення ролі, області доступу, метаданих або відкритого ключа. +- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування списків дозволу/заборони для оголошених команд Node після pairing та обчислення списку дозволу. +- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список заборон). +- `gateway.tools.allow`: вилучає назви інструментів із типового списку заборон HTTP. -### Кінцеві точки, сумісні з OpenAI +### OpenAI-сумісні кінцеві точки -- Chat Completions: вимкнено за замовчуванням. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`. +- Chat Completions: типово вимкнено. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`. - Responses API: `gateway.http.endpoints.responses.enabled`. - Посилене захист URL-входів Responses: - `gateway.http.endpoints.responses.maxUrlParts` - `gateway.http.endpoints.responses.files.urlAllowlist` - `gateway.http.endpoints.responses.images.urlAllowlist` Порожні списки дозволу трактуються як незадані; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false` - та/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL. + і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання за URL. - Необов’язковий заголовок посиленого захисту відповіді: - - `gateway.http.securityHeaders.strictTransportSecurity` (установлюйте лише для HTTPS-origin, які ви контролюєте; див. [Auth через Trusted Proxy](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts)) + - `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS-походжень, які ви контролюєте; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts)) ### Ізоляція кількох екземплярів @@ -440,7 +447,7 @@ openclaw gateway --port 19001 Зручні прапорці: `--dev` (використовує `~/.openclaw-dev` + порт `19001`), `--profile ` (використовує `~/.openclaw-`). -Див. [Кілька Gateway](/uk/gateway/multiple-gateways). +Див. [Multiple Gateways](/uk/gateway/multiple-gateways). ### `gateway.tls` @@ -458,11 +465,11 @@ openclaw gateway --port 19001 } ``` -- `enabled`: вмикає завершення TLS на слухачі gateway (HTTPS/WSS) (за замовчуванням: `false`). +- `enabled`: вмикає завершення TLS на слухачі gateway (HTTPS/WSS) (типово: `false`). - `autoGenerate`: автоматично генерує локальну самопідписану пару сертифікат/ключ, якщо явні файли не налаштовано; лише для local/dev. -- `certPath`: шлях у файловій системі до файла TLS-сертифіката. -- `keyPath`: шлях у файловій системі до файла приватного ключа TLS; обмежуйте доступ правами. -- `caPath`: необов’язковий шлях до bundle CA для перевірки клієнта або користувацьких ланцюжків довіри. +- `certPath`: шлях у файловій системі до файлу TLS-сертифіката. +- `keyPath`: шлях у файловій системі до файлу приватного TLS-ключа; обмежте дозволи доступу. +- `caPath`: необов’язковий шлях до пакета CA для перевірки клієнта або власних ланцюжків довіри. ### `gateway.reload` @@ -478,13 +485,13 @@ openclaw gateway --port 19001 } ``` -- `mode`: керує тим, як редагування конфігурації застосовуються під час виконання. - - `"off"`: ігнорувати живі зміни; зміни потребують явного перезапуску. - - `"restart"`: завжди перезапускати процес gateway після зміни конфігурації. - - `"hot"`: застосовувати зміни в межах процесу без перезапуску. - - `"hybrid"` (за замовчуванням): спочатку пробувати hot reload; за потреби переходити до перезапуску. +- `mode`: керує тим, як зміни конфігурації застосовуються під час виконання. + - `"off"`: ігнорувати зміни наживо; зміни потребують явного перезапуску. + - `"restart"`: завжди перезапускати процес gateway при зміні конфігурації. + - `"hot"`: застосовувати зміни в процесі без перезапуску. + - `"hybrid"` (типово): спочатку пробувати hot reload; за потреби повертатися до перезапуску. - `debounceMs`: вікно debounce у мс перед застосуванням змін конфігурації (невід’ємне ціле число). -- `deferralTimeoutMs`: максимальний час у мс очікування завершення поточних операцій перед примусовим перезапуском (за замовчуванням: `300000` = 5 хвилин). +- `deferralTimeoutMs`: максимальний час очікування в мс для операцій у процесі перед примусовим перезапуском (типово: `300000` = 5 хвилин). --- @@ -522,46 +529,46 @@ openclaw gateway --port 19001 ``` Auth: `Authorization: Bearer ` або `x-openclaw-token: `. -Hook-токени в query string відхиляються. +Токени hook у рядку запиту відхиляються. Примітки щодо валідації та безпеки: -- `hooks.enabled=true` вимагає непорожній `hooks.token`. +- `hooks.enabled=true` потребує непорожнього `hooks.token`. - `hooks.token` має **відрізнятися** від `gateway.auth.token`; повторне використання токена Gateway відхиляється. - `hooks.path` не може бути `/`; використовуйте окремий підшлях, наприклад `/hooks`. - Якщо `hooks.allowRequestSessionKey=true`, обмежте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`). -- Якщо mapping або preset використовує шаблонний `sessionKey`, установіть `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping не потребують цього явного ввімкнення. +- Якщо mapping або preset використовує шаблонізований `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping цього opt-in не потребують. **Кінцеві точки:** - `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }` - `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }` - - `sessionKey` з тіла запиту приймається лише тоді, коли `hooks.allowRequestSessionKey=true` (за замовчуванням: `false`). + - `sessionKey` з тіла запиту приймається лише тоді, коли `hooks.allowRequestSessionKey=true` (типово: `false`). - `POST /hooks/` → розв’язується через `hooks.mappings` - Значення `sessionKey` у mapping, згенеровані шаблоном, вважаються зовнішньо наданими й також потребують `hooks.allowRequestSessionKey=true`. - + -- `match.path` відповідає підшляху після `/hooks` (наприклад, `/hooks/gmail` → `gmail`). -- `match.source` відповідає полю payload для загальних шляхів. +- `match.path` зіставляється з підшляхом після `/hooks` (наприклад, `/hooks/gmail` → `gmail`). +- `match.source` зіставляється з полем payload для загальних шляхів. - Шаблони на кшталт `{{messages[0].subject}}` читають дані з payload. -- `transform` може вказувати на модуль JS/TS, який повертає дію hook. - - `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та traversal відхиляються). -- `agentId` маршрутизує до конкретного агента; невідомі ID повертаються до значення за замовчуванням. -- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або без значення = дозволити всі, `[]` = заборонити всі). -- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків hook agent без явного `sessionKey`. -- `allowRequestSessionKey`: дозволяє викликачам `/hooks/agent` і ключам сесії в mapping, керованим шаблонами, задавати `sessionKey` (за замовчуванням: `false`). -- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-який mapping або preset використовує шаблонний `sessionKey`. -- `deliver: true` надсилає фінальну відповідь у канал; `channel` за замовчуванням — `last`. -- `model` перевизначає LLM для цього запуску hook (має бути дозволено, якщо задано каталог моделей). +- `transform` може вказувати на JS/TS-модуль, який повертає дію hook. + - `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи й traversal відхиляються). +- `agentId` маршрутизує до конкретного агента; невідомі ID повертаються до типового. +- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або не задано = дозволити всі, `[]` = заборонити всі). +- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків агента з hook без явного `sessionKey`. +- `allowRequestSessionKey`: дозволяє викликачам `/hooks/agent` і session key mapping, керованим шаблоном, задавати `sessionKey` (типово: `false`). +- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Стає обов’язковим, коли будь-який mapping або preset використовує шаблонізований `sessionKey`. +- `deliver: true` надсилає фінальну відповідь у канал; типове значення `channel` — `last`. +- `model` перевизначає LLM для цього запуску hook (має бути дозволена, якщо задано каталог моделей). -### Інтеграція з Gmail +### Інтеграція Gmail - Вбудований preset Gmail використовує `sessionKey: "hook:gmail:{{messages[0].id}}"`. -- Якщо ви зберігаєте цю маршрутизацію для кожного повідомлення, установіть `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`. -- Якщо вам потрібен `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість шаблонного значення за замовчуванням. +- Якщо ви зберігаєте цю маршрутизацію для кожного повідомлення, задайте `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`. +- Якщо вам потрібне `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість типового шаблонізованого значення. ```json5 { @@ -589,7 +596,7 @@ Hook-токени в query string відхиляються. --- -## Хост canvas +## Хост Canvas ```json5 { @@ -601,18 +608,18 @@ Hook-токени в query string відхиляються. } ``` -- Обслуговує редаговані агентом HTML/CSS/JS і A2UI через HTTP на порту Gateway: +- Обслуговує редаговані агентом HTML/CSS/JS та A2UI через HTTP на порту Gateway: - `http://:/__openclaw__/canvas/` - `http://:/__openclaw__/a2ui/` -- Лише локально: використовуйте `gateway.bind: "loopback"` (за замовчуванням). -- Bind не до loopback: маршрути canvas потребують auth Gateway (token/password/trusted-proxy), як і інші HTTP-поверхні Gateway. -- Node WebView зазвичай не надсилають заголовки auth; після pairing і підключення node Gateway рекламує URL можливостей з областю дії node для доступу до canvas/A2UI. -- URL можливостей прив’язані до активної WS-сесії node і швидко спливають. Резервний варіант на основі IP не використовується. -- Впроваджує клієнт live reload у HTML, що обслуговується. -- Автоматично створює початковий `index.html`, якщо каталог порожній. -- Також обслуговує A2UI на `/__openclaw__/a2ui/`. +- Лише локально: зберігайте `gateway.bind: "loopback"` (типово). +- Bind не на loopback: маршрути canvas потребують auth Gateway (token/password/trusted-proxy), як і інші HTTP-поверхні Gateway. +- Node WebView зазвичай не надсилають заголовки auth; після pairing і підключення вузла Gateway рекламує URL можливостей у межах вузла для доступу до canvas/A2UI. +- URL можливостей прив’язані до активної WS-сесії вузла і швидко спливають. Резервний варіант на основі IP не використовується. +- Впроваджує клієнт live-reload у HTML, що обслуговується. +- Автоматично створює стартовий `index.html`, якщо каталог порожній. +- Також обслуговує A2UI за адресою `/__openclaw__/a2ui/`. - Зміни потребують перезапуску gateway. -- Вимкніть live reload для великих каталогів або в разі помилок `EMFILE`. +- Вимкніть live reload для великих каталогів або при помилках `EMFILE`. --- @@ -630,11 +637,11 @@ Hook-токени в query string відхиляються. } ``` -- `minimal` (за замовчуванням): не включає `cliPath` + `sshPort` із TXT-записів. +- `minimal` (типово): не включає `cliPath` + `sshPort` до TXT-записів. - `full`: включає `cliPath` + `sshPort`. -- Ім’я хоста за замовчуванням — `openclaw`. Перевизначте через `OPENCLAW_MDNS_HOSTNAME`. +- Ім’я хоста типово `openclaw`. Перевизначається через `OPENCLAW_MDNS_HOSTNAME`. -### Глобальне виявлення (DNS-SD) +### Wide-area (DNS-SD) ```json5 { @@ -644,7 +651,7 @@ Hook-токени в query string відхиляються. } ``` -Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднайте це із DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS. +Записує унікаст-зону DNS-SD до `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS. Налаштування: `openclaw dns setup --apply`. @@ -652,7 +659,7 @@ Hook-токени в query string відхиляються. ## Середовище -### `env` (вбудовані змінні середовища) +### `env` (вбудовані env-змінні) ```json5 { @@ -669,14 +676,14 @@ Hook-токени в query string відхиляються. } ``` -- Вбудовані змінні середовища застосовуються лише тоді, коли у змінних середовища процесу немає цього ключа. +- Вбудовані env-змінні застосовуються лише тоді, коли в середовищі процесу відсутній ключ. - Файли `.env`: `.env` поточного робочого каталогу + `~/.openclaw/.env` (жоден із них не перевизначає наявні змінні). -- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої login shell. -- Див. [Середовище](/uk/help/environment) для повного порядку пріоритетів. +- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої оболонки входу. +- Повний порядок пріоритету див. у [Environment](/uk/help/environment). -### Підстановка змінних середовища +### Підстановка env-змінних -Посилайтеся на змінні середовища в будь-якому рядку конфігурації за допомогою `${VAR_NAME}`: +Посилайтеся на env-змінні в будь-якому рядку конфігурації через `${VAR_NAME}`: ```json5 { @@ -688,18 +695,18 @@ Hook-токени в query string відхиляються. - Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`. - Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації. -- Екрануйте через `$${VAR}` для буквального `${VAR}`. +- Екрануйте через `$${VAR}`, щоб отримати буквальний `${VAR}`. - Працює з `$include`. --- ## Секрети -Посилання на секрети є адитивними: значення у відкритому тексті теж продовжують працювати. +Посилання на секрети є додатковими: значення у відкритому тексті й далі працюють. ### `SecretRef` -Використовуйте одну форму об’єкта: +Використовуйте один формат об’єкта: ```json5 { source: "env" | "file" | "exec", provider: "default", id: "..." } @@ -708,16 +715,16 @@ Hook-токени в query string відхиляються. Валідація: - шаблон `provider`: `^[a-z][a-z0-9_-]{0,63}$` -- шаблон `id` для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$` -- `id` для `source: "file"`: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`) -- шаблон `id` для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` -- `id` для `source: "exec"` не повинні містити сегменти шляху `.` або `..`, розділені слешами (наприклад, `a/../b` відхиляється) +- шаблон id для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$` +- `source: "file"` id: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`) +- шаблон id для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` +- id для `source: "exec"` не повинні містити сегменти шляху `.` або `..`, розділені `/` (наприклад, `a/../b` відхиляється) ### Підтримувана поверхня облікових даних -- Канонічна матриця: [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface) +- Канонічна матриця: [SecretRef Credential Surface](/uk/reference/secretref-credential-surface) - `secrets apply` націлюється на підтримувані шляхи облікових даних у `openclaw.json`. -- Посилання в `auth-profiles.json` включаються в runtime-розв’язання та покриття аудиту. +- Посилання в `auth-profiles.json` включено до runtime-розв’язання та покриття аудиту. ### Конфігурація провайдерів секретів @@ -750,13 +757,13 @@ Hook-токени в query string відхиляються. Примітки: - Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue значення `id` має бути `"value"`). -- Шляхи провайдерів file і exec працюють за принципом fail closed, коли перевірка ACL Windows недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити. -- Провайдер `exec` вимагає абсолютний шлях `command` і використовує payload протоколу через stdin/stdout. -- За замовчуванням шляхи команд-символічних посилань відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи symlink із перевіркою розв’язаного цільового шляху. +- Шляхи провайдерів file і exec завершуються в режимі fail-closed, коли перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які не можна перевірити. +- Провайдер `exec` потребує абсолютного шляху `command` і використовує payload протоколу через stdin/stdout. +- Типово шляхи команд-символічних посилань відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи-символічні посилання з перевіркою розв’язаного цільового шляху. - Якщо налаштовано `trustedDirs`, перевірка довірених каталогів застосовується до розв’язаного цільового шляху. -- Середовище дочірнього процесу `exec` за замовчуванням мінімальне; передавайте потрібні змінні явно через `passEnv`. +- Дочірнє середовище `exec` типово мінімальне; передавайте потрібні змінні явно через `passEnv`. - Посилання на секрети розв’язуються під час активації в snapshot у пам’яті, після чого шляхи запитів читають лише цей snapshot. -- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на увімкнених поверхнях спричиняють збій запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою. +- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на ввімкнених поверхнях призводять до помилки запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою. --- @@ -778,13 +785,13 @@ Hook-токени в query string відхиляються. } ``` -- Профілі для окремих агентів зберігаються в `/auth-profiles.json`. +- Профілі для кожного агента зберігаються в `/auth-profiles.json`. - `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних. -- Профілі в режимі OAuth (`auth.profiles..mode = "oauth"`) не підтримують облікові дані профілів auth на основі SecretRef. +- Профілі режиму OAuth (`auth.profiles..mode = "oauth"`) не підтримують облікові дані auth-profile на основі SecretRef. - Статичні runtime-облікові дані надходять із розв’язаних snapshot у пам’яті; застарілі статичні записи `auth.json` очищуються після виявлення. -- Застарілий імпорт OAuth відбувається з `~/.openclaw/credentials/oauth.json`. +- Застарілі імпорти OAuth надходять із `~/.openclaw/credentials/oauth.json`. - Див. [OAuth](/uk/concepts/oauth). -- Поведінка runtime для секретів і інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets). +- Runtime-поведінка секретів та інструменти `audit/configure/apply`: [Secrets Management](/uk/gateway/secrets). ### `auth.cooldowns` @@ -806,15 +813,20 @@ Hook-токени в query string відхиляються. } ``` -- `billingBackoffHours`: базовий backoff у годинах, коли профіль зазнає збою через справжні помилки billing/недостатнього кредиту (за замовчуванням: `5`). Явний текст billing усе ще може потрапити сюди навіть для відповідей `401`/`403`, але зіставлювачі тексту, специфічні для провайдера, залишаються обмеженими провайдером, якому вони належать (наприклад, OpenRouter `Key limit exceeded`). Повторно придатні помилки використання `402` у вікні usage-window або повідомлення про ліміт витрат organization/workspace натомість залишаються в шляху `rate_limit`. -- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин backoff billing для кожного провайдера. -- `billingMaxHours`: межа в годинах для експоненційного зростання backoff billing (за замовчуванням: `24`). -- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для збоїв `auth_permanent` з високою впевненістю (за замовчуванням: `10`). -- `authPermanentMaxMinutes`: межа в хвилинах для зростання backoff `auth_permanent` (за замовчуванням: `60`). -- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників backoff (за замовчуванням: `24`). -- `overloadedProfileRotations`: максимальна кількість ротацій auth-профілю в межах одного провайдера для помилок перевантаження перед перемиканням на резервну модель (за замовчуванням: `1`). Сюди потрапляють форми «провайдер зайнятий», як-от `ModelNotReadyException`. -- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (за замовчуванням: `0`). -- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-профілю в межах одного провайдера для помилок rate limit перед перемиканням на резервну модель (за замовчуванням: `1`). Цей кошик rate limit включає текст у формі провайдера, наприклад `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`. +- `billingBackoffHours`: базовий backoff у годинах, коли профіль зазнає збою через справжні помилки білінгу/недостатнього кредиту (типово: `5`). Явний текст про білінг може + і далі потрапляти сюди навіть у відповідях `401`/`403`, але зіставлення + тексту, специфічні для провайдера, залишаються в межах відповідного провайдера + (наприклад OpenRouter `Key limit exceeded`). Повторювані HTTP `402` повідомлення про usage-window або + ліміт витрат organization/workspace залишаються в гілці `rate_limit` + натомість. +- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин backoff для білінгу для кожного провайдера. +- `billingMaxHours`: обмеження в годинах для експоненційного зростання backoff білінгу (типово: `24`). +- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для збоїв `auth_permanent` з високою впевненістю (типово: `10`). +- `authPermanentMaxMinutes`: обмеження в хвилинах для зростання backoff `auth_permanent` (типово: `60`). +- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників backoff (типово: `24`). +- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile в межах одного провайдера для помилок перевантаження перед перемиканням на резервну модель (типово: `1`). Форми зайнятості провайдера, такі як `ModelNotReadyException`, потрапляють сюди. +- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово: `0`). +- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile в межах одного провайдера для помилок rate limit перед перемиканням на резервну модель (типово: `1`). Цей кошик rate limit включає текстові форми провайдерів, такі як `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`. --- @@ -833,10 +845,10 @@ Hook-токени в query string відхиляються. } ``` -- Файл журналу за замовчуванням: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. +- Типовий файл журналу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. - Установіть `logging.file` для стабільного шляху. -- `consoleLevel` підвищується до `debug`, коли використовується `--verbose`. -- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого записи пригнічуються (додатне ціле число; за замовчуванням: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію журналів. +- `consoleLevel` підвищується до `debug` із `--verbose`. +- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого записи пригнічуються (додатне ціле число; типово: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію журналів. --- @@ -881,22 +893,22 @@ Hook-токени в query string відхиляються. } ``` -- `enabled`: головний перемикач для виводу інструментування (за замовчуванням: `true`). -- `flags`: масив рядків-прапорців, які вмикають цільовий вивід журналу (підтримує шаблони з символами узагальнення, як-от `"telegram.*"` або `"*"`). -- `stuckSessionWarnMs`: поріг віку в мс для виведення попереджень про завислу сесію, поки сесія залишається у стані обробки. -- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (за замовчуванням: `false`). +- `enabled`: головний перемикач для виводу інструментування (типово: `true`). +- `flags`: масив рядків-прапорців, що вмикають цільовий вивід журналу (підтримує wildcard, як-от `"telegram.*"` або `"*"`). +- `stuckSessionWarnMs`: поріг віку в мс для виведення попереджень про завислі сесії, доки сесія залишається у стані обробки. +- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`). - `otel.endpoint`: URL колектора для експорту OTel. -- `otel.protocol`: `"http/protobuf"` (за замовчуванням) або `"grpc"`. -- `otel.headers`: додаткові метадані-заголовки HTTP/gRPC, що надсилаються із запитами експорту OTel. +- `otel.protocol`: `"http/protobuf"` (типово) або `"grpc"`. +- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel. - `otel.serviceName`: назва сервісу для атрибутів ресурсу. -- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт trace, metrics або logs. -- `otel.sampleRate`: частота семплювання trace `0`–`1`. +- `otel.traces` / `otel.metrics` / `otel.logs`: вмикають експорт trace, metrics або log. +- `otel.sampleRate`: частота семплування trace `0`–`1`. - `otel.flushIntervalMs`: інтервал періодичного скидання телеметрії в мс. -- `otel.captureContent`: явне ввімкнення захоплення сирого вмісту для атрибутів span OTEL. За замовчуванням вимкнено. Булеве значення `true` захоплює вміст повідомлень/інструментів, що не є системними; форма об’єкта дає змогу явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`. -- `OPENCLAW_OTEL_PRELOADED=1`: перемикач середовища для хостів, які вже зареєстрували глобальний SDK OpenTelemetry. Тоді OpenClaw пропускає запуск/завершення SDK, що належить Plugin, але зберігає активними діагностичні прослуховувачі. -- `cacheTrace.enabled`: журналювати snapshot cache trace для вбудованих запусків (за замовчуванням: `false`). -- `cacheTrace.filePath`: вихідний шлях для JSONL cache trace (за замовчуванням: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід cache trace (усі за замовчуванням: `true`). +- `otel.captureContent`: opt-in захоплення сирого вмісту для атрибутів span OTEL. Типово вимкнено. Булеве значення `true` захоплює вміст повідомлень/інструментів, окрім system; форма об’єкта дозволяє явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`. +- `OPENCLAW_OTEL_PRELOADED=1`: перемикач середовища для хостів, які вже зареєстрували глобальний SDK OpenTelemetry. Тоді OpenClaw пропускає запуск/завершення SDK, що належить Plugin, зберігаючи активними слухачі діагностики. +- `cacheTrace.enabled`: журналювати snapshot cache trace для вбудованих запусків (типово: `false`). +- `cacheTrace.filePath`: шлях виводу для JSONL cache trace (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається до виводу cache trace (усі типово: `true`). --- @@ -919,11 +931,11 @@ Hook-токени в query string відхиляються. ``` - `channel`: канал релізів для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`. -- `checkOnStart`: перевіряти оновлення npm під час запуску gateway (за замовчуванням: `true`). -- `auto.enabled`: увімкнути фонове автооновлення для пакетних встановлень (за замовчуванням: `false`). -- `auto.stableDelayHours`: мінімальна затримка в годинах перед автозастосуванням stable-каналу (за замовчуванням: `6`; максимум: `168`). -- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable-каналу в годинах (за замовчуванням: `12`; максимум: `168`). -- `auto.betaCheckIntervalHours`: як часто виконуються перевірки beta-каналу, у годинах (за замовчуванням: `1`; максимум: `24`). +- `checkOnStart`: перевіряти оновлення npm під час запуску gateway (типово: `true`). +- `auto.enabled`: увімкнути фонове автооновлення для встановлень пакетів (типово: `false`). +- `auto.stableDelayHours`: мінімальна затримка в годинах перед автозастосуванням для каналу stable (типово: `6`; макс.: `168`). +- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable у годинах (типово: `12`; макс.: `168`). +- `auto.betaCheckIntervalHours`: як часто виконуються перевірки для каналу beta, у годинах (типово: `1`; макс.: `24`). --- @@ -956,21 +968,21 @@ Hook-токени в query string відхиляються. } ``` -- `enabled`: глобальний feature gate ACP (за замовчуванням: `false`). -- `dispatch.enabled`: незалежний gate для диспетчеризації ходів сесії ACP (за замовчуванням: `true`). Установіть `false`, щоб залишити команди ACP доступними, але заблокувати виконання. -- `backend`: id runtime backend ACP за замовчуванням (має відповідати зареєстрованому ACP runtime Plugin). -- `defaultAgent`: резервний id цільового агента ACP, коли spawn не вказує явну ціль. -- `allowedAgents`: список дозволу id агентів, дозволених для runtime-сесій ACP; порожній список означає відсутність додаткових обмежень. +- `enabled`: глобальний feature gate ACP (типово: `false`). +- `dispatch.enabled`: незалежний gate для dispatch ходів сесії ACP (типово: `true`). Установіть `false`, щоб залишити команди ACP доступними, але заблокувати виконання. +- `backend`: id типового backend runtime ACP (має збігатися із зареєстрованим runtime Plugin ACP). +- `defaultAgent`: резервний id цільового агента ACP, коли spawn не задає явну ціль. +- `allowedAgents`: список дозволу id агентів, дозволених для runtime-сесій ACP; порожнє значення означає відсутність додаткових обмежень. - `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP. -- `stream.coalesceIdleMs`: вікно скидання простою в мс для потокового тексту. -- `stream.maxChunkChars`: максимальний розмір чанка перед розбиттям проєкції потокового блоку. -- `stream.repeatSuppression`: пригнічувати повторювані рядки стану/інструментів у межах одного ходу (за замовчуванням: `true`). -- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до кінцевих подій ходу. -- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (за замовчуванням: `"paragraph"`). -- `stream.maxOutputChars`: максимальна кількість символів виводу помічника, що проєктується за один хід ACP. -- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків стану/оновлення ACP. -- `stream.tagVisibility`: запис назв тегів із булевими перевизначеннями видимості для потокових подій. -- `runtime.ttlMinutes`: TTL простою в хвилинах для worker сесій ACP до моменту, коли їх можна очищати. +- `stream.coalesceIdleMs`: вікно idle flush у мс для потокового тексту. +- `stream.maxChunkChars`: максимальний розмір чанка перед розбиттям проєкції потокового блока. +- `stream.repeatSuppression`: пригнічує повторювані рядки статусу/інструментів на кожному ході (типово: `true`). +- `stream.deliveryMode`: `"live"` інкрементально транслює; `"final_only"` буферизує до термінальних подій ходу. +- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типово: `"paragraph"`). +- `stream.maxOutputChars`: максимальна кількість символів виводу помічника, проєктованих на один хід ACP. +- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлень ACP. +- `stream.tagVisibility`: запис назв тегів у булеві перевизначення видимості для потокових подій. +- `runtime.ttlMinutes`: idle TTL у хвилинах для воркерів сесій ACP до можливого очищення. - `runtime.installCommand`: необов’язкова команда встановлення, яку слід виконати під час bootstrap середовища runtime ACP. --- @@ -987,11 +999,11 @@ Hook-токени в query string відхиляються. } ``` -- `cli.banner.taglineMode` керує стилем слогана банера: - - `"random"` (за замовчуванням): ротаційні кумедні/сезонні слогани. - - `"default"`: фіксований нейтральний слоган (`Усі ваші чати, один OpenClaw.`). - - `"off"`: без тексту слогана (назва/версія банера все одно показуються). -- Щоб приховати весь банер (а не лише слогани), установіть env `OPENCLAW_HIDE_BANNER=1`. +- `cli.banner.taglineMode` керує стилем підрядка банера: + - `"random"` (типово): ротаційні кумедні/сезонні підрядки. + - `"default"`: фіксований нейтральний підрядок (`Усі ваші чати — в одному OpenClaw.`). + - `"off"`: без тексту підрядка (назва/версія банера все одно показуються). +- Щоб приховати весь банер (а не лише підрядки), задайте env `OPENCLAW_HIDE_BANNER=1`. --- @@ -1015,13 +1027,13 @@ Hook-токени в query string відхиляються. ## Ідентичність -Див. поля ідентичності `agents.list` у розділі [Значення агента за замовчуванням](/uk/gateway/config-agents#agent-defaults). +Див. поля ідентичності `agents.list` у розділі [Agent defaults](/uk/gateway/config-agents#agent-defaults). --- -## Bridge (застарілий, вилучений) +## Bridge (застарілий, видалений) -Поточні збірки більше не містять TCP bridge. Node підключаються через WebSocket Gateway. Ключі `bridge.*` більше не входять до схеми конфігурації (валідація завершується помилкою, доки їх не буде вилучено; `openclaw doctor --fix` може прибрати невідомі ключі). +Поточні збірки більше не включають TCP bridge. Nodes під’єднуються через WebSocket Gateway. Ключі `bridge.*` більше не є частиною схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі). @@ -1061,11 +1073,11 @@ Hook-токени в query string відхиляються. } ``` -- `sessionRetention`: як довго зберігати завершені ізольовані сесії запусків cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів cron. За замовчуванням: `24h`; установіть `false`, щоб вимкнути. -- `runLog.maxBytes`: максимальний розмір файла журналу на один запуск (`cron/runs/.jsonl`) перед очищенням. За замовчуванням: `2_000_000` байтів. -- `runLog.keepLines`: кількість найновіших рядків, що зберігаються після спрацьовування очищення журналу запусків. За замовчуванням: `2000`. -- `webhookToken`: bearer token, який використовується для POST-доставки Webhook cron (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається. -- `webhook`: застарілий резервний URL Webhook (http/https), який використовується лише для збережених завдань, у яких і далі встановлено `notify: true`. +- `sessionRetention`: як довго зберігати завершені ізольовані сесії запуску Cron перед видаленням із `sessions.json`. Також керує очищенням архівованих видалених transcript Cron. Типове значення: `24h`; установіть `false`, щоб вимкнути. +- `runLog.maxBytes`: максимальний розмір файла журналу одного запуску (`cron/runs/.jsonl`) перед обрізанням. Типово: `2_000_000` байтів. +- `runLog.keepLines`: кількість найновіших рядків, що зберігаються при спрацьовуванні обрізання журналу запуску. Типово: `2000`. +- `webhookToken`: bearer token, який використовується для POST-доставки Webhook Cron (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається. +- `webhook`: застарілий резервний URL Webhook (http/https), що використовується лише для збережених завдань, які все ще мають `notify: true`. ### `cron.retry` @@ -1081,11 +1093,11 @@ Hook-токени в query string відхиляються. } ``` -- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань за тимчасових помилок (за замовчуванням: `3`; діапазон: `0`–`10`). -- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (за замовчуванням: `[30000, 60000, 300000]`; 1–10 записів). -- `retryOn`: типи помилок, які запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не вказуйте, щоб повторювати всі тимчасові типи. +- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (типово: `3`; діапазон: `0`–`10`). +- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 1–10 записів). +- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не задавайте, щоб повторювати всі тимчасові типи. -Застосовується лише до одноразових cron-завдань. Повторювані завдання використовують окрему обробку збоїв. +Застосовується лише до одноразових завдань Cron. Періодичні завдання використовують окрему обробку збоїв. ### `cron.failureAlert` @@ -1103,11 +1115,11 @@ Hook-токени в query string відхиляються. } ``` -- `enabled`: увімкнути сповіщення про збої для cron-завдань (за замовчуванням: `false`). -- `after`: кількість послідовних збоїв до спрацьовування сповіщення (додатне ціле число, мінімум: `1`). +- `enabled`: увімкнути сповіщення про збої для завдань Cron (типово: `false`). +- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мін.: `1`). - `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число). - `mode`: режим доставки — `"announce"` надсилає через повідомлення каналу; `"webhook"` надсилає POST на налаштований Webhook. -- `accountId`: необов’язковий id облікового запису або каналу для обмеження доставки сповіщення. +- `accountId`: необов’язковий id облікового запису або каналу для обмеження доставки сповіщень. ### `cron.failureDestination` @@ -1124,49 +1136,49 @@ Hook-токени в query string відхиляються. } ``` -- Цільове місце за замовчуванням для сповіщень про збої cron для всіх завдань. -- `mode`: `"announce"` або `"webhook"`; за замовчуванням `"announce"`, коли є достатньо цільових даних. -- `channel`: перевизначення каналу для доставки announce. `"last"` повторно використовує останній відомий канал доставки. -- `to`: явна ціль announce або URL Webhook. Обов’язково для режиму webhook. +- Типове місце призначення для сповіщень про збої Cron для всіх завдань. +- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли є достатньо цільових даних. +- `channel`: перевизначення каналу для доставки через announce. `"last"` повторно використовує останній відомий канал доставки. +- `to`: явна ціль announce або URL Webhook. Обов’язкове для режиму webhook. - `accountId`: необов’язкове перевизначення облікового запису для доставки. -- `delivery.failureDestination` для окремого завдання перевизначає це глобальне значення за замовчуванням. -- Якщо не задано ні глобальне, ні для окремого завдання місце призначення збоїв, завдання, які вже доставляють через `announce`, у разі збою використовують цей основний цільовий announce як резервний варіант. +- `delivery.failureDestination` на рівні завдання перевизначає це глобальне типове значення. +- Коли не задано ні глобальне, ні на рівні завдання місце призначення для збоїв, завдання, які вже доставляють через `announce`, при збої повертаються до цієї основної цілі announce. - `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо тільки основний `delivery.mode` завдання не дорівнює `"webhook"`. -Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання cron відстежуються як [фонові завдання](/uk/automation/tasks). +Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [background tasks](/uk/automation/tasks). --- -## Змінні шаблонів моделі медіа +## Змінні шаблону моделі медіа -Заповнювачі шаблонів, які розгортаються в `tools.media.models[].args`: +Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`: -| Змінна | Опис | -| ------------------ | ------------------------------------------------- | -| `{{Body}}` | Повний текст вхідного повідомлення | -| `{{RawBody}}` | Сирий текст (без обгорток історії/відправника) | -| `{{BodyStripped}}` | Текст без згадок у групі | -| `{{From}}` | Ідентифікатор відправника | -| `{{To}}` | Ідентифікатор призначення | -| `{{MessageSid}}` | ID повідомлення каналу | -| `{{SessionId}}` | UUID поточної сесії | -| `{{IsNewSession}}` | `"true"`, якщо створено нову сесію | -| `{{MediaUrl}}` | Псевдо-URL вхідного медіа | -| `{{MediaPath}}` | Локальний шлях до медіа | -| `{{MediaType}}` | Тип медіа (image/audio/document/…) | -| `{{Transcript}}` | Аудіотранскрипт | -| `{{Prompt}}` | Розв’язаний медіа-prompt для записів CLI | +| Variable | Опис | +| ------------------ | ------------------------------------------------------- | +| `{{Body}}` | Повний текст вхідного повідомлення | +| `{{RawBody}}` | Сирий текст повідомлення (без обгорток історії/відправника) | +| `{{BodyStripped}}` | Текст повідомлення без згадок групи | +| `{{From}}` | Ідентифікатор відправника | +| `{{To}}` | Ідентифікатор призначення | +| `{{MessageSid}}` | Ідентифікатор повідомлення каналу | +| `{{SessionId}}` | UUID поточної сесії | +| `{{IsNewSession}}` | `"true"`, коли створено нову сесію | +| `{{MediaUrl}}` | Псевдо-URL вхідного медіа | +| `{{MediaPath}}` | Локальний шлях до медіа | +| `{{MediaType}}` | Тип медіа (image/audio/document/…) | +| `{{Transcript}}` | Транскрипт аудіо | +| `{{Prompt}}` | Розв’язаний медіапромпт для записів CLI | | `{{MaxChars}}` | Розв’язана максимальна кількість символів виводу для записів CLI | -| `{{ChatType}}` | `"direct"` або `"group"` | -| `{{GroupSubject}}` | Назва групи (за можливості) | -| `{{GroupMembers}}` | Попередній перегляд учасників групи (за можливості) | -| `{{SenderName}}` | Відображуване ім’я відправника (за можливості) | -| `{{SenderE164}}` | Номер телефону відправника (за можливості) | -| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) | +| `{{ChatType}}` | `"direct"` або `"group"` | +| `{{GroupSubject}}` | Назва групи (за можливості) | +| `{{GroupMembers}}` | Попередній перегляд учасників групи (за можливості) | +| `{{SenderName}}` | Відображуване ім’я відправника (за можливості) | +| `{{SenderE164}}` | Номер телефону відправника (за можливості) | +| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) | --- -## Включення конфігурації (`$include`) +## Include конфігурації (`$include`) Розділіть конфігурацію на кілька файлів: @@ -1184,19 +1196,19 @@ Hook-токени в query string відхиляються. **Поведінка злиття:** - Один файл: замінює об’єкт-контейнер. -- Масив файлів: глибоко зливається за порядком (пізніші перевизначають попередні). -- Сусідні ключі: зливаються після включень (перевизначають включені значення). -- Вкладені включення: до 10 рівнів глибини. -- Шляхи: розв’язуються відносно файла, що включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` для `openclaw.json`). Абсолютні форми/форми з `../` дозволені лише тоді, коли вони все одно розв’язуються в межах цієї межі. -- Записи OpenClaw, які змінюють лише один розділ верхнього рівня, підкріплений включенням одного файла, записуються безпосередньо до цього включеного файла. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін. -- Кореневі включення, масиви включень і включення із сусідніми перевизначеннями доступні лише для читання для записів, що виконуються OpenClaw; такі записи завершуються за принципом fail closed замість сплощення конфігурації. -- Помилки: чіткі повідомлення для відсутніх файлів, помилок розбору та циклічних включень. +- Масив файлів: глибоко зливається в заданому порядку (пізніші перевизначають попередні). +- Сусідні ключі: зливаються після include (перевизначають включені значення). +- Вкладені include: до 10 рівнів глибини. +- Шляхи: розв’язуються відносно файла, що включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` для `openclaw.json`). Абсолютні форми й форми `../` дозволені лише тоді, коли після розв’язання вони все одно залишаються в цих межах. +- Записи, керовані OpenClaw, які змінюють лише один розділ верхнього рівня, підтриманий include одного файла, записуються безпосередньо в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін. +- Кореневі include, масиви include та include із сусідніми перевизначеннями є лише для читання для записів, керованих OpenClaw; такі записи завершуються в режимі fail-closed замість сплощення конфігурації. +- Помилки: чіткі повідомлення для відсутніх файлів, помилок розбору та циклічних include. --- -_Пов’язано: [Конфігурація](/uk/gateway/configuration) · [Приклади конфігурації](/uk/gateway/configuration-examples) · [Doctor](/uk/gateway/doctor)_ +_Пов’язане: [Configuration](/uk/gateway/configuration) · [Configuration Examples](/uk/gateway/configuration-examples) · [Doctor](/uk/gateway/doctor)_ ## Пов’язане -- [Конфігурація](/uk/gateway/configuration) -- [Приклади конфігурації](/uk/gateway/configuration-examples) +- [Configuration](/uk/gateway/configuration) +- [Configuration examples](/uk/gateway/configuration-examples) diff --git a/docs/uk/gateway/configuration.md b/docs/uk/gateway/configuration.md index 4e5eb65d6..295a0536d 100644 --- a/docs/uk/gateway/configuration.md +++ b/docs/uk/gateway/configuration.md @@ -1,35 +1,35 @@ --- read_when: - - Перше налаштування OpenClaw - - Поширені шаблони конфігурації + - Налаштування OpenClaw уперше + - Пошук поширених шаблонів конфігурації - Перехід до певних розділів конфігурації summary: 'Огляд конфігурації: поширені завдання, швидке налаштування та посилання на повний довідник' title: Конфігурація x-i18n: - generated_at: "2026-04-25T03:24:46Z" + generated_at: "2026-04-25T07:53:39Z" model: gpt-5.4 provider: openai - source_hash: 2749fca881115d1d1915271af2d06037cfe87d6c4caf96dc46d8bf893a0669c6 + source_hash: a8ffe1972fc7680d4cfc55a24fd6fc3869af593faf8c1137369dad0dbefde43a source_path: gateway/configuration.md workflow: 15 --- -OpenClaw читає необов’язкову конфігурацію **JSON5** з `~/.openclaw/openclaw.json`. -Активний шлях конфігурації має бути звичайним файлом. Компонування -`openclaw.json` через символьні посилання не підтримуються для записів, якими керує OpenClaw; атомарний запис може замінити -шлях замість збереження символьного посилання. Якщо ви зберігаєте конфігурацію поза -стандартним каталогом стану, вкажіть `OPENCLAW_CONFIG_PATH` безпосередньо на реальний файл. +OpenClaw зчитує необов’язкову конфігурацію **JSON5** з `~/.openclaw/openclaw.json`. +Активний шлях конфігурації має бути звичайним файлом. Компонування `openclaw.json` +із символьними посиланнями не підтримується для записів, якими керує OpenClaw; атомарний запис може замінити +цей шлях замість збереження символьного посилання. Якщо ви зберігаєте конфігурацію поза +каталогом стану за замовчуванням, вкажіть `OPENCLAW_CONFIG_PATH` безпосередньо на реальний файл. -Якщо файл відсутній, OpenClaw використовує безпечні типові значення. Поширені причини додати конфігурацію: +Якщо файл відсутній, OpenClaw використовує безпечні значення за замовчуванням. Поширені причини додати конфігурацію: - Підключити канали та керувати тим, хто може надсилати повідомлення боту - Налаштувати моделі, інструменти, ізоляцію або автоматизацію (cron, hooks) - Налаштувати сесії, медіа, мережу або UI -Перегляньте [повний довідник](/uk/gateway/configuration-reference) для всіх доступних полів. +Дивіться [повний довідник](/uk/gateway/configuration-reference) для всіх доступних полів. -**Ви вперше налаштовуєте конфігурацію?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) для готових конфігурацій, які можна повністю скопіювати й вставити. +**Ви вперше працюєте з конфігурацією?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) для повних конфігурацій, які можна просто скопіювати й вставити. ## Мінімальна конфігурація @@ -45,13 +45,13 @@ OpenClaw читає необов’язкову конфігурацію - + ```bash - openclaw onboard # повний процес початкового налаштування - openclaw configure # майстер конфігурації + openclaw onboard # full onboarding flow + openclaw configure # config wizard ``` - + ```bash openclaw config get agents.defaults.workspace openclaw config set agents.defaults.heartbeat.every "2h" @@ -60,14 +60,14 @@ OpenClaw читає необов’язкову конфігурацію Відкрийте [http://127.0.0.1:18789](http://127.0.0.1:18789) і використайте вкладку **Config**. - Control UI відображає форму на основі схеми поточної конфігурації, зокрема метадані документації полів - `title` / `description`, а також схеми Plugin і каналів, коли вони - доступні, із редактором **Raw JSON** як запасним варіантом. Для - деталізованих UI та інших інструментів gateway також надає `config.schema.lookup`, щоб - отримати один вузол схеми з прив’язкою до шляху та зведення для безпосередніх дочірніх елементів. + Control UI відображає форму з живої схеми конфігурації, включно з метаданими документації полів + `title` / `description`, а також схемами Plugin і каналів, коли вони + доступні, з редактором **Raw JSON** як запасним варіантом. Для деталізованих + UI та інших інструментів gateway також надає `config.schema.lookup`, щоб + отримати один вузол схеми, обмежений шляхом, а також зведення безпосередніх дочірніх елементів. - - Відредагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway стежить за файлом і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)). + + Відредагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway відстежує файл і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)). @@ -78,35 +78,35 @@ OpenClaw приймає лише конфігурації, які повніст `openclaw config schema` виводить канонічну JSON Schema, яку використовують Control UI -і валідація. `config.schema.lookup` отримує один вузол, прив’язаний до шляху, а також -зведення дочірніх елементів для інструментів із деталізацією. Метадані документації полів `title`/`description` -передаються через вкладені об’єкти, wildcard (`*`), елементи масивів (`[]`) і гілки `anyOf`/ -`oneOf`/`allOf`. Під час виконання також об’єднуються схеми Plugin і каналів, коли -завантажено реєстр маніфестів. +і валідація. `config.schema.lookup` отримує один вузол, обмежений шляхом, а також +зведення дочірніх елементів для інструментів деталізації. Метадані документації полів `title`/`description` +передаються через вкладені об’єкти, гілки wildcard (`*`), елементів масиву (`[]`) і `anyOf`/ +`oneOf`/`allOf`. Під час завантаження реєстру маніфестів також об’єднуються схеми Plugin і каналів, доступні під час виконання. Коли валідація не проходить: - Gateway не запускається - Працюють лише діагностичні команди (`openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`) -- Виконайте `openclaw doctor`, щоб побачити точні проблеми -- Виконайте `openclaw doctor --fix` (або `--yes`), щоб застосувати виправлення +- Запустіть `openclaw doctor`, щоб побачити точні проблеми +- Запустіть `openclaw doctor --fix` (або `--yes`), щоб застосувати виправлення -Після кожного успішного запуску Gateway зберігає довірену останню відому справну копію. -Якщо `openclaw.json` пізніше не проходить валідацію (або втрачає `gateway.mode`, різко +Після кожного успішного запуску Gateway зберігає довірену останню справну копію. +Якщо `openclaw.json` згодом не проходить валідацію (або втрачає `gateway.mode`, різко зменшується, або на початку з’являється сторонній рядок журналу), OpenClaw зберігає зламаний файл -як `.clobbered.*`, відновлює останню відому справну копію та записує причину -відновлення в журнал. На наступному ході агента також надсилається попередження про системну подію, щоб основний -агент не переписав відновлену конфігурацію навмання. Просування до стану останньої відомої справної копії -пропускається, якщо кандидат містить замасковані заповнювачі секретів, такі як `***`. -Коли кожна проблема валідації обмежена `plugins.entries....`, OpenClaw -не виконує відновлення всього файлу. Поточна конфігурація лишається активною, а -локальна помилка Plugin показується окремо, щоб невідповідність схеми Plugin або версії хоста не відкочувала не пов’язані налаштування користувача. +як `.clobbered.*`, відновлює останню справну копію та записує причину +відновлення в журнал. Наступний хід агента також отримує попередження про системну подію, щоб основний +агент не переписав відновлену конфігурацію навмання. Просування до статусу останньої справної копії +пропускається, якщо кандидат містить приховані заповнювачі секретів, наприклад `***`. +Коли всі проблеми валідації обмежені `plugins.entries....`, OpenClaw +не виконує відновлення всього файлу. Він залишає активною поточну конфігурацію та +показує локальну для Plugin помилку, щоб невідповідність схеми Plugin або версії хоста +не відкотила інші налаштування користувача. ## Поширені завдання - Кожен канал має власний розділ конфігурації в `channels.`. Перегляньте окрему сторінку каналу для кроків налаштування: + Кожен канал має власний розділ конфігурації в `channels.`. Дивіться окрему сторінку каналу для кроків налаштування: - [WhatsApp](/uk/channels/whatsapp) — `channels.whatsapp` - [Telegram](/uk/channels/telegram) — `channels.telegram` @@ -137,7 +137,7 @@ OpenClaw приймає лише конфігурації, які повніст - Налаштуйте основну модель і необов’язкові резервні варіанти: + Установіть основну модель і необов’язкові резервні варіанти: ```json5 { @@ -156,31 +156,31 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - - `agents.defaults.models` визначає каталог моделей і слугує allowlist для `/model`. - - Використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додати записи до allowlist без видалення наявних моделей. Звичайні повні заміни, які видалили б записи, відхиляються, якщо не передати `--replace`. + - `agents.defaults.models` визначає каталог моделей і працює як allowlist для `/model`. + - Використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додавати записи в allowlist без видалення наявних моделей. Звичайні заміни, які видалили б записи, відхиляються, якщо не передати `--replace`. - Посилання на моделі використовують формат `provider/model` (наприклад, `anthropic/claude-opus-4-6`). - - `agents.defaults.imageMaxDimensionPx` керує зменшенням розміру зображень у транскрипті/інструментах (типове значення `1200`); менші значення зазвичай зменшують використання vision-токенів у запусках із великою кількістю знімків екрана. - - Перегляньте [Models CLI](/uk/concepts/models) для перемикання моделей у чаті та [Model Failover](/uk/concepts/model-failover) для ротації автентифікації та поведінки резервних варіантів. - - Для користувацьких/self-hosted провайдерів див. [Custom providers](/uk/gateway/config-tools#custom-providers-and-base-urls) у довіднику. + - `agents.defaults.imageMaxDimensionPx` керує зменшенням розміру зображень у транскрипті/інструментах (типове значення `1200`); менші значення зазвичай зменшують використання vision-token у запусках із великою кількістю знімків екрана. + - Дивіться [Models CLI](/uk/concepts/models) для перемикання моделей у чаті та [Model Failover](/uk/concepts/model-failover) для ротації автентифікації та поведінки резервного перемикання. + - Для користувацьких/самостійно розміщених провайдерів дивіться [Custom providers](/uk/gateway/config-tools#custom-providers-and-base-urls) у довіднику. - Доступ до DM контролюється для кожного каналу через `dmPolicy`: + Доступ до DM керується окремо для кожного каналу через `dmPolicy`: - - `"pairing"` (типово): невідомі відправники отримують одноразовий код pairing для підтвердження - - `"allowlist"`: лише відправники з `allowFrom` (або зі сховища paired allow) + - `"pairing"` (типово): невідомі відправники отримують одноразовий код сполучення для схвалення + - `"allowlist"`: лише відправники з `allowFrom` (або зі сховища дозволених сполучених контактів) - `"open"`: дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) - `"disabled"`: ігнорувати всі DM Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlist, специфічні для каналу. - Перегляньте [повний довідник](/uk/gateway/config-channels#dm-and-group-access) для деталей по кожному каналу. + Дивіться [повний довідник](/uk/gateway/config-channels#dm-and-group-access) для деталей по кожному каналу. - - Для групових повідомлень типовим значенням є **вимагати згадку**. Налаштуйте шаблони для кожного агента: + + Для групових повідомлень типово **потрібна згадка**. Налаштуйте шаблони для кожного агента: ```json5 { @@ -203,14 +203,14 @@ OpenClaw приймає лише конфігурації, які повніст ``` - **Згадки в метаданих**: нативні @-згадки (WhatsApp tap-to-mention, Telegram @bot тощо) - - **Текстові шаблони**: безпечні regex-шаблони в `mentionPatterns` - - Перегляньте [повний довідник](/uk/gateway/config-channels#group-chat-mention-gating) для перевизначень по каналах і режиму self-chat. + - **Текстові шаблони**: безпечні шаблони regex у `mentionPatterns` + - Дивіться [повний довідник](/uk/gateway/config-channels#group-chat-mention-gating) для перевизначень по каналах і режиму чату із самим собою. - - Використовуйте `agents.defaults.skills` для спільного базового набору, а потім перевизначайте - окремих агентів через `agents.list[].skills`: + + Використовуйте `agents.defaults.skills` для спільної базової конфігурації, а потім перевизначайте конкретних + агентів через `agents.list[].skills`: ```json5 { @@ -227,15 +227,15 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - - Не вказуйте `agents.defaults.skills`, якщо за замовчуванням Skills не мають бути обмежені. - - Не вказуйте `agents.list[].skills`, щоб успадкувати типові значення. - - Установіть `agents.list[].skills: []`, щоб не використовувати жодних Skills. - - Перегляньте [Skills](/uk/tools/skills), [конфігурацію Skills](/uk/tools/skills-config) і - [довідник з конфігурації](/uk/gateway/config-agents#agents-defaults-skills). + - Не вказуйте `agents.defaults.skills`, якщо за замовчуванням Skills не повинні бути обмежені. + - Не вказуйте `agents.list[].skills`, щоб успадкувати значення за замовчуванням. + - Установіть `agents.list[].skills: []`, якщо Skills не потрібні. + - Дивіться [Skills](/uk/tools/skills), [Конфігурація Skills](/uk/tools/skills-config) і + [Довідник з конфігурації](/uk/gateway/config-agents#agents-defaults-skills). - + Керуйте тим, наскільки агресивно gateway перезапускає канали, які виглядають застарілими: ```json5 @@ -258,15 +258,15 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - - Установіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски моніторингу стану. - - `channelStaleEventThresholdMinutes` має бути більшим або дорівнювати інтервалу перевірки. - - Використовуйте `channels..healthMonitor.enabled` або `channels..accounts..healthMonitor.enabled`, щоб вимкнути автоперезапуски для одного каналу чи облікового запису без вимкнення глобального монітора. - - Перегляньте [Health Checks](/uk/gateway/health) для операційної діагностики та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів. + - Установіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски моніторингу здоров’я. + - `channelStaleEventThresholdMinutes` має бути більшим або рівним інтервалу перевірки. + - Використовуйте `channels..healthMonitor.enabled` або `channels..accounts..healthMonitor.enabled`, щоб вимкнути автоперезапуски для одного каналу або облікового запису без вимкнення глобального монітора. + - Дивіться [Health Checks](/uk/gateway/health) для операційного налагодження та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів. - Сесії керують безперервністю розмови та ізоляцією: + Сесії керують безперервністю та ізоляцією розмов: ```json5 { @@ -286,15 +286,15 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - - `dmScope`: `main` (спільна) | `per-peer` | `per-channel-peer` | `per-account-channel-peer` - - `threadBindings`: глобальні типові значення для маршрутизації сесій, прив’язаних до потоків (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`). - - Перегляньте [Керування сесіями](/uk/concepts/session) для області дії, зв’язків ідентичностей і політики надсилання. - - Перегляньте [повний довідник](/uk/gateway/config-agents#session) для всіх полів. + - `dmScope`: `main` (спільний) | `per-peer` | `per-channel-peer` | `per-account-channel-peer` + - `threadBindings`: глобальні значення за замовчуванням для маршрутизації сесій, прив’язаних до гілок (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`). + - Дивіться [Керування сесіями](/uk/concepts/session) для області дії, зв’язків ідентичності та політики надсилання. + - Дивіться [повний довідник](/uk/gateway/config-agents#session) для всіх полів. - Запускайте сесії агентів в ізольованих середовищах виконання sandbox: + Запускайте сесії агентів в ізольованих середовищах ізоляції: ```json5 { @@ -311,7 +311,7 @@ OpenClaw приймає лише конфігурації, які повніст Спочатку зберіть образ: `scripts/sandbox-setup.sh` - Перегляньте [Ізоляція](/uk/gateway/sandboxing) для повного посібника та [повний довідник](/uk/gateway/config-agents#agentsdefaultssandbox) для всіх параметрів. + Дивіться [Ізоляція](/uk/gateway/sandboxing) для повного посібника та [повний довідник](/uk/gateway/config-agents#agentsdefaultssandbox) для всіх параметрів. @@ -336,7 +336,7 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - Еквівалент CLI: + Еквівалент у CLI: ```bash openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com @@ -345,34 +345,34 @@ OpenClaw приймає лише конфігурації, які повніст Що це робить: - Дозволяє gateway надсилати `push.test`, сигнали пробудження та сигнали повторного підключення через зовнішній relay. - - Використовує право надсилання, прив’язане до реєстрації, яке пересилає спарений застосунок iOS. Gateway не потрібен relay-токен рівня всього розгортання. - - Прив’язує кожну реєстрацію через relay до ідентичності gateway, з якою було спарено застосунок iOS, тому інший gateway не зможе повторно використати збережену реєстрацію. - - Залишає локальні/ручні збірки iOS на прямому APNs. Надсилання через relay застосовується лише до офіційно розповсюджуваних збірок, які зареєструвалися через relay. - - Має збігатися з базовим URL relay, вбудованим в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до одного й того самого розгортання relay. + - Використовує дозвіл на надсилання, прив’язаний до реєстрації, який пересилає сполучений застосунок iOS. Gateway не потребує relay-токена рівня всього розгортання. + - Прив’язує кожну реєстрацію через relay до ідентичності gateway, з якою сполучився застосунок iOS, тож інший gateway не може повторно використати збережену реєстрацію. + - Залишає локальні/ручні збірки iOS на прямому APNs. Надсилання через relay застосовується лише до офіційних розповсюджуваних збірок, які зареєструвалися через relay. + - Має збігатися з базовою URL-адресою relay, вбудованою в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до одного й того самого розгортання relay. - Наскрізний потік: + Наскрізний процес: - 1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тим самим базовим URL relay. - 2. Налаштуйте `gateway.push.apns.relay.baseUrl` на gateway. - 3. Спарте застосунок iOS із gateway і дочекайтеся підключення як node-, так і operator-сесій. - 4. Застосунок iOS отримує ідентичність gateway, реєструється в relay за допомогою App Attest та квитанції застосунку, а потім публікує корисне навантаження `push.apns.register` через relay до спареного gateway. - 5. Gateway зберігає relay handle і право надсилання, а потім використовує їх для `push.test`, сигналів пробудження та сигналів повторного підключення. + 1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тією самою базовою URL-адресою relay. + 2. Налаштуйте `gateway.push.apns.relay.baseUrl` у gateway. + 3. Сполучіть застосунок iOS з gateway і дозвольте підключитися як сесії Node, так і сесії оператора. + 4. Застосунок iOS отримує ідентичність gateway, реєструється в relay за допомогою App Attest разом із квитанцією застосунку, а потім публікує payload `push.apns.register` через relay до сполученого gateway. + 5. Gateway зберігає relay-ідентифікатор і дозвіл на надсилання, а потім використовує їх для `push.test`, сигналів пробудження та сигналів повторного підключення. Операційні примітки: - - Якщо ви перемикаєте застосунок iOS на інший gateway, перепідключіть застосунок, щоб він міг опублікувати нову relay-реєстрацію, прив’язану до цього gateway. - - Якщо ви випускаєте нову збірку iOS, яка вказує на інше розгортання relay, застосунок оновлює кешовану relay-реєстрацію замість повторного використання старого relay origin. + - Якщо ви перемикаєте застосунок iOS на інший gateway, повторно підключіть застосунок, щоб він міг опублікувати нову реєстрацію relay, прив’язану до цього gateway. + - Якщо ви випускаєте нову збірку iOS, яка вказує на інше розгортання relay, застосунок оновлює свою кешовану реєстрацію relay замість повторного використання старого джерела relay. Примітка щодо сумісності: - - `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові перевизначення через env. - - `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається запасним варіантом для розробки лише через loopback; не зберігайте HTTP URL relay у конфігурації. + - `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові перевизначення env. + - `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається винятком для розробки лише для loopback; не зберігайте HTTP URL-адреси relay у конфігурації. - Перегляньте [Застосунок iOS](/uk/platforms/ios#relay-backed-push-for-official-builds) для наскрізного потоку та [Потік автентифікації й довіри](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay. + Дивіться [Застосунок iOS](/uk/platforms/ios#relay-backed-push-for-official-builds) для наскрізного процесу та [Потік автентифікації та довіри](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay. - + ```json5 { agents: { @@ -389,11 +389,11 @@ OpenClaw приймає лише конфігурації, які повніст - `every`: рядок тривалості (`30m`, `2h`). Установіть `0m`, щоб вимкнути. - `target`: `last` | `none` | `` (наприклад, `discord`, `matrix`, `telegram` або `whatsapp`) - `directPolicy`: `allow` (типово) або `block` для цілей Heartbeat у стилі DM - - Перегляньте [Heartbeat](/uk/gateway/heartbeat) для повного посібника. + - Дивіться [Heartbeat](/uk/gateway/heartbeat) для повного посібника. - + ```json5 { cron: { @@ -408,14 +408,14 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - - `sessionRetention`: видаляти завершені ізольовані сесії запуску з `sessions.json` (типово `24h`; установіть `false`, щоб вимкнути). + - `sessionRetention`: очищати завершені ізольовані сесії запуску з `sessions.json` (типово `24h`; установіть `false`, щоб вимкнути). - `runLog`: очищати `cron/runs/.jsonl` за розміром і кількістю збережених рядків. - - Перегляньте [Cron jobs](/uk/automation/cron-jobs) для огляду функції та прикладів CLI. + - Дивіться [Завдання Cron](/uk/automation/cron-jobs) для огляду функцій і прикладів CLI. - - Увімкніть HTTP-ендпойнти Webhook на Gateway: + + Увімкніть HTTP-ендпоїнти Webhook у Gateway: ```json5 { @@ -439,20 +439,20 @@ OpenClaw приймає лише конфігурації, які повніст ``` Примітка щодо безпеки: - - Уважайте весь вміст payload hook/webhook ненадійним вхідним даним. - - Використовуйте окремий `hooks.token`; не використовуйте повторно спільний токен Gateway. - - Автентифікація hook виконується лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в рядку запиту відхиляються. - - `hooks.path` не може бути `/`; використовуйте окремий підшлях для вхідних webhook, наприклад `/hooks`. - - Тримайте прапорці обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте вузькоспрямовану діагностику. - - Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також установіть `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які може вибирати викликальна сторона. - - Для агентів, керованих hook, віддавайте перевагу сильним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс sandbox, де це можливо). + - Увесь вміст payload hook/webhook слід вважати недовіреним введенням. + - Використовуйте окремий `hooks.token`; не використовуйте спільний токен Gateway повторно. + - Автентифікація hook працює лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в query string відхиляються. + - `hooks.path` не може бути `/`; використовуйте для вхідних webhook окремий підшлях, наприклад `/hooks`. + - Залишайте прапорці обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте вузькоспрямоване налагодження. + - Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які може вибрати викликач. + - Для агентів, керованих hook, віддавайте перевагу потужним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс ізоляція, де це можливо). - Перегляньте [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів mappings і інтеграції Gmail. + Дивіться [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів mappings і інтеграції Gmail. - - Запускайте кількох ізольованих агентів з окремими робочими просторами та сесіями: + + Запускайте кілька ізольованих агентів з окремими робочими просторами та сесіями: ```json5 { @@ -469,12 +469,12 @@ OpenClaw приймає лише конфігурації, які повніст } ``` - Перегляньте [Multi-Agent](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/config-agents#multi-agent-routing) для правил bindings і профілів доступу для кожного агента. + Дивіться [Multi-Agent](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/config-agents#multi-agent-routing) для правил bindings і профілів доступу для кожного агента. - Використовуйте `$include` для організації великих конфігурацій: + Використовуйте `$include`, щоб упорядковувати великі конфігурації: ```json5 // ~/.openclaw/openclaw.json @@ -488,12 +488,12 @@ OpenClaw приймає лише конфігурації, які повніст ``` - **Один файл**: замінює об’єкт-контейнер - - **Масив файлів**: глибоко зливається за порядком (пізніші мають пріоритет) - - **Сусідні ключі**: зливаються після include (перевизначають включені значення) + - **Масив файлів**: глибоко об’єднується за порядком (пізніший має пріоритет) + - **Сусідні ключі**: об’єднуються після include (перевизначають включені значення) - **Вкладені include**: підтримуються до 10 рівнів вкладеності - - **Відносні шляхи**: обчислюються відносно файла, що включає + - **Відносні шляхи**: визначаються відносно файлу, який включає - **Записи, якими керує OpenClaw**: коли запис змінює лише один розділ верхнього рівня, - що спирається на include з одним файлом, наприклад `plugins: { $include: "./plugins.json5" }`, + який підтримується include одного файлу, наприклад `plugins: { $include: "./plugins.json5" }`, OpenClaw оновлює цей включений файл і залишає `openclaw.json` без змін - **Непідтримуваний наскрізний запис**: кореневі include, масиви include та include із сусідніми перевизначеннями завершуються безпечною відмовою для записів, якими керує OpenClaw, замість @@ -505,34 +505,34 @@ OpenClaw приймає лише конфігурації, які повніст ## Гаряче перезавантаження конфігурації -Gateway стежить за `~/.openclaw/openclaw.json` і автоматично застосовує зміни — для більшості налаштувань ручний перезапуск не потрібен. +Gateway відстежує `~/.openclaw/openclaw.json` і автоматично застосовує зміни — для більшості налаштувань ручний перезапуск не потрібен. -Прямі редагування файлу вважаються ненадійними, доки не пройдуть валідацію. Спостерігач -чекає, поки тимчасові записи/перейменування редактора стабілізуються, читає +Прямі редагування файлу вважаються недовіреними, доки не пройдуть валідацію. Спостерігач +чекає, поки завершиться тимчасовий запис/перейменування редактора, зчитує підсумковий файл і відхиляє недійсні зовнішні редагування, відновлюючи -останню відому справну конфігурацію. Записи конфігурації, якими керує OpenClaw, -використовують той самий бар’єр схеми перед записом; руйнівні перезаписи, такі -як видалення `gateway.mode` або зменшення файлу більш ніж наполовину, відхиляються +останні відомі справні налаштування. Записи конфігурації, якими керує OpenClaw, +використовують той самий бар’єр схеми перед записом; руйнівні перезаписи, такі як +видалення `gateway.mode` або зменшення файлу більш ніж наполовину, відхиляються і зберігаються як `.rejected.*` для перевірки. -Виняток — локальні помилки валідації Plugin: якщо всі проблеми містяться в -`plugins.entries....`, перезавантаження зберігає поточну конфігурацію й повідомляє про проблему Plugin +Помилки валідації, локальні для Plugin, є винятком: якщо всі проблеми знаходяться в +`plugins.entries....`, перезавантаження зберігає поточну конфігурацію та повідомляє про проблему Plugin замість відновлення `.last-good`. -Якщо в журналах ви бачите `Config auto-restored from last-known-good` або -`config reload restored last-known-good config`, перевірте відповідний файл -`.clobbered.*` поруч із `openclaw.json`, виправте відхилений payload, а потім виконайте -`openclaw config validate`. Перегляньте [усунення проблем Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config) +Якщо ви бачите `Config auto-restored from last-known-good` або +`config reload restored last-known-good config` у журналах, перевірте відповідний +файл `.clobbered.*` поруч із `openclaw.json`, виправте відхилений payload, а потім запустіть +`openclaw config validate`. Дивіться [Усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config) для контрольного списку відновлення. ### Режими перезавантаження -| Режим | Поведінка | -| ---------------------- | --------------------------------------------------------------------------------------- | -| **`hybrid`** (типово) | Миттєво гаряче застосовує безпечні зміни. Автоматично перезапускається для критичних. | -| **`hot`** | Гаряче застосовує лише безпечні зміни. Пише попередження, коли потрібен перезапуск — ви виконуєте його самі. | +| Режим | Поведінка | +| ---------------------- | ---------------------------------------------------------------------------------------- | +| **`hybrid`** (типово) | Миттєво гаряче застосовує безпечні зміни. Автоматично перезапускається для критичних. | +| **`hot`** | Гаряче застосовує лише безпечні зміни. Логує попередження, коли потрібен перезапуск — ви виконуєте його самі. | | **`restart`** | Перезапускає Gateway при будь-якій зміні конфігурації, безпечній чи ні. | -| **`off`** | Вимикає стеження за файлом. Зміни набувають чинності під час наступного ручного перезапуску. | +| **`off`** | Вимикає відстеження файлу. Зміни набудуть чинності під час наступного ручного перезапуску. | ```json5 { @@ -546,45 +546,46 @@ Gateway стежить за `~/.openclaw/openclaw.json` і автоматичн Більшість полів застосовуються гаряче без простою. У режимі `hybrid` зміни, що потребують перезапуску, обробляються автоматично. -| Категорія | Поля | Потрібен перезапуск? | -| ------------------ | ----------------------------------------------------------------- | -------------------- | -| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані канали та канали Plugin | Ні | -| Агенти й моделі | `agent`, `agents`, `models`, `routing` | Ні | -| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні | -| Сесії та повідомлення | `session`, `messages` | Ні | -| Інструменти й медіа | `tools`, `browser`, `skills`, `audio`, `talk` | Ні | -| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні | -| Сервер Gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** | -| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** | +| Категорія | Поля | Потрібен перезапуск? | +| ------------------- | ----------------------------------------------------------------- | -------------------- | +| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані канали та канали Plugin | Ні | +| Агент і моделі | `agent`, `agents`, `models`, `routing` | Ні | +| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні | +| Сесії та повідомлення | `session`, `messages` | Ні | +| Інструменти й медіа | `tools`, `browser`, `skills`, `mcp`, `audio`, `talk` | Ні | +| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні | +| Сервер Gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** | +| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** | -`gateway.reload` і `gateway.remote` — винятки: їх зміна **не** спричиняє перезапуск. +`gateway.reload` і `gateway.remote` є винятками — їхня зміна **не** спричиняє перезапуск. ### Планування перезавантаження Коли ви редагуєте вихідний файл, на який є посилання через `$include`, OpenClaw планує -перезавантаження на основі компонування, створеного у вихідному файлі, а не сплощеного подання в пам’яті. -Це робить рішення гарячого перезавантаження (гаряче застосування чи перезапуск) передбачуваними, навіть коли -один розділ верхнього рівня живе у власному включеному файлі, наприклад -`plugins: { $include: "./plugins.json5" }`. Якщо компонування вихідного коду неоднозначне, планування перезавантаження безпечно завершується відмовою. +перезавантаження за компонуванням, заданим у вихідному файлі, а не за сплощеним поданням у пам’яті. +Це робить рішення щодо гарячого перезавантаження (гаряче застосування чи перезапуск) передбачуваними, навіть якщо +один розділ верхнього рівня знаходиться у власному включеному файлі, наприклад +`plugins: { $include: "./plugins.json5" }`. Планування перезавантаження безпечно завершується відмовою, якщо +структура вихідного компонування неоднозначна. -## RPC конфігурації (програмні оновлення) +## Config RPC (програмні оновлення) -Для інструментів, які записують конфігурацію через API gateway, віддавайте перевагу такому потоку: +Для інструментів, які записують конфігурацію через API gateway, віддавайте перевагу такому процесу: -- `config.schema.lookup`, щоб перевірити одне піддерево (неглибокий вузол схеми + зведення +- `config.schema.lookup`, щоб переглянути одне піддерево (неглибокий вузол схеми + зведення дочірніх елементів) - `config.get`, щоб отримати поточний знімок разом із `hash` -- `config.patch` для часткових оновлень (JSON merge patch: об’єкти зливаються, `null` +- `config.patch` для часткових оновлень (JSON merge patch: об’єкти об’єднуються, `null` видаляє, масиви замінюються) -- `config.apply` лише якщо ви справді збираєтеся замінити всю конфігурацію -- `update.run` для явного самооновлення з подальшим перезапуском +- `config.apply` лише тоді, коли ви справді маєте намір замінити всю конфігурацію +- `update.run` для явного самооновлення з перезапуском Записи control-plane (`config.apply`, `config.patch`, `update.run`) мають -обмеження частоти: 3 запити за 60 секунд для кожної пари `deviceId+clientIp`. Запити -на перезапуск об’єднуються, а потім застосовується 30-секундний cooldown між циклами перезапуску. +обмеження частоти: 3 запити за 60 секунд на `deviceId+clientIp`. Запити на перезапуск +об’єднуються, а потім застосовують 30-секундний cooldown між циклами перезапуску. Приклад часткового patch: @@ -598,17 +599,17 @@ openclaw gateway call config.patch --params '{ ``` І `config.apply`, і `config.patch` приймають `raw`, `baseHash`, `sessionKey`, -`note` і `restartDelayMs`. `baseHash` є обов’язковим для обох методів, якщо +`note` і `restartDelayMs`. `baseHash` є обов’язковим для обох методів, коли конфігурація вже існує. ## Змінні середовища -OpenClaw читає змінні середовища з батьківського процесу, а також із: +OpenClaw зчитує env vars з батьківського процесу, а також з: -- `.env` з поточного робочого каталогу (якщо є) +- `.env` у поточному робочому каталозі (якщо присутній) - `~/.openclaw/.env` (глобальний резервний варіант) -Жоден із цих файлів не перевизначає наявні змінні середовища. Ви також можете задавати вбудовані змінні середовища в конфігурації: +Жоден із файлів не перевизначає наявні env vars. Ви також можете задавати вбудовані env vars у конфігурації: ```json5 { @@ -619,8 +620,8 @@ OpenClaw читає змінні середовища з батьківсько } ``` - - Якщо це ввімкнено й очікувані ключі не задано, OpenClaw запускає вашу login shell і імпортує лише відсутні ключі: + + Якщо це ввімкнено й очікувані ключі не задані, OpenClaw запускає ваш login shell і імпортує лише відсутні ключі: ```json5 { @@ -630,11 +631,11 @@ OpenClaw читає змінні середовища з батьківсько } ``` -Еквівалент змінної середовища: `OPENCLAW_LOAD_SHELL_ENV=1` +Еквівалент env var: `OPENCLAW_LOAD_SHELL_ENV=1` - - Посилайтеся на змінні середовища в будь-якому рядковому значенні конфігурації через `${VAR_NAME}`: + + Посилайтеся на env vars у будь-якому рядковому значенні конфігурації через `${VAR_NAME}`: ```json5 { @@ -645,16 +646,16 @@ OpenClaw читає змінні середовища з батьківсько Правила: -- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*` +- Зіставляються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*` - Відсутні/порожні змінні спричиняють помилку під час завантаження - Екрануйте через `$${VAR}` для буквального виводу -- Працює всередині файлів `$include` +- Працює у файлах `$include` - Вбудована підстановка: `"${BASE}/v1"` → `"https://api.example.com/v1"` - Для полів, які підтримують об’єкти SecretRef, ви можете використовувати: + Для полів, що підтримують об’єкти SecretRef, можна використовувати: ```json5 { @@ -686,15 +687,15 @@ OpenClaw читає змінні середовища з батьківсько } ``` -Докладно про SecretRef (зокрема `secrets.providers` для `env`/`file`/`exec`) див. у [Керування секретами](/uk/gateway/secrets). -Підтримувані шляхи облікових даних наведено в [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface). +Подробиці про SecretRef (включно з `secrets.providers` для `env`/`file`/`exec`) наведено в [Керування секретами](/uk/gateway/secrets). +Підтримувані шляхи облікових даних перелічено в [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface). -Перегляньте [Середовище](/uk/help/environment) для повного опису пріоритетів і джерел. +Дивіться [Environment](/uk/help/environment) для повного пріоритету та джерел. ## Повний довідник -Повний довідник для кожного поля див. у **[Довідник з конфігурації](/uk/gateway/configuration-reference)**. +Повний довідник по полях дивіться в **[Довідник з конфігурації](/uk/gateway/configuration-reference)**. --- @@ -702,6 +703,6 @@ _Пов’язане: [Приклади конфігурації](/uk/gateway/co ## Пов’язане -- [довідник з конфігурації](/uk/gateway/configuration-reference) -- [приклади конфігурації](/uk/gateway/configuration-examples) -- [посібник з експлуатації Gateway](/uk/gateway) +- [Довідник з конфігурації](/uk/gateway/configuration-reference) +- [Приклади конфігурації](/uk/gateway/configuration-examples) +- [Runbook Gateway](/uk/gateway) diff --git a/docs/uk/nodes/talk.md b/docs/uk/nodes/talk.md index 01c9d6736..40608e1d4 100644 --- a/docs/uk/nodes/talk.md +++ b/docs/uk/nodes/talk.md @@ -1,36 +1,36 @@ --- read_when: - - Реалізація режиму Talk на macOS/iOS/Android - - Змінення поведінки голосу/TTS/переривання -summary: 'Режим Talk: безперервні голосові розмови з ElevenLabs TTS' -title: Режим Talk + - Реалізація режиму розмови на macOS/iOS/Android + - Зміна голосу/TTS/поведінки переривання +summary: 'Режим розмови: безперервні голосові розмови з налаштованими TTS-провайдерами' +title: Режим розмови x-i18n: - generated_at: "2026-04-23T23:01:17Z" + generated_at: "2026-04-25T07:53:39Z" model: gpt-5.4 provider: openai - source_hash: 49286cd39a104d4514eb1df75627a2f64182313b11792bb246f471178a702198 + source_hash: 84c99149c43bfe9fa4866b20271089d88d7e3d2f5abe6d16477a26915dad7829 source_path: nodes/talk.md workflow: 15 --- -Режим Talk — це безперервний цикл голосової розмови: +Режим розмови — це безперервний цикл голосової розмови: 1. Слухати мовлення 2. Надіслати транскрипт моделі (основна сесія, `chat.send`) 3. Дочекатися відповіді -4. Озвучити її через налаштованого провайдера Talk (`talk.speak`) +4. Озвучити її через налаштованого Talk-провайдера (`talk.speak`) ## Поведінка (macOS) -- **Завжди активний оверлей**, поки ввімкнено режим Talk. -- Переходи між фазами **Listening → Thinking → Speaking**. -- Після **короткої паузи** (вікно тиші) поточний транскрипт надсилається. -- Відповіді **записуються у WebChat** (так само, як під час введення тексту). -- **Переривання мовленням** (типово ввімкнено): якщо користувач починає говорити, поки assistant говорить, ми зупиняємо відтворення й фіксуємо часову мітку переривання для наступного prompt. +- **Постійно активне накладання**, поки режим розмови увімкнено. +- Переходи між фазами **Слухання → Обробка → Озвучення**. +- Під час **короткої паузи** (вікно тиші) поточний транскрипт надсилається. +- Відповіді **записуються у WebChat** (так само, як і під час введення тексту). +- **Переривання мовленням** (типово ввімкнено): якщо користувач починає говорити, поки помічник озвучує відповідь, ми зупиняємо відтворення й фіксуємо часову позначку переривання для наступного запиту. ## Голосові директиви у відповідях -Assistant може додати на початку відповіді **один рядок JSON**, щоб керувати голосом: +Помічник може додати на початок своєї відповіді **один рядок JSON**, щоб керувати голосом: ```json { "voice": "", "once": true } @@ -41,8 +41,8 @@ Assistant може додати на початку відповіді **оди - Лише перший непорожній рядок. - Невідомі ключі ігноруються. - `once: true` застосовується лише до поточної відповіді. -- Без `once` голос стає новим типовим голосом для режиму Talk. -- Рядок JSON прибирається перед відтворенням TTS. +- Без `once` голос стає новим типовим голосом для режиму розмови. +- Рядок JSON видаляється перед відтворенням через TTS. Підтримувані ключі: @@ -52,15 +52,24 @@ Assistant може додати на початку відповіді **оди - `seed`, `normalize`, `lang`, `output_format`, `latency_tier` - `once` -## Config (`~/.openclaw/openclaw.json`) +## Конфігурація (`~/.openclaw/openclaw.json`) ```json5 { talk: { - voiceId: "elevenlabs_voice_id", - modelId: "eleven_v3", - outputFormat: "mp3_44100_128", - apiKey: "elevenlabs_api_key", + provider: "elevenlabs", + providers: { + elevenlabs: { + voiceId: "elevenlabs_voice_id", + modelId: "eleven_v3", + outputFormat: "mp3_44100_128", + apiKey: "elevenlabs_api_key", + }, + mlx: { + modelId: "mlx-community/Soprano-80M-bf16", + }, + system: {}, + }, silenceTimeoutMs: 1500, interruptOnSpeech: true, }, @@ -70,34 +79,37 @@ Assistant може додати на початку відповіді **оди Типові значення: - `interruptOnSpeech`: true -- `silenceTimeoutMs`: якщо не задано, Talk зберігає типове для платформи вікно паузи перед надсиланням транскрипту (`700 ms` на macOS і Android, `900 ms` на iOS) -- `voiceId`: як запасний варіант використовується `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID` (або перший голос ElevenLabs, якщо доступний API key) -- `modelId`: якщо не задано, типово використовується `eleven_v3` -- `apiKey`: як запасний варіант використовується `ELEVENLABS_API_KEY` (або shell profile gateway, якщо доступний) -- `outputFormat`: типово `pcm_44100` на macOS/iOS і `pcm_24000` на Android (встановіть `mp3_*`, щоб примусово використовувати потокове MP3) +- `silenceTimeoutMs`: якщо не задано, Talk використовує типове для платформи вікно паузи перед надсиланням транскрипту (`700 ms` на macOS і Android, `900 ms` на iOS) +- `provider`: вибирає активного Talk-провайдера. Використовуйте `elevenlabs`, `mlx` або `system` для локальних шляхів відтворення на macOS. +- `providers..voiceId`: використовує `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID` як запасний варіант для ElevenLabs (або перший голос ElevenLabs, якщо доступний API-ключ). +- `providers.elevenlabs.modelId`: якщо не задано, типово використовується `eleven_v3`. +- `providers.mlx.modelId`: якщо не задано, типово використовується `mlx-community/Soprano-80M-bf16`. +- `providers.elevenlabs.apiKey`: використовує `ELEVENLABS_API_KEY` як запасний варіант (або профіль shell Gateway, якщо доступно). +- `outputFormat`: типово `pcm_44100` на macOS/iOS і `pcm_24000` на Android (встановіть `mp3_*`, щоб примусово використовувати MP3-стримінг) -## UI macOS +## Інтерфейс macOS - Перемикач у рядку меню: **Talk** -- Вкладка config: група **Talk Mode** (voice id + перемикач переривання) -- Оверлей: - - **Listening**: хмара пульсує з рівнем мікрофона +- Вкладка конфігурації: група **Talk Mode** (ідентифікатор голосу + перемикач переривання) +- Накладання: + - **Listening**: хмара пульсує відповідно до рівня мікрофона - **Thinking**: анімація занурення - **Speaking**: кільця, що розходяться - - Натискання на хмару: зупинити озвучення - - Натискання X: вийти з режиму Talk + - Натисніть на хмару: зупинити озвучення + - Натисніть X: вийти з режиму розмови ## Примітки -- Потребує дозволів Speech і Microphone. +- Потрібні дозволи на Speech і Microphone. - Використовує `chat.send` для ключа сесії `main`. -- Gateway виконує відтворення Talk через `talk.speak`, використовуючи активного провайдера Talk. Android використовує локальний системний TTS як запасний варіант лише тоді, коли цей RPC недоступний. +- Gateway виконує озвучення Talk через `talk.speak` з використанням активного Talk-провайдера. Android переходить на локальний системний TTS лише тоді, коли цей RPC недоступний. +- Локальне відтворення MLX на macOS використовує вбудований допоміжний інструмент `openclaw-mlx-tts`, якщо він доступний, або виконуваний файл у `PATH`. Установіть `OPENCLAW_MLX_TTS_BIN`, щоб указати на власний допоміжний бінарний файл під час розробки. - `stability` для `eleven_v3` перевіряється на значення `0.0`, `0.5` або `1.0`; інші моделі приймають `0..1`. -- `latency_tier`, якщо задано, перевіряється в діапазоні `0..4`. -- Android підтримує формати виводу `pcm_16000`, `pcm_22050`, `pcm_24000` і `pcm_44100` для низькозатримкового потокового AudioTrack. +- `latency_tier` перевіряється в діапазоні `0..4`, якщо його задано. +- Android підтримує формати виводу `pcm_16000`, `pcm_22050`, `pcm_24000` і `pcm_44100` для низьколатентного стримінгу через AudioTrack. ## Пов’язане -- [Пробудження голосом](/uk/nodes/voicewake) +- [Голосова активація](/uk/nodes/voicewake) - [Аудіо та голосові нотатки](/uk/nodes/audio) - [Розуміння медіа](/uk/nodes/media-understanding) diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index 72b8f3046..16bb13167 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -1,38 +1,36 @@ --- read_when: - - Ви хочете, щоб агент OpenClaw приєднався до виклику Google Meet - - Ви хочете, щоб агент OpenClaw створив новий виклик Google Meet - - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet -summary: 'Плагін Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими налаштуваннями голосу в реальному часі' -title: Плагін Google Meet + - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet + - Ви хочете, щоб агент OpenClaw створив новий дзвінок Google Meet + - Ви налаштовуєте Chrome, Node Chrome або Twilio як транспорт Google Meet +summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими параметрами голосу в реальному часі' +title: Plugin Google Meet x-i18n: - generated_at: "2026-04-25T07:33:10Z" + generated_at: "2026-04-25T07:53:47Z" model: gpt-5.4 provider: openai - source_hash: b1188bafd278197a094d37a4fe3310971a03852560a293edafe987b8618e1a09 + source_hash: 3329ea25e94eb20403464d041cd34de731b7620deeac6b32248655e885cd3729 source_path: plugins/google-meet.md workflow: 15 --- -Підтримка учасника Google Meet для OpenClaw — плагін навмисно має явний дизайн: +Підтримка учасників Google Meet для OpenClaw — Plugin є навмисно явним за дизайном: -- Він приєднується лише за явною URL-адресою `https://meet.google.com/...`. -- Він може створити новий простір Meet через API Google Meet, а потім приєднатися за поверненою URL-адресою. -- Голос `realtime` є режимом за замовчуванням. -- Голос у режимі реального часу може повертатися до повноцінного агента OpenClaw, коли потрібні глибші міркування або інструменти. -- Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/відповідей, або `transcribe`, щоб приєднатися/керувати браузером без голосового мосту `realtime`. -- Автентифікація починається як особистий Google OAuth або вже авторизований профіль Chrome. -- Автоматичного оголошення про згоду немає. -- Типовим аудіобекендом Chrome є `BlackHole 2ch`. -- Chrome може працювати локально або на підключеному вузлі. -- Twilio приймає номер для дозвону та необов’язкову послідовність PIN або DTMF. +- Він приєднується лише за явним URL `https://meet.google.com/...`. +- Він може створити новий простір Meet через Google Meet API, а потім приєднатися за повернутим URL. +- Голос `realtime` є типовим режимом. +- Голос у режимі реального часу може повертатися до повного агента OpenClaw, коли потрібні глибші міркування або інструменти. +- Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без голосового мосту реального часу. +- Автентифікація починається як персональний Google OAuth або вже виконаний вхід у профіль Chrome. +- Автоматичного оголошення згоди немає. +- Типовий аудіобекенд Chrome — `BlackHole 2ch`. +- Chrome може працювати локально або на підключеному хості Node. +- Twilio приймає номер для дозвону та необов’язковий PIN або послідовність DTMF. - Команда CLI — `googlemeet`; `meet` зарезервовано для ширших робочих процесів телеконференцій агента. ## Швидкий старт -Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера голосу `realtime`. -Типовим є OpenAI; Google Gemini Live також працює з -`realtime.provider: "google"`: +Встановіть локальні аудіозалежності та налаштуйте бекенд-провайдера голосу реального часу. OpenAI використовується за замовчуванням; Google Gemini Live також працює з `realtime.provider: "google"`: ```bash brew install blackhole-2ch sox @@ -41,21 +39,20 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew -вимагає перезавантаження, перш ніж macOS зробить пристрій доступним: +`blackhole-2ch` встановлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew вимагає перезавантаження, перш ніж macOS покаже цей пристрій: ```bash sudo reboot ``` -Після перезавантаження перевірте обидва компоненти: +Після перезавантаження перевірте обидві частини: ```bash system_profiler SPAudioDataType | grep -i BlackHole command -v rec play ``` -Увімкніть плагін: +Увімкніть Plugin: ```json5 { @@ -76,11 +73,9 @@ command -v rec play openclaw googlemeet setup ``` -Вивід налаштування призначений для читання агентом. Він повідомляє про профіль Chrome, -аудіоміст, прив’язку до вузла, відкладений вступ `realtime` і, коли налаштовано делегування Twilio, -чи готові плагін `voice-call` і облікові дані Twilio. -Будь-яку перевірку `ok: false` слід вважати блокувальним фактором, перш ніж просити агента приєднатися. -Для сценаріїв або машинозчитуваного виводу використовуйте `openclaw googlemeet setup --json`. +Вивід налаштування призначений для читання агентом. Він повідомляє про профіль Chrome, аудіоміст, прив’язку Node, відкладений вступ для realtime і, коли налаштовано делегування Twilio, чи готові Plugin `voice-call` і облікові дані Twilio. +Будь-яку перевірку `ok: false` слід вважати блокером, перш ніж просити агента приєднатися. +Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного виводу. Приєднайтеся до зустрічі: @@ -105,7 +100,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij openclaw googlemeet create --transport chrome-node --mode realtime ``` -Створіть лише URL-адресу без приєднання: +Створіть лише URL без приєднання: ```bash openclaw googlemeet create --no-join @@ -113,26 +108,14 @@ openclaw googlemeet create --no-join `googlemeet create` має два шляхи: -- Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це - найбільш детермінований шлях, який не залежить від стану інтерфейсу браузера. -- Резервний варіант через браузер: використовується, коли облікових даних OAuth немає. OpenClaw використовує - закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, поки Google - перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях вимагає, - щоб профіль OpenClaw Chrome на вузлі вже був авторизований у Google. - Автоматизація браузера обробляє власний початковий запит Meet щодо мікрофона; цей запит - не вважається збоєм входу в Google. - Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям - нової. Під час зіставлення ігноруються нешкідливі рядки параметрів URL, наприклад `authuser`, тому - повторна спроба агента має сфокусувати вже відкриту зустріч, а не створювати другу вкладку Chrome. +- Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найбільш детермінований шлях, який не залежить від стану UI браузера. +- Резервний шлях через браузер: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує закріплений Chrome Node, відкриває `https://meet.google.com/new`, чекає, поки Google перенаправить на реальний URL із кодом зустрічі, а потім повертає цей URL. Цей шлях вимагає, щоб у профілі OpenClaw Chrome на Node вже був виконаний вхід у Google. + Автоматизація браузера обробляє власний стартовий запит Meet на доступ до мікрофона; цей запит не вважається помилкою входу в Google. + Потоки приєднання і створення також намагаються повторно використати наявну вкладку Meet перед відкриттям нової. Під час зіставлення ігноруються нешкідливі рядки запиту URL, такі як `authuser`, тому повторна спроба агента має фокусувати вже відкриту зустріч, а не створювати другу вкладку Chrome. -Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти -могли пояснити, який шлях було використано. `create` за замовчуванням приєднується до нової зустрічі та -повертає `joined: true` разом із сеансом приєднання. Щоб лише згенерувати URL-адресу, використовуйте -`create --no-join` у CLI або передайте `"join": false` до інструмента. +Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти могли пояснити, який шлях було використано. `create` за замовчуванням приєднується до нової зустрічі та повертає `joined: true` разом із сеансом приєднання. Щоб лише згенерувати URL, використовуйте `create --no-join` у CLI або передайте `"join": false` до інструмента. -Або скажіть агенту: "Створи Google Meet, приєднайся до нього з голосом `realtime` і надішли -мені посилання." Агент має викликати `google_meet` з `action: "create"`, а -потім поділитися поверненим `meetingUri`. +Або скажіть агенту: "Створи Google Meet, приєднайся до нього з голосом у режимі реального часу та надішли мені посилання." Агент має викликати `google_meet` з `action: "create"`, а потім поділитися поверненим `meetingUri`. ```json { @@ -142,46 +125,29 @@ openclaw googlemeet create --no-join } ``` -Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це -не запускає двосторонній міст моделі `realtime`, тому він не буде відповідати голосом у -зустріч. +Для приєднання лише зі спостереженням/керуванням браузером встановіть `"mode": "transcribe"`. Це не запускає двонаправлений міст моделі реального часу, тому він не відповідатиме голосом у зустрічі. -Під час сеансів `realtime` статус `google_meet` містить відомості про стан браузера та аудіомосту, -такі як `inCall`, `manualActionRequired`, `providerConnected`, -`realtimeReady`, `audioInputActive`, `audioOutputActive`, часові мітки останнього вводу/виводу, -лічильники байтів і стан закриття мосту. Якщо з’являється безпечний запит сторінки Meet, -автоматизація браузера обробляє його, коли це можливо. Запити на вхід, допуск від хоста та -дозволи браузера/ОС повідомляються як ручна дія з причиною та -повідомленням для передачі агентом. +Під час сеансів у режимі реального часу статус `google_meet` містить стан браузера й аудіомосту, зокрема `inCall`, `manualActionRequired`, `providerConnected`, `realtimeReady`, `audioInputActive`, `audioOutputActive`, часові мітки останнього вводу/виводу, лічильники байтів і стан закриття мосту. Якщо з’являється безпечний запит сторінки Meet, автоматизація браузера обробляє його, коли може. Запити входу, допуску хостом і дозволів браузера/ОС повідомляються як ручна дія з причиною та повідомленням для передавання агентом. -Chrome приєднується як авторизований профіль Chrome. У Meet виберіть `BlackHole 2ch` для -шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двостороннього аудіо використовуйте -окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole -достатньо для першого smoke-тесту, але може виникати відлуння. +Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але він може створювати відлуння. ### Локальний Gateway + Parallels Chrome -Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM -лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть -хост вузла у VM. Увімкніть вбудований плагін у VM один раз, щоб вузол -рекламував команду Chrome: +Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть хост Node у VM. Увімкніть вбудований Plugin у VM один раз, щоб Node рекламував команду Chrome: Що де запускається: -- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, провайдер `realtime` - і конфігурація плагіна Google Meet. -- Parallels macOS VM: CLI/хост вузла OpenClaw, Google Chrome, SoX, BlackHole 2ch, - і профіль Chrome, авторизований у Google. -- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або - налаштування провайдера моделі. +- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, провайдер realtime і конфігурація Plugin Google Meet. +- Parallels macOS VM: CLI/хост Node OpenClaw, Google Chrome, SoX, BlackHole 2ch і профіль Chrome, у якому виконано вхід у Google. +- Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі. -Установіть залежності VM: +Встановіть залежності у VM: ```bash brew install blackhole-2ch sox ``` -Після встановлення BlackHole перезавантажте VM, щоб macOS зробила `BlackHole 2ch` доступним: +Перезавантажте VM після встановлення BlackHole, щоб macOS показала `BlackHole 2ch`: ```bash sudo reboot @@ -194,27 +160,26 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v rec play ``` -Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований плагін: +Встановіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin: ```bash openclaw plugins enable google-meet ``` -Запустіть хост вузла у VM: +Запустіть хост Node у VM: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` — це IP-адреса LAN і ви не використовуєте TLS, вузол відхилить -простий WebSocket, якщо ви явно не дозволите це для довіреної приватної мережі: +Якщо `` — це IP-адреса локальної мережі й ви не використовуєте TLS, Node відхилить відкритий WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -Використовуйте ту саму змінну середовища під час установлення вузла як LaunchAgent: +Використовуйте ту саму змінну середовища, коли встановлюєте Node як LaunchAgent: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -222,25 +187,22 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node restart ``` -`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це змінна середовища процесу, а не -налаштування `openclaw.json`. `openclaw node install` зберігає її в середовищі LaunchAgent, -коли вона присутня в команді встановлення. +`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це змінна середовища процесу, а не параметр `openclaw.json`. `openclaw node install` зберігає її в середовищі LaunchAgent, коли вона присутня в команді встановлення. -Підтвердьте вузол з хоста Gateway: +Схваліть Node із хоста Gateway: ```bash openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить вузол і що він рекламує як `googlemeet.chrome`, -так і можливість браузера/`browser.proxy`: +Підтвердьте, що Gateway бачить Node і що він рекламує і `googlemeet.chrome`, і можливість браузера/`browser.proxy`: ```bash openclaw nodes status ``` -Спрямуйте Meet через цей вузол на хості Gateway: +Спрямуйте Meet через цей Node на хості Gateway: ```json5 { @@ -270,7 +232,7 @@ openclaw nodes status } ``` -Тепер приєднуйтеся звичайним способом з хоста Gateway: +Тепер приєднуйтеся як зазвичай із хоста Gateway: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -278,78 +240,46 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`. -Для smoke-тесту однією командою, який створює або повторно використовує сеанс, промовляє -відоме речення та виводить стан сеансу: +Для однокомандного smoke-тесту, який створює або повторно використовує сеанс, промовляє відому фразу та виводить стан сеансу: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij ``` -Під час приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає Join/Ask -to join і приймає початковий вибір Meet "Use microphone", коли з’являється цей запит. -Під час створення зустрічі лише через браузер вона також може пройти -той самий запит без мікрофона, якщо Meet не показує кнопку use-microphone. -Якщо профіль браузера не авторизований, Meet очікує -допуску від хоста, Chrome потребує дозволу на мікрофон/камеру, або Meet застряг на -запиті, який автоматизація не змогла обробити, результат join/test-speech повідомляє -`manualActionRequired: true` разом із `manualActionReason` і -`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, -передати саме це повідомлення разом із поточними `browserUrl`/`browserTitle`, -і повторювати спробу лише після завершення ручної дії в браузері. +Під час приєднання автоматизація браузера OpenClaw заповнює гостьове ім’я, натискає Join/Ask to join і приймає стартовий вибір Meet "Use microphone", коли з’являється цей запит. Під час створення зустрічі лише через браузер вона також може пройти далі через той самий запит без мікрофона, якщо Meet не показує кнопку використання мікрофона. +Якщо у профілі браузера не виконано вхід, Meet очікує допуску хостом, Chrome потребує дозволу на мікрофон/камеру або Meet завис на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє +`manualActionRequired: true` з `manualActionReason` і +`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити це точне повідомлення разом із поточними `browserUrl`/`browserTitle` і повторити спробу лише після завершення ручної дії в браузері. -Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один -підключений вузол рекламує і `googlemeet.chrome`, і керування браузером. Якщо -підключено кілька придатних вузлів, установіть `chromeNode.node` на ідентифікатор вузла, -відображуване ім’я або віддалену IP-адресу. +Якщо `chromeNode.node` пропущено, OpenClaw виконує автовибір лише тоді, коли рівно один підключений Node рекламує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних Node, установіть `chromeNode.node` у ідентифікатор Node, відображуване ім’я або віддалену IP-адресу. Поширені перевірки збоїв: -- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, - підтвердьте сполучення і переконайтеся, що у VM було виконано - `openclaw plugins enable google-meet` і - `openclaw plugins enable browser`. Також переконайтеся, що - хост Gateway дозволяє обидві команди вузла через +- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, схваліть сполучення та переконайтеся, що у VM було виконано `openclaw plugins enable google-meet` і `openclaw plugins enable browser`. Також підтвердьте, що хост Gateway дозволяє обидві команди Node за допомогою `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. -- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` - у VM і перезавантажте VM. -- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера у VM або - залиште `chrome.guestName` встановленим для гостьового входу. Автоматичне гостьове приєднання використовує - автоматизацію браузера OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла - вказує на потрібний профіль, наприклад - `browser.defaultProfile: "user"` або іменований профіль наявного сеансу. -- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw - активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової, а - створення зустрічі в браузері повторно використовує вкладку `https://meet.google.com/new`, - що перебуває в процесі, або вкладку запиту облікового запису Google, перш ніж відкривати ще одну. -- Немає звуку: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, - який використовує OpenClaw; для чистого двостороннього аудіо використовуйте окремі віртуальні пристрої - або маршрутизацію у стилі Loopback. +- `BlackHole 2ch audio device not found on the node`: встановіть `blackhole-2ch` у VM і перезавантажте VM. +- Chrome відкривається, але не може приєднатися: виконайте вхід у профіль браузера всередині VM або залиште `chrome.guestName` установленим для гостьового приєднання. Автоприєднання гостя використовує автоматизацію браузера OpenClaw через проксі браузера Node; переконайтеся, що конфігурація браузера Node вказує на потрібний вам профіль, наприклад + `browser.defaultProfile: "user"` або іменований профіль наявної сесії. +- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для того самого URL Meet перед відкриттям нової, а створення зустрічі через браузер повторно використовує вкладку `https://meet.google.com/new`, що триває, або вкладку запиту облікового запису Google, перш ніж відкривати іншу. +- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback для чистого дуплексу аудіо. ## Примітки щодо встановлення -Типовий режим `realtime` для Chrome використовує два зовнішні інструменти: +Типовий режим realtime для Chrome використовує два зовнішні інструменти: -- `sox`: утиліта командного рядка для роботи з аудіо. Плагін використовує її команди `rec` і `play` - для типового аудіомосту 8 кГц G.711 mu-law. -- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, - через який Chrome/Meet можуть маршрутизувати звук. +- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомосту G.711 mu-law 8 кГц. +- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet можуть маршрутизувати аудіо. -OpenClaw не постачає і не розповсюджує жоден із цих пакетів. У документації користувачам -пропонується встановити їх як залежності хоста через Homebrew. SoX ліцензовано як -`LGPL-2.0-only AND GPL-2.0-only`; BlackHole — GPL-3.0. Якщо ви збираєте інсталятор або -пристрій, що постачається з BlackHole разом з OpenClaw, перегляньте умови ліцензування BlackHole -від постачальника або отримайте окрему ліцензію від Existential Audio. +OpenClaw не постачає й не розповсюджує жоден із цих пакетів. Документація просить користувачів установлювати їх як залежності хоста через Homebrew. SoX ліцензовано як +`LGPL-2.0-only AND GPL-2.0-only`; BlackHole — GPL-3.0. Якщо ви збираєте інсталятор або appliance, що включає BlackHole разом з OpenClaw, перегляньте умови висхідної ліцензії BlackHole або отримайте окрему ліцензію від Existential Audio. ## Транспорти ### Chrome -Транспорт Chrome відкриває URL-адресу Meet у Google Chrome і приєднується як авторизований -профіль Chrome. На macOS плагін перед запуском перевіряє наявність `BlackHole 2ch`. -Якщо налаштовано, він також виконує команду перевірки стану аудіомосту та команду запуску -перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; -використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному вузлі, наприклад у Parallels -macOS VM. +Транспорт Chrome відкриває URL Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. У macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`. +Якщо налаштовано, він також виконує команду перевірки стану аудіомосту та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; +використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному Node, наприклад у Parallels macOS VM. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome @@ -357,19 +287,19 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome ``` Спрямуйте аудіо мікрофона та динаміка Chrome через локальний аудіоміст OpenClaw. -Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування, -замість того щоб тихо приєднатися без аудіошляху. +Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування +замість тихого приєднання без аудіошляху. ### Twilio -Транспорт Twilio — це суворий план набору, делегований плагіну Voice Call. Він -не аналізує сторінки Meet, щоб отримати номери телефонів. +Транспорт Twilio — це строгий план дозвону, делегований Plugin Voice Call. Він +не аналізує сторінки Meet у пошуку телефонних номерів. -Використовуйте це, коли участь через Chrome недоступна або коли вам потрібен резервний -варіант із телефонним дозвоном. Google Meet має показувати номер для дозвону та PIN для -зустрічі; OpenClaw не отримує ці дані зі сторінки Meet. +Використовуйте це, коли участь через Chrome недоступна або коли вам потрібен +резервний варіант дозвону телефоном. Google Meet має показувати номер для +телефонного дозвону та PIN для зустрічі; OpenClaw не знаходить їх на сторінці Meet. -Увімкніть плагін Voice Call на хості Gateway, а не на вузлі Chrome: +Увімкніть Plugin Voice Call на хості Gateway, а не на Chrome Node: ```json5 { @@ -394,8 +324,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome } ``` -Надайте облікові дані Twilio через середовище або конфігурацію. Середовище дозволяє -не зберігати секрети в `openclaw.json`: +Надайте облікові дані Twilio через середовище або конфігурацію. Середовище +дозволяє не зберігати секрети в `openclaw.json`: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -403,8 +333,8 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації плагіна -не з’являються в уже запущеному процесі Gateway, доки його не буде перезавантажено. +Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни +конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -414,7 +344,7 @@ openclaw plugins list | grep -E 'google-meet|voice-call' openclaw googlemeet setup ``` -Коли делегування Twilio налаштовано, `googlemeet setup` містить успішні +Коли делегування Twilio підключено, `googlemeet setup` містить успішні перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. ```bash @@ -436,19 +366,19 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ ## OAuth і попередня перевірка OAuth є необов’язковим для створення посилання Meet, оскільки `googlemeet create` може -використовувати резервний варіант через автоматизацію браузера. Налаштуйте OAuth, якщо вам потрібне офіційне створення через API, -визначення простору або попередні перевірки Meet Media API. +повернутися до автоматизації браузера. Налаштуйте OAuth, якщо вам потрібні офіційне +створення через API, розв’язання просторів або попередні перевірки Meet Media API. -Доступ до Google Meet API використовує OAuth користувача: створіть клієнт OAuth у Google Cloud, +Доступ до Google Meet API використовує користувацький OAuth: створіть клієнт Google Cloud OAuth, запросіть потрібні області доступу, авторизуйте обліковий запис Google, а потім збережіть -отриманий refresh token у конфігурації плагіна Google Meet або надайте -змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +отриманий refresh token у конфігурації Plugin Google Meet або надайте змінні середовища +`OPENCLAW_GOOGLE_MEET_*`. OAuth не замінює шлях приєднання через Chrome. Транспорти Chrome і Chrome-node -усе одно приєднуються через авторизований профіль Chrome, BlackHole/SoX і підключений -вузол, коли ви використовуєте участь через браузер. OAuth потрібен лише для офіційного -шляху Google Meet API: створення просторів зустрічей, визначення просторів і запуску -попередніх перевірок Meet Media API. +усе одно приєднуються через профіль Chrome, у якому виконано вхід, BlackHole/SoX +і підключений Node, коли ви використовуєте участь через браузер. OAuth потрібен лише +для офіційного шляху Google Meet API: створення просторів зустрічей, розв’язання просторів +і запуск попередніх перевірок Meet Media API. ### Створення облікових даних Google @@ -457,8 +387,8 @@ OAuth не замінює шлях приєднання через Chrome. Тр 1. Створіть або виберіть проєкт Google Cloud. 2. Увімкніть **Google Meet REST API** для цього проєкту. 3. Налаштуйте екран згоди OAuth. - - **Internal** — найпростіший варіант для організації Google Workspace. - - **External** працює для персональних/тестових налаштувань; поки застосунок перебуває у статусі Testing, + - **Internal** є найпростішим для організації Google Workspace. + - **External** підходить для персональних/тестових налаштувань; поки застосунок перебуває в режимі Testing, додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача. 4. Додайте області доступу, які запитує OpenClaw: - `https://www.googleapis.com/auth/meetings.space.created` @@ -466,7 +396,7 @@ OAuth не замінює шлях приєднання через Chrome. Тр - `https://www.googleapis.com/auth/meetings.conference.media.readonly` 5. Створіть OAuth client ID. - Тип застосунку: **Web application**. - - Дозволений redirect URI: + - Авторизований redirect URI: ```text http://localhost:8085/oauth2callback @@ -475,14 +405,14 @@ OAuth не замінює шлях приєднання через Chrome. Тр 6. Скопіюйте client ID і client secret. `meetings.space.created` потрібен для Google Meet `spaces.create`. -`meetings.space.readonly` дозволяє OpenClaw визначати простори за URL-адресами/кодами Meet. -`meetings.conference.media.readonly` призначений для попередніх перевірок Meet Media API і роботи -з медіа; Google може вимагати участі в Developer Preview для фактичного використання Media API. +`meetings.space.readonly` дозволяє OpenClaw розв’язувати URL/коди Meet у простори. +`meetings.conference.media.readonly` призначений для попередньої перевірки Meet Media API і роботи з медіа; +Google може вимагати реєстрації в Developer Preview для фактичного використання Media API. Якщо вам потрібні лише приєднання через Chrome на основі браузера, повністю пропустіть OAuth. ### Отримання refresh token -Налаштуйте `oauth.clientId` і, за бажання, `oauth.clientSecret`, або передайте їх як +Налаштуйте `oauth.clientId` і за бажанням `oauth.clientSecret`, або передайте їх як змінні середовища, а потім виконайте: ```bash @@ -490,8 +420,8 @@ openclaw googlemeet auth login --json ``` Команда виводить блок конфігурації `oauth` з refresh token. Вона використовує PKCE, -локальний callback на `http://localhost:8085/oauth2callback` і ручний -потік копіювання/вставлення з `--manual`. +localhost callback на `http://localhost:8085/oauth2callback` і ручний +процес копіювання/вставлення з `--manual`. Приклади: @@ -524,7 +454,7 @@ openclaw googlemeet auth login --json --manual } ``` -Збережіть об’єкт `oauth` у конфігурації плагіна Google Meet: +Збережіть об’єкт `oauth` у конфігурації Plugin Google Meet: ```json5 { @@ -546,38 +476,38 @@ openclaw googlemeet auth login --json --manual ``` Надавайте перевагу змінним середовища, якщо не хочете зберігати refresh token у конфігурації. -Якщо присутні і значення в конфігурації, і значення середовища, плагін спочатку використовує конфігурацію, +Якщо присутні і значення конфігурації, і значення середовища, Plugin спочатку використовує конфігурацію, а потім резервні значення середовища. -Згода OAuth включає створення просторів Meet, доступ на читання до просторів Meet і доступ на читання до -медіа конференцій Meet. Якщо ви проходили автентифікацію до того, як з’явилася підтримка +Згода OAuth включає створення простору Meet, доступ на читання простору Meet і доступ +на читання конференц-медіа Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh token мав область доступу `meetings.space.created`. ### Перевірка OAuth за допомогою doctor -Запустіть OAuth doctor, коли потрібна швидка перевірка стану без доступу до секретів: +Запускайте doctor для OAuth, коли вам потрібна швидка перевірка стану без секретів: ```bash openclaw googlemeet doctor --oauth --json ``` -Це не завантажує середовище виконання Chrome і не вимагає підключеного вузла Chrome. Воно +Це не завантажує середовище виконання Chrome і не потребує підключеного Chrome Node. Воно перевіряє, що конфігурація OAuth існує і що refresh token може отримати access -token. Звіт у JSON містить лише поля стану, як-от `ok`, `configured`, -`tokenSource`, `expiresAt` і повідомлення перевірок; він не виводить access +token. Звіт JSON містить лише поля стану, такі як `ok`, `configured`, +`tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access token, refresh token або client secret. Поширені результати: | Перевірка | Значення | | -------------------- | --------------------------------------------------------------------------------------- | -| `oauth-config` | Наявні `oauth.clientId` плюс `oauth.refreshToken`, або кешований access token. | +| `oauth-config` | Присутні `oauth.clientId` плюс `oauth.refreshToken` або кешований access token. | | `oauth-token` | Кешований access token усе ще дійсний, або refresh token отримав новий access token. | -| `meet-spaces-get` | Необов’язкова перевірка `--meeting` визначила наявний простір Meet. | -| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | +| `meet-spaces-get` | Необов’язкова перевірка `--meeting` розв’язала наявний простір Meet. | +| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | -Щоб також підтвердити ввімкнення Google Meet API і область доступу `spaces.create`, виконайте +Щоб також підтвердити ввімкнення Google Meet API і область доступу `spaces.create`, запустіть перевірку створення з побічним ефектом: ```bash @@ -585,7 +515,7 @@ openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -`--create-space` створює тимчасову URL-адресу Meet. Використовуйте це, коли потрібно підтвердити, +`--create-space` створює тимчасовий URL Meet. Використовуйте його, коли потрібно підтвердити, що в проєкті Google Cloud увімкнено Meet API і що авторизований обліковий запис має область доступу `meetings.space.created`. @@ -597,14 +527,14 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` `doctor --oauth --meeting` і `resolve-space` підтверджують доступ на читання до наявного -простору, до якого має доступ авторизований обліковий запис Google. `403` у відповідь на ці перевірки +простору, до якого має доступ авторизований обліковий запис Google. `403` від цих перевірок зазвичай означає, що Google Meet REST API вимкнено, у refresh token після згоди -відсутня потрібна область доступу або обліковий запис Google не має доступу до цього простору Meet. -Помилка refresh token означає, що слід повторно виконати `openclaw googlemeet auth login +немає потрібної області доступу або обліковий запис Google не має доступу до цього простору Meet. +Помилка refresh token означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. -Для резервного варіанта через браузер облікові дані OAuth не потрібні. У цьому режимі Google -auth надходить із авторизованого профілю Chrome на вибраному вузлі, а не з +Для резервного шляху через браузер облікові дані OAuth не потрібні. У цьому режимі Google +auth походить із профілю Chrome, у якому виконано вхід, на вибраному Node, а не з конфігурації OpenClaw. Як резервні значення приймаються такі змінні середовища: @@ -618,7 +548,7 @@ auth надходить із авторизованого профілю Chrome - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Визначте URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: +Розв’яжіть URL Meet, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij @@ -630,7 +560,7 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij ``` -Виведіть артефакти зустрічі та відвідуваність після того, як Meet створить записи конференції: +Перелічіть артефакти зустрічі та відвідуваність після того, як Meet створить записи конференції: ```bash openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij @@ -642,7 +572,7 @@ openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --outp найновіший запис конференції. Передайте `--all-conference-records`, якщо вам потрібні всі збережені записи для цієї зустрічі. -Пошук у календарі може визначити URL-адресу зустрічі з Google Calendar перед читанням +Пошук у календарі може розв’язати URL зустрічі з Google Calendar перед читанням артефактів Meet: ```bash @@ -653,13 +583,13 @@ openclaw googlemeet attendance --today --format csv --output attendance.csv ``` `--today` шукає в сьогоднішньому календарі `primary` подію Calendar з -посиланням Google Meet. Використовуйте `--event ` для пошуку збігів у тексті події, і -`--calendar ` для неосновного календаря. Пошук у календарі вимагає свіжого +посиланням Google Meet. Використовуйте `--event ` для пошуку за відповідним текстом події, і +`--calendar ` для календаря, відмінного від primary. Пошук у Calendar вимагає нового входу OAuth, який включає область доступу лише для читання подій Calendar. `calendar-events` попередньо показує відповідні події Meet і позначає подію, яку виберуть `latest`, `artifacts`, `attendance` або `export`. -Якщо ви вже знаєте id запису конференції, звертайтеся безпосередньо до нього: +Якщо ви вже знаєте ідентифікатор запису конференції, звертайтеся до нього безпосередньо: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -678,27 +608,52 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format csv --output meet-attendance.csv openclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --zip --output meet-export +openclaw googlemeet export --conference-record conferenceRecords/abc123 \ + --include-doc-bodies --dry-run ``` -`artifacts` повертає метадані запису конференції разом із метаданими ресурсів учасників, запису, -транскрипту, структурованих записів транскрипту та smart-note, коли -Google надає їх для зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити -пошук записів для великих зустрічей. `attendance` розгортає учасників у -рядки сеансів учасників із часом першої/останньої появи, загальною тривалістю сеансу, -прапорцями пізнього входу/раннього виходу та об’єднанням дублікатів ресурсів учасників за авторизованим -користувачем або відображуваним ім’ям. Передайте `--no-merge-duplicates`, щоб зберегти окремі -сирі ресурси учасників, `--late-after-minutes`, щоб налаштувати визначення запізнення, і -`--early-before-minutes`, щоб налаштувати визначення раннього виходу. +`artifacts` повертає метадані запису конференції, а також метадані ресурсів +учасників, запису, транскрипту, структурованих записів транскрипту та smart-note, +коли Google надає їх для цієї зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити +отримання записів для великих зустрічей. `attendance` розгортає учасників у +рядки participant-session із часом першої/останньої появи, загальною тривалістю сесії, +прапорцями запізнення/раннього виходу та об’єднанням дублікатів ресурсів учасників за +користувачем, у якому виконано вхід, або за відображуваним іменем. Передайте `--no-merge-duplicates`, щоб +зберегти сирі ресурси учасників окремо, `--late-after-minutes`, щоб налаштувати +визначення запізнення, і `--early-before-minutes`, щоб налаштувати визначення раннього виходу. `export` записує папку, що містить `summary.md`, `attendance.csv`, -`transcript.md`, `artifacts.json` і `attendance.json`. Передайте `--zip`, щоб також -записати переносний архів поруч із папкою. Передайте `--include-doc-bodies`, щоб -експортувати текст пов’язаних Google Docs для транскрипту та smart-note через Google Drive -`files.export`; для цього потрібен новий вхід OAuth, який включає область доступу Drive Meet -readonly. Без `--include-doc-bodies` експорт містить лише метадані Meet -і структуровані записи транскрипту. +`transcript.md`, `artifacts.json`, `attendance.json` і `manifest.json`. +`manifest.json` фіксує вибраний вхід, параметри експорту, записи конференції, +вихідні файли, кількості, джерело токена, подію Calendar, якщо її було використано, і +будь-які попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів +поруч із папкою. Передайте `--include-doc-bodies`, щоб експортувати зв’язаний текст Google Docs +для транскриптів і smart-note через Google Drive `files.export`; для цього потрібен +новий вхід OAuth, що включає область доступу Drive Meet readonly. Без +`--include-doc-bodies` експорт містить лише метадані Meet і структуровані записи +транскрипту. Якщо Google повертає часткову помилку артефакту, наприклад помилку списку smart-note, +запису транскрипту або тіла документа Drive, summary і +manifest зберігають попередження замість збою всього експорту. +Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та вивести +JSON manifest без створення папки або ZIP. Це корисно перед записом +великого експорту або коли агенту потрібні лише кількості, вибрані записи та +попередження. -Запустіть захищений live smoke для реальної збереженої зустрічі: +Агенти також можуть створити той самий пакет через інструмент `google_meet`: + +```json +{ + "action": "export", + "conferenceRecord": "conferenceRecords/abc123", + "includeDocumentBodies": true, + "outputDir": "meet-export", + "zip": true +} +``` + +Установіть `"dryRun": true`, щоб повернути лише manifest експорту й пропустити запис файлів. + +Запустіть захищений live smoke-тест на реальній збереженій зустрічі: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -706,6 +661,27 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts ``` +Середовище live smoke-тесту: + +- `OPENCLAW_LIVE_TEST=1` вмикає захищені live-тести. +- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережений URL Meet, код або + `spaces/{id}`. +- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає OAuth + client id. +- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає + refresh token. +- Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, + `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і + `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні назви + без префікса `OPENCLAW_`. + +Базовий live smoke-тест для артефактів/відвідуваності потребує +`https://www.googleapis.com/auth/meetings.space.readonly` і +`https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошук у Calendar +потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт +тіла документа Drive потребує +`https://www.googleapis.com/auth/drive.meet.readonly`. + Створіть новий простір Meet: ```bash @@ -714,11 +690,11 @@ openclaw googlemeet create Команда виводить новий `meeting uri`, джерело та сеанс приєднання. За наявності облікових даних OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона -використовує авторизований профіль браузера закріпленого вузла Chrome як резервний варіант. Агенти можуть -використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один +використовує профіль браузера, у якому виконано вхід, на закріпленому Chrome Node як резервний варіант. Агенти можуть +використовувати інструмент `google_meet` з `action: "create"`, щоб створити і приєднатися за один крок. Для створення лише URL передайте `"join": false`. -Приклад виводу JSON із резервного варіанта через браузер: +Приклад виводу JSON із резервного шляху браузера: ```json { @@ -738,9 +714,9 @@ openclaw googlemeet create } ``` -Якщо резервний варіант через браузер натрапляє на вхід Google або блокування дозволів Meet до того, -як зможе створити URL, метод Gateway повертає відповідь із помилкою, а -інструмент `google_meet` повертає структуровані відомості замість простого рядка: +Якщо резервний шлях браузера натрапляє на вхід Google або блокування дозволів Meet до того, +як зможе створити URL, метод Gateway повертає невдалу відповідь, а +інструмент `google_meet` повертає структуровані деталі замість простого рядка: ```json { @@ -753,14 +729,14 @@ openclaw googlemeet create "nodeId": "ba0f4e4bc...", "targetId": "tab-1", "browserUrl": "https://accounts.google.com/signin", - "browserTitle": "Вхід — Google Accounts" + "browserTitle": "Вхід - Google Accounts" } } ``` -Коли агент бачить `manualActionRequired: true`, він має передати -`manualActionMessage` разом із контекстом вузла/вкладки браузера і припинити відкривати нові -вкладки Meet, доки оператор не завершить дію в браузері. +Коли агент бачить `manualActionRequired: true`, він має повідомити +`manualActionMessage` разом із контекстом вузла/вкладки браузера та припинити відкривати нові +вкладки Meet, доки оператор не завершить крок у браузері. Приклад виводу JSON зі створення через API: @@ -783,20 +759,20 @@ openclaw googlemeet create } ``` -Створення Meet за замовчуванням виконує приєднання. Транспорт Chrome або Chrome-node усе ще -потребує авторизованого профілю Google Chrome для приєднання через браузер. Якщо -профіль вийшов із системи, OpenClaw повідомляє `manualActionRequired: true` або -помилку резервного варіанта браузера й просить оператора завершити вхід у Google перед +Створення Meet за замовчуванням також приєднує. Транспорт Chrome або Chrome-node +усе одно потребує профілю Google Chrome, у якому виконано вхід, щоб приєднатися через браузер. Якщо +у профілі виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або +помилку резервного шляху браузера та просить оператора завершити вхід у Google перед повторною спробою. Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud -проєкт, OAuth principal і учасники зустрічі зареєстровані в програмі Google -Workspace Developer Preview Program для медіа-API Meet. +проєкт, принципал OAuth і учасники зустрічі зареєстровані в Google +Workspace Developer Preview Program для Meet media APIs. ## Конфігурація -Типовий шлях Chrome `realtime` потребує лише ввімкненого плагіна, BlackHole, SoX -і ключа бекенд-провайдера голосу `realtime`. Типовим є OpenAI; установіть +Для поширеного шляху realtime через Chrome потрібні лише ввімкнений Plugin, BlackHole, SoX +і ключ бекенд-провайдера голосу реального часу. OpenAI використовується за замовчуванням; установіть `realtime.provider: "google"`, щоб використовувати Google Gemini Live: ```bash @@ -806,7 +782,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -Установіть конфігурацію плагіна в `plugins.entries.google-meet.config`: +Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`: ```json5 { @@ -821,30 +797,29 @@ export GEMINI_API_KEY=... } ``` -Значення за замовчуванням: +Типові значення: - `defaultTransport: "chrome"` - `defaultMode: "realtime"` -- `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node` +- `chromeNode.node`: необов’язковий id/ім’я/IP Node для `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.guestName: "OpenClaw Agent"`: ім’я, яке використовується на екрані гостя Meet - без входу -- `chrome.autoJoin: true`: найкраща можлива спроба заповнення імені гостя й натискання Join Now +- `chrome.guestName: "OpenClaw Agent"`: ім’я, яке використовується на екрані гостя Meet, коли вхід не виконано +- `chrome.autoJoin: true`: заповнення гостьового імені та натискання Join Now з найкращим зусиллям через автоматизацію браузера OpenClaw на `chrome-node` - `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкриття дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить про стан у дзвінку, - перед тим як буде запущено вступ `realtime` -- `chrome.audioInputCommand`: команда SoX `rec`, яка записує аудіо 8 кГц G.711 mu-law +- `chrome.waitForInCallMs: 20000`: очікувати, доки вкладка Meet повідомить про стан in-call + перед запуском вступного повідомлення realtime +- `chrome.audioInputCommand`: команда SoX `rec`, яка записує аудіо G.711 mu-law 8 кГц у stdout -- `chrome.audioOutputCommand`: команда SoX `play`, яка читає аудіо 8 кГц G.711 mu-law - зі stdin +- `chrome.audioOutputCommand`: команда SoX `play`, яка читає аудіо G.711 mu-law 8 кГц + із stdin - `realtime.provider: "openai"` - `realtime.toolPolicy: "safe-read-only"` - `realtime.instructions`: короткі усні відповіді з `openclaw_agent_consult` для глибших відповідей -- `realtime.introMessage`: коротка усна перевірка готовності, коли міст `realtime` - підключається; установіть `""`, щоб приєднатися без звуку +- `realtime.introMessage`: коротка усна перевірка готовності, коли realtime-міст + підключається; установіть `""`, щоб приєднатися безшумно Необов’язкові перевизначення: @@ -864,7 +839,7 @@ export GEMINI_API_KEY=... realtime: { provider: "google", toolPolicy: "owner", - introMessage: "Скажи рівно: Я тут.", + introMessage: "Say exactly: I'm here.", providers: { google: { model: "gemini-2.5-flash-native-audio-preview-12-2025", @@ -890,10 +865,10 @@ export GEMINI_API_KEY=... } ``` -`voiceCall.enabled` за замовчуванням має значення `true`; з транспортом Twilio він делегує -фактичний PSTN-дзвінок і DTMF плагіну Voice Call. Якщо `voice-call` не -увімкнено, Google Meet усе ще може перевірити та записати план набору, але не може -виконати дзвінок Twilio. +`voiceCall.enabled` типово має значення `true`; з транспортом Twilio він делегує +фактичний PSTN-дзвінок і DTMF до Plugin Voice Call. Якщо `voice-call` не ввімкнено, +Google Meet усе одно може перевіряти і записувати план дозвону, але не може +здійснити дзвінок через Twilio. ## Інструмент @@ -909,58 +884,59 @@ export GEMINI_API_KEY=... ``` Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте -`transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у Parallels -VM. В обох випадках модель `realtime` і `openclaw_agent_consult` працюють на -хості Gateway, тому облікові дані моделі залишаються там. +`transport: "chrome-node"`, коли Chrome працює на підключеному Node, наприклад у Parallels +VM. В обох випадках модель realtime і `openclaw_agent_consult` працюють на +хості Gateway, тож облікові дані моделі залишаються там. -Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити id сеансу. Використовуйте -`action: "speak"` із `sessionId` і `message`, щоб змусити агента `realtime` -негайно говорити. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, +Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити ID сесії. Використовуйте +`action: "speak"` із `sessionId` і `message`, щоб змусити realtime-агента +говорити негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію, запустити відому фразу та повернути стан `inCall`, коли хост Chrome може -його повідомити. Використовуйте `action: "leave"`, щоб позначити сеанс як завершений. +його повідомити. Використовуйте `action: "leave"`, щоб позначити сесію як завершену. `status` містить стан Chrome, коли він доступний: -- `inCall`: схоже, що Chrome перебуває всередині виклику Meet -- `micMuted`: найкраща можлива оцінка стану мікрофона Meet -- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю - браузера потрібен ручний вхід, допуск хоста Meet, дозволи або - відновлення керування браузером, перш ніж мовлення запрацює -- `providerConnected` / `realtimeReady`: стан голосового мосту `realtime` -- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане з мосту або надіслане до нього +- `inCall`: Chrome, імовірно, перебуває всередині дзвінка Meet +- `micMuted`: стан мікрофона Meet з найкращим зусиллям +- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профіль + браузера потребує ручного входу, допуску хостом у Meet, дозволів або + відновлення керування браузером, перш ніж мовлення зможе працювати +- `providerConnected` / `realtimeReady`: стан голосового мосту realtime +- `lastInputAt` / `lastOutputAt`: час останнього аудіо, отриманого з мосту або надісланого до нього ```json { "action": "speak", "sessionId": "meet_...", - "message": "Скажи рівно: Я тут і слухаю." + "message": "Say exactly: I'm here and listening." } ``` -## Консультація агента в режимі реального часу +## Консультація realtime-агента -Режим Chrome `realtime` оптимізований для живого голосового циклу. Провайдер голосу `realtime` +Режим Chrome realtime оптимізовано для живого голосового циклу. Провайдер голосу realtime чує аудіо зустрічі та говорить через налаштований аудіоміст. -Коли моделі `realtime` потрібні глибші міркування, актуальна інформація або звичайні +Коли моделі realtime потрібні глибші міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з контекстом -нещодавнього транскрипту зустрічі та повертає стислу усну відповідь до голосового сеансу `realtime`. Потім голосова модель може озвучити цю відповідь назад у зустріч. -Він використовує той самий спільний інструмент консультації `realtime`, що й Voice Call. +Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з контекстом +недавнього транскрипту зустрічі та повертає стислу усну відповідь до голосової сесії realtime. Потім +голосова модель може озвучити цю відповідь у зустрічі. +Він використовує той самий спільний інструмент консультації realtime, що й Voice Call. -`realtime.toolPolicy` керує запуском консультації: +`realtime.toolPolicy` керує запуском consult: -- `safe-read-only`: показувати інструмент консультації та обмежувати звичайного агента +- `safe-read-only`: показати інструмент consult і обмежити звичайного агента інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. -- `owner`: показувати інструмент консультації та дозволяти звичайному агенту використовувати - стандартну політику інструментів агента. -- `none`: не показувати інструмент консультації моделі голосу `realtime`. +- `owner`: показати інструмент consult і дозволити звичайному агенту використовувати звичайну + політику інструментів агента. +- `none`: не показувати інструмент consult моделі голосу realtime. -Ключ сеансу консультації обмежений окремим сеансом Meet, тому подальші виклики консультації -можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. +Ключ сесії consult має область дії на кожну сесію Meet, тож наступні виклики consult +можуть повторно використовувати попередній контекст consult у межах тієї самої зустрічі. -Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику: +Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднається до дзвінка: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." @@ -976,7 +952,7 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ ## Контрольний список live-тесту -Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду: +Використовуйте цю послідовність перед передачею зустрічі агенту без нагляду: ```bash openclaw googlemeet setup @@ -990,10 +966,10 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ - `googlemeet setup` повністю зелений. - `googlemeet setup` містить `chrome-node-connected`, коли `chrome-node` є - транспортом за замовчуванням або вузол закріплено. -- `nodes status` показує, що вибраний вузол підключено. -- Вибраний вузол рекламує і `googlemeet.chrome`, і `browser.proxy`. -- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з + типовим транспортом або коли Node закріплено. +- `nodes status` показує, що вибраний Node підключений. +- Вибраний Node рекламує і `googlemeet.chrome`, і `browser.proxy`. +- Вкладка Meet приєднується до дзвінка, а `test-speech` повертає стан Chrome з `inCall: true`. Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша @@ -1008,11 +984,10 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -Це доводить, що плагін Gateway завантажено, вузол VM підключено з -поточним токеном, а аудіоміст Meet доступний ще до того, як агент відкриє -реальну вкладку зустрічі. +Це доводить, що Plugin Gateway завантажено, Node VM підключено з +поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє реальну вкладку зустрічі. -Для smoke-тесту Twilio використовуйте зустріч, яка показує дані для телефонного дозвону: +Для smoke-тесту Twilio використовуйте зустріч, яка показує деталі телефонного дозвону: ```bash openclaw googlemeet setup @@ -1027,26 +1002,27 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ - `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. - `voicecall` доступний у CLI після перезавантаження Gateway. -- Повернений сеанс має `transport: "twilio"` і `twilio.voiceCallId`. -- `googlemeet leave ` завершує делегований голосовий виклик. +- Повернена сесія має `transport: "twilio"` і `twilio.voiceCallId`. +- `googlemeet leave ` кладе делегований голосовий дзвінок. ## Усунення несправностей ### Агент не бачить інструмент Google Meet -Підтвердьте, що плагін увімкнено в конфігурації Gateway, і перезавантажте Gateway: +Підтвердьте, що Plugin увімкнено в конфігурації Gateway, і перезавантажте Gateway: ```bash openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -Якщо ви щойно змінили `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. -Запущений агент бачить лише інструменти плагінів, зареєстровані поточним процесом Gateway. +Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. +Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом +Gateway. -### Немає підключеного вузла з підтримкою Google Meet +### Немає підключеного Node з підтримкою Google Meet -На хості вузла виконайте: +На хості Node виконайте: ```bash openclaw plugins enable google-meet @@ -1055,7 +1031,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -На хості Gateway підтвердьте вузол і перевірте команди: +На хості Gateway схваліть Node і перевірте команди: ```bash openclaw devices list @@ -1063,8 +1039,8 @@ openclaw devices approve openclaw nodes status ``` -Вузол має бути підключений і містити `googlemeet.chrome` та `browser.proxy`. -Конфігурація Gateway має дозволяти ці команди вузла: +Node має бути підключений і перелічувати `googlemeet.chrome` плюс `browser.proxy`. +Конфігурація Gateway має дозволяти ці команди Node: ```json5 { @@ -1076,9 +1052,9 @@ openclaw nodes status } ``` -Якщо `googlemeet setup` не проходить перевірку `chrome-node-connected` або журнал Gateway повідомляє -`gateway token mismatch`, перевстановіть або перезапустіть вузол із поточним токеном Gateway. -Для Gateway у LAN це зазвичай означає: +Якщо `googlemeet setup` не проходить перевірку `chrome-node-connected` або в журналі Gateway зазначено +`gateway token mismatch`, перевстановіть або перезапустіть Node з поточним токеном Gateway. +Для Gateway у локальній мережі це зазвичай означає: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -1089,7 +1065,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ --force ``` -Потім перезавантажте службу вузла і повторно виконайте: +Потім перезавантажте сервіс Node і знову виконайте: ```bash openclaw googlemeet setup @@ -1098,7 +1074,7 @@ openclaw nodes status --connected ### Браузер відкривається, але агент не може приєднатися -Запустіть `googlemeet test-speech` і перевірте повернений стан Chrome. Якщо він +Запустіть `googlemeet test-speech` і перевірте повернутий стан Chrome. Якщо він повідомляє `manualActionRequired: true`, покажіть оператору `manualActionMessage` і припиніть повторні спроби, доки дію в браузері не буде завершено. @@ -1106,81 +1082,88 @@ openclaw nodes status --connected - Увійти в профіль Chrome. - Допустити гостя з облікового запису хоста Meet. -- Надати Chrome дозволи на мікрофон/камеру, коли з’являється власний запит дозволу Chrome. -- Закрити або виправити зависле діалогове вікно дозволів Meet. +- Надати Chrome дозволи на мікрофон/камеру, коли з’являється власний + запит дозволу Chrome. +- Закрити або виправити зависле діалогове вікно дозволу Meet. -Не повідомляйте "not signed in" лише тому, що Meet показує "Do you want people to -hear you in the meeting?" Це проміжний екран вибору аудіо в Meet; OpenClaw натискає **Use microphone** через автоматизацію браузера, коли це можливо, і продовжує чекати реального стану зустрічі. Для резервного варіанта створення лише через браузер OpenClaw може натиснути **Continue without microphone**, оскільки для створення URL не потрібен аудіошлях `realtime`. +Не повідомляйте "не виконано вхід" лише тому, що Meet показує "Do you want people to +hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw +натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує +чекати на реальний стан зустрічі. Для резервного шляху створення лише через браузер OpenClaw +може натиснути **Continue without microphone**, тому що для створення URL не потрібен +аудіошлях realtime. ### Не вдається створити зустріч -`googlemeet create` спочатку використовує endpoint Google Meet API `spaces.create`, -коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить -до резервного варіанта через браузер закріпленого вузла Chrome. Переконайтеся, що: +`googlemeet create` спочатку використовує ендпоінт Google Meet API `spaces.create`, +коли налаштовано облікові дані OAuth. Без облікових даних OAuth він повертається +до браузера на закріпленому Chrome Node. Підтвердьте: - Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, або присутні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було отримано після додавання - підтримки створення. У старіших токенів може бракувати області доступу `meetings.space.created`; повторно виконайте - `openclaw googlemeet auth login --json` і оновіть конфігурацію плагіна. -- Для резервного варіанта через браузер: `defaultTransport: "chrome-node"` і - `chromeNode.node` вказують на підключений вузол із `browser.proxy` і +- Для створення через API: refresh token було отримано після того, як було + додано підтримку створення. Старі токени можуть не мати області доступу `meetings.space.created`; повторно виконайте + `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. +- Для резервного шляху браузера: `defaultTransport: "chrome-node"` і + `chromeNode.node` вказують на підключений Node з `browser.proxy` і `googlemeet.chrome`. -- Для резервного варіанта через браузер: профіль OpenClaw Chrome на цьому вузлі авторизований - у Google і може відкрити `https://meet.google.com/new`. -- Для резервного варіанта через браузер: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new` - або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо агент перевищив час очікування, +- Для резервного шляху браузера: у профілі Chrome OpenClaw на цьому Node виконано вхід + у Google, і він може відкрити `https://meet.google.com/new`. +- Для резервного шляху браузера: повторні спроби повторно використовують наявну вкладку + `https://meet.google.com/new` або вкладку запиту облікового запису Google, перш ніж відкривати нову вкладку. Якщо в агента стався тайм-аут, повторіть виклик інструмента, а не відкривайте вручну ще одну вкладку Meet. -- Для резервного варіанта через браузер: якщо інструмент повертає `manualActionRequired: true`, використовуйте +- Для резервного шляху браузера: якщо інструмент повертає `manualActionRequired: true`, використовуйте повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і - `manualActionMessage`, щоб зорієнтувати оператора. Не повторюйте спроби в циклі, доки цю + `manualActionMessage`, щоб підказати оператору, що робити. Не повторюйте в циклі, доки цю дію не буде завершено. -- Для резервного варіанта через браузер: якщо Meet показує "Do you want people to hear you in the +- Для резервного шляху браузера: якщо Meet показує "Do you want people to hear you in the meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для - резервного варіанта лише створення, **Continue without microphone** через автоматизацію - браузера та продовжити чекати згенеровану URL-адресу Meet. Якщо він не може цього зробити, у - помилці має згадуватися `meet-audio-choice-required`, а не `google-login-required`. + резервного шляху лише створення, **Continue without microphone** через автоматизацію + браузера і продовжити чекати на згенерований URL Meet. Якщо це неможливо, у + помилці має бути зазначено `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить -Перевірте шлях `realtime`: +Перевірте шлях realtime: ```bash openclaw googlemeet setup openclaw googlemeet doctor ``` -Використовуйте `mode: "realtime"` для прослуховування/відповідей. `mode: "transcribe"` навмисно -не запускає двосторонній голосовий міст `realtime`. +Використовуйте `mode: "realtime"` для прослуховування/відповіді голосом. `mode: "transcribe"` навмисно +не запускає двонаправлений голосовий міст realtime. Також перевірте: -- На хості Gateway доступний ключ провайдера `realtime`, наприклад +- На хості Gateway доступний ключ провайдера realtime, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. -- `BlackHole 2ch` видно на хості Chrome. +- `BlackHole 2ch` видимий на хості Chrome. - `rec` і `play` існують на хості Chrome. -- Мікрофон і динамік Meet маршрутизуються через шлях віртуального аудіо, який використовує +- У Meet мікрофон і динамік спрямовані через шлях віртуального аудіо, який використовує OpenClaw. -`googlemeet doctor [session-id]` виводить сеанс, вузол, стан у дзвінку, -причину ручної дії, підключення провайдера `realtime`, `realtimeReady`, активність аудіовходу/виходу, часові мітки останнього аудіо, лічильники байтів і URL браузера. +`googlemeet doctor [session-id]` виводить сесію, Node, стан in-call, +причину ручної дії, підключення провайдера realtime, `realtimeReady`, активність аудіовходу/виходу, +часові мітки останнього аудіо, лічильники байтів і URL браузера. Використовуйте `googlemeet status [session-id]`, коли потрібен сирий JSON. Використовуйте `googlemeet doctor --oauth`, коли потрібно перевірити оновлення OAuth Google Meet -без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне підтвердження через Google Meet API. +без показу токенів; додавайте `--meeting` або `--create-space`, коли також потрібне підтвердження +Google Meet API. -Якщо агент перевищив час очікування і ви вже бачите відкриту вкладку Meet, перевірте цю вкладку -без відкриття нової: +Якщо в агента стався тайм-аут і ви бачите, що вкладка Meet уже відкрита, перевірте цю вкладку +без відкриття іншої: ```bash openclaw googlemeet recover-tab openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij ``` -Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує й перевіряє -наявну вкладку Meet на налаштованому вузлі Chrome. Вона не відкриває нову вкладку і не -створює новий сеанс; вона повідомляє про поточне блокування, наприклад вхід, допуск, +Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує і перевіряє +наявну вкладку Meet на налаштованому Chrome Node. Вона не відкриває нову вкладку і не +створює нову сесію; вона повідомляє про поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. Команда CLI звертається до налаштованого -Gateway, тому Gateway має працювати, а вузол Chrome має бути підключений. +Gateway, тому Gateway має бути запущений, а Chrome Node має бути підключений. ### Не проходять перевірки налаштування Twilio @@ -1188,8 +1171,8 @@ Gateway, тому Gateway має працювати, а вузол Chrome має Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте Gateway. -`twilio-voice-call-credentials` не проходить перевірку, коли в бекенді Twilio бракує account -SID, auth token або номера абонента. Установіть їх на хості Gateway: +`twilio-voice-call-credentials` не проходить перевірку, коли у бекенда Twilio немає account +SID, auth token або номера виклику. Установіть це на хості Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1205,14 +1188,14 @@ openclaw voicecall setup openclaw voicecall smoke ``` -`voicecall smoke` за замовчуванням лише перевіряє готовність. Щоб виконати dry-run для конкретного номера: +`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб виконати dry-run для конкретного номера: ```bash openclaw voicecall smoke --to "+15555550123" ``` -Додавайте `--yes` лише тоді, коли ви свідомо хочете здійснити реальний вихідний -дзвінок-сповіщення: +Додавайте `--yes` лише тоді, коли ви навмисно хочете здійснити живий вихідний +сповіщувальний дзвінок: ```bash openclaw voicecall smoke --to "+15555550123" --yes @@ -1220,8 +1203,8 @@ openclaw voicecall smoke --to "+15555550123" --yes ### Дзвінок Twilio починається, але ніколи не входить у зустріч -Переконайтеся, що подія Meet показує дані для телефонного дозвону. Передайте точний номер -для дозвону та PIN або спеціальну послідовність DTMF: +Підтвердьте, що подія Meet показує деталі телефонного дозвону. Передайте точний номер дозвону +і PIN або спеціальну послідовність DTMF: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1235,29 +1218,29 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ ## Примітки -Офіційний медіа-API Google Meet орієнтований на прийом, тому для мовлення в -виклик Meet усе ще потрібен шлях учасника. Цей плагін зберігає цю межу видимою: +Офіційний медіа-API Google Meet орієнтований на отримання, тому мовлення в дзвінок Meet +усе одно потребує шляху учасника. Цей Plugin зберігає цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє участь через телефонний дозвін. -Для режиму Chrome `realtime` потрібне одне з такого: +Режиму Chrome realtime потрібно одне з такого: - `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує - мостом моделі `realtime` і передає аудіо 8 кГц G.711 mu-law між цими - командами та вибраним провайдером голосу `realtime`. -- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним + мостом моделі realtime і передає аудіо G.711 mu-law 8 кГц між цими + командами і вибраним провайдером голосу realtime. +- `chrome.audioBridgeCommand`: зовнішня команда мосту повністю керує локальним аудіошляхом і має завершитися після запуску або перевірки свого демона. -Для чистого двостороннього аудіо маршрутизуйте вивід Meet і мікрофон Meet через окремі +Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний -пристрій BlackHole може повертати голоси інших учасників назад у виклик. +пристрій BlackHole може повертати голоси інших учасників назад у дзвінок. -`googlemeet speak` запускає активний аудіоміст `realtime` для сеансу Chrome. -`googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих -через плагін Voice Call, `leave` також завершує базовий голосовий виклик. +`googlemeet speak` запускає активний аудіоміст realtime для сесії Chrome. +`googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих +через Plugin Voice Call, `leave` також завершує базовий голосовий дзвінок. ## Пов’язане -- [Плагін Voice Call](/uk/plugins/voice-call) -- [Режим Talk](/uk/nodes/talk) -- [Створення плагінів](/uk/plugins/building-plugins) +- [Plugin Voice call](/uk/plugins/voice-call) +- [Режим talk](/uk/nodes/talk) +- [Створення Plugin](/uk/plugins/building-plugins) diff --git a/docs/uk/tools/image-generation.md b/docs/uk/tools/image-generation.md index afb7d72e7..17dd87c1b 100644 --- a/docs/uk/tools/image-generation.md +++ b/docs/uk/tools/image-generation.md @@ -1,20 +1,20 @@ --- read_when: - - Генерація зображень через агента + - Генерування зображень через агента - Налаштування провайдерів і моделей для генерації зображень - Розуміння параметрів інструмента `image_generate` summary: Генеруйте та редагуйте зображення за допомогою налаштованих провайдерів (OpenAI, OpenAI Codex OAuth, Google Gemini, OpenRouter, fal, MiniMax, ComfyUI, Vydra, xAI) title: Генерація зображень x-i18n: - generated_at: "2026-04-24T23:42:15Z" + generated_at: "2026-04-25T07:53:47Z" model: gpt-5.4 provider: openai - source_hash: 8cfa462ba943e816d26215898bcf201fe118c96a618f2d340b0db22cc1409f56 + source_hash: 02369928fecac147729ca586cd39e1a88791219ffe26d8e94429d0ea4b1af411 source_path: tools/image-generation.md workflow: 15 --- -Інструмент `image_generate` дає агенту змогу створювати й редагувати зображення за допомогою ваших налаштованих провайдерів. Згенеровані зображення автоматично доставляються як медіавкладення у відповіді агента. +Інструмент `image_generate` дає агенту змогу створювати й редагувати зображення за допомогою ваших налаштованих провайдерів. Створені зображення автоматично доставляються як медіавкладення у відповіді агента. Інструмент з’являється лише тоді, коли доступний принаймні один провайдер генерації зображень. Якщо ви не бачите `image_generate` серед інструментів вашого агента, налаштуйте `agents.defaults.imageGenerationModel`, задайте API-ключ провайдера або увійдіть через OpenAI Codex OAuth. @@ -37,52 +37,50 @@ x-i18n: } ``` -Codex OAuth використовує те саме посилання на модель `openai/gpt-image-2`. Коли -налаштовано OAuth-профіль `openai-codex`, OpenClaw спрямовує запити на -зображення через той самий OAuth-профіль замість того, щоб спочатку намагатися -використати `OPENAI_API_KEY`. Явна користувацька конфігурація зображень -`models.providers.openai`, наприклад API-ключ або користувацький/Azure base URL, -повертає використання прямого маршруту OpenAI Images API. -Для сумісних з OpenAI LAN-ендпоінтів, таких як LocalAI, залиште користувацький +Codex OAuth використовує те саме посилання на модель `openai/gpt-image-2`. Коли налаштовано OAuth-профіль +`openai-codex`, OpenClaw спрямовує запити на зображення +через той самий OAuth-профіль замість того, щоб спочатку пробувати `OPENAI_API_KEY`. +Явна власна конфігурація зображень `models.providers.openai`, наприклад API-ключ або +власний/Azure base URL, знову перемикає на прямий маршрут OpenAI Images API. +Для OpenAI-сумісних LAN-ендпойнтів, таких як LocalAI, збережіть власний `models.providers.openai.baseUrl` і явно ввімкніть `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`; приватні/внутрішні -ендпоінти зображень залишаються заблокованими за замовчуванням. +ендпойнти зображень за замовчуванням залишаються заблокованими. -3. Попросіть агента: _"Згенеруй зображення дружнього маскота-робота."_ +3. Попросіть агента: _"Згенеруй зображення дружнього робота-маскота."_ -Агент автоматично викликає `image_generate`. Додавати інструмент до списку дозволених не потрібно — він увімкнений за замовчуванням, коли доступний провайдер. +Агент автоматично викликає `image_generate`. Додавати інструмент до списку дозволених не потрібно — його ввімкнено за замовчуванням, коли доступний провайдер. ## Поширені маршрути | Ціль | Посилання на модель | Автентифікація | | ---------------------------------------------------- | ------------------------------------------------- | ----------------------------------- | | Генерація зображень OpenAI з оплатою через API | `openai/gpt-image-2` | `OPENAI_API_KEY` | -| Генерація зображень OpenAI з автентифікацією підписки Codex | `openai/gpt-image-2` | OpenAI Codex OAuth | -| Генерація зображень OpenRouter | `openrouter/google/gemini-3.1-flash-image-preview` | `OPENROUTER_API_KEY` | +| Генерація зображень OpenAI з автентифікацією за підпискою Codex | `openai/gpt-image-2` | OpenAI Codex OAuth | +| Генерація зображень OpenRouter | `openrouter/google/gemini-3.1-flash-image-preview` | `OPENROUTER_API_KEY` | | Генерація зображень Google Gemini | `google/gemini-3.1-flash-image-preview` | `GEMINI_API_KEY` або `GOOGLE_API_KEY` | -Той самий інструмент `image_generate` обробляє генерацію за текстом і -редагування за референсними зображеннями. Використовуйте `image` для одного -референса або `images` для кількох референсів. -Підказки для виводу, які підтримуються провайдером, як-от `quality`, -`outputFormat` і специфічний для OpenAI параметр `background`, -передаються далі, коли це можливо, і позначаються як проігноровані, якщо -провайдер їх не підтримує. +Той самий інструмент `image_generate` обробляє як генерацію з тексту в зображення, так і +редагування за еталонним зображенням. Використовуйте `image` для одного еталона +або `images` для кількох еталонів. +Підказки для виводу, які підтримує провайдер, наприклад `quality`, `outputFormat` і +специфічний для OpenAI параметр `background`, передаються далі, коли це можливо, і +позначаються як проігноровані, якщо провайдер їх не підтримує. ## Підтримувані провайдери -| Провайдер | Модель за замовчуванням | Підтримка редагування | Автентифікація | -| --------- | -------------------------------------- | ---------------------------------- | ----------------------------------------------------- | -| OpenAI | `gpt-image-2` | Так (до 4 зображень) | `OPENAI_API_KEY` або OpenAI Codex OAuth | -| OpenRouter | `google/gemini-3.1-flash-image-preview` | Так (до 5 вхідних зображень) | `OPENROUTER_API_KEY` | -| Google | `gemini-3.1-flash-image-preview` | Так | `GEMINI_API_KEY` або `GOOGLE_API_KEY` | -| fal | `fal-ai/flux/dev` | Так | `FAL_KEY` | -| MiniMax | `image-01` | Так (референс об’єкта) | `MINIMAX_API_KEY` або MiniMax OAuth (`minimax-portal`) | -| ComfyUI | `workflow` | Так (1 зображення, налаштовано у workflow) | `COMFY_API_KEY` або `COMFY_CLOUD_API_KEY` для хмари | -| Vydra | `grok-imagine` | Ні | `VYDRA_API_KEY` | -| xAI | `grok-imagine-image` | Так (до 5 зображень) | `XAI_API_KEY` | +| Провайдер | Модель за замовчуванням | Підтримка редагування | Автентифікація | +| --------- | ------------------------------------ | ---------------------------------- | ------------------------------------------------------ | +| OpenAI | `gpt-image-2` | Так (до 4 зображень) | `OPENAI_API_KEY` або OpenAI Codex OAuth | +| OpenRouter | `google/gemini-3.1-flash-image-preview` | Так (до 5 вхідних зображень) | `OPENROUTER_API_KEY` | +| Google | `gemini-3.1-flash-image-preview` | Так | `GEMINI_API_KEY` або `GOOGLE_API_KEY` | +| fal | `fal-ai/flux/dev` | Так | `FAL_KEY` | +| MiniMax | `image-01` | Так (еталон об’єкта) | `MINIMAX_API_KEY` або MiniMax OAuth (`minimax-portal`) | +| ComfyUI | `workflow` | Так (1 зображення, визначається workflow) | `COMFY_API_KEY` або `COMFY_CLOUD_API_KEY` для хмари | +| Vydra | `grok-imagine` | Ні | `VYDRA_API_KEY` | +| xAI | `grok-imagine-image` | Так (до 5 зображень) | `XAI_API_KEY` | -Використовуйте `action: "list"`, щоб переглянути доступні провайдери й моделі під час виконання: +Використовуйте `action: "list"`, щоб переглянути доступні провайдери та моделі під час виконання: ``` /tool image_generate action=list @@ -91,11 +89,11 @@ Codex OAuth використовує те саме посилання на мо ## Параметри інструмента -Підказка для генерації зображення. Обов’язкова для `action: "generate"`. +Промпт для генерації зображення. Обов’язковий для `action: "generate"`. -Використовуйте `"list"`, щоб переглянути доступні провайдери й моделі під час виконання. +Використовуйте `"list"`, щоб переглянути доступні провайдери та моделі під час виконання. @@ -103,15 +101,15 @@ Codex OAuth використовує те саме посилання на мо -Шлях або URL одного референсного зображення для режиму редагування. +Шлях або URL одного еталонного зображення для режиму редагування. -Кілька референсних зображень для режиму редагування (до 5). +Кілька еталонних зображень для режиму редагування (до 5). -Підказка розміру: `1024x1024`, `1536x1024`, `1024x1536`, `2048x2048`, `3840x2160`. +Підказка щодо розміру: `1024x1024`, `1536x1024`, `1024x1536`, `2048x2048`, `3840x2160`. @@ -119,15 +117,15 @@ Codex OAuth використовує те саме посилання на мо -Підказка роздільної здатності. +Підказка щодо роздільної здатності. -Підказка якості, якщо провайдер її підтримує. +Підказка щодо якості, якщо провайдер її підтримує. -Підказка формату виводу, якщо провайдер її підтримує. +Підказка щодо формату виводу, якщо провайдер її підтримує. @@ -139,25 +137,16 @@ Codex OAuth використовує те саме посилання на мо -Підказка для імені вихідного файла. +Підказка щодо імені вихідного файлу. Підказки лише для OpenAI: `background`, `moderation`, `outputCompression` і `user`. -Не всі провайдери підтримують усі параметри. Коли резервний провайдер -підтримує близький варіант геометрії замість точно запитаного, OpenClaw -перетворює значення на найближчий підтримуваний розмір, співвідношення сторін -або роздільну здатність перед надсиланням. Непідтримувані підказки для виводу, -такі як `quality` або `outputFormat`, відкидаються для провайдерів, які не -оголошують їхню підтримку, і відображаються в результаті інструмента. +Не всі провайдери підтримують усі параметри. Коли резервний провайдер підтримує близький варіант геометрії замість точно запитаного, OpenClaw перед надсиланням перетворює значення на найближчий підтримуваний розмір, співвідношення сторін або роздільну здатність. Непідтримувані підказки для виводу, як-от `quality` або `outputFormat`, відкидаються для провайдерів, які не заявляють їх підтримку, і повідомляються в результаті інструмента. -Результати інструмента повідомляють застосовані параметри. Коли OpenClaw -перетворює геометрію під час переходу на резервного провайдера, повернені -значення `size`, `aspectRatio` і `resolution` відображають те, що було -фактично надіслано, а `details.normalization` фіксує перетворення від -запитаного до застосованого значення. +Результати інструмента повідомляють про застосовані налаштування. Коли OpenClaw під час переходу на резервного провайдера змінює геометрію, повернуті значення `size`, `aspectRatio` і `resolution` відображають те, що було фактично надіслано, а `details.normalization` містить перетворення від запитаного до застосованого. ## Конфігурація @@ -182,46 +171,43 @@ Codex OAuth використовує те саме посилання на мо ### Порядок вибору провайдера -Під час генерації зображення OpenClaw намагається використати провайдери в такому порядку: +Під час генерації зображення OpenClaw пробує провайдерів у такому порядку: -1. Параметр **`model`** із виклику інструмента (якщо агент його задає) -2. **`imageGenerationModel.primary`** із конфігурації -3. **`imageGenerationModel.fallbacks`** по порядку -4. **Автовизначення** — використовує лише значення провайдерів за замовчуванням, що мають автентифікацію: +1. **Параметр `model`** з виклику інструмента (якщо агент його вказує) +2. **`imageGenerationModel.primary`** з конфігурації +3. **`imageGenerationModel.fallbacks`** у заданому порядку +4. **Автовиявлення** — використовує лише типові значення провайдера, підкріплені автентифікацією: - спочатку поточний провайдер за замовчуванням - - потім решта зареєстрованих провайдерів генерації зображень у порядку provider-id + - далі інші зареєстровані провайдери генерації зображень у порядку provider-id -Якщо провайдер зазнає невдачі (помилка автентифікації, обмеження швидкості тощо), автоматично пробується наступний налаштований кандидат. Якщо всі зазнають невдачі, помилка містить подробиці кожної спроби. +Якщо провайдер не спрацює (помилка автентифікації, ліміт швидкості тощо), автоматично буде спробовано наступного налаштованого кандидата. Якщо не спрацюють усі, помилка міститиме подробиці кожної спроби. Примітки: -- Перевизначення `model` для окремого виклику є точним: OpenClaw пробує лише - цей провайдер/цю модель і не переходить до налаштованих primary/fallback або - автодетектованих провайдерів. -- Автовизначення враховує автентифікацію. Значення провайдера за замовчуванням - потрапляє до списку кандидатів лише тоді, коли OpenClaw справді може - автентифікуватися у цього провайдера. -- Автовизначення ввімкнено за замовчуванням. Задайте - `agents.defaults.mediaGenerationAutoProviderFallback: false`, якщо хочете, щоб - генерація зображень використовувала лише явні записи `model`, `primary` і - `fallbacks`. -- Використовуйте `action: "list"`, щоб переглянути наразі зареєстрованих - провайдерів, їхні моделі за замовчуванням і підказки щодо env vars для - автентифікації. +- Перевизначення `model` для окремого виклику є точним: OpenClaw пробує лише цього провайдера/цю модель + і не переходить до налаштованих primary/fallback чи автовиявлених + провайдерів. +- Автовиявлення враховує автентифікацію. Значення провайдера за замовчуванням потрапляє до списку кандидатів + лише коли OpenClaw справді може автентифікувати цього провайдера. +- Автовиявлення ввімкнене за замовчуванням. Задайте + `agents.defaults.mediaGenerationAutoProviderFallback: false`, якщо хочете, щоб генерація зображень + використовувала лише явні записи `model`, `primary` і `fallbacks`. +- Використовуйте `action: "list"`, щоб переглянути поточно зареєстрованих провайдерів, їхні + моделі за замовчуванням і підказки щодо env vars для автентифікації. ### Редагування зображень -OpenAI, OpenRouter, Google, fal, MiniMax, ComfyUI і xAI підтримують редагування референсних зображень. Передайте шлях або URL референсного зображення: +OpenAI, OpenRouter, Google, fal, MiniMax, ComfyUI і xAI підтримують редагування еталонних зображень. Передайте шлях або URL еталонного зображення: ``` "Згенеруй акварельну версію цього фото" + image: "/path/to/photo.jpg" ``` -OpenAI, OpenRouter, Google і xAI підтримують до 5 референсних зображень через параметр `images`. fal, MiniMax і ComfyUI підтримують 1. +OpenAI, OpenRouter, Google і xAI підтримують до 5 еталонних зображень через параметр `images`. fal, MiniMax і ComfyUI підтримують 1. ### Моделі зображень OpenRouter -Генерація зображень OpenRouter використовує той самий `OPENROUTER_API_KEY` і спрямовується через API зображень chat completions OpenRouter. Вибирайте моделі зображень OpenRouter за допомогою префікса `openrouter/`: +Генерація зображень OpenRouter використовує той самий `OPENROUTER_API_KEY` і спрямовується через image API chat completions OpenRouter. Вибирайте моделі зображень OpenRouter з префіксом `openrouter/`: ```json5 { @@ -235,34 +221,30 @@ OpenAI, OpenRouter, Google і xAI підтримують до 5 референс } ``` -OpenClaw передає до OpenRouter `prompt`, `count`, референсні зображення та -сумісні з Gemini підказки `aspectRatio` / `resolution`. Поточні вбудовані -скорочення моделей зображень OpenRouter включають -`google/gemini-3.1-flash-image-preview`, `google/gemini-3-pro-image-preview` і -`openai/gpt-5.4-image-2`; використовуйте `action: "list"`, щоб побачити, що -надає ваш налаштований Plugin. +OpenClaw передає в OpenRouter `prompt`, `count`, еталонні зображення та сумісні з Gemini підказки `aspectRatio` / `resolution`. Поточні вбудовані скорочення для моделей зображень OpenRouter включають `google/gemini-3.1-flash-image-preview`, `google/gemini-3-pro-image-preview` і `openai/gpt-5.4-image-2`; використовуйте `action: "list"`, щоб побачити, що надає ваш налаштований Plugin. ### OpenAI `gpt-image-2` -За замовчуванням OpenAI для генерації зображень використовує `openai/gpt-image-2`. Якщо -налаштовано OAuth-профіль `openai-codex`, OpenClaw повторно використовує той -самий OAuth-профіль, який застосовується моделями чату за підпискою Codex, і -надсилає запит на зображення через бекенд Codex Responses; він не переходить -непомітно до `OPENAI_API_KEY` для цього запиту. Щоб примусово використовувати -прямий маршрут OpenAI Images API, явно налаштуйте `models.providers.openai` -через API-ключ, користувацький base URL або ендпоінт Azure. Старішу модель -`openai/gpt-image-1` усе ще можна явно вибрати, але для нових запитів OpenAI -на генерацію й редагування зображень слід використовувати `gpt-image-2`. +Генерація зображень OpenAI за замовчуванням використовує `openai/gpt-image-2`. Якщо налаштовано +OAuth-профіль `openai-codex`, OpenClaw повторно використовує той самий OAuth- +профіль, який використовується моделями чату Codex за підпискою, і надсилає запит на зображення +через бекенд Codex Responses. Застарілі base URL Codex, такі як +`https://chatgpt.com/backend-api`, канонізуються до +`https://chatgpt.com/backend-api/codex` для запитів на зображення. Він не +виконує тихого переходу на `OPENAI_API_KEY` для цього запиту. Щоб примусово використовувати прямий маршрут OpenAI +Images API, явно налаштуйте `models.providers.openai` з API- +ключем, власним base URL або ендпойнтом Azure. Старішу модель +`openai/gpt-image-1` усе ще можна вибрати явно, але нові запити OpenAI +на генерацію та редагування зображень мають використовувати `gpt-image-2`. -`gpt-image-2` підтримує і генерацію зображень за текстом, і редагування за -референсними зображеннями через той самий інструмент `image_generate`. -OpenClaw передає до OpenAI `prompt`, `count`, `size`, `quality`, -`outputFormat` і референсні зображення. +`gpt-image-2` підтримує як генерацію зображень із тексту, так і редагування +за еталонним зображенням через той самий інструмент `image_generate`. OpenClaw передає `prompt`, +`count`, `size`, `quality`, `outputFormat` і еталонні зображення до OpenAI. OpenAI не отримує `aspectRatio` або `resolution` безпосередньо; коли це можливо, -OpenClaw перетворює їх на підтримуваний `size`, інакше інструмент повідомляє -про них як про проігноровані перевизначення. +OpenClaw перетворює їх на підтримуваний `size`, інакше інструмент повідомляє про них як про +проігноровані перевизначення. -Параметри, специфічні для OpenAI, розміщено в об’єкті `openai`: +Параметри, специфічні для OpenAI, містяться в об’єкті `openai`: ```json { @@ -277,49 +259,49 @@ OpenClaw перетворює їх на підтримуваний `size`, ін } ``` -`openai.background` приймає `transparent`, `opaque` або `auto`; прозорий +`openai.background` приймає значення `transparent`, `opaque` або `auto`; прозорий вивід потребує `outputFormat` `png` або `webp`. `openai.outputCompression` застосовується до виводу JPEG/WebP. -Згенерувати одне пейзажне зображення 4K: +Згенеруйте одне 4K-зображення в альбомній орієнтації: ``` /tool image_generate action=generate model=openai/gpt-image-2 prompt="A clean editorial poster for OpenClaw image generation" size=3840x2160 count=1 ``` -Згенерувати два квадратні зображення: +Згенеруйте два квадратні зображення: ``` /tool image_generate action=generate model=openai/gpt-image-2 prompt="Two visual directions for a calm productivity app icon" size=1024x1024 count=2 ``` -Відредагувати одне локальне референсне зображення: +Відредагуйте одне локальне еталонне зображення: ``` /tool image_generate action=generate model=openai/gpt-image-2 prompt="Keep the subject, replace the background with a bright studio setup" image=/path/to/reference.png size=1024x1536 ``` -Відредагувати з кількома референсами: +Редагування з кількома еталонними зображеннями: ``` /tool image_generate action=generate model=openai/gpt-image-2 prompt="Combine the character identity from the first image with the color palette from the second" images='["/path/to/character.png","/path/to/palette.jpg"]' size=1536x1024 ``` Щоб спрямувати генерацію зображень OpenAI через розгортання Azure OpenAI замість -`api.openai.com`, дивіться [ендпоінти Azure OpenAI](/uk/providers/openai#azure-openai-endpoints) +`api.openai.com`, див. [ендпойнти Azure OpenAI](/uk/providers/openai#azure-openai-endpoints) у документації провайдера OpenAI. Генерація зображень MiniMax доступна через обидва вбудовані шляхи автентифікації MiniMax: - `minimax/image-01` для налаштувань з API-ключем -- `minimax-portal/image-01` для налаштувань OAuth +- `minimax-portal/image-01` для налаштувань з OAuth ## Можливості провайдерів | Можливість | OpenAI | Google | fal | MiniMax | ComfyUI | Vydra | xAI | | --------------------- | -------------------- | -------------------- | ------------------- | -------------------------- | ---------------------------------- | ------- | -------------------- | -| Генерація | Так (до 4) | Так (до 4) | Так (до 4) | Так (до 9) | Так (виводи визначаються workflow) | Так (1) | Так (до 4) | -| Редагування/референс | Так (до 5 зображень) | Так (до 5 зображень) | Так (1 зображення) | Так (1 зображення, референс об’єкта) | Так (1 зображення, налаштовано у workflow) | Ні | Так (до 5 зображень) | +| Генерація | Так (до 4) | Так (до 4) | Так (до 4) | Так (до 9) | Так (вивід визначається workflow) | Так (1) | Так (до 4) | +| Редагування/еталон | Так (до 5 зображень) | Так (до 5 зображень) | Так (1 зображення) | Так (1 зображення, еталон об’єкта) | Так (1 зображення, визначається workflow) | Ні | Так (до 5 зображень) | | Керування розміром | Так (до 4K) | Так | Так | Ні | Ні | Ні | Ні | | Співвідношення сторін | Ні | Так | Так (лише генерація) | Так | Ні | Ні | Так | | Роздільна здатність (1K/2K/4K) | Ні | Так | Так | Ні | Ні | Ні | Так (1K/2K) | @@ -327,28 +309,28 @@ OpenClaw перетворює їх на підтримуваний `size`, ін ### xAI `grok-imagine-image` Вбудований провайдер xAI використовує `/v1/images/generations` для запитів -лише з `prompt` і `/v1/images/edits`, коли присутній `image` або `images`. +лише з промптом і `/v1/images/edits`, коли присутній `image` або `images`. - Моделі: `xai/grok-imagine-image`, `xai/grok-imagine-image-pro` - Кількість: до 4 -- Референси: один `image` або до п’яти `images` +- Еталони: одне `image` або до п’яти `images` - Співвідношення сторін: `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `2:3`, `3:2` -- Роздільна здатність: `1K`, `2K` -- Вивід: повертається як вкладення зображень, якими керує OpenClaw +- Роздільні здатності: `1K`, `2K` +- Вивід: повертається як вкладення зображень під керуванням OpenClaw -OpenClaw навмисно не надає специфічні для xAI параметри `quality`, `mask`, `user` або -додаткові нативні співвідношення сторін, доки ці елементи керування не з’являться -у спільному міжпровайдерному контракті `image_generate`. +OpenClaw навмисно не відкриває власні параметри xAI `quality`, `mask`, `user` або +додаткові співвідношення сторін, доступні лише нативно, доки ці елементи керування не з’являться в спільному +міжпровайдерному контракті `image_generate`. ## Пов’язане - [Огляд інструментів](/uk/tools) — усі доступні інструменти агента - [fal](/uk/providers/fal) — налаштування провайдера зображень і відео fal -- [ComfyUI](/uk/providers/comfy) — налаштування локального workflow ComfyUI і Comfy Cloud +- [ComfyUI](/uk/providers/comfy) — налаштування локального ComfyUI і workflow Comfy Cloud - [Google (Gemini)](/uk/providers/google) — налаштування провайдера зображень Gemini - [MiniMax](/uk/providers/minimax) — налаштування провайдера зображень MiniMax - [OpenAI](/uk/providers/openai) — налаштування провайдера OpenAI Images - [Vydra](/uk/providers/vydra) — налаштування зображень, відео та мовлення Vydra -- [xAI](/uk/providers/xai) — налаштування Grok для зображень, відео, пошуку, виконання коду та TTS +- [xAI](/uk/providers/xai) — налаштування зображень, відео, пошуку, виконання коду та TTS Grok - [Довідник із конфігурації](/uk/gateway/config-agents#agent-defaults) — конфігурація `imageGenerationModel` -- [Моделі](/uk/concepts/models) — конфігурація моделей і аварійне перемикання +- [Моделі](/uk/concepts/models) — конфігурація моделей і перемикання при відмові