chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-02 07:56:14 +00:00
parent f82823ac05
commit 689a6b15b6
7 changed files with 1305 additions and 1299 deletions

View File

@ -2,72 +2,72 @@
read_when:
- Вам потрібна точна семантика конфігурації на рівні полів або значення за замовчуванням
- Ви перевіряєте блоки конфігурації каналу, моделі, Gateway або інструмента
summary: Довідник конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на спеціалізовані довідники підсистем
summary: Довідка з конфігурації Gateway для основних ключів OpenClaw, типових значень і посилань на окремі довідники підсистем
title: Довідник із конфігурації
x-i18n:
generated_at: "2026-05-02T05:38:58Z"
generated_at: "2026-05-02T07:52:33Z"
model: gpt-5.5
provider: openai
source_hash: 0a5820cac79161975cb4ab4ba8171df3d29366cbee2913d093374e2aa8b604a1
source_hash: afdbe56195982130603f02ff2350f253c32db4d72723035bba52d630a971602a
source_path: gateway/configuration-reference.md
workflow: 16
---
Довідник основної конфігурації для `~/.openclaw/openclaw.json`. Огляд, орієнтований на завдання, див. у [Конфігурація](/uk/gateway/configuration).
Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Огляд, орієнтований на завдання, див. у [Конфігурація](/uk/gateway/configuration).
Охоплює основні поверхні конфігурації OpenClaw і посилається на окремі матеріали, коли підсистема має власний глибший довідник. Каталоги команд, що належать каналам і plugins, а також поглиблені налаштування пам’яті/QMD розміщені на власних сторінках, а не на цій.
Охоплює основні поверхні конфігурації OpenClaw і містить посилання на окремі глибші довідники, коли підсистема має власну довідку. Каталоги команд, що належать каналам і plugins, а також поглиблені параметри пам’яті/QMD розміщені на власних сторінках, а не на цій.
Істина в коді:
Джерело істини в коді:
- `openclaw config schema` друкує поточну JSON Schema, що використовується для валідації та Control UI, з об’єднаними метаданими вбудованих/plugin/каналів, коли вони доступні
- `config.schema.lookup` повертає один вузол схеми, обмежений шляхом, для інструментів деталізації
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий хеш документації конфігурації відносно поточної поверхні схеми
- `openclaw config schema` виводить актуальну JSON Schema, що використовується для перевірки та Control UI, з об’єднаними метаданими bundled/plugin/channel, коли вони доступні
- `config.schema.lookup` повертає один вузол схеми з прив’язкою до шляху для інструментів деталізації
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий хеш документації конфігурації щодо поточної поверхні схеми
Шлях пошуку агента: використовуйте дію інструмента `gateway` `config.schema.lookup` для
точної документації та обмежень на рівні полів перед редагуванням. Використовуйте
[Конфігурація](/uk/gateway/configuration) для настанов, орієнтованих на завдання, а цю сторінку
для ширшої карти полів, значень за замовчуванням і посилань на довідники підсистем.
Шлях пошуку для агента: використовуйте дію інструмента `gateway` `config.schema.lookup` для
точної документації й обмежень на рівні полів перед редагуванням. Використовуйте
[Конфігурація](/uk/gateway/configuration) для настанов, орієнтованих на завдання, і цю сторінку
для ширшої мапи полів, стандартних значень і посилань на довідники підсистем.
Окремі глибокі довідники:
Окремі поглиблені довідники:
- [Довідник конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації Dreaming у `plugins.entries.memory-core.config.dreaming`
- [Slash-команди](/uk/tools/slash-commands) для поточного вбудованого + комплектного каталогу команд
- сторінки відповідних каналів/plugin для поверхонь команд, специфічних для каналу
- [Довідник конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming`
- [Команди slash](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд
- сторінки каналів/plugins-власників для поверхонь команд, специфічних для каналів
Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, коли їх пропущено.
Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні стандартні значення, коли їх пропущено.
---
## Канали
Ключі конфігурації для кожного каналу перенесено на окрему сторінку — див.
Ключі конфігурації для окремих каналів перенесено на окрему сторінку — див.
[Конфігурація — канали](/uk/gateway/config-channels) для `channels.*`,
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
комплектних каналів (автентифікація, контроль доступу, кілька облікових записів, обмеження за згадуванням).
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, обмеження згадок).
## Значення агента за замовчуванням, багатоагентність, сесії та повідомлення
## Стандартні налаштування агента, мультиагентність, сесії та повідомлення
Перенесено на окрему сторінку — див.
[Конфігурація — агенти](/uk/gateway/config-agents) для:
- `agents.defaults.*` (робочий простір, модель, мислення, Heartbeat, пам’ять, медіа, Skills, пісочниця)
- `multiAgent.*` (багатоагентна маршрутизація та прив’язки)
- `session.*` (життєвий цикл сесії, Compaction, очищення)
- `agents.defaults.*` (робочий простір, модель, мислення, heartbeat, пам’ять, медіа, skills, sandbox)
- `multiAgent.*` (маршрутизація та прив’язки кількох агентів)
- `session.*` (життєвий цикл сесії, compaction, pruning)
- `messages.*` (доставка повідомлень, TTS, рендеринг markdown)
- `talk.*` (режим Talk)
- `talk.speechLocale`: необов’язковий ідентифікатор локалі BCP 47 для розпізнавання мовлення Talk на iOS/macOS
- `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипта (`700 ms on macOS and Android, 900 ms on iOS`)
- `talk.silenceTimeoutMs`: коли не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms on macOS and Android, 900 ms on iOS`)
## Інструменти та власні провайдери
## Інструменти та користувацькі провайдери
Політику інструментів, експериментальні перемикачі, конфігурацію інструментів на основі провайдерів і налаштування власного
провайдера / базового URL перенесено на окрему сторінку — див.
[Конфігурація — інструменти та власні провайдери](/uk/gateway/config-tools).
Політику інструментів, експериментальні перемикачі, конфігурацію інструментів на основі провайдерів і налаштування користувацьких
провайдерів / base URL перенесено на окрему сторінку — див.
[Конфігурація — інструменти та користувацькі провайдери](/uk/gateway/config-tools).
## Моделі
Визначення провайдерів, списки дозволених моделей і налаштування власних провайдерів містяться в
[Конфігурація — інструменти та власні провайдери](/uk/gateway/config-tools#custom-providers-and-base-urls).
Визначення провайдерів, allowlist моделей і налаштування користувацьких провайдерів розміщено в
[Конфігурація — інструменти та користувацькі провайдери](/uk/gateway/config-tools#custom-providers-and-base-urls).
Корінь `models` також керує глобальною поведінкою каталогу моделей.
```json5
@ -79,17 +79,17 @@ x-i18n:
}
```
- `models.mode`: поведінка каталогу провайдерів (`merge` або `replace`).
- `models.providers`: мапа власних провайдерів, індексована за id провайдера.
- `models.pricing.enabled`: керує фоновим початковим завантаженням цін. Коли
- `models.mode`: поведінка каталогу провайдера (`merge` або `replace`).
- `models.providers`: мапа користувацьких провайдерів із ключами за id провайдера.
- `models.pricing.enabled`: керує фоновою ініціалізацією ціноутворення. Коли
`false`, запуск Gateway пропускає отримання каталогів цін OpenRouter і LiteLLM;
налаштовані значення `models.providers.*.models[].cost` досі працюють для локальних
налаштовані значення `models.providers.*.models[].cost` усе ще працюють для локальних
оцінок вартості.
## MCP
Визначення MCP-серверів, керовані OpenClaw, містяться в `mcp.servers` і
використовуються вбудованим Pi та іншими runtime-адаптерами. Команди `openclaw mcp list`,
Визначення MCP-серверів, керовані OpenClaw, розміщені в `mcp.servers` і
споживаються вбудованим Pi та іншими runtime adapters. Команди `openclaw mcp list`,
`show`, `set` і `unset` керують цим блоком без підключення до
цільового сервера під час редагування конфігурації.
@ -115,20 +115,20 @@ x-i18n:
}
```
- `mcp.servers`: іменовані визначення stdio або віддалених MCP-серверів для runtime, які
- `mcp.servers`: іменовані stdio або віддалені визначення MCP-серверів для runtime, які
надають налаштовані MCP-інструменти.
Віддалені записи використовують `transport: "streamable-http"` або `transport: "sse"`;
`type: "http"` — це CLI-native псевдонім, який `openclaw mcp set` і
`openclaw doctor --fix` нормалізують у канонічне поле `transport`.
- `mcp.sessionIdleTtlMs`: idle TTL для сесійно-обмежених комплектних MCP runtime.
Одноразові вбудовані запуски запитують очищення наприкінці виконання; цей TTL є резервним механізмом для
- `mcp.sessionIdleTtlMs`: idle TTL для bundled MCP runtime з прив’язкою до сесії.
Одноразові вбудовані запуски запитують очищення наприкінці запуску; цей TTL є запасним механізмом для
довготривалих сесій і майбутніх викликачів.
- Зміни в `mcp.*` застосовуються гаряче шляхом утилізації кешованих сесійних MCP runtime.
Наступне виявлення/використання інструментів відтворює їх із нової конфігурації, тому вилучені
записи `mcp.servers` прибираються негайно, а не чекають idle TTL.
- Зміни в `mcp.*` застосовуються без перезапуску шляхом звільнення кешованих MCP runtime сесії.
Наступне виявлення/використання інструментів відтворює їх із нової конфігурації, тому видалені
записи `mcp.servers` прибираються негайно, а не чекають на idle TTL.
Див. [MCP](/uk/cli/mcp#openclaw-as-an-mcp-client-registry) і
[CLI backend-и](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо поведінки runtime.
[CLI бекенди](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо поведінки runtime.
## Skills
@ -155,14 +155,14 @@ x-i18n:
}
```
- `allowBundled`: необов’язковий список дозволених лише для комплектних skills (керовані/робочопросторові skills не зачіпаються).
- `allowBundled`: необов’язковий allowlist лише для bundled skills (managed/workspace skills не зачіпаються).
- `load.extraDirs`: додаткові спільні корені skills (найнижчий пріоритет).
- `install.preferBrew`: коли true, надає перевагу інсталяторам Homebrew, коли `brew`
доступний, перед переходом до інших типів інсталяторів.
- `install.nodeManager`: перевага Node-інсталятора для специфікацій `metadata.openclaw.install`
- `install.preferBrew`: коли `true`, віддавати перевагу інсталяторам Homebrew, коли `brew`
доступний, перед fallback до інших типів інсталяторів.
- `install.nodeManager`: уподобання Node-інсталятора для специфікацій `metadata.openclaw.install`
(`npm` | `pnpm` | `yarn` | `bun`).
- `entries.<skillKey>.enabled: false` вимикає skill, навіть якщо він комплектний/встановлений.
- `entries.<skillKey>.apiKey`: зручність для skills, які оголошують основну env-змінну (рядок відкритим текстом або об’єкт SecretRef).
- `entries.<skillKey>.enabled: false` вимикає skill, навіть якщо він bundled/installed.
- `entries.<skillKey>.apiKey`: зручний спосіб для skills, що оголошують основну env var (рядок plaintext або об’єкт SecretRef).
---
@ -190,41 +190,41 @@ x-i18n:
}
```
- Завантажуються з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, а також `plugins.load.paths`.
- Виявлення приймає нативні plugins OpenClaw, а також сумісні пакети Codex і пакети Claude, включно з пакетами Claude стандартної структури без маніфеста.
- Завантажуються з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, плюс `plugins.load.paths`.
- Виявлення приймає нативні OpenClaw plugins, а також сумісні Codex bundles і Claude bundles, включно з manifestless Claude default-layout bundles.
- **Зміни конфігурації потребують перезапуску gateway.**
- `allow`: необов’язковий список дозволених (завантажуються лише перелічені plugins). `deny` має перевагу.
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа на рівні plugin (коли підтримується plugin).
- `plugins.entries.<id>.env`: мапа env-змінних, обмежена plugin.
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, із застарілого `before_agent_start`, водночас зберігаючи застарілі `modelOverride` і `providerOverride`. Застосовується до нативних хуків plugin і підтримуваних директорій хуків, наданих пакетами.
- `plugins.entries.<id>.hooks.allowConversationAccess`: коли `true`, довірені некомплектні plugins можуть читати необроблений вміст розмови з типізованих хуків, таких як `llm_input`, `llm_output`, `before_agent_finalize` і `agent_end`.
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряє цьому plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових subagent-запусків.
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий список дозволених канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише коли навмисно хочете дозволити будь-яку модель.
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений plugin (валідується схемою нативного OpenClaw plugin, коли доступна).
- Налаштування облікового запису/runtime каналового plugin містяться в `channels.<id>` і мають описуватися метаданими `channelConfigs` маніфеста відповідного 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` або env-змінної `FIRECRAWL_API_KEY`.
- `baseUrl`: базовий URL API Firecrawl (за замовчуванням: `https://api.firecrawl.dev`; self-hosted перевизначення мають спрямовуватися на приватні/внутрішні endpoints).
- `onlyMainContent`: витягувати зі сторінок лише основний вміст (за замовчуванням: `true`).
- `maxAgeMs`: максимальний вік кешу в мілісекундах (за замовчуванням: `172800000` / 2 дні).
- `timeoutSeconds`: таймаут scrape-запиту в секундах (за замовчуванням: `60`).
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok).
- `enabled`: увімкнути провайдер X Search.
- `allow`: необов’язковий allowlist (завантажуються лише перелічені plugins). `deny` має пріоритет.
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа рівня plugin (коли підтримується plugin).
- `plugins.entries.<id>.env`: мапа env vars з областю видимості plugin.
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, core блокує `before_prompt_build` та ігнорує поля, що змінюють prompt, зі старого `before_agent_start`, зберігаючи старі `modelOverride` і `providerOverride`. Застосовується до нативних hookів plugin і підтримуваних bundle-provided каталогів hookів.
- `plugins.entries.<id>.hooks.allowConversationAccess`: коли `true`, довірені non-bundled plugins можуть читати необроблений вміст розмови з typed hooks, як-от `llm_input`, `llm_output`, `before_agent_finalize` і `agent_end`.
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряє цьому plugin запитувати per-run перевизначення `provider` і `model` для фонових запусків subagent.
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли навмисно хочете дозволити будь-яку модель.
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений plugin (перевіряється нативною схемою OpenClaw plugin, коли вона доступна).
- Налаштування облікового запису/runtime для channel plugin розміщені в `channels.<id>` і мають описуватися метаданими `channelConfigs` у manifest відповідного plugin-власника, а не центральним реєстром опцій OpenClaw.
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера Firecrawl web-fetch.
- `apiKey`: API-ключ Firecrawl (приймає SecretRef). Використовує fallback до `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілого `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`.
- `baseUrl`: базовий URL API Firecrawl (стандартно: `https://api.firecrawl.dev`; self-hosted перевизначення мають вказувати на приватні/внутрішні endpoints).
- `onlyMainContent`: витягувати зі сторінок лише основний вміст (стандартно: `true`).
- `maxAgeMs`: максимальний вік кешу в мілісекундах (стандартно: `172800000` / 2 дні).
- `timeoutSeconds`: timeout запиту scrape у секундах (стандартно: `60`).
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (Grok web search).
- `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 * * *"` за замовчуванням).
- `model`: необов’язкове перевизначення моделі subagent Dream Diary. Потребує `plugins.entries.memory-core.subagent.allowModelOverride: true`; поєднуйте з `allowedModels`, щоб обмежити цілі. Помилки недоступності моделі повторюються один раз із моделлю сесії за замовчуванням; помилки довіри або списку дозволених не відступають мовчки.
- `plugins.entries.memory-core.config.dreaming`: налаштування memory dreaming. Див. [Dreaming](/uk/concepts/dreaming) щодо фаз і порогів.
- `enabled`: головний перемикач dreaming (стандартно `false`).
- `frequency`: cron cadence для кожного повного проходу dreaming (`"0 3 * * *"` стандартно).
- `model`: необов’язкове перевизначення моделі subagent Dream Diary. Потребує `plugins.entries.memory-core.subagent.allowModelOverride: true`; поєднуйте з `allowedModels`, щоб обмежити цілі. Помилки недоступності моделі повторюються один раз зі стандартною моделлю сесії; збої довіри або allowlist не виконують silent fallback.
- політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації).
- Повна конфігурація пам’яті міститься в [Довідник конфігурації пам’яті](/uk/reference/memory-config):
- Повна конфігурація пам’яті розміщена в [Довідник конфігурації пам’яті](/uk/reference/memory-config):
- `agents.defaults.memorySearch.*`
- `memory.backend`
- `memory.citations`
- `memory.qmd.*`
- `plugins.entries.memory-core.config.dreaming`
- Увімкнені plugins пакетів Claude також можуть додавати вбудовані значення Pi за замовчуванням із `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі патчі конфігурації OpenClaw.
- `plugins.slots.memory`: виберіть id активного plugin пам’яті або `"none"`, щоб вимкнути plugins пам’яті.
- `plugins.slots.contextEngine`: виберіть id активного plugin рушія контексту; за замовчуванням `"legacy"`, якщо ви не встановите й не виберете інший рушій.
- Увімкнені Claude bundle plugins також можуть додавати вбудовані стандартні налаштування Pi з `settings.json`; OpenClaw застосовує їх як sanitized налаштування агента, а не як raw patches конфігурації OpenClaw.
- `plugins.slots.memory`: виберіть id активного memory plugin або `"none"`, щоб вимкнути memory plugins.
- `plugins.slots.contextEngine`: виберіть id активного context engine plugin; стандартно `"legacy"`, якщо ви не встановите й не виберете інший engine.
Див. [Plugins](/uk/tools/plugin).
@ -278,52 +278,52 @@ x-i18n:
- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`.
- `tabCleanup` звільняє відстежувані вкладки основного агента після простою або коли
сесія перевищує свій ліміт. Установіть `idleMinutes: 0` або `maxTabsPerSession: 0`, щоб
сеанс перевищує свій ліміт. Установіть `idleMinutes: 0` або `maxTabsPerSession: 0`, щоб
вимкнути ці окремі режими очищення.
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, коли його не задано, тому навігація браузера типово лишається суворою.
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви свідомо довіряєте навігації браузера в приватній мережі.
- У суворому режимі віддалені кінцеві точки CDP-профілів (`profiles.*.cdpUrl`) підпадають під таке саме блокування приватної мережі під час перевірок доступності/виявлення.
- `ssrfPolicy.allowPrivateNetwork` і надалі підтримується як застарілий псевдонім.
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо значення не задано, тому навігація браузера за замовчуванням лишається суворою.
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви свідомо довіряєте браузерній навігації в приватній мережі.
- У суворому режимі кінцеві точки віддалених профілів CDP (`profiles.*.cdpUrl`) підпадають під те саме блокування приватних мереж під час перевірок доступності/виявлення.
- `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім.
- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків.
- Віддалені профілі працюють лише в режимі підключення (запуск/зупинка/скидання вимкнені).
- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`.
Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявляв `/json/version`; використовуйте WS(S),
коли ваш провайдер надає пряму URL-адресу DevTools WebSocket.
- `remoteCdpTimeoutMs` і `remoteCdpHandshakeTimeoutMs` застосовуються до перевірки доступності віддаленого та
`attachOnly` CDP, а також до запитів відкриття вкладок. Керовані loopback
профілі зберігають локальні типові значення CDP.
коли ваш провайдер надає прямий URL DevTools WebSocket.
- `remoteCdpTimeoutMs` і `remoteCdpHandshakeTimeoutMs` застосовуються до перевірки доступності віддалених і
`attachOnly` CDP, а також до запитів відкриття вкладок. Керовані профілі loopback
зберігають локальні стандартні значення CDP.
- Якщо зовнішньо керована служба CDP доступна через loopback, установіть для цього
профілю `attachOnly: true`; інакше OpenClaw сприйматиме loopback-порт як
профілю `attachOnly: true`; інакше OpenClaw трактує порт loopback як
локально керований профіль браузера й може повідомляти про помилки володіння локальним портом.
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть підключатися на
вибраному хості або через підключений браузерний вузол.
вибраному хості або через підключений вузол браузера.
- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний
профіль браузера на базі Chromium, наприклад Brave або Edge.
- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP:
дії на основі знімків/ref замість націлювання CSS-селекторами, хуки завантаження
одного файлу, без перевизначень тайм-ауту діалогів, без `wait --load networkidle` і без
дії на основі snapshot/ref замість націлювання CSS-селекторами, хуки завантаження
одного файла, без перевизначень таймауту діалогів, без `wait --load networkidle` і без
`responsebody`, експорту PDF, перехоплення завантажень або пакетних дій.
- Локальні керовані профілі `openclaw` автоматично призначають `cdpPort` і `cdpUrl`; задавайте
`cdpUrl` явно лише для віддаленого CDP.
- Локальні керовані профілі `openclaw` автоматично призначають `cdpPort` і `cdpUrl`; явно
задавайте `cdpUrl` лише для віддаленого CDP.
- Локальні керовані профілі можуть задавати `executablePath`, щоб перевизначити глобальний
`browser.executablePath` для цього профілю. Використовуйте це, щоб запускати один профіль у
Chrome, а інший у Brave.
- Локальні керовані профілі використовують `browser.localLaunchTimeoutMs` для HTTP-виявлення Chrome CDP
після запуску процесу та `browser.localCdpReadyTimeoutMs` для
готовності CDP websocket після запуску. Збільшуйте їх на повільніших хостах, де Chrome
успішно запускається, але перевірки готовності випереджають запуск. Обидва значення мають бути
додатними цілими числами до `120000` мс; некоректні значення конфігурації відхиляються.
- Порядок автовиявлення: типовий браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
готовності CDP WebSocket після запуску. Збільшуйте їх на повільніших хостах, де Chrome
запускається успішно, але перевірки готовності випереджають запуск. Обидва значення мають бути
додатними цілими числами до `120000` мс; недійсні значення конфігурації відхиляються.
- Порядок автовиявлення: стандартний браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- `browser.executablePath` і `browser.profiles.<name>.executablePath` обидва
приймають `~` і `~/...` для домашнього каталогу вашої ОС перед запуском Chromium.
`userDataDir` для окремого профілю в профілях `existing-session` також розгортається з тильдою.
`userDataDir` для кожного профілю в профілях `existing-session` також розгортається з тильдою.
- Служба керування: лише loopback (порт виводиться з `gateway.port`, типово `18791`).
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад,
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад
`--disable-gpu`, розмір вікна або прапорці налагодження).
---
## UI
## Інтерфейс користувача
```json5
{
@ -337,7 +337,7 @@ x-i18n:
}
```
- `seamColor`: акцентний колір для хрому UI нативного застосунку (відтінок бульбашки Talk Mode тощо).
- `seamColor`: акцентний колір для хрому інтерфейсу нативного застосунку (відтінок бульбашки Talk Mode тощо).
- `assistant`: перевизначення ідентичності Control UI. Повертається до ідентичності активного агента.
---
@ -413,66 +413,66 @@ x-i18n:
}
```
<Accordion title="Відомості про поля Gateway">
<Accordion title="Gateway field details">
- `mode`: `local` (запустити Gateway) або `remote` (підключитися до віддаленого Gateway). Gateway відмовляється запускатися, якщо значення не `local`.
- `port`: один мультиплексований порт для WS + HTTP. Пріоритет: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`.
- `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**: використовуйте значення режиму 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"`), щоб слухати на всіх інтерфейсах.
- **Автентифікація**: типово обов’язкова. Bind-и не loopback вимагають автентифікації Gateway. На практиці це означає спільний токен/пароль або identity-aware reverse proxy з `gateway.auth.mode: "trusted-proxy"`. Майстер онбордингу типово генерує токен.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRefs), явно задайте `gateway.auth.mode` як `token` або `password`. Запуск і потоки встановлення/відновлення служби завершуються помилкою, коли налаштовано обидва значення, а режим не задано.
- `gateway.auth.mode: "none"`: явний режим без автентифікації. Використовуйте лише для довірених налаштувань local loopback; це навмисно не пропонується підказками онбордингу.
- `gateway.auth.mode: "trusted-proxy"`: делегує автентифікацію браузера/користувача identity-aware reverse proxy і довіряє заголовкам ідентичності з `gateway.trustedProxies` (див. [Автентифікація через довірений проксі](/uk/gateway/trusted-proxy-auth)). Цей режим типово очікує джерело проксі **не loopback**; reverse proxy loopback на тому самому хості потребують явного `gateway.auth.trustedProxy.allowLoopback = true`. Внутрішні виклики з того самого хоста можуть використовувати `gateway.auth.password` як локальний прямий резервний варіант; `gateway.auth.token` залишається взаємовиключним із режимом trusted-proxy.
- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти автентифікацію Control UI/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю автентифікацію заголовків Tailscale; натомість вони дотримуються звичайного режиму HTTP-автентифікації Gateway. Цей потік без токенів припускає, що хост Gateway довірений. Типово `true`, коли `tailscale.mode = "serve"`.
- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб автентифікації. Застосовується окремо для IP клієнта та області автентифікації (shared-secret і device-token відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом помилки. Тому одночасні невдалі спроби від того самого клієнта можуть спрацювати обмежувачем уже на другому запиті, замість того щоб обидві пройшли як звичайні невідповідності.
- `gateway.auth.rateLimit.exemptLoopback` типово `true`; задайте `false`, коли навмисно хочете обмежувати також трафік localhost (для тестових налаштувань або суворих розгортань проксі).
- Спроби WS-автентифікації з браузерного origin завжди обмежуються з вимкненим винятком для loopback (додатковий захист від browser-based перебору localhost).
- На loopback такі блокування браузерного origin ізольовані для кожного нормалізованого значення `Origin`, тому повторні невдачі з одного origin localhost автоматично не блокують інший origin.
- **Застарілі псевдоніми 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 (`-p 18789:18789`) трафік надходить на `eth0`, тому gateway недоступний. Використовуйте `--network host` або задайте `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
- **Автентифікація**: потрібна за замовчуванням. Bind не на loopback вимагає автентифікації gateway. На практиці це означає спільний токен/пароль або reverse proxy з урахуванням ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер онбордингу типово генерує токен.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRefs), явно задайте `gateway.auth.mode` як `token` або `password`. Потоки запуску та встановлення/ремонту служби завершуються помилкою, коли обидва значення налаштовані, а режим не заданий.
- `gateway.auth.mode: "none"`: явний режим без автентифікації. Використовуйте лише для довірених налаштувань local loopback; це навмисно не пропонується в підказках онбордингу.
- `gateway.auth.mode: "trusted-proxy"`: делегує автентифікацію браузера/користувача reverse proxy з урахуванням ідентичності та довіряє заголовкам ідентичності з `gateway.trustedProxies` (див. [Автентифікація довіреного proxy](/uk/gateway/trusted-proxy-auth)). Цей режим типово очікує джерело proxy **не з loopback**; reverse proxy same-host loopback вимагають явного `gateway.auth.trustedProxy.allowLoopback = true`. Внутрішні виклики same-host можуть використовувати `gateway.auth.password` як локальний прямий fallback; `gateway.auth.token` залишається взаємовиключним із режимом trusted-proxy.
- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти автентифікацію інтерфейсу керування/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю автентифікацію через заголовки Tailscale; натомість вони дотримуються звичайного режиму HTTP-автентифікації gateway. Цей потік без токена припускає, що хост gateway є довіреним. Типово `true`, коли `tailscale.mode = "serve"`.
- `gateway.auth.rateLimit`: необов'язковий обмежувач невдалих автентифікацій. Застосовується для кожної IP-адреси клієнта та кожної області автентифікації (shared-secret і device-token відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
- На асинхронному шляху інтерфейсу керування Tailscale Serve невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом помилки. Тому одночасні невдалі спроби від того самого клієнта можуть спрацювати на обмежувачі вже на другому запиті, замість того щоб обидві пройшли як прості невідповідності.
- `gateway.auth.rateLimit.exemptLoopback` типово `true`; задайте `false`, коли навмисно хочете також обмежувати трафік localhost (для тестових налаштувань або суворих proxy-розгортань).
- Спроби WS-автентифікації з browser-origin завжди обмежуються з вимкненим винятком для loopback (захист у глибину проти браузерного brute force на localhost).
- На loopback такі блокування browser-origin ізольовані за нормалізованим значенням `Origin`, тому повторні помилки з одного origin localhost не блокують автоматично інший origin.
- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний, потребує автентифікації).
- `controlUi.allowedOrigins`: явний allowlist браузерних origin для підключень Gateway WebSocket. Обов’язковий, коли браузерні клієнти очікуються з 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`: аварійне перевизначення в середовищі процесу на стороні клієнта, яке дозволяє plaintext `ws://` до довірених IP приватної мережі; типовим для plaintext залишається лише loopback. Еквівалента в `openclaw.json` немає, а конфігурація приватної мережі браузера, така як `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на клієнтів Gateway WebSocket.
- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують автентифікацію Gateway.
- `gateway.push.apns.relay.baseUrl`: базова HTTPS URL-адреса для зовнішнього APNs relay, який використовується офіційними/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 для наведеної вище конфігурації relay.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: escape hatch лише для розробки для HTTP URL relay на loopback. У production URL relay мають залишатися на HTTPS.
- `gateway.handshakeTimeoutMs`: тайм-аут pre-auth рукостискання Gateway WebSocket у мілісекундах. Типово: `15000`. `OPENCLAW_HANDSHAKE_TIMEOUT_MS` має пріоритет, коли задано. Збільште це значення на завантажених або малопотужних хостах, де локальні клієнти можуть підключатися, поки прогрів запуску ще стабілізується.
- `gateway.channelHealthCheckMinutes`: інтервал монітора здоров’я каналу в хвилинах. Задайте `0`, щоб глобально вимкнути перезапуски health-monitor. Типово: `5`.
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Тримайте це значення більшим або рівним `gateway.channelHealthCheckMinutes`. Типово: `30`.
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor для каналу/облікового запису за ковзну годину. Типово: `10`.
- `channels.<provider>.healthMonitor.enabled`: opt-out для окремого каналу від перезапусків health-monitor зі збереженням глобального монітора ввімкненим.
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення для окремого облікового запису в багатооблікових каналах. Коли задано, воно має пріоритет над перевизначенням на рівні каналу.
- Локальні шляхи виклику Gateway можуть використовувати `gateway.remote.*` як резервний варіант лише коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв’язано, розв’язання fail-closed (без маскування віддаленим резервним варіантом).
- `trustedProxies`: IP reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Вказуйте лише проксі, які контролюєте. Записи loopback все ще чинні для налаштувань проксі/локального виявлення на тому самому хості (наприклад, 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`: необов’язковий allowlist CIDR/IP для автоматичного схвалення першого спарювання node device без запитаних scopes. Вимкнено, якщо не задано. Це не схвалює автоматично спарювання operator/browser/Control UI/WebChat і не схвалює автоматично оновлення role, scope, metadata або public-key.
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування allow/deny для оголошених команд node після спарювання та оцінювання platform allowlist. Використовуйте `allowCommands`, щоб opt in до небезпечних команд node, таких як `camera.snap`, `camera.clip` і `screen.record`; `denyCommands` вилучає команду, навіть якщо platform default або явний allow інакше включав би її. Після того як node змінить свій оголошений список команд, відхиліть і повторно схваліть це спарювання пристрою, щоб Gateway зберіг оновлений snapshot команд.
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий deny list).
- `gateway.tools.allow`: вилучає назви інструментів із типового HTTP deny list.
- `controlUi.allowedOrigins`: явний allowlist browser-origin для WebSocket-підключень Gateway. Потрібен, коли очікуються браузерні клієнти з origin не на loopback.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, який вмикає fallback origin за заголовком Host для розгортань, що навмисно покладаються на політику origin за заголовком Host.
- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` `remote.url` має бути `ws://` або `wss://`.
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: break-glass перевизначення на стороні клієнтського середовища процесу, яке дозволяє plaintext `ws://` до довірених IP приватної мережі; типове значення для plaintext залишається лише loopback. Еквівалента в `openclaw.json` немає, а приватномережеві налаштування браузера, такі як `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливають на WebSocket-клієнтів Gateway.
- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Самі по собі вони не налаштовують автентифікацію gateway.
- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL для зовнішнього APNs relay, який використовується офіційними/TestFlight iOS-збірками після публікації реєстрацій із relay-backed до gateway. Цей URL має збігатися з URL relay, скомпільованим у iOS-збірку.
- `gateway.push.apns.relay.timeoutMs`: timeout надсилання від gateway до relay у мілісекундах. Типово `10000`.
- Реєстрації relay-backed делегуються конкретній ідентичності gateway. Спарений iOS-застосунок отримує `gateway.identity.get`, включає цю ідентичність до реєстрації relay та пересилає gateway scoped для реєстрації дозвіл на надсилання. Інший gateway не може повторно використати цю збережену реєстрацію.
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові env-перевизначення для наведеної вище конфігурації relay.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: escape hatch лише для розробки для loopback HTTP URL relay. Production URL relay мають залишатися на HTTPS.
- `gateway.handshakeTimeoutMs`: timeout pre-auth WebSocket handshake Gateway у мілісекундах. Типово: `15000`. `OPENCLAW_HANDSHAKE_TIMEOUT_MS` має пріоритет, коли задано. Збільште це значення на навантажених або малопотужних хостах, де локальні клієнти можуть під'єднуватися, поки startup warmup ще стабілізується.
- `gateway.channelHealthCheckMinutes`: інтервал health-monitor каналу у хвилинах. Задайте `0`, щоб глобально вимкнути перезапуски health-monitor. Типово: `5`.
- `gateway.channelStaleEventThresholdMinutes`: поріг stale-socket у хвилинах. Тримайте його більшим або рівним `gateway.channelHealthCheckMinutes`. Типово: `30`.
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor для каналу/акаунта в ковзну годину. Типово: `10`.
- `channels.<provider>.healthMonitor.enabled`: opt-out для окремого каналу від перезапусків health-monitor, зберігаючи глобальний монітор увімкненим.
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення для окремого акаунта в багатоканальних каналах. Коли задано, воно має пріоритет над перевизначенням на рівні каналу.
- Локальні шляхи виклику gateway можуть використовувати `gateway.remote.*` як fallback лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв'язано, розв'язання завершується закритою відмовою (без маскування remote fallback).
- `trustedProxies`: IP-адреси reverse proxy, які завершують TLS або ін'єктують заголовки forwarded-client. Вказуйте лише proxy, які ви контролюєте. Записи loopback усе ще чинні для same-host proxy/local-detection налаштувань (наприклад 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 allowlist для автоматичного схвалення першого спарювання node-пристрою без запитаних scopes. Вимкнено, коли не задано. Це не схвалює автоматично спарювання оператора/браузера/інтерфейсу керування/WebChat і не схвалює автоматично оновлення role, scope, metadata або public-key.
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне allow/deny shaping для оголошених команд node після спарювання та оцінювання platform allowlist. Використовуйте `allowCommands`, щоб увімкнути небезпечні команди node, як-от `camera.snap`, `camera.clip` і `screen.record`; `denyCommands` вилучає команду, навіть якщо platform default або явний allow інакше включив би її. Після того як node змінює свій оголошений список команд, відхиліть і повторно схваліть це спарювання пристрою, щоб gateway зберіг оновлений command snapshot.
- `gateway.tools.deny`: додаткові назви tool, заблоковані для HTTP `POST /tools/invoke` (розширює default deny list).
- `gateway.tools.allow`: вилучає назви tool зі стандартного HTTP deny list.
</Accordion>
### Кінцеві точки, сумісні з 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:
- Посилення захисту URL-входу Responses:
- `gateway.http.endpoints.responses.maxUrlParts`
- `gateway.http.endpoints.responses.files.urlAllowlist`
- `gateway.http.endpoints.responses.images.urlAllowlist`
Порожні allowlist вважаються незаданими; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false` та/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
- Необовязковий заголовок посилення захисту відповіді:
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS origin, які контролюєте; див. [Автентифікація через довірений проксі](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
Порожні allowlists вважаються незаданими; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false` і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
- Необов'язковий заголовок посилення захисту відповіді:
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS origins, які ви контролюєте; див. [Автентифікація довіреного proxy](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
### Ізоляція кількох екземплярів
Запускайте кілька Gateway на одному хості з унікальними портами й каталогами стану:
Запускайте кілька gateways на одному хості з унікальними портами та state dirs:
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
@ -482,7 +482,7 @@ openclaw gateway --port 19001
Зручні прапорці: `--dev` (використовує `~/.openclaw-dev` + порт `19001`), `--profile <name>` (використовує `~/.openclaw-<name>`).
Див. [Кілька Gateway](/uk/gateway/multiple-gateways).
Див. [Кілька Gateways](/uk/gateway/multiple-gateways).
### `gateway.tls`
@ -500,11 +500,11 @@ openclaw gateway --port 19001
}
```
- `enabled`: вмикає TLS termination на слухачі Gateway (HTTPS/WSS) (типово: `false`).
- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, коли явні файли не налаштовано; лише для local/dev використання.
- `certPath`: шлях у файловій системі до файлу TLS-сертифіката.
- `keyPath`: шлях у файловій системі до файлу приватного TLS-ключа; обмежте дозволи.
- `caPath`: необов’язковий шлях до CA bundle для перевірки клієнтів або користувацьких ланцюгів довіри.
- `enabled`: вмикає завершення TLS на listener gateway (HTTPS/WSS) (типово: `false`).
- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, коли явні файли не налаштовані; лише для local/dev використання.
- `certPath`: шлях файлової системи до файлу TLS certificate.
- `keyPath`: шлях файлової системи до файлу TLS private key; тримайте дозволи обмеженими.
- `caPath`: необов'язковий шлях до CA bundle для перевірки клієнта або custom trust chains.
### `gateway.reload`
@ -520,17 +520,17 @@ openclaw gateway --port 19001
}
```
- `mode`: керує тим, як зміни конфігурації застосовуються під час виконання.
- `"off"`: ігнорувати live-зміни; зміни потребують явного перезапуску.
- `"restart"`: завжди перезапускати процес Gateway у разі зміни конфігурації.
- `"hot"`: застосовувати зміни в процесі без перезапуску.
- `"hybrid"` (типово): спочатку спробувати hot reload; якщо потрібно, перейти до перезапуску.
- `debounceMs`: debounce-вікно в мс перед застосуванням змін конфігурації (невід’ємне ціле число).
- `deferralTimeoutMs`: необовязковий максимальний час у мс для очікування in-flight операцій перед примусовим перезапуском. Опустіть, щоб використати типове обмежене очікування (`300000`); задайте `0`, щоб чекати необмежено й періодично логувати попередження про still-pending.
- `mode`: керує тим, як зміни конфігурації застосовуються під час runtime.
- `"off"`: ігнорувати live edits; зміни потребують явного restart.
- `"restart"`: завжди restart процес gateway при зміні конфігурації.
- `"hot"`: застосовувати зміни in-process без restart.
- `"hybrid"` (типово): спочатку спробувати hot reload; fallback до restart, якщо потрібно.
- `debounceMs`: вікно debounce у мс перед застосуванням змін конфігурації (невід'ємне ціле число).
- `deferralTimeoutMs`: необов'язковий максимальний час у мс для очікування in-flight операцій перед примусовим restart. Опустіть його, щоб використовувати типове обмежене очікування (`300000`); задайте `0`, щоб чекати необмежено довго та періодично логувати попередження still-pending.
---
## Хуки
## Hooks
```json5
{
@ -564,46 +564,46 @@ openclaw gateway --port 19001
```
Автентифікація: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
Токени хуків у рядку запиту відхиляються.
Токени hook у query-string відхиляються.
Перевірка та примітки з безпеки:
Примітки щодо перевірки та безпеки:
- `hooks.enabled=true` потребує непорожнього `hooks.token`.
- `hooks.token` має бути **відмінним** від `gateway.auth.token`; повторне використання токена Gateway відхиляється.
- `hooks.path` не може бути `/`; використовуйте окремий підшлях, наприклад `/hooks`.
- Якщо `hooks.allowRequestSessionKey=true`, обмежте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`).
- Якщо зіставлення або пресет використовує шаблонний `sessionKey`, установіть `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі зіставлення не потребують цього явного ввімкнення.
- Якщо зіставлення або пресет використовує шаблонізований `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі зіставлення не потребують цього явного ввімкнення.
**Кінцеві точки:**
- `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/<name>` → визначається через `hooks.mappings`
- Значення `sessionKey` зіставлення, відрендерені з шаблону, вважаються наданими ззовні й також потребують `hooks.allowRequestSessionKey=true`.
- Значення `sessionKey` зіставлення, відрендерені з шаблону, вважаються наданими зовні й також потребують `hooks.allowRequestSessionKey=true`.
<Accordion title="Подробиці зіставлення">
<Accordion title="Mapping details">
- `match.path` зіставляє підшлях після `/hooks` (наприклад, `/hooks/gmail``gmail`).
- `match.path` зіставляє підшлях після `/hooks` (наприклад `/hooks/gmail``gmail`).
- `match.source` зіставляє поле корисного навантаження для загальних шляхів.
- Шаблони на кшталт `{{messages[0].subject}}` читають із корисного навантаження.
- `transform` може вказувати на JS/TS-модуль, який повертає дію hook.
- Шаблони на кшталт `{{messages[0].subject}}` читають дані з корисного навантаження.
- `transform` може вказувати на модуль JS/TS, який повертає дію хуку.
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та обхід каталогів відхиляються).
- `agentId` спрямовує до конкретного агента; невідомі ідентифікатори повертаються до типового.
- `agentId` маршрутизує до конкретного агента; невідомі ідентифікатори повертаються до типового.
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або пропущено = дозволити всі, `[]` = заборонити всі).
- `defaultSessionKey`: необов’язковий фіксований ключ сеансу для запусків агента hook без явного `sessionKey`.
- `allowRequestSessionKey`: дозволяє викликачам `/hooks/agent` і керованим шаблонами ключам сеансів зіставлення задавати `sessionKey` (типово: `false`).
- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + зіставлення), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-яке зіставлення або пресет використовує шаблонний `sessionKey`.
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків агента хука без явного `sessionKey`.
- `allowRequestSessionKey`: дозволяє викликачам `/hooks/agent` і керованим шаблонами ключам сесій зіставлень задавати `sessionKey` (типово: `false`).
- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + зіставлення), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-яке зіставлення або пресет використовує шаблонізований `sessionKey`.
- `deliver: true` надсилає фінальну відповідь у канал; `channel` типово має значення `last`.
- `model` перевизначає LLM для цього запуску hook (має бути дозволено, якщо задано каталог моделей).
- `model` перевизначає LLM для цього запуску хука (має бути дозволено, якщо задано каталог моделей).
</Accordion>
### Інтеграція Gmail
- Вбудований пресет Gmail використовує `sessionKey: "hook:gmail:{{messages[0].id}}"`.
- Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, установіть `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
- Якщо вам потрібне `hooks.allowRequestSessionKey: false`, перевизначте пресет статичним `sessionKey` замість шаблонного типового значення.
- Якщо ви зберігаєте цю маршрутизацію для кожного повідомлення, задайте `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
- Якщо вам потрібно `hooks.allowRequestSessionKey: false`, перевизначте пресет статичним `sessionKey` замість типового шаблонізованого значення.
```json5
{
@ -626,12 +626,12 @@ openclaw gateway --port 19001
}
```
- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, якщо це налаштовано. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути.
- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, коли це налаштовано. Задайте `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути.
- Не запускайте окремий `gog gmail watch serve` поруч із Gateway.
---
## Хост Canvas
## Хост canvas
```json5
{
@ -643,18 +643,18 @@ openclaw gateway --port 19001
}
```
- Обслуговує доступні для редагування агентом HTML/CSS/JS і A2UI через HTTP під портом Gateway:
- Обслуговує редаговані агентом HTML/CSS/JS і A2UI через HTTP на порту Gateway:
- `http://<gateway-host>:<gateway.port>/__openclaw__/canvas/`
- `http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/`
- Лише локально: зберігайте `gateway.bind: "loopback"` (типово).
- Лише локально: залиште `gateway.bind: "loopback"` (типово).
- Прив’язки не до loopback: маршрути canvas потребують автентифікації Gateway (токен/пароль/довірений проксі), як і інші HTTP-поверхні Gateway.
- Node WebViews зазвичай не надсилають заголовки автентифікації; після сполучення та підключення вузла Gateway оголошує URL-адреси можливостей із областю дії вузла для доступу до canvas/A2UI.
- URL-адреси можливостей прив’язані до активного WS-сеансу вузла й швидко спливають. Резервний варіант на основі IP не використовується.
- Вставляє клієнт live-reload в обслуговуваний HTML.
- Автоматично створює початковий `index.html`, коли каталог порожній.
- Node WebViews зазвичай не надсилають заголовки автентифікації; після спарювання та підключення вузла Gateway оголошує URL-адреси можливостей, обмежені вузлом, для доступу до canvas/A2UI.
- URL-адреси можливостей прив’язані до активної WS-сесії вузла й швидко спливають. Резервний варіант на основі IP не використовується.
- Ін’єктує клієнт live-reload в обслуговуваний HTML.
- Автоматично створює стартовий `index.html`, коли каталог порожній.
- Також обслуговує A2UI за `/__openclaw__/a2ui/`.
- Зміни потребують перезапуску Gateway.
- Вимикайте live reload для великих каталогів або помилок `EMFILE`.
- Вимкніть live reload для великих каталогів або помилок `EMFILE`.
---
@ -672,9 +672,9 @@ openclaw gateway --port 19001
}
```
- `minimal` (типово): не включати `cliPath` + `sshPort` у TXT-записи.
- `full`: включити `cliPath` + `sshPort`.
- Ім’я хоста типово береться із системного імені хоста, коли воно є дійсною DNS-міткою, інакше використовується `openclaw`. Перевизначте за допомогою `OPENCLAW_MDNS_HOSTNAME`.
- `minimal` (типово): не включати `cliPath` + `sshPort` до TXT-записів.
- `full`: включати `cliPath` + `sshPort`.
- Ім’я хоста типово дорівнює системному імені хоста, якщо воно є коректною DNS-міткою, інакше використовується `openclaw`. Перевизначте через `OPENCLAW_MDNS_HOSTNAME`.
### Глобальна зона (DNS-SD)
@ -686,7 +686,7 @@ openclaw gateway --port 19001
}
```
Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднайте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS.
Записує unicast DNS-SD-зону в `~/.openclaw/dns/`. Для виявлення між мережами поєднайте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS.
Налаштування: `openclaw dns setup --apply`.
@ -711,10 +711,10 @@ openclaw gateway --port 19001
}
```
- Вбудовані змінні середовища застосовуються лише якщо в середовищі процесу немає ключа.
- Файли `.env`: `.env` у CWD + `~/.openclaw/.env` (жоден із них не перевизначає наявні змінні).
- Inline-змінні середовища застосовуються лише якщо в середовищі процесу бракує ключа.
- Файли `.env`: CWD `.env` + `~/.openclaw/.env` (жоден не перевизначає наявні змінні).
- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої login shell.
- Див. [Середовище](/uk/help/environment) для повного порядку пріоритету.
- Див. [Середовище](/uk/help/environment) для повного порядку пріоритетності.
### Підстановка змінних середовища
@ -737,11 +737,11 @@ openclaw gateway --port 19001
## Секрети
Посилання на секрети є додатковими: відкриті текстові значення все ще працюють.
Посилання на секрети є адитивними: значення відкритим текстом усе ще працюють.
### `SecretRef`
Використовуйте одну форму об'єкта:
Використовуйте одну форму обєкта:
```json5
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
@ -749,19 +749,19 @@ openclaw gateway --port 19001
Валідація:
- шаблон `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` відхиляється)
- Шаблон `provider`: `^[a-z][a-z0-9_-]{0,63}$`
- Шаблон id для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$`
- id для `source: "file"`: абсолютний JSON-вказівник (наприклад `"/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)
- `secrets apply` націлюється на підтримувані шляхи облікових даних `openclaw.json`.
- Посилання `auth-profiles.json` включено до runtime-розв'язання та покриття аудиту.
- Цілі `secrets apply` підтримують шляхи облікових даних `openclaw.json`.
- Посилання `auth-profiles.json` включено до runtime-розв’язання й покриття аудиту.
### Конфігурація постачальників секретів
### Конфігурація провайдерів секретів
```json5
{
@ -789,16 +789,16 @@ openclaw gateway --port 19001
}
```
Примітки:
Нотатки:
- Постачальник `file` підтримує `mode: "json"` і `mode: "singleValue"` (`id` має бути `"value"` у режимі singleValue).
- Шляхи постачальників file і exec відмовляють у закритому режимі, коли перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
- Постачальник `exec` вимагає абсолютний шлях `command` і використовує protocol payloads у stdin/stdout.
- За замовчуванням шляхи команд через символічні посилання відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи символічних посилань із валідацією розв'язаного цільового шляху.
- Якщо налаштовано `trustedDirs`, перевірка довіреного каталогу застосовується до розв'язаного цільового шляху.
- Дочірнє середовище `exec` за замовчуванням мінімальне; передавайте потрібні змінні явно через `passEnv`.
- Посилання на секрети розв'язуються під час активації в знімок у пам'яті, а потім шляхи запитів читають лише знімок.
- Фільтрація активної поверхні застосовується під час активації: нерозв'язані посилання на ввімкнених поверхнях спричиняють збій запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (`id` має бути `"value"` у режимі singleValue).
- Шляхи провайдерів file та exec завершуються закрито, коли перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
- Провайдер `exec` вимагає абсолютний шлях `command` і використовує протокольні payload-и через stdin/stdout.
- За замовчуванням шляхи команд через symlink відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи symlink, водночас валідуючи розв’язаний цільовий шлях.
- Якщо налаштовано `trustedDirs`, перевірка довіреного каталогу застосовується до розвязаного цільового шляху.
- Дочірнє середовище `exec` за замовчуванням мінімальне; явно передавайте потрібні змінні через `passEnv`.
- Посилання на секрети розв’язуються під час активації в знімок у пам’яті, після чого шляхи запитів читають лише цей знімок.
- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на ввімкнених поверхнях зривають запуск/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
---
@ -822,10 +822,10 @@ openclaw gateway --port 19001
- Профілі для кожного агента зберігаються в `<agentDir>/auth-profiles.json`.
- `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних.
- Застарілі плоскі мапи `auth-profiles.json`, як-от `{ "provider": { "apiKey": "..." } }`, не є runtime-форматом; `openclaw doctor --fix` переписує їх у канонічні профілі API-ключів `provider:default` із резервною копією `.legacy-flat.*.bak`.
- Застарілі плоскі мапи `auth-profiles.json`, як-от `{ "provider": { "apiKey": "..." } }`, не є runtime-форматом; `openclaw doctor --fix` переписує їх у канонічні API-key-профілі `provider:default` із резервною копією `.legacy-flat.*.bak`.
- Профілі режиму OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані auth-profile на основі SecretRef.
- Статичні runtime-облікові дані надходять із розв'язаних знімків у пам'яті; застарілі статичні записи `auth.json` очищаються після виявлення.
- Застарілі імпорти OAuth надходять із `~/.openclaw/credentials/oauth.json`.
- Статичні runtime-облікові дані походять із розв’язаних знімків у пам’яті; застарілі статичні записи `auth.json` видаляються під час виявлення.
- Застарілі імпорти OAuth беруться з `~/.openclaw/credentials/oauth.json`.
- Див. [OAuth](/uk/concepts/oauth).
- Runtime-поведінка секретів і інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets).
@ -849,19 +849,24 @@ openclaw gateway --port 19001
}
```
- `billingBackoffHours`: базова затримка в годинах, коли профіль зазнає збою через справжні помилки виставлення рахунків/недостатнього кредиту (за замовчуванням: `5`). Явний текст про billing усе ще може потрапити сюди навіть у відповідях `401`/`403`, але специфічні для постачальника текстові зіставники залишаються обмеженими постачальником, якому вони належать (наприклад, OpenRouter `Key limit exceeded`). Повторювані повідомлення HTTP `402` про usage-window або ліміт витрат організації/робочого простору натомість залишаються в шляху `rate_limit`.
- `billingBackoffHoursByProvider`: необов'язкові перевизначення годин затримки billing для кожного постачальника.
- `billingMaxHours`: обмеження в годинах для експоненційного зростання затримки billing (за замовчуванням: `24`).
- `authPermanentBackoffMinutes`: базова затримка в хвилинах для високодостовірних збоїв `auth_permanent` (за замовчуванням: `10`).
- `authPermanentMaxMinutes`: обмеження в хвилинах для зростання затримки `auth_permanent` (за замовчуванням: `60`).
- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників затримки (за замовчуванням: `24`).
- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile того самого постачальника для помилок перевантаження перед перемиканням на model fallback (за замовчуванням: `1`). Форми зайнятості постачальника, як-от `ModelNotReadyException`, потрапляють сюди.
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого постачальника/профілю (за замовчуванням: `0`).
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile того самого постачальника для помилок rate-limit перед перемиканням на model fallback (за замовчуванням: `1`). Цей rate-limit bucket включає текст у формі постачальника, як-от `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
- `billingBackoffHours`: базовий backoff у годинах, коли профіль завершується помилкою через справжні
помилки billing/недостатнього кредиту (за замовчуванням: `5`). Явний текст billing може
все ще потрапити сюди навіть у відповідях `401`/`403`, але специфічні для провайдера текстові
зіставлювачі лишаються обмеженими провайдером, якому вони належать (наприклад OpenRouter
`Key limit exceeded`). Повторювані HTTP `402` usage-window або
повідомлення про ліміт витрат організації/робочого простору натомість лишаються в шляху `rate_limit`.
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин billing backoff для кожного провайдера.
- `billingMaxHours`: верхня межа в годинах для експоненційного зростання billing 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`). Цей bucket rate-limit містить текст у формі провайдера, як-от `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
---
## Журналювання
## Логування
```json5
{
@ -880,7 +885,7 @@ openclaw gateway --port 19001
- Задайте `logging.file` для стабільного шляху.
- `consoleLevel` підвищується до `debug`, коли використано `--verbose`.
- `maxFileBytes`: максимальний розмір активного файлу журналу в байтах перед ротацією (додатне ціле число; типово: `104857600` = 100 МБ). OpenClaw зберігає до п’яти нумерованих архівів поруч з активним файлом.
- `redactSensitive` / `redactPatterns`: маскування за принципом найкращого зусилля для виводу в консоль, файлових журналів, записів журналу OTLP і збереженого тексту транскрипту сесії. `redactSensitive: "off"` вимикає лише цю загальну політику журналів/транскриптів; поверхні безпеки UI/інструментів/діагностики все одно редагують секрети перед виведенням.
- `redactSensitive` / `redactPatterns`: маскування за принципом найкращих зусиль для виводу в консоль, файлових журналів, записів журналу OTLP і збереженого тексту стенограми сеансу. `redactSensitive: "off"` вимикає лише цю загальну політику журналів/стенограм; поверхні безпеки UI/інструментів/діагностики все одно редагують секрети перед випуском.
---
@ -929,21 +934,21 @@ openclaw gateway --port 19001
```
- `enabled`: головний перемикач для виводу інструментації (типово: `true`).
- `flags`: масив рядків прапорців, що вмикають цільовий журнальний вивід (підтримує шаблони на кшталт `"telegram.*"` або `"*"`).
- `stuckSessionWarnMs`: поріг віку без прогресу в мс для класифікації довготривалих сесій обробки як `session.long_running`, `session.stalled` або `session.stuck`. Відповідь, інструмент, статус, блок і прогрес ACP скидають таймер; повторна діагностика `session.stuck` уповільнюється, доки стан не змінюється.
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`). Повну конфігурацію, каталог сигналів і модель приватності див. у [експорті OpenTelemetry](/uk/gateway/opentelemetry).
- `otel.endpoint`: URL колектора для експорту OTel.
- `otel.tracesEndpoint` / `otel.metricsEndpoint` / `otel.logsEndpoint`: необов’язкові кінцеві точки OTLP для конкретних сигналів. Якщо задані, вони перевизначають `otel.endpoint` лише для відповідного сигналу.
- `flags`: масив рядків прапорів, які вмикають цільовий вивід журналів (підтримує символи узагальнення, як-от `"telegram.*"` або `"*"`).
- `stuckSessionWarnMs`: поріг віку без прогресу в мс для класифікації тривалих сеансів обробки як `session.long_running`, `session.stalled` або `session.stuck`. Відповідь, інструмент, статус, блок і прогрес ACP скидають таймер; повторні діагностичні повідомлення `session.stuck` відступають, доки стан не змінюється.
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`). Повну конфігурацію, каталог сигналів і модель приватності див. в [експорті OpenTelemetry](/uk/gateway/opentelemetry).
- `otel.endpoint`: URL збирача для експорту OTel.
- `otel.tracesEndpoint` / `otel.metricsEndpoint` / `otel.logsEndpoint`: необов’язкові кінцеві точки OTLP для окремих сигналів. Якщо задано, вони перевизначають `otel.endpoint` лише для цього сигналу.
- `otel.protocol`: `"http/protobuf"` (типово) або `"grpc"`.
- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel.
- `otel.serviceName`: назва сервісу для атрибутів ресурсу.
- `otel.traces` / `otel.metrics` / `otel.logs`: вмикають експорт трас, метрик або журналів.
- `otel.sampleRate`: частота семплювання трас `0``1`.
- `otel.flushIntervalMs`: інтервал періодичного скидання телеметрії в мс.
- `otel.captureContent`: явне ввімкнення захоплення необробленого вмісту для атрибутів спанів OTEL. Типово вимкнено. Булеве `true` захоплює несистемний вміст повідомлень/інструментів; форма об’єкта дає змогу явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`.
- `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`: змінна середовища для ввімкнення найновіших експериментальних атрибутів провайдера спанів GenAI. Типово спани зберігають застарілий атрибут `gen_ai.system` для сумісності; метрики GenAI використовують обмежені семантичні атрибути.
- `OPENCLAW_OTEL_PRELOADED=1`: змінна середовища для хостів, які вже зареєстрували глобальний SDK OpenTelemetry. Тоді OpenClaw пропускає запуск/завершення SDK, яким володіє Plugin, зберігаючи діагностичні слухачі активними.
- `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`, `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` і `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`: змінні середовища кінцевих точок для конкретних сигналів, що використовуються, коли відповідний ключ конфігурації не задано.
- `otel.sampleRate`: частота вибірки трас `0``1`.
- `otel.flushIntervalMs`: періодичний інтервал скидання телеметрії в мс.
- `otel.captureContent`: увімкнення захоплення сирого вмісту для атрибутів проміжків OTEL. Типово вимкнено. Булеве `true` захоплює несистемний вміст повідомлень/інструментів; форма об’єкта дає змогу явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`.
- `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`: перемикач середовища для найновіших експериментальних атрибутів постачальника проміжків GenAI. Типово проміжки зберігають застарілий атрибут `gen_ai.system` для сумісності; метрики GenAI використовують обмежені семантичні атрибути.
- `OPENCLAW_OTEL_PRELOADED=1`: перемикач середовища для хостів, які вже зареєстрували глобальний OpenTelemetry SDK. Тоді OpenClaw пропускає запуск/зупинку SDK, яким володіє Plugin, залишаючи діагностичні слухачі активними.
- `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`, `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` і `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`: змінні середовища кінцевих точок для окремих сигналів, які використовуються, коли відповідний ключ конфігурації не задано.
- `cacheTrace.enabled`: записувати знімки трасування кешу для вбудованих запусків (типово: `false`).
- `cacheTrace.filePath`: шлях виводу для JSONL трасування кешу (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід трасування кешу (усі типово: `true`).
@ -970,9 +975,9 @@ openclaw gateway --port 19001
- `channel`: канал випусків для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`.
- `checkOnStart`: перевіряти оновлення npm під час запуску Gateway (типово: `true`).
- `auto.enabled`: увімкнути фонове автооновлення для пакетних встановлень (типово: `false`).
- `auto.enabled`: увімкнути фонове автооновлення для встановлень пакетів (типово: `false`).
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автоматичним застосуванням у стабільному каналі (типово: `6`; максимум: `168`).
- `auto.stableJitterHours`: додаткове вікно розгортання стабільного каналу в годинах (типово: `12`; максимум: `168`).
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання стабільного каналу в годинах (типово: `12`; максимум: `168`).
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки бета-каналу в годинах (типово: `1`; максимум: `24`).
---
@ -1006,23 +1011,23 @@ openclaw gateway --port 19001
}
```
- `enabled`: глобальний перемикач функції ACP (типово: `true`; задайте `false`, щоб приховати диспетчеризацію ACP і можливості запуску).
- `dispatch.enabled`: незалежний перемикач для диспетчеризації ходу сесії ACP (типово: `true`). Задайте `false`, щоб залишити команди ACP доступними, але заблокувати виконання.
- `backend`: ідентифікатор типового бекенда середовища виконання ACP (має відповідати зареєстрованому runtime Plugin ACP).
Якщо задано `plugins.allow`, включіть ідентифікатор backend Plugin (наприклад `acpx`), інакше вбудований типовий Plugin не завантажиться.
- `defaultAgent`: резервний ідентифікатор цільового агента ACP, коли запуски не вказують явну ціль.
- `allowedAgents`: allowlist ідентифікаторів агентів, дозволених для сесій середовища виконання ACP; порожній список означає відсутність додаткового обмеження.
- `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP.
- `enabled`: глобальний шлюз функції ACP (типово: `true`; задайте `false`, щоб приховати можливості диспетчеризації та створення ACP).
- `dispatch.enabled`: незалежний шлюз для диспетчеризації ходу сеансу ACP (типово: `true`). Задайте `false`, щоб залишити команди ACP доступними, блокуючи виконання.
- `backend`: типовий ідентифікатор бекенду середовища виконання ACP (має відповідати зареєстрованому Plugin середовища виконання ACP).
Спочатку встановіть бекенд-Plugin, а якщо задано `plugins.allow`, додайте ідентифікатор бекенд-Plugin (наприклад `acpx`), інакше бекенд ACP не завантажиться.
- `defaultAgent`: резервний ідентифікатор цільового агента ACP, коли створення не вказує явну ціль.
- `allowedAgents`: список дозволених ідентифікаторів агентів для сеансів середовища виконання ACP; порожній означає відсутність додаткових обмежень.
- `maxConcurrentSessions`: максимальна кількість одночасно активних сеансів ACP.
- `stream.coalesceIdleMs`: вікно скидання під час простою в мс для потокового тексту.
- `stream.maxChunkChars`: максимальний розмір фрагмента перед поділом проєкції потокового блока.
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструментів у межах одного ходу (типово: `true`).
- `stream.deliveryMode`: `"live"` передає поступово; `"final_only"` буферизує до фінальних подій ходу.
- `stream.maxChunkChars`: максимальний розмір фрагмента перед поділом проєкції потокового блоку.
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструментів на хід (типово: `true`).
- `stream.deliveryMode`: `"live"` транслює інкрементально; `"final_only"` буферизує до завершальних подій ходу.
- `stream.hiddenBoundarySeparator`: розділювач перед видимим текстом після прихованих подій інструментів (типово: `"paragraph"`).
- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, що проєктується на один хід ACP.
- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, що проєктується на хід ACP.
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлення ACP.
- `stream.tagVisibility`: запис назв тегів із булевими перевизначеннями видимості для потокових подій.
- `runtime.ttlMinutes`: TTL простою в хвилинах для воркерів сесій ACP перед тим, як вони стають придатними для очищення.
- `runtime.installCommand`: необов’язкова команда встановлення, яку треба запустити під час підготовки середовища виконання ACP.
- `stream.tagVisibility`: запис назв тегів у булеві перевизначення видимості для потокових подій.
- `runtime.ttlMinutes`: TTL простою в хвилинах для робітників сеансів ACP перед тим, як вони стануть придатними до очищення.
- `runtime.installCommand`: необов’язкова команда встановлення, яку слід виконати під час початкового налаштування середовища виконання ACP.
---
@ -1039,16 +1044,16 @@ openclaw gateway --port 19001
```
- `cli.banner.taglineMode` керує стилем слогана банера:
- `"random"` (типово): змінні кумедні/сезонні слогани.
- `"random"` (типово): змінні смішні/сезонні слогани.
- `"default"`: фіксований нейтральний слоган (`All your chats, one OpenClaw.`).
- `"off"`: без тексту слогана (заголовок/версія банера все одно показуються).
- Щоб приховати весь банер (а не лише слогани), задайте змінну середовища `OPENCLAW_HIDE_BANNER=1`.
- Щоб приховати весь банер (не лише слогани), задайте env `OPENCLAW_HIDE_BANNER=1`.
---
## Майстер
Метадані, які записують потоки керованого налаштування CLI (`onboard`, `configure`, `doctor`):
Метадані, записані керованими потоками налаштування CLI (`onboard`, `configure`, `doctor`):
```json5
{
@ -1066,15 +1071,15 @@ openclaw gateway --port 19001
## Ідентичність
Див. поля ідентичності `agents.list` у [типових налаштуваннях агента](/uk/gateway/config-agents#agent-defaults).
Див. поля ідентичності `agents.list` у [типових значеннях агента](/uk/gateway/config-agents#agent-defaults).
---
## Міст (застарілий, вилучено)
## Bridge (застаріле, вилучено)
Поточні збірки більше не містять TCP-міст. Node-и підключаються через WebSocket Gateway. Ключі `bridge.*` більше не є частиною схеми конфігурації (валідація завершується помилкою, доки їх не вилучено; `openclaw doctor --fix` може прибрати невідомі ключі).
Поточні збірки більше не містять TCP bridge. Node-и підключаються через Gateway WebSocket. Ключі `bridge.*` більше не є частиною схеми конфігурації (перевірка не проходить, доки їх не вилучено; `openclaw doctor --fix` може прибрати невідомі ключі).
<Accordion title="Конфігурація застарілого моста (історична довідка)">
<Accordion title="Застаріла конфігурація bridge (історична довідка)">
```json
{
@ -1112,11 +1117,11 @@ openclaw gateway --port 19001
}
```
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запусків cron перед обрізанням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів cron. Типово: `24h`; задайте `false`, щоб вимкнути.
- `runLog.maxBytes`: максимальний розмір одного файла журналу запуску (`cron/runs/<jobId>.jsonl`) перед обрізанням. Типово: `2_000_000` байтів.
- `runLog.keepLines`: найновіші рядки, що зберігаються, коли запускається обрізання журналу запуску. Типово: `2000`.
- `webhookToken`: bearer-токен, що використовується для доставки cron Webhook через POST (`delivery.mode = "webhook"`); якщо не вказано, заголовок автентифікації не надсилається.
- `webhook`: застарілий резервний URL Webhook (http/https), що використовується лише для збережених завдань, у яких досі є `notify: true`.
- `sessionRetention`: як довго зберігати завершені ізольовані сеанси запусків Cron перед обрізанням із `sessions.json`. Також керує очищенням архівованих видалених стенограм Cron. Типово: `24h`; задайте `false`, щоб вимкнути.
- `runLog.maxBytes`: максимальний розмір на файл журналу запуску (`cron/runs/<jobId>.jsonl`) перед обрізанням. Типово: `2_000_000` байтів.
- `runLog.keepLines`: найновіші рядки, що зберігаються, коли спрацьовує обрізання журналу запуску. Типово: `2000`.
- `webhookToken`: bearer-токен, який використовується для доставки POST Cron Webhook (`delivery.mode = "webhook"`); якщо пропущено, заголовок авторизації не надсилається.
- `webhook`: застарілий резервний URL Webhook (http/https), який використовується лише для збережених завдань, що все ще мають `notify: true`.
### `cron.retry`
@ -1134,9 +1139,9 @@ openclaw gateway --port 19001
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань у разі тимчасових помилок (типово: `3`; діапазон: `0``10`).
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 110 записів).
- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не вказуйте, щоб повторювати всі тимчасові типи.
- `retryOn`: типи помилок, які запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Пропустіть, щоб повторювати всі тимчасові типи.
Застосовується лише до одноразових завдань cron. Повторювані завдання використовують окрему обробку збоїв.
Застосовується лише до одноразових завдань Cron. Повторювані завдання використовують окрему обробку збоїв.
### `cron.failureAlert`
@ -1155,10 +1160,10 @@ openclaw gateway --port 19001
}
```
- `enabled`: увімкнути сповіщення про збої для завдань cron (типово: `false`).
- `after`: кількість послідовних збоїв перед надсиланням сповіщення (додатне ціле число, мінімум: `1`).
- `enabled`: увімкнути сповіщення про збої для завдань Cron (типово: `false`).
- `after`: кількість послідовних збоїв перед надсиланням сповіщення (додатне ціле число, мін.: `1`).
- `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число).
- `includeSkipped`: враховувати послідовно пропущені запуски в поріг сповіщення (типово: `false`). Пропущені запуски відстежуються окремо й не впливають на backoff помилок виконання.
- `includeSkipped`: зараховувати послідовні пропущені запуски до порогу сповіщення (типово: `false`). Пропущені запуски відстежуються окремо й не впливають на backoff помилок виконання.
- `mode`: режим доставки — `"announce"` надсилає через повідомлення каналу; `"webhook"` публікує в налаштований Webhook.
- `accountId`: необов’язковий ідентифікатор облікового запису або каналу для обмеження області доставки сповіщень.
@ -1177,44 +1182,44 @@ openclaw gateway --port 19001
}
```
- Стандартне призначення для сповіщень про збої Cron в усіх завданнях.
- `mode`: `"announce"` або `"webhook"`; за замовчуванням використовується `"announce"`, коли є достатньо даних цілі.
- `channel`: перевизначення каналу для доставки оголошення. `"last"` повторно використовує останній відомий канал доставки.
- `to`: явна ціль оголошення або URL Webhook. Обов’язково для режиму Webhook.
- Типове призначення для сповіщень про збої Cron для всіх завдань.
- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли є достатньо даних цілі.
- `channel`: перевизначення каналу для доставки announce. `"last"` повторно використовує останній відомий канал доставки.
- `to`: явна ціль announce або URL Webhook. Обов’язково для режиму Webhook.
- `accountId`: необов’язкове перевизначення облікового запису для доставки.
- `delivery.failureDestination` для окремого завдання перевизначає це глобальне значення за замовчуванням.
- Коли не задано ані глобального призначення для збоїв, ані призначення на рівні завдання, завдання, які вже доставляються через `announce`, у разі збою повертаються до цієї основної цілі оголошення.
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо основний `delivery.mode` завдання не дорівнює `"webhook"`.
- `delivery.failureDestination` для окремого завдання перевизначає це глобальне типове значення.
- Коли не задано ні глобальне призначення для збоїв, ні призначення для окремого завдання, завдання, які вже доставляються через `announce`, у разі збою повертаються до цієї основної цілі announce.
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо основний `delivery.mode` завдання не є `"webhook"`.
Див. [Завдання Cron](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [фонові завдання](/uk/automation/tasks).
Див. [Cron завдання](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [фонові завдання](/uk/automation/tasks).
---
## Змінні шаблону медіамоделі
## Змінні шаблонів медіамоделі
Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`:
| Змінна | Опис |
| ------------------ | ------------------------------------------------- |
| `{{Body}}` | Повний вміст вхідного повідомлення |
| `{{RawBody}}` | Необроблений вміст (без обгорток історії/відправника) |
| `{{BodyStripped}}` | Вміст без згадок групи |
| `{{Body}}` | Повне тіло вхідного повідомлення |
| `{{RawBody}}` | Сире тіло (без обгорток історії/відправника) |
| `{{BodyStripped}}` | Тіло з вилученими згадками групи |
| `{{From}}` | Ідентифікатор відправника |
| `{{To}}` | Ідентифікатор призначення |
| `{{MessageSid}}` | Ідентифікатор повідомлення каналу |
| `{{SessionId}}` | UUID поточної сесії |
| `{{IsNewSession}}` | `"true"`, коли створено нову сесію |
| `{{MediaUrl}}` | Псевдо-URL вхідного медіа |
| `{{MediaUrl}}` | Вхідний псевдо-URL медіа |
| `{{MediaPath}}` | Локальний шлях до медіа |
| `{{MediaType}}` | Тип медіа (зображення/аудіо/документ/…) |
| `{{Transcript}}` | Транскрипт аудіо |
| `{{Prompt}}` | Розв’язаний медіапромпт для записів CLI |
| `{{MaxChars}}` | Розв’язана максимальна кількість символів виводу для записів CLI |
| `{{Prompt}}` | Визначений медіапромпт для записів CLI |
| `{{MaxChars}}` | Визначена максимальна кількість символів виводу для записів CLI |
| `{{ChatType}}` | `"direct"` або `"group"` |
| `{{GroupSubject}}` | Тема групи (за можливості) |
| `{{GroupMembers}}` | Попередній перегляд учасників групи (за можливості) |
| `{{SenderName}}` | Відображуване ім’я відправника (за можливості) |
| `{{SenderE164}}` | Номер телефону відправника (за можливості) |
| `{{GroupSubject}}` | Тема групи (наскільки можливо) |
| `{{GroupMembers}}` | Попередній перегляд учасників групи (наскільки можливо) |
| `{{SenderName}}` | Відображуване ім’я відправника (наскільки можливо) |
| `{{SenderE164}}` | Номер телефону відправника (наскільки можливо) |
| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) |
---
@ -1237,12 +1242,12 @@ openclaw gateway --port 19001
**Поведінка злиття:**
- Один файл: замінює об’єкт, що його містить.
- Масив файлів: глибоко об’єднується по порядку (пізніші значення перевизначають раніші).
- Сусідні ключі: об’єднуються після включень (перевизначають включені значення).
- Масив файлів: глибоко зливається за порядком (пізніші перевизначають попередні).
- Сусідні ключі: зливаються після включень (перевизначають включені значення).
- Вкладені включення: до 10 рівнів углиб.
- Шляхи: розв’язуються відносно файлу, що виконує включення, але мають залишатися всередині каталогу конфігурації верхнього рівня (`dirname` для `openclaw.json`). Абсолютні форми та форми з `../` дозволені лише тоді, коли вони все одно розв’язуються всередині цієї межі.
- Записи, якими володіє OpenClaw і які змінюють лише один розділ верхнього рівня, підкріплений включенням одного файлу, записуються напряму в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін.
- Кореневі включення, масиви включень і включення з перевизначеннями сусідніх ключів доступні лише для читання для записів, якими володіє OpenClaw; такі записи завершуються із закритою відмовою замість вирівнювання конфігурації.
- Шляхи: визначаються відносно файлу, що виконує включення, але мають залишатися всередині каталогу конфігурації верхнього рівня (`dirname` від `openclaw.json`). Абсолютні форми та форми з `../` дозволені лише тоді, коли вони все одно визначаються всередині цієї межі.
- Записи, керовані OpenClaw, які змінюють лише один розділ верхнього рівня, підкріплений однофайловим включенням, записуються наскрізно до цього включеного файлу. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін.
- Кореневі включення, масиви включень і включення із сусідніми перевизначеннями доступні лише для читання для записів, керованих OpenClaw; такі записи завершуються закритою помилкою замість вирівнювання конфігурації.
- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок розбору та циклічних включень.
---

View File

@ -1,39 +1,45 @@
---
read_when:
- Ви хочете надсилати дані про використання моделей OpenClaw, потік повідомлень або метрики сеансів до колектора OpenTelemetry
- Ви підключаєте трасування, метрики або журнали до Grafana, Datadog, Honeycomb, New Relic, Tempo або іншого OTLP-бекенду
- Вам потрібні точні назви метрик, назви спанів або структури атрибутів, щоб створювати дашборди чи оповіщення
- Ви підключаєте трейси, метрики або журнали до Grafana, Datadog, Honeycomb, New Relic, Tempo або іншого бекенда OTLP
- Вам потрібні точні назви метрик, назви спанів або структури атрибутів, щоб створювати панелі моніторингу чи оповіщення
summary: Експортуйте діагностичні дані OpenClaw до будь-якого колектора OpenTelemetry через Plugin diagnostics-otel (OTLP/HTTP)
title: Експорт OpenTelemetry
x-i18n:
generated_at: "2026-05-01T23:59:41Z"
generated_at: "2026-05-02T07:52:47Z"
model: gpt-5.5
provider: openai
source_hash: be58bb48f06e72b5b08d21bf37c0dcc218be8e4c0030b074523794be01f2611a
source_hash: a0aed4ca8818d3bd1f5461fb58fbbe5c0d3ed1262cac506c60ee326800d98e1b
source_path: gateway/opentelemetry.md
workflow: 16
---
OpenClaw експортує діагностику через вбудований Plugin `diagnostics-otel`
за допомогою **OTLP/HTTP (protobuf)**. Будь-який колектор або бекенд, що приймає OTLP/HTTP,
OpenClaw експортує діагностику через офіційний Plugin `diagnostics-otel`
за допомогою **OTLP/HTTP (protobuf)**. Будь-який колектор або бекенд, який приймає OTLP/HTTP,
працює без змін у коді. Про локальні файлові журнали та як їх читати див.
[Журналювання](/uk/logging).
## Як це працює разом
## Як це поєднується
- **Події діагностики** — це структуровані внутрішньопроцесні записи, які
Gateway і вбудовані plugins генерують для запусків моделей, потоку повідомлень, сеансів, черг
- **Діагностичні події** — це структуровані внутрішньопроцесні записи, які
Gateway і вбудовані Plugin-и створюють для запусків моделей, потоку повідомлень, сеансів, черг
і exec.
- **Plugin `diagnostics-otel`** підписується на ці події та експортує їх як
OpenTelemetry **метрики**, **трейси** і **журнали** через OTLP/HTTP.
- **Виклики провайдерів** отримують W3C-заголовок `traceparent` від довіреного
контексту span виклику моделі OpenClaw, коли транспорт провайдера приймає користувацькі
заголовки. Контекст трасування, згенерований Plugin, не поширюється.
- Експортери підключаються лише тоді, коли ввімкнені і поверхня діагностики, і Plugin,
тому внутрішньопроцесні витрати за замовчуванням залишаються близькими до нуля.
- **Виклики провайдера** отримують W3C-заголовок `traceparent` з належного OpenClaw
контексту span для виклику моделі, коли транспорт провайдера приймає користувацькі
заголовки. Контекст трасування, створений Plugin-ом, не поширюється.
- Експортери підключаються лише тоді, коли ввімкнено і діагностичну поверхню, і Plugin,
тож внутрішньопроцесні витрати за замовчуванням залишаються майже нульовими.
## Швидкий старт
Для пакетних інсталяцій спочатку встановіть Plugin:
```bash
openclaw plugins install @openclaw/diagnostics-otel
```
```json5
{
plugins: {
@ -59,22 +65,22 @@ OpenClaw експортує діагностику через вбудовани
}
```
Ви також можете ввімкнути Plugin із CLI:
Також можна ввімкнути Plugin з CLI:
```bash
openclaw plugins enable diagnostics-otel
```
<Note>
`protocol` наразі підтримує лише `http/protobuf`. `grpc` ігнорується.
`protocol` зараз підтримує лише `http/protobuf`. `grpc` ігнорується.
</Note>
## Експортовані сигнали
| Сигнал | Що до нього входить |
| Сигнал | Що до нього потрапляє |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **Метрики** | Лічильники й гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черг, стану сеансу, exec і тиску пам’яті. |
| **Трейси** | Spans для використання моделі, викликів моделі, життєвого циклу harness, виконання інструментів, exec, обробки webhook/повідомлень, збирання контексту та циклів інструментів. |
| **Метрики** | Лічильники й гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черг, стану сеансів, exec і тиску на пам’ять. |
| **Трейси** | Span для використання моделі, викликів моделі, життєвого циклу harness, виконання інструментів, exec, обробки webhook/повідомлень, складання контексту та циклів інструментів. |
| **Журнали** | Структуровані записи `logging.file`, експортовані через OTLP, коли ввімкнено `diagnostics.otel.logs`. |
Перемикайте `traces`, `metrics` і `logs` незалежно. Усі три за замовчуванням увімкнені,
@ -118,53 +124,53 @@ openclaw plugins enable diagnostics-otel
| Змінна | Призначення |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Перевизначає `diagnostics.otel.endpoint`. Якщо значення вже містить `/v1/traces`, `/v1/metrics` або `/v1/logs`, воно використовується як є. |
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` / `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` / `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | Перевизначення endpoint для окремих сигналів, які використовуються, коли відповідний конфігураційний ключ `diagnostics.otel.*Endpoint` не задано. Конфігурація для окремого сигналу має пріоритет над env для окремого сигналу, який має пріоритет над спільним endpoint. |
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` / `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` / `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | Сигнально-специфічні перевизначення endpoint, які використовуються, коли відповідний ключ конфігурації `diagnostics.otel.*Endpoint` не задано. Сигнально-специфічна конфігурація має пріоритет над сигнально-специфічним env, а той має пріоритет над спільним endpoint. |
| `OTEL_SERVICE_NAME` | Перевизначає `diagnostics.otel.serviceName`. |
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначає wire-протокол (сьогодні враховується лише `http/protobuf`). |
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Установіть `gen_ai_latest_experimental`, щоб генерувати найновіший експериментальний атрибут span GenAI (`gen_ai.provider.name`) замість застарілого `gen_ai.system`. Метрики GenAI завжди використовують обмежені семантичні атрибути з низькою кардинальністю незалежно від цього. |
| `OPENCLAW_OTEL_PRELOADED` | Установіть `1`, коли інший preload або хост-процес уже зареєстрував глобальний OpenTelemetry SDK. Тоді Plugin пропускає власний життєвий цикл NodeSDK, але все одно підключає слухачі діагностики та враховує `traces`/`metrics`/`logs`. |
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначає протокол передавання (сьогодні враховується лише `http/protobuf`). |
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Установіть `gen_ai_latest_experimental`, щоб створювати найновіший експериментальний атрибут GenAI span (`gen_ai.provider.name`) замість застарілого `gen_ai.system`. Метрики GenAI завжди використовують обмежені семантичні атрибути з низькою кардинальністю. |
| `OPENCLAW_OTEL_PRELOADED` | Установіть `1`, коли інший preload або хост-процес уже зареєстрував глобальний OpenTelemetry SDK. Тоді Plugin пропускає власний життєвий цикл NodeSDK, але все одно підключає діагностичні слухачі та враховує `traces`/`metrics`/`logs`. |
## Приватність і захоплення вмісту
Сирий вміст моделі/інструментів **не** експортується за замовчуванням. Spans містять обмежені
ідентифікатори (канал, провайдер, модель, категорія помилки, ідентифікатори запитів лише як хеш)
і ніколи не включають текст prompt, текст відповіді, вхідні дані інструментів, вихідні дані інструментів або
ключі сеансу.
Сирий вміст моделі/інструмента **не** експортується за замовчуванням. Span-и містять обмежені
ідентифікатори (канал, провайдер, модель, категорія помилки, ідентифікатори запитів лише як хеші)
і ніколи не включають текст prompt, текст відповіді, вхідні дані інструмента, вихідні дані інструмента або
ключі сеансів.
Вихідні запити до моделей можуть містити W3C-заголовок `traceparent`. Цей заголовок
генерується лише з діагностичного контексту трасування, яким володіє OpenClaw, для активного виклику
моделі. Наявні надані викликачем заголовки `traceparent` замінюються, тому plugins або
Вихідні запити до моделі можуть містити W3C-заголовок `traceparent`. Цей заголовок
створюється лише з діагностичного контексту трасування, який належить OpenClaw, для активного виклику моделі.
Наявні заголовки `traceparent`, надані викликачем, замінюються, тож Plugin-и або
користувацькі параметри провайдера не можуть підробити міжсервісне походження трасування.
Установлюйте `diagnostics.otel.captureContent.*` у `true` лише тоді, коли ваш колектор і
політика зберігання схвалені для тексту prompt, відповіді, інструментів або системного prompt.
Кожен підключ увімкнений окремо:
політика зберігання схвалені для тексту prompt, відповіді, інструмента або системного prompt.
Кожен підключ є opt-in незалежно:
- `inputMessages` — вміст prompt користувача.
- `outputMessages` — вміст відповіді моделі.
- `toolInputs` — payload аргументів інструменту.
- `toolOutputs` — payload результатів інструменту.
- `toolInputs` — payload-и аргументів інструмента.
- `toolOutputs` — payload-и результатів інструмента.
- `systemPrompt` — зібраний системний/developer prompt.
Коли ввімкнено будь-який підключ, spans моделі та інструменту отримують обмежені, редаговані
Коли ввімкнено будь-який підключ, span-и моделі та інструмента отримують обмежені, редаговані
атрибути `openclaw.content.*` лише для цього класу.
## Семплінг і скидання
## Семплінг і flush
- **Трейси:** `diagnostics.otel.sampleRate` (лише root-span, `0.0` відкидає всі,
`1.0` зберігає всі).
- **Трейси:** `diagnostics.otel.sampleRate` (лише root-span, `0.0` відкидає все,
`1.0` зберігає все).
- **Метрики:** `diagnostics.otel.flushIntervalMs` (мінімум `1000`).
- **Журнали:** журнали OTLP враховують `logging.level` (рівень файлового журналу). Вони використовують
шлях редагування діагностичних log-record, а не форматування консолі. Інсталяціям із великим обсягом
слід надавати перевагу семплінгу/фільтрації OTLP-колектора над локальним семплінгом.
- **Кореляція файлових журналів:** файлові журнали JSONL включають поля верхнього рівня `traceId`,
`spanId`, `parentSpanId` і `traceFlags`, коли виклик журналу містить дійсний
діагностичний контекст трасування, що дає змогу процесорам журналів поєднувати локальні рядки журналу з
експортованими spans.
- **Журнали:** OTLP-журнали враховують `logging.level` (рівень файлового журналу). Вони використовують
шлях редагування діагностичного log-record, а не форматування консолі. Інсталяціям з великим обсягом
варто надавати перевагу семплінгу/фільтрації OTLP-колектора, а не локальному семплінгу.
- **Кореляція файлових журналів:** JSONL-файлові журнали містять верхньорівневі `traceId`,
`spanId`, `parentSpanId` і `traceFlags`, коли виклик журналювання містить чинний
діагностичний контекст трасування, що дає змогу процесорам журналів поєднувати локальні рядки журналів з
експортованими span-ами.
- **Кореляція запитів:** HTTP-запити Gateway і WebSocket-фрейми створюють
внутрішню область трасування запиту. Журнали й діагностичні події в цій області
за замовчуванням успадковують трасування запиту, а spans запуску агента та виклику моделі
створюються як дочірні, щоб заголовки провайдера `traceparent` залишалися в тому самому трасуванні.
внутрішню область трасування запиту. Журнали та діагностичні події всередині цієї області
за замовчуванням успадковують трасування запиту, тоді як span-и agent run і model-call
створюються як дочірні, щоб заголовки `traceparent` провайдера залишалися в тому самому trace.
## Експортовані метрики
@ -175,10 +181,10 @@ openclaw plugins enable diagnostics-otel
- `openclaw.run.duration_ms` (гістограма, атрибути: `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
- `openclaw.context.tokens` (гістограма, атрибути: `openclaw.context`, `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
- `gen_ai.client.token.usage` (гістограма, метрика семантичних конвенцій GenAI, атрибути: `gen_ai.token.type` = `input`/`output`, `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`)
- `gen_ai.client.operation.duration` (гістограма, секунди, метрика семантичних конвенцій GenAI, атрибути: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, необов’язковий `error.type`)
- `openclaw.model_call.duration_ms` (гістограма, атрибути: `openclaw.provider`, `openclaw.model`, `openclaw.api`, `openclaw.transport`, а також `openclaw.errorCategory` і `openclaw.failureKind` для класифікованих помилок)
- `openclaw.model_call.request_bytes` (гістограма, розмір фінального payload запиту до моделі в байтах UTF-8; без сирого вмісту payload)
- `openclaw.model_call.response_bytes` (гістограма, розмір подій потокової відповіді моделі в байтах UTF-8; без сирого вмісту відповіді)
- `gen_ai.client.operation.duration` (гістограма, секунди, метрика семантичних конвенцій GenAI, атрибути: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, необов’язково `error.type`)
- `openclaw.model_call.duration_ms` (гістограма, атрибути: `openclaw.provider`, `openclaw.model`, `openclaw.api`, `openclaw.transport`, плюс `openclaw.errorCategory` і `openclaw.failureKind` для класифікованих помилок)
- `openclaw.model_call.request_bytes` (гістограма, розмір у байтах UTF-8 фінального payload запиту до моделі; без сирого вмісту payload)
- `openclaw.model_call.response_bytes` (гістограма, розмір у байтах UTF-8 подій потокової відповіді моделі; без сирого вмісту відповіді)
- `openclaw.model_call.time_to_first_byte_ms` (гістограма, час, що минув до першої події потокової відповіді)
### Потік повідомлень
@ -199,33 +205,33 @@ openclaw plugins enable diagnostics-otel
- `openclaw.queue.depth` (гістограма, атрибути: `openclaw.lane` або `openclaw.channel=heartbeat`)
- `openclaw.queue.wait_ms` (гістограма, атрибути: `openclaw.lane`)
- `openclaw.session.state` (лічильник, атрибути: `openclaw.state`, `openclaw.reason`)
- `openclaw.session.stuck` (лічильник, атрибути: `openclaw.state`; генерується лише для обліку застарілих сеансів без активної роботи)
- `openclaw.session.stuck_age_ms` (гістограма, атрибути: `openclaw.state`; генерується лише для обліку застарілих сеансів без активної роботи)
- `openclaw.session.stuck` (лічильник, атрибути: `openclaw.state`; створюється лише для bookkeeping застарілого сеансу без активної роботи)
- `openclaw.session.stuck_age_ms` (гістограма, атрибути: `openclaw.state`; створюється лише для bookkeeping застарілого сеансу без активної роботи)
- `openclaw.run.attempt` (лічильник, атрибути: `openclaw.attempt`)
### Телеметрія життєздатності сеансу
`diagnostics.stuckSessionWarnMs` — це поріг віку без прогресу для діагностики
життєздатності сеансу. Сеанс `processing` не старіє до цього порога,
поки OpenClaw спостерігає прогрес відповіді, інструменту, статусу, блока або runtime ACP.
Typing keepalives не враховуються як прогрес, тому silent модель або harness все ще можуть
бути виявлені.
поки OpenClaw спостерігає прогрес відповіді, інструмента, статусу, блока або ACP runtime.
Typing keepalive-и не зараховуються як прогрес, тож безмовну модель або harness
усе одно можна виявити.
OpenClaw класифікує сеанси за роботою, яку він все ще може спостерігати:
OpenClaw класифікує сеанси за роботою, яку ще може спостерігати:
- `session.long_running`: активна вбудована робота, виклики моделі або виклики інструментів
все ще просуваються.
усе ще просуваються.
- `session.stalled`: активна робота існує, але активний запуск не повідомляв
про нещодавній прогрес.
- `session.stuck`: застарілий облік сеансу без активної роботи. Це єдина
класифікація життєздатності, яка звільняє відповідну смугу сеансу.
класифікація працездатності, яка звільняє відповідну смугу сеансу.
Лише `session.stuck` генерує лічильник `openclaw.session.stuck`,
гістограму `openclaw.session.stuck_age_ms` і span `openclaw.session.stuck`.
Повторні діагностичні повідомлення `session.stuck` мають зворотне відтермінування, доки сеанс залишається
незмінним, тому панелі моніторингу мають сповіщати про сталі зростання, а не про кожен
тик Heartbeat. Для параметра конфігурації та значень за замовчуванням див.
[Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics).
Повторні діагностичні події `session.stuck` відступають, доки сеанс залишається
незміненим, тому панелі моніторингу мають сповіщати про сталі збільшення, а не про кожен
тік Heartbeat. Ручку конфігурації та значення за замовчуванням див.
у [довіднику конфігурації](/uk/gateway/configuration-reference#diagnostics).
### Життєвий цикл harness
@ -235,7 +241,7 @@ OpenClaw класифікує сеанси за роботою, яку він в
- `openclaw.exec.duration_ms` (гістограма, атрибути: `openclaw.exec.target`, `openclaw.exec.mode`, `openclaw.outcome`, `openclaw.failureKind`)
### Внутрішня діагностика (пам’ять і цикл інструментів)
### Внутрішні механізми діагностики (пам’ять і цикл інструментів)
- `openclaw.memory.heap_used_bytes` (гістограма, атрибути: `openclaw.memory.kind`)
- `openclaw.memory.rss_bytes` (гістограма)
@ -257,7 +263,7 @@ OpenClaw класифікує сеанси за роботою, яку він в
- `gen_ai.request.model`, `gen_ai.operation.name`, `openclaw.provider`, `openclaw.model`, `openclaw.api`, `openclaw.transport`
- `openclaw.errorCategory` і необов’язковий `openclaw.failureKind` у разі помилок
- `openclaw.model_call.request_bytes`, `openclaw.model_call.response_bytes`, `openclaw.model_call.time_to_first_byte_ms`
- `openclaw.provider.request_id_hash` (обмежений SHA-оснований hash ідентифікатора запиту до upstream-провайдера; сирі ідентифікатори не експортуються)
- `openclaw.provider.request_id_hash` (обмежений хеш на основі SHA ідентифікатора запиту до вищого провайдера; сирі ідентифікатори не експортуються)
- `openclaw.harness.run`
- `openclaw.harness.id`, `openclaw.harness.plugin`, `openclaw.outcome`, `openclaw.provider`, `openclaw.model`, `openclaw.channel`
- Після завершення: `openclaw.harness.result_classification`, `openclaw.harness.yield_detected`, `openclaw.harness.items.started`, `openclaw.harness.items.completed`, `openclaw.harness.items.active`
@ -277,7 +283,7 @@ OpenClaw класифікує сеанси за роботою, яку він в
- `openclaw.session.stuck`
- `openclaw.state`, `openclaw.ageMs`, `openclaw.queueDepth`
- `openclaw.context.assembled`
- `openclaw.prompt.size`, `openclaw.history.size`, `openclaw.context.tokens`, `openclaw.errorCategory` (без вмісту prompt, історії, відповіді або ключа сеансу)
- `openclaw.prompt.size`, `openclaw.history.size`, `openclaw.context.tokens`, `openclaw.errorCategory` (без промпта, історії, відповіді або вмісту ключа сеансу)
- `openclaw.tool.loop`
- `openclaw.toolName`, `openclaw.outcome`, `openclaw.iterations`, `openclaw.errorCategory` (без повідомлень циклу, параметрів або виводу інструмента)
- `openclaw.memory.pressure`
@ -289,15 +295,15 @@ OpenClaw класифікує сеанси за роботою, яку він в
## Каталог діагностичних подій
Наведені нижче події підтримують метрики та spans вище. Plugins також можуть підписуватися
Наведені нижче події підтримують метрики й spans вище. Plugins також можуть підписуватися
на них напряму без експорту OTLP.
**Використання моделі**
- `model.usage` — токени, вартість, тривалість, контекст, провайдер/модель/канал,
ідентифікатори сеансів. `usage` — це облік провайдера/ходу для вартості й телеметрії;
`context.used` — це поточний знімок prompt/контексту й може бути нижчим за
`usage.total` провайдера, коли залучені кешований вхід або виклики циклу інструментів.
ідентифікатори сеансу. `usage` — це облік провайдера/ходу для вартості й телеметрії;
`context.used` — це поточний знімок промпта/контексту, і він може бути меншим за
`usage.total` провайдера, коли задіяні кешований вхід або виклики циклу інструментів.
**Потік повідомлень**
@ -315,7 +321,7 @@ OpenClaw класифікує сеанси за роботою, яку він в
**Життєвий цикл harness**
- `harness.run.started` / `harness.run.completed` / `harness.run.error`
життєвий цикл кожного запуску для agent harness. Містить `harnessId`, необов’язковий
життєвий цикл кожного запуску для harness агента. Містить `harnessId`, необов’язковий
`pluginId`, провайдер/модель/канал і ідентифікатор запуску. Завершення додає
`durationMs`, `outcome`, необов’язкові `resultClassification`, `yieldDetected`,
і лічильники `itemLifecycle`. Помилки додають `phase`
@ -324,13 +330,13 @@ OpenClaw класифікує сеанси за роботою, яку він в
**Exec**
- `exec.process.completed` — кінцевий результат, тривалість, ціль, режим, код виходу
і тип відмови. Текст команди та робочі каталоги не
- `exec.process.completed` — кінцевий результат термінала, тривалість, ціль, режим, код виходу
і тип збою. Текст команди та робочі каталоги не
включаються.
## Без експортера
Ви можете залишити діагностичні події доступними для plugins або користувацьких sinks без
Ви можете залишити діагностичні події доступними для plugins або власних приймачів без
запуску `diagnostics-otel`:
```json5
@ -339,8 +345,8 @@ OpenClaw класифікує сеанси за роботою, яку він в
}
```
Для цільового debug-виводу без підвищення `logging.level` використовуйте діагностичні
прапорці. Прапорці не чутливі до регістру й підтримують wildcards (наприклад, `telegram.*` або
Для цільового налагоджувального виводу без підвищення `logging.level` використовуйте діагностичні
прапорці. Прапорці нечутливі до регістру та підтримують шаблони (наприклад, `telegram.*` або
`*`):
```json5
@ -349,14 +355,14 @@ OpenClaw класифікує сеанси за роботою, яку він в
}
```
Або як одноразове перевизначення env:
Або як одноразове перевизначення через env:
```bash
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
```
Вивід прапорців надходить до стандартного log-файлу (`logging.file`) і все одно
редагується `logging.redactSensitive`. Повний посібник:
Вивід прапорців потрапляє до стандартного файлу журналу (`logging.file`) і все одно
редагується через `logging.redactSensitive`. Повний посібник:
[Діагностичні прапорці](/uk/diagnostics/flags).
## Вимкнення
@ -367,13 +373,13 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
}
```
Ви також можете не додавати `diagnostics-otel` до `plugins.allow` або виконати
Ви також можете не включати `diagnostics-otel` у `plugins.allow` або виконати
`openclaw plugins disable diagnostics-otel`.
## Пов’язане
- [Логування](/uk/logging) — файлові logs, вивід у консоль, CLI tailing і вкладка Logs у Control UI
- [Внутрішня логіка Gateway logging](/uk/gateway/logging) — стилі WS log, префікси підсистем і захоплення консолі
- [Діагностичні прапорці](/uk/diagnostics/flags) — цільові прапорці debug-log
- [Експорт діагностики](/uk/gateway/diagnostics) — інструмент support-bundle для оператора (окремо від експорту OTEL)
- [Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics) — повний довідник полів `diagnostics.*`
- [Журналювання](/uk/logging) — файлові журнали, консольний вивід, відстеження через CLI і вкладка журналів Control UI
- [Внутрішні механізми журналювання Gateway](/uk/gateway/logging) — стилі журналів WS, префікси підсистем і захоплення консолі
- [Діагностичні прапорці](/uk/diagnostics/flags) — цільові прапорці налагоджувального журналу
- [Експорт діагностики](/uk/gateway/diagnostics) — інструмент оператора для support-bundle (окремо від експорту OTEL)
- [Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics) — повна довідка полів `diagnostics.*`

View File

@ -1,35 +1,35 @@
---
read_when:
- Запуск живих димових перевірок матриці моделей / бекенду CLI / ACP / медіапровайдера
- Запуск базових перевірок живої матриці моделей / бекенду CLI / ACP / постачальника медіа
- Налагодження визначення облікових даних для тестів у реальному середовищі
- Додавання нового тесту в реальному середовищі для конкретного провайдера
sidebarTitle: Live tests
summary: 'Живі тести (з мережевими зверненнями): матриця моделей, бекенди CLI, ACP, постачальники медіа, облікові дані'
title: 'Тестування: набори тестів у реальному середовищі'
summary: 'Реальні (що взаємодіють із мережею) тести: матриця моделей, CLI-бекенди, ACP, медіапровайдери, облікові дані'
title: 'Тестування: набори живих тестів'
x-i18n:
generated_at: "2026-05-02T01:45:28Z"
generated_at: "2026-05-02T07:52:51Z"
model: gpt-5.5
provider: openai
source_hash: ce8bd75ee7837b48e6ba1d888d281ee053fc13bdcf0907baddeb78ebcbbef31c
source_hash: 2268f20ce5c0bbee8bf610938851fe529f5e21fa31fe08a70400df94e9241cc3
source_path: help/testing-live.md
workflow: 16
---
Для швидкого старту, QA-запускачів, модульних/інтеграційних наборів і Docker-потоків див.
[Тестування](/uk/help/testing). Ця сторінка описує **live** (із взаємодією з мережею) тестові
набори: матрицю моделей, CLI-бекенди, ACP і live-тести медіапровайдерів, а також
Для швидкого старту, QA-ранерів, модульних/інтеграційних наборів і Docker-потоків див.
[Тестування](/uk/help/testing). Ця сторінка описує **живі** (з мережевими зверненнями) тестові
набори: матрицю моделей, бекенди CLI, ACP і живі тести медіапровайдерів, а також
обробку облікових даних.
## Live: локальні команди smoke для профілю
## Живі тести: smoke-команди локального профілю
Перед ad hoc live-перевірками виконайте source для `~/.profile`, щоб ключі провайдерів і локальні шляхи
інструментів відповідали вашій оболонці:
Перед разовими живими перевірками виконайте source для `~/.profile`, щоб ключі провайдерів і локальні шляхи інструментів
відповідали вашій оболонці:
```bash
source ~/.profile
```
Безпечний media smoke:
Безпечний медіа smoke:
```bash
pnpm openclaw infer tts convert --local --json \
@ -37,7 +37,7 @@ pnpm openclaw infer tts convert --local --json \
--output /tmp/openclaw-live-smoke.mp3
```
Безпечний smoke готовності голосових викликів:
Безпечний smoke готовності голосового виклику:
```bash
pnpm openclaw voicecall setup --json
@ -45,41 +45,41 @@ pnpm openclaw voicecall smoke --to "+15555550123"
```
`voicecall smoke` є пробним запуском, якщо також не вказано `--yes`. Використовуйте `--yes` лише
тоді, коли ви навмисно хочете здійснити справжній сповіщувальний дзвінок. Для Twilio, Telnyx і
Plivo успішна перевірка готовності потребує публічної URL-адреси Webhook; резервні варіанти лише для
local loopback/приватні резервні варіанти відхиляються за задумом.
коли ви свідомо хочете здійснити реальний сповіщувальний дзвінок. Для Twilio, Telnyx і
Plivo успішна перевірка готовності потребує публічної URL-адреси webhook; локальні
loopback/private запасні варіанти відхиляються за задумом.
## Live: перевірка можливостей Android Node
## Живі тести: перевірка можливостей Android-вузла
- Тест: `src/gateway/android-node.capabilities.live.test.ts`
- Скрипт: `pnpm android:test:integration`
- Мета: викликати **кожну команду, яку зараз рекламує** підключений Android Node, і перевірити поведінку контракту команди.
- Мета: викликати **кожну команду, яку наразі оголошує** підключений Android-вузол, і перевірити поведінку контракту команди.
- Обсяг:
- Попередньо підготовлене/ручне налаштування (набір не встановлює/не запускає/не сполучає застосунок).
- Валідація Gateway `node.invoke` для вибраного Android Node, команда за командою.
- Попередньо підготовлене/ручне налаштування (набір не встановлює, не запускає і не спарює застосунок).
- Перевірка `node.invoke` у gateway для кожної команди вибраного Android-вузла.
- Обов’язкова попередня підготовка:
- Android-застосунок уже підключений і спарений із Gateway.
- Застосунок залишається на передньому плані.
- Дозволи/згода на захоплення надані для можливостей, які ви очікуєте успішно пройти.
- Android-застосунок уже підключений і спарений із gateway.
- Застосунок утримується на передньому плані.
- Дозволи/згода на захоплення надані для можливостей, які мають пройти.
- Необов’язкові перевизначення цілі:
- `OPENCLAW_ANDROID_NODE_ID` або `OPENCLAW_ANDROID_NODE_NAME`.
- `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`.
- Повні деталі налаштування Android: [Android-застосунок](/uk/platforms/android)
## Live: model smoke (ключі профілю)
## Живі тести: model smoke (ключі профілю)
Live-тести поділено на два шари, щоб ми могли ізолювати збої:
Живі тести розділено на два рівні, щоб ми могли ізолювати збої:
- «Пряма модель» показує, чи провайдер/модель узагалі може відповісти з наданим ключем.
- «Gateway smoke» показує, чи весь конвеєр gateway+agent працює для цієї моделі (сеанси, історія, інструменти, політика sandbox тощо).
- “Пряма модель” показує, чи провайдер/модель узагалі може відповісти з заданим ключем.
- “Gateway smoke” показує, чи працює повний конвеєр gateway+агент для цієї моделі (сеанси, історія, інструменти, sandbox-політика тощо).
### Шар 1: Пряме завершення моделі (без Gateway)
### Рівень 1: пряме завершення моделі (без gateway)
- Тест: `src/agents/models.profiles.live.test.ts`
- Мета:
- Перелічити виявлені моделі
- Використати `getApiKeyForModel`, щоб вибрати моделі, для яких у вас є облікові дані
- Запустити невелике завершення для кожної моделі (і цільові регресії за потреби)
- Запустити невелике завершення для кожної моделі (і цільові регресії, де потрібно)
- Як увімкнути:
- `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо викликаєте Vitest напряму)
- Установіть `OPENCLAW_LIVE_MODELS=modern` (або `all`, псевдонім для modern), щоб фактично запустити цей набір; інакше він пропускається, щоб `pnpm test:live` залишався зосередженим на gateway smoke
@ -87,55 +87,55 @@ Live-тести поділено на два шари, щоб ми могли і
- `OPENCLAW_LIVE_MODELS=modern`, щоб запустити сучасний allowlist (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
- `OPENCLAW_LIVE_MODELS=all` є псевдонімом для сучасного allowlist
- або `OPENCLAW_LIVE_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,..."` (allowlist через кому)
- Перевірки modern/all за замовчуванням використовують кураторський високосигнальний ліміт; установіть `OPENCLAW_LIVE_MAX_MODELS=0` для вичерпної modern-перевірки або додатне число для меншого ліміту.
- Вичерпні перевірки використовують `OPENCLAW_LIVE_TEST_TIMEOUT_MS` як таймаут усього тесту прямої моделі. За замовчуванням: 60 хвилин.
- Проби прямої моделі за замовчуванням виконуються з паралелізмом 20; установіть `OPENCLAW_LIVE_MODEL_CONCURRENCY`, щоб перевизначити.
- Modern/all sweep-и за замовчуванням мають підібране високосигнальне обмеження; установіть `OPENCLAW_LIVE_MAX_MODELS=0` для вичерпного modern sweep або додатне число для меншого обмеження.
- Вичерпні sweep-и використовують `OPENCLAW_LIVE_TEST_TIMEOUT_MS` як таймаут усього direct-model тесту. За замовчуванням: 60 хвилин.
- Direct-model probe-и за замовчуванням працюють із паралельністю 20; установіть `OPENCLAW_LIVE_MODEL_CONCURRENCY`, щоб перевизначити.
- Як вибрати провайдерів:
- `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (allowlist через кому)
- Звідки беруться ключі:
- За замовчуванням: сховище профілів і резервні варіанти env
- За замовчуванням: сховище профілів і env fallback-и
- Установіть `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати лише **сховище профілів**
- Навіщо це існує:
- Відокремлює «API провайдера зламано / ключ недійсний» від «конвеєр gateway agent зламано»
- Містить невеликі, ізольовані регресії (приклад: reasoning replay OpenAI Responses/Codex Responses + потоки tool-call)
- Відокремлює “API провайдера зламаний / ключ недійсний” від “конвеєр gateway-агента зламаний”
- Містить малі ізольовані регресії (приклад: OpenAI Responses/Codex Responses reasoning replay + tool-call потоки)
### Шар 2: Gateway + dev agent smoke (що насправді робить "@openclaw")
### Рівень 2: Gateway + smoke dev-агента (що фактично робить "@openclaw")
- Тест: `src/gateway/gateway-models.profiles.live.test.ts`
- Мета:
- Запустити внутрішньопроцесний Gateway
- Створити/змінити сеанс `agent:dev:*` (перевизначення моделі для кожного запуску)
- Перебрати моделі з ключами й перевірити:
- «змістовну» відповідь (без інструментів)
- працює справжній виклик інструмента (read-проба)
- необов’язкові додаткові проби інструментів (exec+read-проба)
- регресійні шляхи OpenAI (лише tool-call → follow-up) продовжують працювати
- Деталі проб (щоб можна було швидко пояснити збої):
- `read`-проба: тест записує nonce-файл у робочій області й просить агента `read` його та повернути nonce.
- `exec+read`-проба: тест просить агента через `exec` записати nonce у тимчасовий файл, а потім через `read` прочитати його назад.
- проба зображення: тест долучає згенерований PNG (cat + рандомізований код) і очікує, що модель поверне `cat <CODE>`.
- Підняти in-process gateway
- Створити/пропатчити сеанс `agent:dev:*` (перевизначення моделі для кожного запуску)
- Ітерувати моделі з ключами й перевірити:
- “змістовну” відповідь (без інструментів)
- працює реальний виклик інструмента (read probe)
- необов’язкові додаткові probe-и інструментів (exec+read probe)
- шляхи регресії OpenAI (tool-call-only → follow-up) продовжують працювати
- Деталі probe-ів (щоб швидко пояснювати збої):
- `read` probe: тест записує nonce-файл у робочій області та просить агента виконати `read` для нього й повторити nonce у відповіді.
- `exec+read` probe: тест просить агента через `exec` записати nonce у тимчасовий файл, а потім через `read` прочитати його назад.
- image probe: тест прикріплює згенерований PNG (cat + рандомізований код) і очікує, що модель поверне `cat <CODE>`.
- Посилання на реалізацію: `src/gateway/gateway-models.profiles.live.test.ts` і `src/gateway/live-image-probe.ts`.
- Як увімкнути:
- `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо викликаєте Vitest напряму)
- Як вибрати моделі:
- За замовчуванням: сучасний allowlist (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
- `OPENCLAW_LIVE_GATEWAY_MODELS=all` є псевдонімом для сучасного allowlist
- За замовчуванням: modern allowlist (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
- `OPENCLAW_LIVE_GATEWAY_MODELS=all` є псевдонімом для modern allowlist
- Або встановіть `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (або список через кому), щоб звузити
- Gateway-перевірки modern/all за замовчуванням використовують кураторський високосигнальний ліміт; установіть `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` для вичерпної modern-перевірки або додатне число для меншого ліміту.
- Як вибрати провайдерів (уникайте «усе з OpenRouter»):
- Modern/all gateway sweep-и за замовчуванням мають підібране високосигнальне обмеження; установіть `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` для вичерпного modern sweep або додатне число для меншого обмеження.
- Як вибрати провайдерів (уникнути “всього OpenRouter”):
- `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (allowlist через кому)
- Проби інструментів + зображень у цьому live-тесті завжди ввімкнені:
- `read`-проба + `exec+read`-проба (навантаження інструментів)
- проба зображення виконується, коли модель оголошує підтримку введення зображень
- Probe-и інструментів + зображень завжди ввімкнені в цьому живому тесті:
- `read` probe + `exec+read` probe (стрес інструментів)
- image probe запускається, коли модель оголошує підтримку вхідних зображень
- Потік (на високому рівні):
- Тест генерує крихітний PNG із “CAT” + випадковим кодом (`src/gateway/live-image-probe.ts`)
- Тест генерує маленький PNG із “CAT” + випадковим кодом (`src/gateway/live-image-probe.ts`)
- Надсилає його через `agent` `attachments: [{ mimeType: "image/png", content: "<base64>" }]`
- Gateway розбирає вкладення в `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`)
- Вбудований агент пересилає мультимодальне повідомлення користувача до моделі
- Твердження: відповідь містить `cat` + код (толерантність OCR: незначні помилки дозволені)
- Embedded-агент пересилає мультимодальне повідомлення користувача до моделі
- Перевірка: відповідь містить `cat` + код (OCR-допуск: незначні помилки дозволені)
<Tip>
Щоб побачити, що можна тестувати на вашій машині (і точні ідентифікатори `provider/model`), запустіть:
Щоб побачити, що можна протестувати на вашій машині (і точні ідентифікатори `provider/model`), запустіть:
```bash
openclaw models list
@ -144,27 +144,27 @@ openclaw models list --json
</Tip>
## Live: CLI backend smoke (Claude, Codex, Gemini або інші локальні CLI)
## Живі тести: smoke бекенда CLI (Claude, Codex, Gemini або інші локальні CLI)
- Тест: `src/gateway/gateway-cli-backend.live.test.ts`
- Мета: перевірити конвеєр Gateway + agent за допомогою локального CLI-бекенда, не торкаючись вашої типової конфігурації.
- Специфічні для бекенда smoke-налаштування за замовчуванням живуть у визначенні `cli-backend.ts` відповідного Plugin.
- Мета: перевірити конвеєр Gateway + агент за допомогою локального бекенда CLI, не торкаючись вашої конфігурації за замовчуванням.
- Специфічні для бекенда smoke-налаштування за замовчуванням живуть у визначенні `cli-backend.ts` належного plugin.
- Увімкнення:
- `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо викликаєте Vitest напряму)
- `OPENCLAW_LIVE_CLI_BACKEND=1`
- Типові значення:
- Типовий провайдер/модель: `claude-cli/claude-sonnet-4-6`
- Поведінка команди/аргументів/зображень береться з метаданих відповідного CLI backend plugin.
- Значення за замовчуванням:
- Провайдер/модель за замовчуванням: `claude-cli/claude-sonnet-4-6`
- Поведінка команди/аргументів/зображень береться з метаданих CLI backend plugin, якому це належить.
- Перевизначення (необов’язково):
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5"`
- `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"`
- `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'`
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, щоб надіслати справжнє зображення-вкладення (шляхи ін’єктуються в prompt). Docker-рецепти за замовчуванням вимикають це, якщо явно не запитано.
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, щоб передавати шляхи до файлів зображень як CLI-аргументи замість ін’єкції в prompt.
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (або `"list"`), щоб керувати тим, як передаються аргументи зображень, коли встановлено `IMAGE_ARG`.
- `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1`, щоб надіслати другий хід і перевірити потік resume.
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1`, щоб увімкнути пробу безперервності Claude Sonnet -> Opus у тому самому сеансі, коли вибрана модель підтримує ціль перемикання. Docker-рецепти за замовчуванням вимикають це для сукупної надійності.
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1`, щоб увімкнути пробу MCP/інструментального loopback. Docker-рецепти за замовчуванням вимикають це, якщо явно не запитано.
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, щоб надіслати справжнє вкладення-зображення (шляхи інжектяться в prompt). Docker-рецепти за замовчуванням вимикають це, якщо не запитано явно.
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, щоб передавати шляхи до файлів зображень як CLI-аргументи замість інжекції в prompt.
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (або `"list"`), щоб керувати передаванням image-аргументів, коли встановлено `IMAGE_ARG`.
- `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1`, щоб надіслати другий хід і перевірити resume-потік.
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1`, щоб увімкнути probe безперервності того самого сеансу Claude Sonnet -> Opus, коли вибрана модель підтримує ціль перемикання. Docker-рецепти за замовчуванням вимикають це для агрегованої надійності.
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1`, щоб увімкнути MCP/tool loopback probe. Docker-рецепти за замовчуванням вимикають це, якщо не запитано явно.
Приклад:
@ -174,7 +174,7 @@ OPENCLAW_LIVE_CLI_BACKEND=1 \
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
```
Дешева smoke-перевірка конфігурації Gemini MCP:
Дешевий smoke конфігурації Gemini MCP:
```bash
OPENCLAW_LIVE_TEST=1 \
@ -182,9 +182,9 @@ OPENCLAW_LIVE_TEST=1 \
```
Це не просить Gemini згенерувати відповідь. Воно записує ті самі системні
налаштування, які OpenClaw надає Gemini, а потім запускає `gemini --debug mcp list`, щоб довести, що
збережений сервер `transport: "streamable-http"` нормалізується до HTTP MCP-форми Gemini
і може підключитися до локального streamable-HTTP MCP-сервера.
налаштування, які OpenClaw дає Gemini, а потім запускає `gemini --debug mcp list`, щоб довести, що
збережений сервер `transport: "streamable-http"` нормалізується до HTTP MCP
форми Gemini і може підключитися до локального streamable-HTTP MCP сервера.
Docker-рецепт:
@ -201,30 +201,30 @@ pnpm test:docker:live-cli-backend:codex
pnpm test:docker:live-cli-backend:gemini
```
Нотатки:
Примітки:
- Docker-запускач розташований у `scripts/test-live-cli-backend-docker.sh`.
- Він запускає live CLI-backend smoke всередині Docker-образу репозиторію як некореневий користувач `node`.
- Він визначає CLI smoke-метадані з відповідного Plugin, а потім встановлює відповідний Linux CLI-пакет (`@anthropic-ai/claude-code`, `@openai/codex` або `@google/gemini-cli`) у кешований записуваний префікс за `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (за замовчуванням: `~/.cache/openclaw/docker-cli-tools`).
- `pnpm test:docker:live-cli-backend:claude-subscription` потребує переносного OAuth для підписки Claude Code через `~/.claude/.credentials.json` із `claudeAiOauth.subscriptionType` або `CLAUDE_CODE_OAUTH_TOKEN` з `claude setup-token`. Спочатку він доводить прямий `claude -p` у Docker, а потім запускає два Gateway CLI-backend ходи без збереження env vars ключа Anthropic API. Ця subscription-смуга за замовчуванням вимикає Claude MCP/інструментальну пробу та пробу зображення, бо Claude зараз маршрутизує використання сторонніх застосунків через billing додаткового використання замість звичайних лімітів плану підписки.
- Live CLI-backend smoke тепер перевіряє той самий end-to-end потік для Claude, Codex і Gemini: текстовий хід, хід класифікації зображення, а потім виклик інструмента MCP `cron`, перевірений через gateway CLI.
- Типовий smoke Claude також змінює сеанс із Sonnet на Opus і перевіряє, що відновлений сеанс усе ще пам’ятає попередню нотатку.
- Docker-ранер розташований у `scripts/test-live-cli-backend-docker.sh`.
- Він запускає live CLI-backend smoke всередині Docker-образу репозиторію як non-root користувач `node`.
- Він визначає CLI smoke metadata з відповідного Plugin, а потім встановлює відповідний Linux CLI пакет (`@anthropic-ai/claude-code`, `@openai/codex` або `@google/gemini-cli`) у кешований записуваний префікс за `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (за замовчуванням: `~/.cache/openclaw/docker-cli-tools`).
- `pnpm test:docker:live-cli-backend:claude-subscription` потребує переносного Claude Code subscription OAuth через `~/.claude/.credentials.json` з `claudeAiOauth.subscriptionType` або `CLAUDE_CODE_OAUTH_TOKEN` з `claude setup-token`. Спочатку він доводить прямий `claude -p` у Docker, а потім запускає два ходи Gateway CLI-backend без збереження env vars API-ключа Anthropic. Ця subscription-лінія за замовчуванням вимикає Claude MCP/tool та image probe-и, бо Claude наразі маршрутизує використання сторонніх застосунків через billing за додаткове використання замість звичайних лімітів subscription-плану.
- Live CLI-backend smoke тепер відпрацьовує той самий end-to-end потік для Claude, Codex і Gemini: текстовий хід, хід класифікації зображення, потім виклик MCP-інструмента `cron`, перевірений через gateway CLI.
- Smoke за замовчуванням для Claude також патчить сеанс із Sonnet на Opus і перевіряє, що відновлений сеанс досі пам’ятає попередню нотатку.
## Live: ACP bind smoke (`/acp spawn ... --bind here`)
## Живі тести: ACP bind smoke (`/acp spawn ... --bind here`)
- Тест: `src/gateway/gateway-acp-bind.live.test.ts`
- Мета: перевірити справжній потік прив’язування розмови ACP із живим агентом ACP:
- надіслати `/acp spawn <agent> --bind here`
- прив’язати синтетичну розмову каналу повідомлень на місці
- надіслати звичайне подальше повідомлення в тій самій розмові
- перевірити, що подальше повідомлення потрапляє до транскрипта прив’язаної сесії ACP
- перевірити, що подальше повідомлення потрапляє в стенограму прив’язаного сеансу ACP
- Увімкнення:
- `pnpm test:live src/gateway/gateway-acp-bind.live.test.ts`
- `OPENCLAW_LIVE_ACP_BIND=1`
- Типові значення:
- агенти ACP у Docker: `claude,codex,gemini`
- агент ACP для прямого `pnpm test:live ...`: `claude`
- синтетичний канал: контекст розмови у стилі Slack DM
- синтетичний канал: контекст розмови в стилі DM Slack
- бекенд ACP: `acpx`
- Перевизначення:
- `OPENCLAW_LIVE_ACP_BIND_AGENT=claude`
@ -240,9 +240,9 @@ pnpm test:docker:live-cli-backend:gemini
- `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`
- `OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5`
- Примітки:
- Ця лінія використовує поверхню Gateway `chat.send` з адміністративними полями синтетичного вихідного маршруту, щоб тести могли приєднувати контекст каналу повідомлень без удавання зовнішньої доставки.
- Коли `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` не задано, тест використовує вбудований реєстр агентів вбудованого Plugin `acpx` для вибраного агента ACP harness.
- Створення Cron MCP для прив’язаної сесії типово виконується за принципом best-effort, бо зовнішні ACP harness можуть скасовувати виклики MCP після проходження перевірки прив’язування/зображення; задайте `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`, щоб зробити цю перевірку Cron після прив’язування суворою.
- Ця доріжка використовує поверхню Gateway `chat.send` із синтетичними полями початкового маршруту лише для адміністраторів, щоб тести могли приєднати контекст каналу повідомлень, не вдаючи зовнішню доставку.
- Коли `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` не задано, тест використовує вбудований реєстр агентів вбудованого plugin `acpx` для вибраного агента обв’язки ACP.
- Створення MCP bound-session cron за замовчуванням виконується за принципом найкращого зусилля, оскільки зовнішні обв’язки ACP можуть скасувати виклики MCP після успішного підтвердження прив’язування/зображення; задайте `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`, щоб зробити цю post-bind cron-перевірку суворою.
Приклад:
@ -268,40 +268,40 @@ pnpm test:docker:live-acp-bind:gemini
pnpm test:docker:live-acp-bind:opencode
```
Примітки Docker:
Примітки щодо Docker:
- Runner Docker розташований у `scripts/test-live-acp-bind-docker.sh`.
- Типово він послідовно запускає smoke ACP bind для сукупних живих агентів CLI: `claude`, `codex`, потім `gemini`.
- Запускач Docker розміщено в `scripts/test-live-acp-bind-docker.sh`.
- За замовчуванням він послідовно запускає ACP bind smoke для сукупних живих агентів CLI: `claude`, `codex`, потім `gemini`.
- Використовуйте `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=droid`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` або `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode`, щоб звузити матрицю.
- Він підключає `~/.profile`, розміщує відповідні матеріали автентифікації CLI в контейнері, а потім, якщо бракує, встановлює запитаний живий CLI (`@anthropic-ai/claude-code`, `@openai/codex`, Factory Droid через `https://app.factory.ai/cli`, `@google/gemini-cli` або `opencode-ai`). Сам бекенд ACP є вбудованим пакетом `acpx/runtime` із Plugin `acpx`.
- Варіант Docker для Droid розміщує `~/.factory` для налаштувань, передає `FACTORY_API_KEY` і вимагає цей API-ключ, бо локальна автентифікація Factory через OAuth/keyring не переноситься в контейнер. Він використовує вбудований запис реєстру ACPX `droid exec --output-format acp`.
- Варіант Docker для OpenCode є суворою регресійною лінією з одним агентом. Він записує тимчасову типову модель `OPENCODE_CONFIG_CONTENT` з `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (типово `opencode/kimi-k2.6`) після підключення `~/.profile`, а `pnpm test:docker:live-acp-bind:opencode` вимагає прив’язаний транскрипт асистента замість прийняття загального пропуску після прив’язування.
- Прямі виклики CLI `acpx` є лише ручним/обхідним шляхом для порівняння поведінки поза Gateway. Docker smoke ACP bind перевіряє вбудований бекенд runtime `acpx` OpenClaw.
- Він завантажує `~/.profile`, готує відповідні матеріали автентифікації CLI у контейнері, а потім встановлює запитаний живий CLI (`@anthropic-ai/claude-code`, `@openai/codex`, Factory Droid через `https://app.factory.ai/cli`, `@google/gemini-cli` або `opencode-ai`), якщо його бракує. Сам бекенд ACP — це вбудований пакет `acpx/runtime` з офіційного plugin `acpx`.
- Варіант Droid для Docker готує `~/.factory` для налаштувань, передає `FACTORY_API_KEY` і потребує цього ключа API, оскільки локальна автентифікація Factory OAuth/keyring не переноситься в контейнер. Він використовує вбудований запис реєстру ACPX `droid exec --output-format acp`.
- Варіант OpenCode для Docker є суворою регресійною доріжкою з одним агентом. Він записує тимчасову типову модель `OPENCODE_CONFIG_CONTENT` з `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (типово `opencode/kimi-k2.6`) після завантаження `~/.profile`, а `pnpm test:docker:live-acp-bind:opencode` вимагає стенограму прив’язаного асистента замість прийняття загального пропуску після прив’язування.
- Прямі виклики CLI `acpx` є лише ручним/обхідним шляхом для порівняння поведінки поза Gateway. Docker ACP bind smoke перевіряє вбудований у OpenClaw runtime-бекенд `acpx`.
## Live: smoke app-server harness Codex
## Live: smoke для обв’язки Codex app-server
- Мета: перевірити Codex harness, що належить Plugin, через звичайний метод gateway
- Мета: перевірити обв’язку Codex, якою володіє plugin, через звичайний метод gateway
`agent`:
- завантажити вбудований Plugin `codex`
- завантажити вбудований plugin `codex`
- вибрати `OPENCLAW_AGENT_RUNTIME=codex`
- надіслати перший хід агента gateway до `openai/gpt-5.5` із примусово заданим Codex harness
- надіслати другий хід до тієї самої сесії OpenClaw і перевірити, що потік app-server
- надіслати перший хід агента gateway до `openai/gpt-5.5` із примусово ввімкненою обв’язкою Codex
- надіслати другий хід у той самий сеанс OpenClaw і перевірити, що потік app-server
може відновитися
- виконати `/codex status` і `/codex models` через той самий шлях команди gateway
- необов’язково виконати дві перевірені Guardian підвищені shell-перевірки: одну нешкідливу
команду, яку має бути схвалено, і одне фальшиве завантаження секрету, яке має бути
відхилено, щоб агент поставив запитання у відповідь
- за бажанням виконати дві переглянуті Guardian ескальовані shell-перевірки: одну безпечну
команду, яку має бути схвалено, і одне фальшиве вивантаження секрету, яке має бути
відхилено, щоб агент поставив зворотне запитання
- Тест: `src/gateway/gateway-codex-harness.live.test.ts`
- Увімкнення: `OPENCLAW_LIVE_CODEX_HARNESS=1`
- Типова модель: `openai/gpt-5.5`
- Необов’язкова перевірка зображення: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
- Необов’язкова перевірка MCP/інструмента: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
- Необов’язкова перевірка Guardian: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
- Smoke задає `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, щоб несправний Codex
harness не міг пройти через мовчазний fallback до PI.
- Автентифікація: автентифікація app-server Codex з локального входу в підписку Codex. Docker
smokes також можуть надавати `OPENAI_API_KEY` для перевірок не-Codex, коли застосовно,
плюс необов’язково скопійовані `~/.codex/auth.json` і `~/.codex/config.toml`.
- Додаткова перевірка зображення: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
- Додаткова перевірка MCP/інструмента: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
- Додаткова перевірка Guardian: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
- Smoke задає `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, щоб зламана обв’язка Codex
не могла пройти через тихий fallback до PI.
- Автентифікація: автентифікація Codex app-server з локального входу через підписку Codex. Docker
smokes також можуть надавати `OPENAI_API_KEY` для не-Codex перевірок, коли це застосовно,
а також необов’язково скопійовані `~/.codex/auth.json` і `~/.codex/config.toml`.
Локальний рецепт:
@ -322,23 +322,22 @@ source ~/.profile
pnpm test:docker:live-codex-harness
```
Примітки Docker:
Примітки щодо Docker:
- Runner Docker розташований у `scripts/test-live-codex-harness-docker.sh`.
- Він підключає змонтований `~/.profile`, передає `OPENAI_API_KEY`, копіює файли автентифікації Codex CLI
за наявності, встановлює `@openai/codex` у доступний для запису змонтований префікс npm,
розміщує дерево вихідного коду, а потім запускає лише живий тест Codex-harness.
- Docker типово вмикає перевірки зображення, MCP/інструмента та Guardian. Задайте
`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0`, або
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0`, або
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`, коли потрібен вужчий налагоджувальний
запуск.
- Docker також експортує `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, відповідно до конфігурації живого
тесту, щоб застарілі псевдоніми або fallback PI не могли приховати регресію Codex harness.
- Запускач Docker розміщено в `scripts/test-live-codex-harness-docker.sh`.
- Він завантажує змонтований `~/.profile`, передає `OPENAI_API_KEY`, копіює файли автентифікації Codex CLI
за наявності, встановлює `@openai/codex` у придатний для запису змонтований префікс npm,
готує дерево джерел, а потім запускає лише live-тест обв’язки Codex.
- Docker за замовчуванням вмикає перевірки зображення, MCP/інструмента та Guardian. Задайте
`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` або
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` чи
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`, коли потрібен вужчий debug-запуск.
- Docker також експортує `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, що відповідає конфігурації live-тесту,
щоб застарілі псевдоніми або fallback PI не могли приховати регресію обв’язки Codex.
### Рекомендовані живі рецепти
### Рекомендовані live-рецепти
Вузькі, явні списки дозволеного найшвидші й найменш нестабільні:
Вузькі явні списки дозволеного найшвидші й найменш нестабільні:
- Одна модель, напряму (без gateway):
- `OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts`
@ -346,36 +345,36 @@ pnpm test:docker:live-codex-harness
- Одна модель, gateway smoke:
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
- Виклики інструментів у кількох провайдерів:
- Виклик інструментів у кількох провайдерів:
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
- Фокус Google (API-ключ Gemini + Antigravity):
- Gemini (API-ключ): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
- Фокус на Google (ключ Gemini API + Antigravity):
- Gemini (ключ API): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
- Antigravity (OAuth): `OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
- Google adaptive thinking smoke:
- Якщо локальні ключі зберігаються в профілі shell: `source ~/.profile`
- Якщо локальні ключі містяться в профілі shell: `source ~/.profile`
- Динамічне типове значення Gemini 3: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000`
- Динамічний бюджет Gemini 2.5: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000`
Примітки:
- `google/...` використовує Gemini API (API-ключ).
- `google-antigravity/...` використовує міст Antigravity OAuth (endpoint агента в стилі Cloud Code Assist).
- `google-gemini-cli/...` використовує локальний Gemini CLI на вашій машині (окрема автентифікація + особливості інструментів).
- `google/...` використовує Gemini API (ключ API).
- `google-antigravity/...` використовує міст Antigravity OAuth (ендпоїнт агента у стилі Cloud Code Assist).
- `google-gemini-cli/...` використовує локальний Gemini CLI на вашій машині (окрема автентифікація + особливості інструментарію).
- Gemini API проти Gemini CLI:
- API: OpenClaw викликає розміщений Google Gemini API через HTTP (API-ключ / автентифікація профілю); саме це більшість користувачів має на увазі під “Gemini”.
- CLI: OpenClaw запускає локальний бінарний файл `gemini` через shell; він має власну автентифікацію й може поводитися інакше (streaming/підтримка інструментів/розбіжність версій).
- API: OpenClaw викликає розміщений у Google Gemini API через HTTP (ключ API / автентифікація профілю); саме це більшість користувачів має на увазі під “Gemini”.
- CLI: OpenClaw викликає локальний бінарний файл `gemini` через shell; він має власну автентифікацію і може поводитися інакше (підтримка streaming/інструментів/розбіжність версій).
## Live: матриця моделей (що ми покриваємо)
Фіксованого “списку моделей CI” немає (live вмикається явно), але це **рекомендовані** моделі для регулярного покриття на машині розробника з ключами.
Фіксованого “списку моделей CI” немає (live є opt-in), але це **рекомендовані** моделі для регулярного покриття на машині розробника з ключами.
### Сучасний smoke-набір (виклик інструментів + зображення)
Це запуск “поширених моделей”, який ми очікуємо підтримувати в робочому стані:
Це запуск “поширених моделей”, який ми очікуємо підтримувати робочим:
- OpenAI (не-Codex): `openai/gpt-5.5`
- OpenAI (не Codex): `openai/gpt-5.5`
- OpenAI Codex OAuth: `openai-codex/gpt-5.5`
- Anthropic: `anthropic/claude-opus-4-6` (або `anthropic/claude-sonnet-4-6`)
- Google (Gemini API): `google/gemini-3.1-pro-preview` і `google/gemini-3-flash-preview` (уникайте старіших моделей Gemini 2.x)
@ -389,7 +388,7 @@ pnpm test:docker:live-codex-harness
### Базовий рівень: виклик інструментів (Read + необов’язковий Exec)
Виберіть принаймні одну модель для кожної родини провайдерів:
Виберіть щонайменше одну модель для кожної родини провайдерів:
- OpenAI: `openai/gpt-5.5`
- Anthropic: `anthropic/claude-opus-4-6` (або `anthropic/claude-sonnet-4-6`)
@ -398,28 +397,28 @@ pnpm test:docker:live-codex-harness
- Z.AI (GLM): `zai/glm-5.1`
- MiniMax: `minimax/MiniMax-M2.7`
Необов’язкове додаткове покриття (бажано мати):
Додаткове необов’язкове покриття (бажано мати):
- xAI: `xai/grok-4.3` (або остання доступна)
- xAI: `xai/grok-4.3` (або найновіша доступна)
- Mistral: `mistral/`… (виберіть одну модель із підтримкою “tools”, яку у вас увімкнено)
- Cerebras: `cerebras/`… (якщо маєте доступ)
- LM Studio: `lmstudio/`… (локально; виклик інструментів залежить від режиму API)
### Vision: надсилання зображення (вкладення → мультимодальне повідомлення)
### Vision: надсилання зображення (вкладення → multimodal-повідомлення)
Додайте принаймні одну модель із підтримкою зображень до `OPENCLAW_LIVE_GATEWAY_MODELS` (варіанти Claude/Gemini/OpenAI з підтримкою vision тощо), щоб виконати перевірку зображення.
Додайте щонайменше одну модель із підтримкою зображень до `OPENCLAW_LIVE_GATEWAY_MODELS` (варіанти Claude/Gemini/OpenAI із підтримкою vision тощо), щоб перевірити image probe.
### Агрегатори / альтернативні gateway
### Агрегатори / альтернативні шлюзи
Якщо у вас увімкнено ключі, ми також підтримуємо тестування через:
Якщо у вас увімкнені ключі, ми також підтримуємо тестування через:
- OpenRouter: `openrouter/...` (сотні моделей; використовуйте `openclaw models scan`, щоб знайти кандидатів із підтримкою інструментів+зображень)
- OpenCode: `opencode/...` для Zen і `opencode-go/...` для Go (автентифікація через `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`)
Додаткові провайдери, яких можна включити в live-матрицю (якщо маєте облікові дані/конфігурацію):
Інші провайдери, яких можна включити в live-матрицю (якщо маєте облікові дані/конфігурацію):
- Вбудовані: `openai`, `openai-codex`, `anthropic`, `google`, `google-vertex`, `google-antigravity`, `google-gemini-cli`, `zai`, `openrouter`, `opencode`, `opencode-go`, `xai`, `groq`, `cerebras`, `mistral`, `github-copilot`
- Через `models.providers` (власні endpoints): `minimax` (хмара/API), плюс будь-який проксі, сумісний з OpenAI/Anthropic (LM Studio, vLLM, LiteLLM тощо)
- Через `models.providers` (кастомні ендпоїнти): `minimax` (cloud/API), а також будь-який OpenAI/Anthropic-сумісний проксі (LM Studio, vLLM, LiteLLM тощо)
<Tip>
Не хардкодьте "all models" у документації. Авторитетний список — це те, що `discoverModels(...)` повертає на вашій машині, плюс доступні ключі.
@ -427,19 +426,19 @@ pnpm test:docker:live-codex-harness
## Облікові дані (ніколи не комітьте)
Живі тести знаходять облікові дані так само, як це робить CLI. Практичні наслідки:
Live-тести виявляють облікові дані так само, як це робить CLI. Практичні наслідки:
- Якщо CLI працює, live-тести мають знаходити ті самі ключі.
- Якщо live-тест повідомляє «no creds», налагоджуйте так само, як налагоджували б `openclaw models list` / вибір моделі.
- Якщо live-тест повідомляє “no creds”, налагоджуйте це так само, як налагоджували б `openclaw models list` / вибір моделі.
- Профілі автентифікації для кожного агента: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (саме це означає “profile keys” у live-тестах)
- Профілі автентифікації для окремих агентів: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (саме це означає “profile keys” у live-тестах)
- Конфігурація: `~/.openclaw/openclaw.json` (або `OPENCLAW_CONFIG_PATH`)
- Каталог застарілого стану: `~/.openclaw/credentials/` (копіюється до проміжного live-домашнього каталогу, якщо присутній, але не є основним сховищем profile-key)
- Локальні live-запуски за замовчуванням копіюють активну конфігурацію, файли `auth-profiles.json` для кожного агента, застарілий каталог `credentials/` і підтримувані зовнішні каталоги автентифікації CLI до тимчасового тестового домашнього каталогу; проміжні live-домашні каталоги пропускають `workspace/` і `sandboxes/`, а перевизначення шляхів `agents.*.workspace` / `agentDir` вилучаються, щоб зондування не потрапляли у ваш реальний робочий простір хоста.
- Каталог застарілого стану: `~/.openclaw/credentials/` (копіюється до підготовленого live-домашнього каталогу, коли присутній, але не є основним сховищем profile-key)
- Локальні live-запуски за замовчуванням копіюють активну конфігурацію, файли `auth-profiles.json` для окремих агентів, застарілий `credentials/` і підтримувані зовнішні каталоги автентифікації CLI у тимчасовий тестовий домашній каталог; підготовлені live-домашні каталоги пропускають `workspace/` і `sandboxes/`, а перевизначення шляхів `agents.*.workspace` / `agentDir` вилучаються, щоб перевірки не торкалися вашого справжнього робочого простору на хості.
Якщо ви хочете покладатися на env-ключі (наприклад, експортовані у вашому `~/.profile`), запускайте локальні тести після `source ~/.profile` або використовуйте Docker-ранери нижче (вони можуть монтувати `~/.profile` у контейнер).
Якщо ви хочете покладатися на ключі env (наприклад, експортовані у вашому `~/.profile`), запускайте локальні тести після `source ~/.profile` або використовуйте Docker-запускачі нижче (вони можуть монтувати `~/.profile` у контейнер).
## Deepgram live (транскрибування аудіо)
## Deepgram live (транскрипція аудіо)
- Тест: `extensions/deepgram/audio.live.test.ts`
- Увімкнення: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts`
@ -457,21 +456,21 @@ pnpm test:docker:live-codex-harness
- Обсяг:
- Перевіряє вбудовані шляхи comfy для зображень, відео та `music_generate`
- Пропускає кожну можливість, якщо `plugins.entries.comfy.config.<capability>` не налаштовано
- Корисно після зміни надсилання workflow comfy, polling, завантажень або реєстрації plugin
- Корисно після змін надсилання workflow comfy, опитування, завантажень або реєстрації плагіна
## Image generation live
- Тест: `test/image-generation.runtime.live.test.ts`
- Команда: `pnpm test:live test/image-generation.runtime.live.test.ts`
- Harness: `pnpm test:live:media image`
- Оснастка: `pnpm test:live:media image`
- Обсяг:
- Перелічує кожен зареєстрований plugin провайдера генерації зображень
- Завантажує відсутні env-змінні провайдера з вашої login shell (`~/.profile`) перед зондуванням
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували реальні облікові дані shell
- Перелічує кожен зареєстрований плагін провайдера генерації зображень
- Завантажує відсутні env-змінні провайдера з вашої login shell (`~/.profile`) перед перевіркою
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні облікові дані shell
- Пропускає провайдерів без придатної автентифікації/профілю/моделі
- Проганяє кожного налаштованого провайдера через спільний runtime генерації зображень:
- Запускає кожного налаштованого провайдера через спільне середовище виконання генерації зображень:
- `<provider>:generate`
- `<provider>:edit`, коли провайдер заявляє підтримку редагування
- `<provider>:edit`, коли провайдер оголошує підтримку редагування
- Поточні охоплені вбудовані провайдери:
- `deepinfra`
- `fal`
@ -487,9 +486,9 @@ pnpm test:docker:live-codex-harness
- `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-2,google/gemini-3.1-flash-image-preview,openrouter/google/gemini-3.1-flash-image-preview,xai/grok-imagine-image"`
- `OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit,openrouter:generate,xai:default-generate,xai:default-edit"`
- Необов’язкова поведінка автентифікації:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів та ігнорувати перевизначення лише через env
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів і ігнорувати перевизначення лише з env
Для поставленого CLI-шляху додайте smoke `infer` після успішного проходження live-тесту провайдера/runtime:
Для доставленого шляху CLI додайте smoke `infer` після успішного проходження provider/runtime live-тесту:
```bash
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
@ -501,72 +500,72 @@ openclaw infer image generate \
--json
```
Це охоплює розбір аргументів CLI, визначення конфігурації/default-agent, активацію вбудованого plugin, спільний runtime генерації зображень і live-запит до провайдера. Очікується, що залежності Plugin будуть наявні до завантаження runtime.
Це охоплює розбір аргументів CLI, розв’язання конфігурації/default-agent, активацію вбудованого плагіна, спільне середовище виконання генерації зображень і live-запит до провайдера. Очікується, що залежності плагіна наявні до завантаження середовища виконання.
## Music generation live
- Тест: `extensions/music-generation-providers.live.test.ts`
- Увімкнення: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts`
- Harness: `pnpm test:live:media music`
- Оснастка: `pnpm test:live:media music`
- Обсяг:
- Перевіряє спільний вбудований шлях провайдера генерації музики
- Перевіряє спільний шлях вбудованого провайдера генерації музики
- Наразі охоплює Google і MiniMax
- Завантажує env-змінні провайдера з вашої login shell (`~/.profile`) перед зондуванням
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували реальні облікові дані shell
- Завантажує env-змінні провайдера з вашої login shell (`~/.profile`) перед перевіркою
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні облікові дані shell
- Пропускає провайдерів без придатної автентифікації/профілю/моделі
- Запускає обидва заявлені режими runtime, коли доступні:
- `generate` із введенням лише prompt
- `edit`, коли провайдер заявляє `capabilities.edit.enabled`
- Поточне охоплення shared-lane:
- Запускає обидва оголошені режими runtime, коли вони доступні:
- `generate` з вхідними даними лише prompt
- `edit`, коли провайдер оголошує `capabilities.edit.enabled`
- Поточне покриття спільної лінії:
- `google`: `generate`, `edit`
- `minimax`: `generate`
- `comfy`: окремий Comfy live-файл, не цей спільний sweep
- `comfy`: окремий live-файл Comfy, не цей спільний sweep
- Необов’язкове звуження:
- `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"`
- `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"`
- Необов’язкова поведінка автентифікації:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів та ігнорувати перевизначення лише через env
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів і ігнорувати перевизначення лише з env
## Video generation live
- Тест: `extensions/video-generation-providers.live.test.ts`
- Увімкнення: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts`
- Harness: `pnpm test:live:media video`
- Оснастка: `pnpm test:live:media video`
- Обсяг:
- Перевіряє спільний вбудований шлях провайдера генерації відео
- За замовчуванням використовує release-safe smoke-шлях: провайдери не FAL, один text-to-video-запит на провайдера, односекундний lobster prompt і ліміт операцій на провайдера з `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` за замовчуванням)
- За замовчуванням пропускає FAL, бо затримка черги на боці провайдера може домінувати в часі релізу; передайте `--video-providers fal` або `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, щоб запустити його явно
- Завантажує env-змінні провайдера з вашої login shell (`~/.profile`) перед зондуванням
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували реальні облікові дані shell
- Перевіряє спільний шлях вбудованого провайдера генерації відео
- За замовчуванням використовує release-safe smoke-шлях: провайдери не FAL, один запит text-to-video на провайдера, односекундний prompt із омаром і ліміт операції для кожного провайдера з `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` за замовчуванням)
- За замовчуванням пропускає FAL, бо затримка черги на стороні провайдера може переважати час релізу; передайте `--video-providers fal` або `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, щоб запустити його явно
- Завантажує env-змінні провайдера з вашої login shell (`~/.profile`) перед перевіркою
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні облікові дані shell
- Пропускає провайдерів без придатної автентифікації/профілю/моделі
- За замовчуванням запускає лише `generate`
- Установіть `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1`, щоб також запускати заявлені режими transform, коли доступні:
- `imageToVideo`, коли провайдер заявляє `capabilities.imageToVideo.enabled` і вибраний провайдер/модель приймає buffer-backed локальне зображення у спільному sweep
- `videoToVideo`, коли провайдер заявляє `capabilities.videoToVideo.enabled` і вибраний провайдер/модель приймає buffer-backed локальне відео у спільному sweep
- Поточні заявлені, але пропущені провайдери `imageToVideo` у спільному sweep:
- `vydra`, бо вбудований `veo3` підтримує лише text-only, а вбудований `kling` потребує віддаленого URL зображення
- Специфічне для провайдера охоплення Vydra:
- Установіть `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1`, щоб також запускати оголошені режими трансформації, коли вони доступні:
- `imageToVideo`, коли провайдер оголошує `capabilities.imageToVideo.enabled`, а вибраний провайдер/модель приймає локальні вхідні зображення на основі буфера у спільному sweep
- `videoToVideo`, коли провайдер оголошує `capabilities.videoToVideo.enabled`, а вибраний провайдер/модель приймає локальні вхідні відео на основі буфера у спільному sweep
- Поточні провайдери `imageToVideo`, оголошені, але пропущені у спільному sweep:
- `vydra`, бо вбудований `veo3` підтримує лише text-only, а вбудований `kling` потребує віддаленої URL-адреси зображення
- Покриття Vydra, специфічне для провайдера:
- `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts`
- цей файл запускає `veo3` text-to-video плюс lane `kling`, який за замовчуванням використовує fixture віддаленого URL зображення
- Поточне live-охоплення `videoToVideo`:
- лише `runway`, коли вибрана модель — `runway/gen4_aleph`
- Поточні заявлені, але пропущені провайдери `videoToVideo` у спільному sweep:
- цей файл запускає `veo3` text-to-video плюс лінію `kling`, яка за замовчуванням використовує fixture з віддаленою URL-адресою зображення
- Поточне live-покриття `videoToVideo`:
- `runway` лише коли вибрана модель — `runway/gen4_aleph`
- Поточні провайдери `videoToVideo`, оголошені, але пропущені у спільному sweep:
- `alibaba`, `qwen`, `xai`, бо ці шляхи наразі потребують віддалених `http(s)` / MP4 reference URL
- `google`, бо поточний спільний lane Gemini/Veo використовує локальне buffer-backed введення, і цей шлях не приймається у спільному sweep
- `openai`, бо поточний спільний lane не має гарантій доступу до org-specific video inpaint/remix
- `google`, бо поточна спільна лінія Gemini/Veo використовує локальні вхідні дані на основі буфера, і цей шлях не приймається у спільному sweep
- `openai`, бо поточна спільна лінія не має гарантій доступу до org-specific video inpaint/remix
- Необов’язкове звуження:
- `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,google,openai,runway"`
- `OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"`
- `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""`, щоб включити кожного провайдера в default sweep, включно з FAL
- `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""`, щоб включити кожного провайдера в типовий sweep, включно з FAL
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000`, щоб зменшити ліміт операції кожного провайдера для агресивного smoke-запуску
- Необов’язкова поведінка автентифікації:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів та ігнорувати перевизначення лише через env
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів і ігнорувати перевизначення лише з env
## Media live harness
- Команда: `pnpm test:live:media`
- Призначення:
- Запускає спільні image, music і video live-набори через одну repo-native точку входу
- Запускає спільні live-набори для зображень, музики та відео через одну repo-native точку входу
- Автоматично завантажує відсутні env-змінні провайдера з `~/.profile`
- За замовчуванням автоматично звужує кожен набір до провайдерів, які наразі мають придатну автентифікацію
- Повторно використовує `scripts/test-live.mjs`, тож поведінка Heartbeat і quiet-mode лишається узгодженою

View File

@ -2,45 +2,45 @@
read_when:
- Вам потрібен контейнеризований Gateway замість локальних встановлень
- Ви перевіряєте Docker-процес
summary: Необов’язкове налаштування та початкове введення в роботу OpenClaw на основі Docker
summary: Необов’язкове налаштування та онбординг OpenClaw на основі Docker
title: Docker
x-i18n:
generated_at: "2026-05-01T20:38:36Z"
generated_at: "2026-05-02T07:52:30Z"
model: gpt-5.5
provider: openai
source_hash: 2647caae7debfe0647842249a3a6000bfa73b191b1aa1d7ced1e9c0eb22228db
source_hash: 8467618438209c1c7c74eadf2c793dbae21622eb92fa3ddbd13d668d8be5bf1f
source_path: install/docker.md
workflow: 16
---
Docker є **необов’язковим**. Використовуйте його лише якщо вам потрібен контейнеризований Gateway або ви хочете перевірити Docker-процес.
Docker є **необов’язковим**. Використовуйте його лише якщо вам потрібен контейнеризований Gateway або перевірка Docker-процесу.
## Чи підходить мені Docker?
- **Так**: вам потрібне ізольоване, тимчасове середовище Gateway або запуск OpenClaw на хості без локальних встановлень.
- **Ні**: ви запускаєте на власній машині й хочете просто найшвидший цикл розробки. Натомість використовуйте звичайний процес встановлення.
- **Примітка щодо ізоляції**: стандартний бекенд ізоляції використовує Docker, коли ізоляцію ввімкнено, але ізоляція за замовчуванням вимкнена і **не** потребує запуску всього Gateway у Docker. Також доступні бекенди ізоляції SSH і OpenShell. Див. [Ізоляція](/uk/gateway/sandboxing).
- **Так**: вам потрібне ізольоване, тимчасове середовище Gateway або запуск OpenClaw на хості без локального встановлення.
- **Ні**: ви запускаєте на власній машині й хочете найшвидший цикл розробки. Натомість використайте звичайний процес встановлення.
- **Примітка щодо ізоляції**: типовий бекенд sandbox використовує Docker, коли sandboxing увімкнено, але sandboxing вимкнено типово й **не** вимагає запуску всього Gateway у Docker. Також доступні SSH і OpenShell sandbox backends. Див. [Sandboxing](/uk/gateway/sandboxing).
## Передумови
- Docker Desktop (або Docker Engine) + Docker Compose v2
- Щонайменше 2 ГБ RAM для складання образу (`pnpm install` може бути завершено через OOM на хостах із 1 ГБ з кодом виходу 137)
- Достатньо місця на диску для образів і журналів
- Якщо запуск відбувається на VPS/публічному хості, перегляньте
[Посилення безпеки для мережевого доступу](/uk/gateway/security),
особливо політику брандмауера Docker `DOCKER-USER`.
- Щонайменше 2 ГБ RAM для збирання образу (`pnpm install` може бути завершено через OOM на хостах із 1 ГБ з кодом виходу 137)
- Достатньо дискового простору для образів і логів
- Якщо запускаєте на VPS/публічному хості, перегляньте
[Security hardening for network exposure](/uk/gateway/security),
особливо Docker `DOCKER-USER` firewall policy.
## Контейнеризований Gateway
<Steps>
<Step title="Зберіть образ">
З кореня репозиторію запустіть сценарій налаштування:
З кореня repo запустіть setup script:
```bash
./scripts/docker/setup.sh
```
Це локально збирає образ Gateway. Щоб натомість використати попередньо зібраний образ:
Це збирає образ Gateway локально. Щоб натомість використати попередньо зібраний образ:
```bash
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
@ -53,24 +53,24 @@ Docker є **необов’язковим**. Використовуйте йог
</Step>
<Step title="Завершіть початкове налаштування">
Сценарій налаштування автоматично запускає початкове налаштування. Він:
<Step title="Завершіть onboarding">
Setup script автоматично запускає onboarding. Він:
- запросить API-ключі провайдера
- запитає provider API keys
- згенерує токен Gateway і запише його в `.env`
- запустить Gateway через Docker Compose
Під час налаштування початкове налаштування перед стартом і записи конфігурації виконуються через
`openclaw-gateway` напряму. `openclaw-cli` призначений для команд, які ви запускаєте після того,
як контейнер Gateway уже існує.
Під час налаштування pre-start onboarding і записи конфігурації виконуються напряму через
`openclaw-gateway`. `openclaw-cli` призначений для команд, які ви запускаєте після того, як
контейнер Gateway уже існує.
</Step>
<Step title="Відкрийте Control UI">
Відкрийте `http://127.0.0.1:18789/` у браузері та вставте налаштований
спільний секрет у Settings. Сценарій налаштування за замовчуванням записує токен у `.env`;
якщо ви перемкнете конфігурацію контейнера на автентифікацію паролем, використовуйте
натомість цей пароль.
спільний секрет у Settings. Setup script типово записує токен у `.env`;
якщо ви перемкнете конфігурацію контейнера на password auth, натомість використайте цей
пароль.
Потрібна URL-адреса ще раз?
@ -81,7 +81,7 @@ Docker є **необов’язковим**. Використовуйте йог
</Step>
<Step title="Налаштуйте канали (необов’язково)">
Використовуйте контейнер CLI, щоб додати канали обміну повідомленнями:
Використайте контейнер CLI, щоб додати канали повідомлень:
```bash
# WhatsApp (QR)
@ -101,7 +101,7 @@ Docker є **необов’язковим**. Використовуйте йог
### Ручний процес
Якщо ви віддаєте перевагу самостійному запуску кожного кроку замість використання сценарію налаштування:
Якщо ви віддаєте перевагу запуску кожного кроку вручну замість використання setup script:
```bash
docker build -t openclaw:local -f Dockerfile .
@ -113,53 +113,53 @@ docker compose up -d openclaw-gateway
```
<Note>
Запускайте `docker compose` з кореня репозиторію. Якщо ви ввімкнули `OPENCLAW_EXTRA_MOUNTS`
або `OPENCLAW_HOME_VOLUME`, сценарій налаштування записує `docker-compose.extra.yml`;
додайте його за допомогою `-f docker-compose.yml -f docker-compose.extra.yml`.
Запускайте `docker compose` з кореня repo. Якщо ви ввімкнули `OPENCLAW_EXTRA_MOUNTS`
або `OPENCLAW_HOME_VOLUME`, setup script записує `docker-compose.extra.yml`;
додайте його через `-f docker-compose.yml -f docker-compose.extra.yml`.
</Note>
<Note>
Оскільки `openclaw-cli` спільно використовує мережевий простір імен `openclaw-gateway`, це
інструмент після старту. Перед `docker compose up -d openclaw-gateway` запускайте початкове налаштування
та записи конфігурації під час налаштування через `openclaw-gateway` з
Оскільки `openclaw-cli` спільно використовує network namespace `openclaw-gateway`, це
post-start інструмент. Перед `docker compose up -d openclaw-gateway` запускайте onboarding
і записи конфігурації під час налаштування через `openclaw-gateway` з
`--no-deps --entrypoint node`.
</Note>
### Змінні середовища
Сценарій налаштування приймає ці необов’язкові змінні середовища:
Setup script приймає ці необов’язкові змінні середовища:
| Змінна | Призначення |
| ----------------------------------------- | --------------------------------------------------------------- |
| `OPENCLAW_IMAGE` | Використати віддалений образ замість локального складання |
| `OPENCLAW_DOCKER_APT_PACKAGES` | Встановити додаткові apt-пакети під час складання (через пробіл) |
| `OPENCLAW_EXTENSIONS` | Включити вибрані допоміжні засоби вбудованих plugin під час складання |
| `OPENCLAW_EXTRA_MOUNTS` | Додаткові bind-монтування хоста (через кому `source:target[:opts]`) |
| `OPENCLAW_HOME_VOLUME` | Зберігати `/home/node` в іменованому томі Docker |
| `OPENCLAW_SANDBOX` | Увімкнути початкове налаштування ізоляції (`1`, `true`, `yes`, `on`) |
| `OPENCLAW_SKIP_ONBOARDING` | Пропустити інтерактивний крок початкового налаштування (`1`, `true`, `yes`, `on`) |
| `OPENCLAW_DOCKER_SOCKET` | Перевизначити шлях до сокета Docker |
| `OPENCLAW_DISABLE_BONJOUR` | Вимкнути рекламу Bonjour/mDNS (за замовчуванням `1` для Docker) |
| `OPENCLAW_DISABLE_BUNDLED_SOURCE_OVERLAYS` | Вимкнути bind-mount-накладання джерельного коду вбудованих plugin |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Спільний endpoint колектора OTLP/HTTP для експорту OpenTelemetry |
| `OTEL_EXPORTER_OTLP_*_ENDPOINT` | Специфічні для сигналів OTLP endpoint для трас, метрик або журналів |
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначення протоколу OTLP. Сьогодні підтримується лише `http/protobuf` |
| `OTEL_SERVICE_NAME` | Назва сервісу, що використовується для ресурсів OpenTelemetry |
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Увімкнути найновіші експериментальні семантичні атрибути GenAI |
| `OPENCLAW_OTEL_PRELOADED` | Пропустити запуск другого OpenTelemetry SDK, коли один уже попередньо завантажено |
| Змінна | Призначення |
| ----------------------------------------- | -------------------------------------------------------------- |
| `OPENCLAW_IMAGE` | Використати віддалений образ замість локального збирання |
| `OPENCLAW_DOCKER_APT_PACKAGES` | Встановити додаткові apt packages під час збирання (через пробіл) |
| `OPENCLAW_EXTENSIONS` | Додати вибрані вбудовані helper-и Plugin під час збирання |
| `OPENCLAW_EXTRA_MOUNTS` | Додаткові host bind mounts (розділені комами `source:target[:opts]`) |
| `OPENCLAW_HOME_VOLUME` | Зберігати `/home/node` у named Docker volume |
| `OPENCLAW_SANDBOX` | Увімкнути sandbox bootstrap (`1`, `true`, `yes`, `on`) |
| `OPENCLAW_SKIP_ONBOARDING` | Пропустити інтерактивний крок onboarding (`1`, `true`, `yes`, `on`) |
| `OPENCLAW_DOCKER_SOCKET` | Перевизначити шлях до Docker socket |
| `OPENCLAW_DISABLE_BONJOUR` | Вимкнути Bonjour/mDNS advertising (типово `1` для Docker) |
| `OPENCLAW_DISABLE_BUNDLED_SOURCE_OVERLAYS` | Вимкнути bind-mount overlays для джерел вбудованих Plugin |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Спільний endpoint OTLP/HTTP collector для OpenTelemetry export |
| `OTEL_EXPORTER_OTLP_*_ENDPOINT` | Signal-specific OTLP endpoints для traces, metrics або logs |
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначення OTLP protocol. Наразі підтримується лише `http/protobuf` |
| `OTEL_SERVICE_NAME` | Назва service, що використовується для OpenTelemetry resources |
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Увімкнути найновіші експериментальні GenAI semantic attributes |
| `OPENCLAW_OTEL_PRELOADED` | Пропустити запуск другого OpenTelemetry SDK, коли один уже preloaded |
Супровідники можуть тестувати джерельний код вбудованого plugin із пакетованим образом, змонтувавши
один каталог джерельного коду plugin поверх його пакетованого шляху до джерел, наприклад
Maintainers можуть тестувати джерело вбудованого Plugin проти packaged image, монтувавши
одну директорію джерела Plugin поверх її packaged source path, наприклад
`OPENCLAW_EXTRA_MOUNTS=/path/to/fork/extensions/synology-chat:/app/extensions/synology-chat:ro`.
Цей змонтований каталог джерельного коду перевизначає відповідний скомпільований
пакет `/app/dist/extensions/synology-chat` для того самого ідентифікатора plugin.
Ця змонтована директорія джерела перевизначає відповідний скомпільований
bundle `/app/dist/extensions/synology-chat` для того самого plugin id.
### Спостережуваність
### Observability
Експорт OpenTelemetry є вихідним з контейнера Gateway до вашого OTLP
колектора. Він не потребує опублікованого порту Docker. Якщо ви локально збираєте образ
і хочете, щоб вбудований експортер OpenTelemetry був доступний всередині образу,
включіть його runtime-залежності:
OpenTelemetry export виконується назовні з контейнера Gateway до вашого OTLP
collector. Для нього не потрібен опублікований Docker port. Якщо ви збираєте образ
локально й хочете, щоб вбудований OpenTelemetry exporter був доступний всередині образу,
додайте його runtime dependencies:
```bash
export OPENCLAW_EXTENSIONS="diagnostics-otel"
@ -168,38 +168,39 @@ export OTEL_SERVICE_NAME="openclaw-gateway"
./scripts/docker/setup.sh
```
Офіційний Docker-образ релізу OpenClaw включає джерельний код вбудованого
plugin `diagnostics-otel`. Щоб увімкнути експорт, дозвольте й увімкніть
plugin `diagnostics-otel` у конфігурації, потім задайте
`diagnostics.otel.enabled=true` або використайте приклад конфігурації в
[Експорт OpenTelemetry](/uk/gateway/opentelemetry). Заголовки автентифікації колектора
налаштовуються через `diagnostics.otel.headers`, а не через змінні середовища Docker.
Встановіть офіційний Plugin `@openclaw/diagnostics-otel` у packaged Docker
installs перед увімкненням export. Custom source-built images усе ще можуть додавати
локальне джерело Plugin через `OPENCLAW_EXTENSIONS=diagnostics-otel`. Щоб увімкнути
export, дозвольте й увімкніть Plugin `diagnostics-otel` у конфігурації, а потім задайте
`diagnostics.otel.enabled=true` або використайте приклад конфігурації в [OpenTelemetry
export](/uk/gateway/opentelemetry). Collector auth headers налаштовуються через
`diagnostics.otel.headers`, а не через змінні середовища Docker.
Метрики Prometheus використовують уже опублікований порт Gateway. Увімкніть
plugin `diagnostics-prometheus`, потім виконуйте scraping:
Prometheus metrics використовують уже опублікований порт Gateway. Увімкніть
Plugin `diagnostics-prometheus`, потім scrape:
```text
http://<gateway-host>:18789/api/diagnostics/prometheus
```
Маршрут захищений автентифікацією Gateway. Не відкривайте окремий
публічний порт `/metrics` або неавтентифікований шлях reverse-proxy. Див.
[Метрики Prometheus](/uk/gateway/prometheus).
публічний порт `/metrics` або неавтентифікований reverse-proxy path. Див.
[Prometheus metrics](/uk/gateway/prometheus).
### Перевірки стану
### Health checks
Endpoint для перевірок контейнера (автентифікація не потрібна):
Container probe endpoints (автентифікація не потрібна):
```bash
curl -fsS http://127.0.0.1:18789/healthz # liveness
curl -fsS http://127.0.0.1:18789/readyz # readiness
```
Docker-образ містить вбудований `HEALTHCHECK`, який опитує `/healthz`.
Якщо перевірки постійно не проходять, Docker позначає контейнер як `unhealthy`, а
системи оркестрації можуть перезапустити або замінити його.
Docker image містить вбудований `HEALTHCHECK`, який ping-ить `/healthz`.
Якщо перевірки постійно не проходять, Docker позначає контейнер як `unhealthy`, і
orchestration systems можуть перезапустити або замінити його.
Автентифікований глибокий знімок стану:
Автентифікований deep health snapshot:
```bash
docker compose exec openclaw-gateway node dist/index.js health --token "$OPENCLAW_GATEWAY_TOKEN"
@ -207,86 +208,84 @@ docker compose exec openclaw-gateway node dist/index.js health --token "$OPENCLA
### LAN проти loopback
`scripts/docker/setup.sh` за замовчуванням встановлює `OPENCLAW_GATEWAY_BIND=lan`, щоб доступ хоста до
`http://127.0.0.1:18789` працював з публікацією портів Docker.
`scripts/docker/setup.sh` типово задає `OPENCLAW_GATEWAY_BIND=lan`, щоб доступ хоста до
`http://127.0.0.1:18789` працював із Docker port publishing.
- `lan` (за замовчуванням): браузер хоста та CLI хоста можуть звертатися до опублікованого порту Gateway.
- `loopback`: лише процеси всередині мережевого простору імен контейнера можуть напряму звертатися
до Gateway.
- `lan` (типово): браузер хоста й CLI хоста можуть звертатися до опублікованого порту Gateway.
- `loopback`: лише процеси всередині network namespace контейнера можуть звертатися
до Gateway напряму.
<Note>
Використовуйте значення режиму bind у `gateway.bind` (`lan` / `loopback` / `custom` /
`tailnet` / `auto`), а не псевдоніми хоста на кшталт `0.0.0.0` або `127.0.0.1`.
Використовуйте значення bind mode у `gateway.bind` (`lan` / `loopback` / `custom` /
`tailnet` / `auto`), а не host aliases на кшталт `0.0.0.0` або `127.0.0.1`.
</Note>
### Локальні провайдери хоста
Коли OpenClaw працює в Docker, `127.0.0.1` всередині контейнера є самим контейнером,
а не вашою хост-машиною. Використовуйте `host.docker.internal` для AI-провайдерів, які
Коли OpenClaw працює в Docker, `127.0.0.1` всередині контейнера — це сам контейнер,
а не ваша host machine. Використовуйте `host.docker.internal` для AI providers, які
працюють на хості:
| Провайдер | URL хоста за замовчуванням | URL для налаштування Docker |
| --------- | -------------------------- | ---------------------------------- |
| LM Studio | `http://127.0.0.1:1234` | `http://host.docker.internal:1234` |
| Ollama | `http://127.0.0.1:11434` | `http://host.docker.internal:11434` |
| Провайдер | Типова URL хоста | URL для Docker setup |
| --------- | ----------------------- | ------------------------------------ |
| LM Studio | `http://127.0.0.1:1234` | `http://host.docker.internal:1234` |
| Ollama | `http://127.0.0.1:11434` | `http://host.docker.internal:11434` |
Вбудоване налаштування Docker використовує ці URL хоста як стандартні значення початкового налаштування
LM Studio та Ollama, а `docker-compose.yml` зіставляє `host.docker.internal` з
хостовим gateway Docker для Linux Docker Engine. Docker Desktop уже надає
таке саме ім’я хоста на macOS і Windows.
Вбудований Docker setup використовує ці host URLs як типові значення onboarding
для LM Studio та Ollama, а `docker-compose.yml` мапить `host.docker.internal` на
Docker's host gateway для Linux Docker Engine. Docker Desktop уже надає
той самий hostname у macOS і Windows.
Сервіси хоста також мають слухати на адресі, доступній з Docker:
Host services також мають слухати на адресі, доступній із Docker:
```bash
lms server start --port 1234 --bind 0.0.0.0
OLLAMA_HOST=0.0.0.0:11434 ollama serve
```
Якщо ви використовуєте власний файл Compose або команду `docker run`, додайте те саме
зіставлення хоста самостійно, наприклад
Якщо ви використовуєте власний Compose file або команду `docker run`, додайте таке саме host
mapping самостійно, наприклад
`--add-host=host.docker.internal:host-gateway`.
### Bonjour / mDNS
Мережа Docker bridge зазвичай ненадійно пересилає multicast Bonjour/mDNS
(`224.0.0.251:5353`). Тому вбудоване налаштування Compose за замовчуванням задає
`OPENCLAW_DISABLE_BONJOUR=1`, щоб Gateway не потрапляв у crash loop і не перезапускав
рекламу повторно, коли bridge відкидає multicast-трафік.
Docker bridge networking зазвичай не пересилає Bonjour/mDNS multicast
(`224.0.0.251:5353`) надійно. Тому вбудований Compose setup типово задає
`OPENCLAW_DISABLE_BONJOUR=1`, щоб Gateway не входив у crash-loop і не перезапускав
advertising багато разів, коли bridge відкидає multicast traffic.
Використовуйте опубліковану URL-адресу Gateway, Tailscale або wide-area DNS-SD для Docker-хостів.
Використовуйте опубліковану URL-адресу Gateway, Tailscale або wide-area DNS-SD для Docker hosts.
Задавайте `OPENCLAW_DISABLE_BONJOUR=0` лише під час запуску з host networking, macvlan
або іншою мережею, де multicast mDNS точно працює.
або іншою мережею, де відомо, що mDNS multicast працює.
Про типові проблеми й усунення несправностей див. [Виявлення Bonjour](/uk/gateway/bonjour).
Підводні камені та troubleshooting див. у [Bonjour discovery](/uk/gateway/bonjour).
### Сховище та збереження даних
### Сховище та збереження
Docker Compose bind-монтує `OPENCLAW_CONFIG_DIR` до `/home/node/.openclaw` і
`OPENCLAW_WORKSPACE_DIR` до `/home/node/.openclaw/workspace`, тому ці шляхи
зберігаються після заміни контейнера. Коли будь-яка зі змінних не задана, вбудований
Docker Compose bind-mounts `OPENCLAW_CONFIG_DIR` у `/home/node/.openclaw` і
`OPENCLAW_WORKSPACE_DIR` у `/home/node/.openclaw/workspace`, тому ці шляхи
переживають заміну контейнера. Коли будь-яка зі змінних не задана, вбудований
`docker-compose.yml` повертається до `${HOME}/.openclaw` (і
`${HOME}/.openclaw/workspace` для монтування робочого простору), або до `/tmp/.openclaw`,
коли сам `HOME` також відсутній. Це запобігає тому, щоб `docker compose up`
виводив специфікацію тому з порожнім джерелом у мінімальних середовищах.
`${HOME}/.openclaw/workspace` для workspace mount), або до `/tmp/.openclaw`,
коли сам `HOME` також відсутній. Це не дає `docker compose up`
вивести volume spec із порожнім джерелом у мінімальних середовищах.
У цьому змонтованому каталозі конфігурації OpenClaw зберігає:
У цій змонтованій директорії конфігурації OpenClaw зберігає:
- `openclaw.json` для конфігурації поведінки
- `agents/<agentId>/agent/auth-profiles.json` для збереженої OAuth/API-key-автентифікації провайдера
- `.env` для runtime-секретів на основі env, таких як `OPENCLAW_GATEWAY_TOKEN`
- `openclaw.json` для behavior config
- `agents/<agentId>/agent/auth-profiles.json` для збереженої provider OAuth/API-key auth
- `.env` для runtime secrets на основі env, як-от `OPENCLAW_GATEWAY_TOKEN`
Встановлені завантажувані plugin зберігають свій стан пакета під змонтованим
home OpenClaw, тому записи встановлення plugin і корені пакетів зберігаються після
заміни контейнера. Запуск Gateway не генерує дерева залежностей для вбудованих plugin.
Встановлені downloadable plugins зберігають свій package state у змонтованому
OpenClaw home, тому plugin install records і package roots переживають заміну контейнера.
Запуск Gateway не генерує dependency trees для вбудованих Plugin.
Повні відомості про збереження даних у розгортаннях VM див.
[Docker VM Runtime - Що де зберігається](/uk/install/docker-vm-runtime#what-persists-where).
Повні деталі persistence для VM deployments див.
[Docker VM Runtime - What persists where](/uk/install/docker-vm-runtime#what-persists-where).
**Місця активного зростання диска:** стежте за `media/`, файлами session JSONL,
`cron/runs/*.jsonl`, коренями пакетів встановлених plugin і ротаційними файловими журналами
під `/tmp/openclaw/`.
**Гарячі точки зростання диска:** стежте за `media/`, session JSONL файлами, `cron/runs/*.jsonl`, коренями пакетів установлених plugin, а також ротаційними файловими логами в `/tmp/openclaw/`.
### Допоміжні засоби оболонки (необов’язково)
### Shell-помічники (необов'язково)
Для простішого щоденного керування Docker встановіть `ClawDock`:
@ -295,20 +294,19 @@ mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/open
echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
```
Якщо ви встановили ClawDock зі старого raw-шляху `scripts/shell-helpers/clawdock-helpers.sh`, повторно виконайте наведену вище команду встановлення, щоб ваш локальний helper-файл відстежував нове розташування.
Якщо ви встановили ClawDock зі старішого raw-шляху `scripts/shell-helpers/clawdock-helpers.sh`, повторно виконайте наведену вище команду встановлення, щоб ваш локальний файл-помічник відстежував нове розташування.
Потім використовуйте `clawdock-start`, `clawdock-stop`, `clawdock-dashboard` тощо. Виконайте
`clawdock-help`, щоб побачити всі команди.
Див. [ClawDock](/uk/install/clawdock), щоб переглянути повний посібник із helper.
Потім використовуйте `clawdock-start`, `clawdock-stop`, `clawdock-dashboard` тощо. Виконайте `clawdock-help`, щоб переглянути всі команди.
Повний посібник із помічником див. у [ClawDock](/uk/install/clawdock).
<AccordionGroup>
<Accordion title="Увімкнути sandbox агента для Docker Gateway">
<Accordion title="Увімкнути пісочницю агента для Docker Gateway">
```bash
export OPENCLAW_SANDBOX=1
./scripts/docker/setup.sh
```
Користувацький шлях до сокета (наприклад, rootless Docker):
Користувацький шлях до socket (наприклад, rootless Docker):
```bash
export OPENCLAW_SANDBOX=1
@ -316,9 +314,7 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
./scripts/docker/setup.sh
```
Скрипт монтує `docker.sock` лише після успішного проходження передумов sandbox. Якщо
налаштування sandbox не може завершитися, скрипт скидає `agents.defaults.sandbox.mode`
до `off`.
Скрипт монтує `docker.sock` лише після успішного проходження передумов пісочниці. Якщо налаштування пісочниці неможливо завершити, скрипт скидає `agents.defaults.sandbox.mode` до `off`.
</Accordion>
@ -333,15 +329,11 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="Примітка щодо безпеки спільної мережі">
`openclaw-cli` використовує `network_mode: "service:openclaw-gateway"`, щоб команди CLI
могли підключатися до Gateway через `127.0.0.1`. Сприймайте це як спільну
межу довіри. Конфігурація compose вимикає `NET_RAW`/`NET_ADMIN` і вмикає
`no-new-privileges` для `openclaw-cli`.
`openclaw-cli` використовує `network_mode: "service:openclaw-gateway"`, щоб CLI-команди могли звертатися до Gateway через `127.0.0.1`. Розглядайте це як спільну межу довіри. Конфігурація compose прибирає `NET_RAW`/`NET_ADMIN` і вмикає `no-new-privileges` для `openclaw-cli`.
</Accordion>
<Accordion title="Дозволи та EACCES">
Образ запускається як `node` (uid 1000). Якщо ви бачите помилки дозволів для
`/home/node/.openclaw`, переконайтеся, що bind mounts на хості належать uid 1000:
Образ працює як `node` (uid 1000). Якщо ви бачите помилки дозволів для `/home/node/.openclaw`, переконайтеся, що bind mount-и хоста належать uid 1000:
```bash
sudo chown -R 1000:1000 /path/to/openclaw-config /path/to/openclaw-workspace
@ -350,8 +342,7 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="Швидші перебудови">
Упорядкуйте Dockerfile так, щоб шари залежностей кешувалися. Це допоможе не запускати повторно
`pnpm install`, якщо lockfiles не змінювалися:
Упорядкуйте Dockerfile так, щоб шари залежностей кешувалися. Це дає змогу не запускати `pnpm install` повторно, доки lockfile-и не зміняться:
```dockerfile
FROM node:24-bookworm
@ -374,8 +365,7 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="Параметри контейнера для досвідчених користувачів">
Стандартний образ орієнтований передусім на безпеку й запускається як непривілейований `node`. Для більш
функціонального контейнера:
Типовий образ орієнтований насамперед на безпеку й запускається як нерутовий користувач `node`. Для функціональнішого контейнера:
1. **Зберігайте `/home/node`**: `export OPENCLAW_HOME_VOLUME="openclaw_home"`
2. **Вбудуйте системні залежності**: `export OPENCLAW_DOCKER_APT_PACKAGES="git curl jq"`
@ -384,52 +374,36 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
```
4. **Зберігайте завантаження браузерів**: задайте
`PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright` і використовуйте
`OPENCLAW_HOME_VOLUME` або `OPENCLAW_EXTRA_MOUNTS`.
4. **Зберігайте завантаження браузерів**: задайте `PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright` і використовуйте `OPENCLAW_HOME_VOLUME` або `OPENCLAW_EXTRA_MOUNTS`.
</Accordion>
<Accordion title="OpenAI Codex OAuth (headless Docker)">
Якщо ви виберете OpenAI Codex OAuth у майстрі, він відкриє URL браузера. У
Docker або headless-середовищах скопіюйте повну URL-адресу перенаправлення, на якій опинитеся, і вставте
її назад у майстер, щоб завершити автентифікацію.
Якщо ви виберете OpenAI Codex OAuth у майстрі, він відкриє URL у браузері. У Docker або headless-середовищах скопіюйте повний URL перенаправлення, на який ви потрапите, і вставте його назад у майстер, щоб завершити автентифікацію.
</Accordion>
<Accordion title="Метадані базового образу">
Основний runtime-образ Docker використовує `node:24-bookworm-slim` і публікує OCI
анотації базового образу, зокрема `org.opencontainers.image.base.name`,
`org.opencontainers.image.source` та інші. Digest базового образу Node
оновлюється через Dependabot PR для базового Docker-образу; release builds не запускають
шар distro upgrade. Див.
[анотації OCI image](https://github.com/opencontainers/image-spec/blob/main/annotations.md).
Основний runtime-образ Docker використовує `node:24-bookworm-slim` і публікує OCI-анотації базового образу, зокрема `org.opencontainers.image.base.name`, `org.opencontainers.image.source` та інші. Digest базового образу Node оновлюється через PR Dependabot для базових образів Docker; release-збірки не запускають шар оновлення дистрибутива. Див.
[OCI image annotations](https://github.com/opencontainers/image-spec/blob/main/annotations.md).
</Accordion>
</AccordionGroup>
### Запускаєте на VPS?
Див. [Hetzner (Docker VPS)](/uk/install/hetzner) і
[Docker VM Runtime](/uk/install/docker-vm-runtime), щоб переглянути кроки розгортання на спільній VM,
зокрема вбудовування бінарних файлів, persistence та оновлення.
[Docker VM Runtime](/uk/install/docker-vm-runtime), щоб переглянути кроки розгортання на спільній VM, зокрема вбудовування binary, persistence та оновлення.
## Sandbox агента
## Пісочниця агента
Коли `agents.defaults.sandbox` увімкнено з backend Docker, Gateway
запускає виконання інструментів агента (shell, читання/запис файлів тощо) в ізольованих Docker
контейнерах, тоді як сам Gateway залишається на хості. Це створює надійну межу
навколо недовірених або multi-tenant сеансів агентів без контейнеризації всього
Gateway.
Коли `agents.defaults.sandbox` увімкнено з бекендом Docker, Gateway запускає виконання інструментів агента (shell, читання/запис файлів тощо) всередині ізольованих контейнерів Docker, тоді як сам Gateway залишається на хості. Це дає жорстку межу навколо недовірених або multi-tenant сесій агентів без контейнеризації всього Gateway.
Область sandbox може бути для кожного агента (стандартно), для кожного сеансу або спільною. Кожна область
отримує власний workspace, змонтований у `/workspace`. Ви також можете налаштувати
політики дозволу/заборони інструментів, ізоляцію мережі, обмеження ресурсів і браузерні
контейнери.
Область дії пісочниці може бути per-agent (типово), per-session або shared. Кожна область отримує власний workspace, змонтований у `/workspace`. Ви також можете налаштувати політики allow/deny для інструментів, ізоляцію мережі, обмеження ресурсів і браузерні контейнери.
Повну конфігурацію, образи, примітки щодо безпеки та профілі multi-agent дивіться тут:
Повну конфігурацію, образи, примітки щодо безпеки та multi-agent профілі див. тут:
- [Sandboxing](/uk/gateway/sandboxing) -- повний довідник із sandbox
- [OpenShell](/uk/gateway/openshell) -- інтерактивний shell-доступ до sandbox-контейнерів
- [Multi-Agent Sandbox and Tools](/uk/tools/multi-agent-sandbox-tools) -- перевизначення для кожного агента
- [Sandboxing](/uk/gateway/sandboxing) -- повний довідник із пісочниці
- [OpenShell](/uk/gateway/openshell) -- інтерактивний shell-доступ до контейнерів пісочниці
- [Multi-Agent Sandbox and Tools](/uk/tools/multi-agent-sandbox-tools) -- перевизначення per-agent
### Швидке ввімкнення
@ -446,42 +420,40 @@ Gateway.
}
```
Зберіть стандартний sandbox-образ (із checkout вихідного коду):
Зберіть типовий образ пісочниці (із checkout вихідного коду):
```bash
scripts/sandbox-setup.sh
```
Для встановлень через npm без checkout вихідного коду див. [Sandboxing § Образи та налаштування](/uk/gateway/sandboxing#images-and-setup) для inline-команд `docker build`.
Для npm-установок без checkout вихідного коду див. [Sandboxing § Images and setup](/uk/gateway/sandboxing#images-and-setup), де наведено inline-команди `docker build`.
## Усунення несправностей
<AccordionGroup>
<Accordion title="Образ відсутній або sandbox-контейнер не запускається">
Зберіть sandbox-образ за допомогою
<Accordion title="Образ відсутній або контейнер пісочниці не запускається">
Зберіть образ пісочниці за допомогою
[`scripts/sandbox-setup.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/sandbox-setup.sh)
(checkout вихідного коду) або inline-команди `docker build` з [Sandboxing § Образи та налаштування](/uk/gateway/sandboxing#images-and-setup) (встановлення через npm),
або задайте `agents.defaults.sandbox.docker.image` для свого користувацького образу.
Контейнери автоматично створюються для кожного сеансу на вимогу.
(checkout вихідного коду) або inline-команди `docker build` з [Sandboxing § Images and setup](/uk/gateway/sandboxing#images-and-setup) (npm install),
або задайте `agents.defaults.sandbox.docker.image` як ваш користувацький образ.
Контейнери автоматично створюються per session на вимогу.
</Accordion>
<Accordion title="Помилки дозволів у sandbox">
Задайте `docker.user` як UID:GID, що відповідає власнику вашого змонтованого workspace,
або змініть власника теки workspace через chown.
<Accordion title="Помилки дозволів у пісочниці">
Задайте `docker.user` як UID:GID, що відповідає власнику змонтованого workspace,
або змініть власника папки workspace за допомогою chown.
</Accordion>
<Accordion title="Користувацькі інструменти не знайдено в sandbox">
OpenClaw запускає команди через `sh -lc` (login shell), який завантажує
`/etc/profile` і може скидати PATH. Задайте `docker.env.PATH`, щоб додати на початок ваші
користувацькі шляхи до інструментів, або додайте скрипт у `/etc/profile.d/` у вашому Dockerfile.
<Accordion title="Користувацькі інструменти не знайдено в пісочниці">
OpenClaw запускає команди через `sh -lc` (login shell), що завантажує `/etc/profile` і може скинути PATH. Задайте `docker.env.PATH`, щоб додати на початок ваші шляхи до користувацьких інструментів, або додайте скрипт у `/etc/profile.d/` у вашому Dockerfile.
</Accordion>
<Accordion title="OOM-killed під час збирання образу (exit 137)">
VM потрібно щонайменше 2 ГБ RAM. Використайте більший клас машини й повторіть спробу.
VM потрібно щонайменше 2 GB RAM. Використайте більший клас машини й повторіть спробу.
</Accordion>
<Accordion title="Unauthorized або потрібне pairing у Control UI">
Отримайте свіже посилання на dashboard і схваліть браузерний пристрій:
Отримайте свіже посилання на dashboard і схваліть пристрій браузера:
```bash
docker compose run --rm openclaw-cli dashboard --no-open
@ -493,8 +465,8 @@ scripts/sandbox-setup.sh
</Accordion>
<Accordion title="Ціль Gateway показує ws://172.x.x.x або помилки pairing з Docker CLI">
Скиньте режим Gateway і bind:
<Accordion title="Ціль Gateway показує ws://172.x.x.x або помилки pairing із Docker CLI">
Скиньте режим і bind Gateway:
```bash
docker compose run --rm openclaw-cli config set --batch-json '[{"path":"gateway.mode","value":"local"},{"path":"gateway.bind","value":"lan"}]'
@ -504,10 +476,10 @@ scripts/sandbox-setup.sh
</Accordion>
</AccordionGroup>
## Повязане
## Пов'язане
- [Огляд встановлення](/uk/install) — усі методи встановлення
- [Podman](/uk/install/podman) — альтернатива Podman для Docker
- [ClawDock](/uk/install/clawdock) — спільнотне налаштування Docker Compose
- [ClawDock](/uk/install/clawdock) — community-налаштування Docker Compose
- [Оновлення](/uk/install/updating) — підтримання OpenClaw в актуальному стані
- [Конфігурація](/uk/gateway/configuration) — конфігурація Gateway після встановлення

View File

@ -2,22 +2,22 @@
read_when:
- Ви хочете здійснити вихідний голосовий дзвінок з OpenClaw
- Ви налаштовуєте або розробляєте Plugin для голосових викликів
- Вам потрібен голосовий зв’язок у реальному часі або потокова транскрипція в телефонії
- Вам потрібен голосовий зв’язок у реальному часі або потокова транскрипція для телефонії
sidebarTitle: Voice call
summary: Здійснюйте вихідні та приймайте вхідні голосові виклики через Twilio, Telnyx або Plivo, з опційною підтримкою голосу в реальному часі та потокової транскрипції.
summary: Здійснюйте вихідні та приймайте вхідні голосові дзвінки через Twilio, Telnyx або Plivo, з опційною голосовою взаємодією в реальному часі та потоковою транскрипцією
title: Plugin голосових викликів
x-i18n:
generated_at: "2026-05-01T11:40:42Z"
generated_at: "2026-05-02T07:52:42Z"
model: gpt-5.5
provider: openai
source_hash: cde64fa054743d4ed3f146042bd65532af0e9eb5b792b088a856889b3d2cb3c9
source_hash: fc27646aca94c88d50d42838e166ac81eba3373154797cbb564e9c2eab0533fa
source_path: plugins/voice-call.md
workflow: 16
---
Голосові виклики для OpenClaw через Plugin. Підтримує вихідні сповіщення,
багатоходові розмови, повнодуплексний голос у реальному часі, потокове
транскрибування та вхідні виклики з політиками allowlist.
Voice calls for OpenClaw через Plugin. Підтримує вихідні сповіщення,
багатоходові розмови, повнодуплексний голос у реальному часі, потокову
транскрипцію та вхідні виклики з політиками allowlist.
**Поточні провайдери:** `twilio` (Programmable Voice + Media Streams),
`telnyx` (Call Control v2), `plivo` (Voice API + XML transfer + GetInput
@ -25,8 +25,8 @@ speech), `mock` (розробка/без мережі).
<Note>
Plugin Voice Call працює **всередині процесу Gateway**. Якщо ви використовуєте
віддалений Gateway, установіть і налаштуйте Plugin на машині, де працює
Gateway, а потім перезапустіть Gateway, щоб його завантажити.
віддалений Gateway, установіть і налаштуйте plugin на машині, де працює
Gateway, а потім перезапустіть Gateway, щоб завантажити його.
</Note>
## Швидкий старт
@ -49,16 +49,16 @@ Gateway, а потім перезапустіть Gateway, щоб його за
</Tabs>
Якщо npm повідомляє, що пакет, яким володіє OpenClaw, застарілий, ця версія
пакета походить зі старішої зовнішньої лінійки пакетів; використовуйте поточну
пакетовану збірку OpenClaw або шлях до локальної папки, доки не буде
опубліковано новіший пакет npm.
пакета походить зі старішої зовнішньої гілки пакування; використовуйте
поточну пакетовану збірку OpenClaw або шлях до локальної папки, доки не буде
опубліковано новіший npm-пакет.
Після цього перезапустіть Gateway, щоб Plugin завантажився.
Після цього перезапустіть Gateway, щоб plugin завантажився.
</Step>
<Step title="Configure provider and webhook">
Задайте конфігурацію в `plugins.entries.voice-call.config` (див.
[Конфігурація](#configuration) нижче для повної структури). Мінімально потрібні:
Задайте конфігурацію в `plugins.entries.voice-call.config` (повну форму див.
у розділі [Конфігурація](#configuration) нижче). Мінімально потрібні:
`provider`, облікові дані провайдера, `fromNumber` і публічно
доступний URL Webhook.
</Step>
@ -67,9 +67,9 @@ Gateway, а потім перезапустіть Gateway, щоб його за
openclaw voicecall setup
```
Типовий вивід зручно читати в журналах чату й терміналах. Він перевіряє
увімкнення Plugin, облікові дані провайдера, доступність Webhook і те, що
активний лише один аудіорежим (`streaming` або `realtime`). Використовуйте
Типовий вивід зручно читати в журналах чату й терміналах. Він перевіряє,
чи plugin увімкнений, облікові дані провайдера, доступність Webhook і те,
що активний лише один аудіорежим (`streaming` або `realtime`). Використовуйте
`--json` для скриптів.
</Step>
@ -79,7 +79,7 @@ Gateway, а потім перезапустіть Gateway, щоб його за
openclaw voicecall smoke --to "+15555550123"
```
Обидві команди за замовчуванням виконуються в режимі dry run. Додайте `--yes`,
Обидві команди за замовчуванням виконують пробний запуск. Додайте `--yes`,
щоб фактично здійснити короткий вихідний виклик-сповіщення:
```bash
@ -90,21 +90,23 @@ Gateway, а потім перезапустіть Gateway, щоб його за
</Steps>
<Warning>
Для Twilio, Telnyx і Plivo налаштування має розв’язуватися в **публічний URL Webhook**.
Якщо `publicUrl`, URL тунелю, URL Tailscale або резервний варіант serve
розв’язується в loopback чи простір приватної мережі, налаштування завершується
помилкою замість запуску провайдера, який не зможе отримувати Webhook від оператора.
Для Twilio, Telnyx і Plivo налаштування має визначати **публічний URL Webhook**.
Якщо `publicUrl`, URL тунелю, URL Tailscale або резервний serve-варіант
визначається як loopback чи приватний мережевий простір, налаштування
завершується помилкою замість запуску провайдера, який не зможе отримувати
Webhook від операторів.
</Warning>
## Конфігурація
Якщо `enabled: true`, але вибраному провайдеру бракує облікових даних,
під час запуску Gateway записує попередження про неповне налаштування з відсутніми
ключами та пропускає запуск runtime. Команди, RPC-виклики й інструменти агента
все одно повертають точну відсутню конфігурацію провайдера під час використання.
Якщо `enabled: true`, але для вибраного провайдера бракує облікових даних,
під час запуску Gateway записує попередження про неповне налаштування з
відсутніми ключами та пропускає запуск runtime. Команди, RPC-виклики й
інструменти агента все одно повертають точну відсутню конфігурацію провайдера
під час використання.
<Note>
Облікові дані voice-call приймають SecretRefs. `plugins.entries.voice-call.config.twilio.authToken`, `plugins.entries.voice-call.config.realtime.providers.*.apiKey`, `plugins.entries.voice-call.config.streaming.providers.*.apiKey` і `plugins.entries.voice-call.config.tts.providers.*.apiKey` розв’язуються через стандартну поверхню SecretRef; див. [поверхню облікових даних SecretRef](/uk/reference/secretref-credential-surface).
Облікові дані voice-call приймають SecretRefs. `plugins.entries.voice-call.config.twilio.authToken`, `plugins.entries.voice-call.config.realtime.providers.*.apiKey`, `plugins.entries.voice-call.config.streaming.providers.*.apiKey` і `plugins.entries.voice-call.config.tts.providers.*.apiKey` визначаються через стандартну поверхню SecretRef; див. [поверхню облікових даних SecretRef](/uk/reference/secretref-credential-surface).
</Note>
```json5
@ -117,6 +119,7 @@ Gateway, а потім перезапустіть Gateway, щоб його за
provider: "twilio", // or "telnyx" | "plivo" | "mock"
fromNumber: "+15550001234", // or TWILIO_FROM_NUMBER for Twilio
toNumber: "+15550005678",
sessionScope: "per-phone", // per-phone | per-call
twilio: {
accountSid: "ACxxxxxxxx",
@ -167,26 +170,27 @@ Gateway, а потім перезапустіть Gateway, щоб його за
<AccordionGroup>
<Accordion title="Provider exposure and security notes">
- Twilio, Telnyx і Plivo всі потребують **публічно доступного** URL Webhook.
- `mock`це локальний провайдер для розробки (без мережевих викликів).
- `mock` — локальний dev-провайдер (без мережевих викликів).
- Telnyx потребує `telnyx.publicKey` (або `TELNYX_PUBLIC_KEY`), якщо `skipSignatureVerification` не дорівнює true.
- `skipSignatureVerification` призначено лише для локального тестування.
- На безплатному рівні ngrok встановіть `publicUrl` на точний URL ngrok; перевірка підпису завжди примусова.
- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє Twilio Webhook з недійсними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` є loopback (локальний агент ngrok). Тільки для локальної розробки.
- URL безплатного рівня Ngrok можуть змінюватися або додавати проміжну сторінку; якщо `publicUrl` змінюється, підписи Twilio не проходять перевірку. Для продакшну: віддавайте перевагу стабільному домену або funnel Tailscale.
- На безкоштовному рівні ngrok задайте `publicUrl` як точний URL ngrok; перевірка підпису завжди примусова.
- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє Webhook Twilio з недійсними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` є loopback (локальний агент ngrok). Лише для локальної розробки.
- URL безкоштовного рівня ngrok можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` зміщується, підписи Twilio не проходять перевірку. Для production надавайте перевагу стабільному домену або funnel Tailscale.
</Accordion>
<Accordion title="Streaming connection caps">
- `streaming.preStartTimeoutMs` закриває сокети, які ніколи не надсилають дійсний кадр `start`.
- `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих сокетів до старту.
- `streaming.maxPendingConnectionsPerIp` обмежує неавтентифіковані сокети до старту для кожної вихідної IP-адреси.
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікуваних + активних).
- `streaming.preStartTimeoutMs` закриває сокети, які так і не надсилають дійсний кадр `start`.
- `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих pre-start сокетів.
- `streaming.maxPendingConnectionsPerIp` обмежує кількість неавтентифікованих pre-start сокетів на IP-адресу джерела.
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (pending + active).
</Accordion>
<Accordion title="Legacy config migrations">
Старіші конфігурації, які використовують `provider: "log"`, `twilio.from` або застарілі
ключі OpenAI у `streaming.*`, переписуються командою `openclaw doctor --fix`.
ключі OpenAI `streaming.*`, переписуються командою `openclaw doctor --fix`.
Runtime fallback поки що все ще приймає старі ключі voice-call, але
шлях переписування — `openclaw doctor --fix`, а compat shim є тимчасовим.
шлях переписування — `openclaw doctor --fix`, а compat shim є
тимчасовим.
Автоматично мігровані ключі streaming:
@ -199,11 +203,19 @@ Gateway, а потім перезапустіть Gateway, щоб його за
</Accordion>
</AccordionGroup>
## Область сесії
За замовчуванням Voice Call використовує `sessionScope: "per-phone"`, тож
повторні виклики від того самого абонента зберігають пам’ять розмови. Задайте
`sessionScope: "per-call"`, коли кожен операторський виклик має починатися зі
свіжим контекстом, наприклад для рецепції, бронювання, IVR або потоків мосту
Google Meet, де той самий номер телефону може представляти різні зустрічі.
## Голосові розмови в реальному часі
`realtime` вибирає повнодуплексного провайдера голосу в реальному часі для аудіо
живого виклику. Він окремий від `streaming`, який лише пересилає аудіо до
провайдерів транскрибування в реальному часі.
`realtime` вибирає повнодуплексного голосового провайдера реального часу для
живого аудіо виклику. Це окремо від `streaming`, який лише передає аудіо
провайдерам транскрипції в реальному часі.
<Warning>
`realtime.enabled` не можна поєднувати з `streaming.enabled`. Виберіть один
@ -213,29 +225,29 @@ Gateway, а потім перезапустіть Gateway, щоб його за
Поточна поведінка runtime:
- `realtime.enabled` підтримується для Twilio Media Streams.
- `realtime.provider` необов’язковий. Якщо не задано, Voice Call використовує першого зареєстрованого провайдера голосу в реальному часі.
- Вбудовані провайдери голосу в реальному часі: Google Gemini Live (`google`) і OpenAI (`openai`), зареєстровані їхніми Plugin провайдера.
- `realtime.provider` необов’язковий. Якщо його не задано, Voice Call використовує першого зареєстрованого голосового провайдера реального часу.
- Вбудовані голосові провайдери реального часу: Google Gemini Live (`google`) і OpenAI (`openai`), зареєстровані їхніми provider plugins.
- Сира конфігурація, якою володіє провайдер, розміщується в `realtime.providers.<providerId>`.
- Voice Call за замовчуванням надає спільний інструмент `openclaw_agent_consult` для realtime. Realtime-модель може викликати його, коли абонент просить глибшого міркування, актуальної інформації або звичайних інструментів OpenClaw.
- `realtime.fastContext.enabled` за замовчуванням вимкнений. Коли ввімкнено, Voice Call спочатку шукає проіндексовану пам’ять/контекст сесії для запитання consult і повертає ці фрагменти realtime-моделі в межах `realtime.fastContext.timeoutMs`, перш ніж перейти до повного consult-агента, лише якщо `realtime.fastContext.fallbackToConsult` має значення true.
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або якщо жодного провайдера голосу в реальному часі взагалі не зареєстровано, Voice Call записує попередження й пропускає медіа realtime замість того, щоб завершувати роботу всього Plugin помилкою.
- Ключі consult-сесії повторно використовують наявну голосову сесію, коли вона доступна, а потім повертаються до номера телефону абонента/одержувача, щоб подальші consult-виклики зберігали контекст під час виклику.
- Voice Call за замовчуванням надає спільний інструмент реального часу `openclaw_agent_consult`. Модель реального часу може викликати його, коли абонент просить глибше міркування, актуальну інформацію або звичайні інструменти OpenClaw.
- `realtime.fastContext.enabled` за замовчуванням вимкнено. Коли ввімкнено, Voice Call спочатку шукає проіндексовану пам’ять/контекст сесії для запитання consult і повертає ці фрагменти моделі реального часу в межах `realtime.fastContext.timeoutMs`, перш ніж переходити до повного consult agent лише якщо `realtime.fastContext.fallbackToConsult` дорівнює true.
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або взагалі не зареєстровано жодного голосового провайдера реального часу, Voice Call записує попередження й пропускає realtime media замість того, щоб зупиняти весь plugin.
- Ключі сесії consult повторно використовують збережену сесію виклику, коли вона доступна, а потім повертаються до налаштованого `sessionScope` (`per-phone` за замовчуванням або `per-call` для ізольованих викликів).
### Політика інструментів
`realtime.toolPolicy` керує consult-запуском:
`realtime.toolPolicy` керує запуском consult:
| Політика | Поведінка |
| Політика | Поведінка |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `safe-read-only` | Надає consult-інструмент і обмежує звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. |
| `owner` | Надає consult-інструмент і дозволяє звичайному агенту використовувати стандартну політику інструментів агента. |
| `none` | Не надає consult-інструмент. Користувацькі `realtime.tools` усе одно передаються провайдеру realtime. |
| `safe-read-only` | Надає інструмент consult і обмежує звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. |
| `owner` | Надає інструмент consult і дозволяє звичайному агенту використовувати стандартну політику інструментів агента. |
| `none` | Не надає інструмент consult. Користувацькі `realtime.tools` все одно передаються провайдеру реального часу. |
### Приклади провайдерів realtime
### Приклади провайдерів реального часу
<Tabs>
<Tab title="Google Gemini Live">
За замовчуванням: API-ключ із `realtime.providers.google.apiKey`,
Типові значення: API-ключ із `realtime.providers.google.apiKey`,
`GEMINI_API_KEY` або `GOOGLE_GENERATIVE_AI_API_KEY`; модель
`gemini-2.5-flash-native-audio-preview-12-2025`; голос `Kore`.
@ -292,27 +304,27 @@ Gateway, а потім перезапустіть Gateway, щоб його за
</Tab>
</Tabs>
Див. [провайдера Google](/uk/providers/google) і
[провайдера OpenAI](/uk/providers/openai), щоб дізнатися про параметри голосу
realtime для конкретного провайдера.
Див. [провайдер Google](/uk/providers/google) і
[провайдер OpenAI](/uk/providers/openai), щоб переглянути специфічні для провайдера
параметри голосу реального часу.
## Потокове транскрибування
## Потокова транскрипція
`streaming` вибирає провайдера транскрибування в реальному часі для аудіо живого виклику.
`streaming` вибирає провайдера транскрипції в реальному часі для живого аудіо виклику.
Поточна поведінка runtime:
- `streaming.provider` необов’язковий. Якщо його не задано, Voice Call використовує першого зареєстрованого постачальника транскрипції в реальному часі.
- Вбудовані постачальники транскрипції в реальному часі: Deepgram (`deepgram`), ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI (`xai`), зареєстровані їхніми плагінами постачальників.
- Сира конфігурація, якою володіє постачальник, розміщується в `streaming.providers.<providerId>`.
- Після того як Twilio надсилає прийняте повідомлення потоку `start`, Voice Call одразу реєструє потік, ставить вхідні медіадані в чергу через постачальника транскрипції, поки постачальник підключається, і запускає початкове привітання лише після готовності транскрипції в реальному часі.
- Якщо `streaming.provider` вказує на незареєстрованого постачальника або жодного не зареєстровано, Voice Call записує попередження в журнал і пропускає потокове передавання медіа замість того, щоб завершувати весь плагін помилкою.
- `streaming.provider` є необов’язковим. Якщо не задано, Voice Call використовує першого зареєстрованого провайдера транскрибування в реальному часі.
- Вбудовані провайдери транскрибування в реальному часі: Deepgram (`deepgram`), ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI (`xai`), зареєстровані їхніми провайдерськими plugins.
- Необроблена конфігурація, якою володіє провайдер, розміщується в `streaming.providers.<providerId>`.
- Після того як Twilio надсилає прийняте повідомлення `start` для потоку, Voice Call негайно реєструє потік, ставить вхідні медіадані в чергу через провайдера транскрибування, доки провайдер підключається, і запускає початкове привітання лише після готовності транскрибування в реальному часі.
- Якщо `streaming.provider` вказує на незареєстрованого провайдера або жоден провайдер не зареєстрований, Voice Call записує попередження в журнал і пропускає потокове передавання медіа замість того, щоб спричинити збій усього plugin.
### Приклади постачальників потокового передавання
### Приклади провайдерів потокового передавання
<Tabs>
<Tab title="OpenAI">
Стандартні значення: API-ключ `streaming.providers.openai.apiKey` або
Типові значення: ключ API `streaming.providers.openai.apiKey` або
`OPENAI_API_KEY`; модель `gpt-4o-transcribe`; `silenceDurationMs: 800`;
`vadThreshold: 0.5`.
@ -344,8 +356,8 @@ realtime для конкретного провайдера.
</Tab>
<Tab title="xAI">
Стандартні значення: API-ключ `streaming.providers.xai.apiKey` або `XAI_API_KEY`;
endpoint `wss://api.x.ai/v1/stt`; кодування `mulaw`; частота дискретизації `8000`;
Типові значення: ключ API `streaming.providers.xai.apiKey` або `XAI_API_KEY`;
кінцева точка `wss://api.x.ai/v1/stt`; кодування `mulaw`; частота дискретизації `8000`;
`endpointingMs: 800`; `interimResults: true`.
```json5
@ -379,8 +391,8 @@ realtime для конкретного провайдера.
## TTS для викликів
Voice Call використовує основну конфігурацію `messages.tts` для потокового
мовлення під час викликів. Ви можете перевизначити її в конфігурації плагіна з
**такою самою формою** — вона глибоко об’єднується з `messages.tts`.
мовлення під час викликів. Її можна перевизначити в конфігурації plugin з
**такою самою структурою** — вона глибоко об’єднується з `messages.tts`.
```json5
{
@ -397,17 +409,17 @@ Voice Call використовує основну конфігурацію `mes
```
<Warning>
**Microsoft speech ігнорується для голосових викликів.** Телефонному аудіо потрібен PCM;
поточний транспорт Microsoft не надає вихід телефонного PCM.
**Microsoft speech ігнорується для голосових викликів.** Телефонне аудіо потребує PCM;
поточний транспорт Microsoft не надає телефонний PCM-вивід.
</Warning>
Нотатки щодо поведінки:
- Застарілі ключі `tts.<provider>` у конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються через `openclaw doctor --fix`; зафіксована конфігурація має використовувати `tts.providers.<provider>`.
- Основний TTS використовується, коли потокове передавання медіа Twilio увімкнено; інакше виклики повертаються до власних голосів постачальника.
- Якщо медіапотік Twilio вже активний, Voice Call не повертається до TwiML `<Say>`. Якщо телефонний TTS недоступний у цьому стані, запит на відтворення завершується помилкою замість змішування двох шляхів відтворення.
- Коли телефонний TTS повертається до вторинного постачальника, Voice Call записує попередження з ланцюжком постачальників (`from`, `to`, `attempts`) для налагодження.
- Коли barge-in Twilio або завершення потоку очищає чергу очікування TTS, запити відтворення в черзі завершуються, а не залишають абонентів у підвішеному стані в очікуванні завершення відтворення.
- Застарілі ключі `tts.<provider>` у конфігурації plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються командою `openclaw doctor --fix`; закомічена конфігурація має використовувати `tts.providers.<provider>`.
- Основний TTS використовується, коли ввімкнено потокове передавання медіа Twilio; інакше виклики повертаються до нативних голосів провайдера.
- Якщо медіапотік Twilio уже активний, Voice Call не повертається до TwiML `<Say>`. Якщо телефонний TTS недоступний у цьому стані, запит відтворення завершується з помилкою замість змішування двох шляхів відтворення.
- Коли телефонний TTS повертається до резервного провайдера, Voice Call записує попередження з ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження.
- Коли barge-in Twilio або завершення потоку очищає чергу очікування TTS, запити відтворення в черзі завершуються, а не залишають абонентів у завислому стані в очікуванні завершення відтворення.
### Приклади TTS
@ -476,7 +488,7 @@ Voice Call використовує основну конфігурацію `mes
## Вхідні виклики
Вхідна політика за замовчуванням має значення `disabled`. Щоб увімкнути вхідні виклики, задайте:
Типова вхідна політика — `disabled`. Щоб увімкнути вхідні виклики, задайте:
```json5
{
@ -487,62 +499,63 @@ Voice Call використовує основну конфігурацію `mes
```
<Warning>
`inboundPolicy: "allowlist"` — це перевірка ідентифікатора абонента з низьким рівнем гарантії.
Плагін нормалізує надане постачальником значення `From` і порівнює його з
`allowFrom`. Перевірка Webhook автентифікує доставку постачальника та
цілісність payload, але вона **не** доводить право власності на номер
абонента PSTN/VoIP. Розглядайте `allowFrom` як фільтрацію за ідентифікатором абонента, а не як надійну
ідентичність абонента.
`inboundPolicy: "allowlist"` — це перевірка caller-ID з низьким рівнем гарантії.
Plugin нормалізує надане провайдером значення `From` і порівнює його з
`allowFrom`. Перевірка Webhook автентифікує доставку провайдером і
цілісність payload, але вона **не** доводить володіння номером абонента
PSTN/VoIP. Сприймайте `allowFrom` як фільтрацію caller-ID, а не як надійну
ідентифікацію абонента.
</Warning>
Автовідповіді використовують систему агентів. Налаштовуйте за допомогою `responseModel`,
Автовідповіді використовують агентну систему. Налаштовуйте за допомогою `responseModel`,
`responseSystemPrompt` і `responseTimeoutMs`.
### Контракт мовленого виводу
### Контракт мовленнєвого виводу
Для автовідповідей Voice Call додає до системного prompt суворий контракт мовленого виводу:
Для автовідповідей Voice Call додає до системного prompt строгий контракт
мовленнєвого виводу:
```text
{"spoken":"..."}
```
Voice Call захищено витягує текст мовлення:
Voice Call обережно витягує текст мовлення:
- Ігнорує payload, позначені як вміст reasoning/error.
- Розбирає прямий JSON, JSON в огородженому блоці або вбудовані ключі `"spoken"`.
- Повертається до звичайного тексту й видаляє ймовірні вступні абзаци планування/метаданих.
- Розбирає прямий JSON, JSON у fenced-блоці або inline-ключі `"spoken"`.
- Повертається до звичайного тексту й видаляє ймовірні вступні абзаци з плануванням або метаданими.
Це утримує мовлене відтворення сфокусованим на тексті для абонента й запобігає
витоку тексту планування в аудіо.
Це утримує мовленнєве відтворення зосередженим на тексті для абонента й запобігає
потраплянню тексту планування в аудіо.
### Поведінка запуску розмови
Для вихідних викликів `conversation` обробка першого повідомлення прив’язана до стану
живого відтворення:
Для вихідних викликів `conversation` обробка першого повідомлення прив’язана до
поточного стану відтворення:
- Очищення черги barge-in і автовідповідь пригнічуються лише тоді, коли початкове привітання активно промовляється.
- Якщо початкове відтворення завершується помилкою, виклик повертається до `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
- Початкове відтворення для потокового передавання Twilio запускається під час підключення потоку без додаткової затримки.
- Barge-in перериває активне відтворення й очищає записи Twilio TTS, які вже в черзі, але ще не відтворюються. Очищені записи завершуються як пропущені, тому логіка подальшої відповіді може продовжити роботу без очікування аудіо, яке ніколи не буде відтворене.
- Голосові розмови в реальному часі використовують власний початковий хід потоку реального часу. Voice Call **не** надсилає застаріле оновлення TwiML `<Say>` для цього початкового повідомлення, тому вихідні сесії `<Connect><Stream>` залишаються підключеними.
- Якщо початкове відтворення завершується з помилкою, виклик повертається до `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
- Початкове відтворення для потокового передавання Twilio починається під час підключення потоку без додаткової затримки.
- Barge-in перериває активне відтворення й очищає записи Twilio TTS, які стоять у черзі, але ще не відтворюються. Очищені записи завершуються як пропущені, тож логіка подальшої відповіді може продовжуватися без очікування аудіо, яке ніколи не буде відтворене.
- Голосові розмови в реальному часі використовують власний початковий хід потоку в реальному часі. Voice Call **не** надсилає застаріле оновлення TwiML `<Say>` для цього початкового повідомлення, тому вихідні сесії `<Connect><Stream>` залишаються приєднаними.
### Пільговий період відключення потоку Twilio
Коли медіапотік Twilio відключається, Voice Call чекає **2000 мс** перед
Коли медіапотік Twilio відключається, Voice Call очікує **2000 ms** перед
автоматичним завершенням виклику:
- Якщо потік повторно підключається протягом цього вікна, автоматичне завершення скасовується.
- Якщо після пільгового періоду потік не реєструється повторно, виклик завершується, щоб запобігти завислим активним викликам.
- Якщо потік повторно підключається впродовж цього вікна, автоматичне завершення скасовується.
- Якщо після пільгового періоду жоден потік не реєструється повторно, виклик завершується, щоб запобігти завислим активним викликам.
## Очищення застарілих викликів
Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують кінцевий
Webhook (наприклад, виклики в режимі сповіщення, які ніколи не завершуються). Стандартне значення
Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують фінальний
webhook (наприклад, виклики в режимі сповіщення, які ніколи не завершуються). Типове значення
`0` (вимкнено).
Рекомендовані діапазони:
- **Production:** `120``300` секунд для потоків у стилі сповіщень.
- **Продакшн:** `120``300` секунд для потоків у стилі сповіщень.
- Тримайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли завершитися. Добра початкова точка — `maxDurationSeconds + 3060` секунд.
```json5
@ -562,26 +575,26 @@ Webhook (наприклад, виклики в режимі сповіщення
## Безпека Webhook
Коли проксі або тунель розташований перед Gateway, плагін
відновлює публічний URL для перевірки підпису. Ці параметри
керують тим, яким пересланим заголовкам довіряти:
Коли proxy або tunnel розташований перед Gateway, plugin
відтворює публічну URL-адресу для перевірки підпису. Ці параметри
контролюють, яким forwarded headers довіряти:
<ParamField path="webhookSecurity.allowedHosts" type="string[]">
Список дозволених хостів із заголовків пересилання.
Список дозволених хостів із forwarding headers.
</ParamField>
<ParamField path="webhookSecurity.trustForwardingHeaders" type="boolean">
Довіряти пересланим заголовкам без списку дозволених.
Довіряти forwarded headers без списку дозволених.
</ParamField>
<ParamField path="webhookSecurity.trustedProxyIPs" type="string[]">
Довіряти пересланим заголовкам лише тоді, коли віддалена IP-адреса запиту збігається зі списком.
Довіряти forwarded headers лише тоді, коли remote IP запиту відповідає списку.
</ParamField>
Додаткові засоби захисту:
Додаткові захисти:
- **Захист від повторного відтворення** Webhook увімкнено для Twilio і Plivo. Повторно відтворені дійсні запити Webhook підтверджуються, але пропускаються для побічних ефектів.
- Ходи розмови Twilio містять токен для кожного ходу в callback `<Gather>`, тому застарілі/повторно відтворені callback мовлення не можуть задовольнити новіший очікуваний хід transcript.
- Неавтентифіковані запити Webhook відхиляються до читання body, якщо відсутні обов’язкові заголовки підпису постачальника.
- Webhook voice-call використовує спільний профіль body до автентифікації (64 КБ / 5 секунд) плюс обмеження одночасних запитів для кожної IP-адреси перед перевіркою підпису.
- **Захист від повторного відтворення** Webhook увімкнено для Twilio і Plivo. Повторно відтворені дійсні webhook-запити підтверджуються, але пропускаються для побічних ефектів.
- Ходи розмови Twilio містять токен на кожен хід у callbacks `<Gather>`, тому застарілі або повторно відтворені callbacks мовлення не можуть задовольнити новіший очікуваний хід transcript.
- Неавтентифіковані webhook-запити відхиляються до читання тіла, якщо відсутні обов’язкові заголовки підпису провайдера.
- Webhook voice-call використовує спільний pre-auth профіль тіла (64 KB / 5 секунд) плюс per-IP ліміт одночасних запитів до перевірки підпису.
Приклад зі стабільним публічним хостом:
@ -617,15 +630,15 @@ openclaw voicecall latency # summarize turn latency from lo
openclaw voicecall expose --mode funnel
```
Коли Gateway уже запущений, операційні команди `voicecall` делегують
до runtime voice-call, яким володіє Gateway, щоб CLI не прив’язував другий
сервер Webhook. Якщо Gateway недосяжний, команди повертаються до
автономного runtime CLI.
Коли Gateway уже запущено, операційні команди `voicecall` делегуються
runtime голосових викликів, яким володіє Gateway, щоб CLI не прив’язував другий
webhook-сервер. Якщо Gateway недоступний, команди повертаються до
автономного CLI runtime.
`latency` читає `calls.jsonl` зі стандартного шляху сховища voice-call.
Використовуйте `--file <path>`, щоб указати інший журнал, і `--last <n>`, щоб обмежити
аналіз останніми N записами (стандартно 200). Вивід містить p50/p90/p99
для затримки ходу та часу очікування прослуховування.
Використовуйте `--file <path>`, щоб вказати інший журнал, і `--last <n>`, щоб обмежити
аналіз останніми N записами (типово 200). Вивід містить p50/p90/p99
для затримки ходу й часу очікування прослуховування.
## Інструмент агента
@ -640,9 +653,9 @@ openclaw voicecall expose --mode funnel
| `end_call` | `callId` |
| `get_status` | `callId` |
Цей репозиторій постачає відповідну документацію Skills за адресою `skills/voice-call/SKILL.md`.
Цей repo постачає відповідний документ skill за шляхом `skills/voice-call/SKILL.md`.
## RPC Gateway
## Gateway RPC
| Метод | Аргументи |
| -------------------- | ------------------------------------------ |
@ -659,7 +672,7 @@ openclaw voicecall expose --mode funnel
## Усунення несправностей
### Налаштування не може відкрити Webhook назовні
### Налаштування не може виставити Webhook
Запустіть налаштування з того самого середовища, у якому працює Gateway:
@ -668,11 +681,11 @@ openclaw voicecall setup
openclaw voicecall setup --json
```
Для `twilio`, `telnyx` і `plivo` `webhook-exposure` має бути зеленим. Налаштований `publicUrl` усе одно завершиться помилкою, якщо вказує на локальний або приватний мережевий простір, бо оператор не може виконати зворотний виклик на ці адреси. Не використовуйте `localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`, `192.168.x`, `169.254.x`, `fc00::/7` або `fd00::/8` як `publicUrl`.
Для `twilio`, `telnyx` і `plivo` `webhook-exposure` має бути зеленим. Налаштований `publicUrl` усе одно завершується помилкою, коли він указує на локальний або приватний мережевий простір, оскільки оператор не може виконати зворотний виклик на ці адреси. Не використовуйте `localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`, `192.168.x`, `169.254.x`, `fc00::/7` або `fd00::/8` як `publicUrl`.
Вихідні виклики Twilio в режимі сповіщення надсилають початковий `<Say>` TwiML безпосередньо в запиті створення виклику, тому перше промовлене повідомлення не залежить від того, чи Twilio отримає Webhook TwiML. Публічний Webhook усе ще потрібен для зворотних викликів статусу, розмовних викликів, DTMF перед підключенням, потоків реального часу та керування викликом після підключення.
Вихідні дзвінки Twilio у режимі сповіщень надсилають початковий `<Say>` TwiML безпосередньо в запиті створення дзвінка, тому перше озвучене повідомлення не залежить від того, чи Twilio отримає webhook TwiML. Публічний webhook усе ще потрібен для зворотних викликів стану, розмовних дзвінків, DTMF перед з’єднанням, потоків реального часу та керування дзвінком після з’єднання.
Використайте один шлях публічного доступу:
Використайте один шлях публічної доступності:
```json5
{
@ -692,7 +705,7 @@ openclaw voicecall setup --json
}
```
Після зміни конфігурації перезапустіть або перезавантажте Gateway, потім виконайте:
Після зміни конфігурації перезапустіть або перезавантажте Gateway, а потім виконайте:
```bash
openclaw voicecall setup
@ -701,27 +714,25 @@ openclaw voicecall smoke
`voicecall smoke` виконує пробний запуск, якщо не передати `--yes`.
### Облікові дані провайдера не проходять перевірку
### Облікові дані провайдера не працюють
Перевірте вибраного провайдера та обов’язкові поля облікових даних:
- Twilio: `twilio.accountSid`, `twilio.authToken` і `fromNumber`, або
`TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN` і `TWILIO_FROM_NUMBER`.
- Telnyx: `telnyx.apiKey`, `telnyx.connectionId`, `telnyx.publicKey` і
`fromNumber`.
- Twilio: `twilio.accountSid`, `twilio.authToken` і `fromNumber`, або `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN` і `TWILIO_FROM_NUMBER`.
- Telnyx: `telnyx.apiKey`, `telnyx.connectionId`, `telnyx.publicKey` і `fromNumber`.
- Plivo: `plivo.authId`, `plivo.authToken` і `fromNumber`.
Облікові дані мають існувати на хості Gateway. Редагування локального профілю оболонки не впливає на вже запущений Gateway, доки його не буде перезапущено або доки він не перезавантажить своє середовище.
Облікові дані мають існувати на хості Gateway. Редагування локального профілю оболонки не впливає на вже запущений Gateway, доки він не перезапуститься або не перезавантажить своє середовище.
### Виклики запускаються, але Webhook-и провайдера не надходять
### Дзвінки запускаються, але webhook провайдера не надходять
Переконайтеся, що консоль провайдера вказує на точну публічну URL-адресу Webhook:
Переконайтеся, що консоль провайдера вказує на точну публічну URL-адресу webhook:
```text
https://voice.example.com/voice/webhook
```
Потім перевірте стан під час виконання:
Потім перегляньте стан виконання:
```bash
openclaw voicecall status --call-id <id>
@ -731,26 +742,26 @@ openclaw logs --follow
Поширені причини:
- `publicUrl` вказує на інший шлях, ніж `serve.path`.
- `publicUrl` указує на інший шлях, ніж `serve.path`.
- URL тунелю змінився після запуску Gateway.
- Проксі пересилає запит, але видаляє або переписує заголовки host/proto.
- Брандмауер або DNS спрямовує публічне ім’я хоста не на Gateway.
- Gateway було перезапущено без увімкненого Plugin Voice Call.
Коли перед Gateway стоїть зворотний проксі або тунель, задайте `webhookSecurity.allowedHosts` як публічне ім’я хоста або використайте `webhookSecurity.trustedProxyIPs` для відомої адреси проксі. Використовуйте `webhookSecurity.trustForwardingHeaders` лише тоді, коли межа проксі перебуває під вашим контролем.
Коли перед Gateway стоїть зворотний проксі або тунель, установіть `webhookSecurity.allowedHosts` на публічне ім’я хоста або використайте `webhookSecurity.trustedProxyIPs` для відомої адреси проксі. Використовуйте `webhookSecurity.trustForwardingHeaders` лише тоді, коли межа проксі перебуває під вашим контролем.
### Перевірка підпису не проходить
Підписи провайдера перевіряються щодо публічної URL-адреси, яку OpenClaw реконструює з вхідного запиту. Якщо підписи не проходять перевірку:
Підписи провайдера перевіряються відносно публічної URL-адреси, яку OpenClaw відтворює з вхідного запиту. Якщо підписи не проходять перевірку:
- Переконайтеся, що URL Webhook провайдера точно збігається з `publicUrl`, включно зі схемою, хостом і шляхом.
- Для URL ngrok безкоштовного рівня оновлюйте `publicUrl`, коли змінюється ім’я хоста тунелю.
- Переконайтеся, що URL webhook у провайдера точно збігається з `publicUrl`, включно зі схемою, хостом і шляхом.
- Для URL ngrok безплатного рівня оновлюйте `publicUrl`, коли ім’я хоста тунелю змінюється.
- Переконайтеся, що проксі зберігає початкові заголовки host і proto, або налаштуйте `webhookSecurity.allowedHosts`.
- Не вмикайте `skipSignatureVerification` поза локальним тестуванням.
### Приєднання Google Meet через Twilio не працює
Google Meet використовує цей Plugin для приєднання через набір Twilio. Спочатку перевірте Voice Call:
Google Meet використовує цей Plugin для приєднання через телефонний набір Twilio. Спочатку перевірте Voice Call:
```bash
openclaw voicecall setup
@ -763,30 +774,30 @@ openclaw voicecall smoke --to "+15555550123"
openclaw googlemeet setup --transport twilio
```
Якщо Voice Call зелений, але учасник Meet не приєднується, перевірте номер дозвону Meet, PIN і `--dtmf-sequence`. Телефонний виклик може бути справним, тоді як зустріч відхиляє або ігнорує неправильну послідовність DTMF.
Якщо Voice Call має зелений статус, але учасник Meet так і не приєднується, перевірте номер для телефонного підключення Meet, PIN і `--dtmf-sequence`. Телефонний дзвінок може бути справним, тоді як зустріч відхиляє або ігнорує неправильну послідовність DTMF.
Google Meet передає послідовність DTMF Meet і вступний текст до `voicecall.start`. Для викликів Twilio Voice Call спочатку подає DTMF TwiML, перенаправляє назад до Webhook, а потім відкриває медіапотік реального часу, щоб збережений вступ було згенеровано після приєднання телефонного учасника до зустрічі.
Google Meet передає послідовність DTMF Meet і вступний текст у `voicecall.start`. Для дзвінків Twilio Voice Call спочатку обслуговує DTMF TwiML, перенаправляє назад на webhook, а потім відкриває медіапотік реального часу, щоб збережений вступ було згенеровано після приєднання телефонного учасника до зустрічі.
Використовуйте `openclaw logs --follow` для живого трасування фази. Справне приєднання Twilio Meet записує події в такому порядку:
Використовуйте `openclaw logs --follow` для трасування фази в реальному часі. Справне приєднання Twilio Meet записує такий порядок:
- Google Meet делегує приєднання Twilio до Voice Call.
- Voice Call зберігає DTMF TwiML перед підключенням.
- Початковий TwiML Twilio споживається та подається перед обробкою реального часу.
- Voice Call подає TwiML реального часу для виклику Twilio.
- Міст реального часу запускається з початковим привітанням у черзі.
- Voice Call зберігає DTMF TwiML перед з’єднанням.
- Початковий TwiML Twilio споживається й обслуговується перед обробкою в реальному часі.
- Voice Call обслуговує TwiML реального часу для дзвінка Twilio.
- Міст реального часу запускається з поставленим у чергу початковим привітанням.
`openclaw voicecall tail` усе ще показує збережені записи викликів; це корисно для стану виклику й транскриптів, але не кожен перехід Webhook/реального часу там з’являється.
`openclaw voicecall tail` усе ще показує збережені записи дзвінків; це корисно для стану дзвінка й транскриптів, але не кожен перехід webhook або реального часу з’являється там.
### У виклику реального часу немає мовлення
### У дзвінку реального часу немає мовлення
Переконайтеся, що ввімкнено лише один аудіорежим. `realtime.enabled` і `streaming.enabled` не можуть одночасно бути `true`.
Переконайтеся, що ввімкнено лише один аудіорежим. `realtime.enabled` і `streaming.enabled` не можуть одночасно мати значення true.
Для викликів Twilio реального часу також перевірте:
Для дзвінків Twilio у реальному часі також перевірте:
- Plugin провайдера реального часу завантажено й зареєстровано.
- `realtime.provider` не задано або він називає зареєстрованого провайдера.
- `realtime.provider` не встановлено або вказує на зареєстрованого провайдера.
- Ключ API провайдера доступний процесу Gateway.
- `openclaw logs --follow` показує, що TwiML реального часу подано, міст реального часу запущено, а початкове привітання поставлено в чергу.
- `openclaw logs --follow` показує, що TwiML реального часу обслуговується, міст реального часу запущено, а початкове привітання поставлено в чергу.
## Пов’язане

View File

@ -6,37 +6,37 @@ read_when:
summary: 'Налаштування агентів ACP: конфігурація обв’язки acpx, налаштування Plugin, дозволи'
title: Агенти ACP — налаштування
x-i18n:
generated_at: "2026-05-02T06:11:11Z"
generated_at: "2026-05-02T07:52:44Z"
model: gpt-5.5
provider: openai
source_hash: 4426219227e77d5dc57039c0c8f7324590388db141689239deaa2441609f4afd
source_hash: 92a53744f13ad4301d40c04dd28bbc28ca9d0a21070c20ddbda55ae9f6673001
source_path: tools/acp-agents-setup.md
workflow: 16
---
Огляд, операторський runbook і концепції див. у [ACP agents](/uk/tools/acp-agents).
Огляд, операторський runbook і концепції див. у [агентах ACP](/uk/tools/acp-agents).
Розділи нижче охоплюють конфігурацію acpx harness, налаштування Plugin для MCP-мостів і конфігурацію дозволів.
Розділи нижче охоплюють конфігурацію обв'язки acpx, налаштування Plugin для мостів MCP і конфігурацію дозволів.
Використовуйте цю сторінку лише коли налаштовуєте маршрут ACP/acpx. Для нативної конфігурації runtime сервера застосунку Codex використовуйте [Codex harness](/uk/plugins/codex-harness). Для ключів OpenAI API або конфігурації model-provider Codex OAuth використовуйте [OpenAI](/uk/providers/openai).
Використовуйте цю сторінку лише тоді, коли налаштовуєте маршрут ACP/acpx. Для нативної runtime-конфігурації app-server Codex використовуйте [обв'язку Codex](/uk/plugins/codex-harness). Для ключів OpenAI API або конфігурації провайдера моделей Codex OAuth використовуйте [OpenAI](/uk/providers/openai).
Codex має два маршрути OpenClaw:
| Маршрут | Конфігурація/команда | Сторінка налаштування |
| -------------------------- | ------------------------------------------------------ | --------------------------------------- |
| Нативний app-server Codex | `/codex ...`, `agentRuntime.id: "codex"` | [Codex harness](/uk/plugins/codex-harness) |
| Явний адаптер Codex ACP | `/acp spawn codex`, `runtime: "acp", agentId: "codex"` | Ця сторінка |
| Маршрут | Конфігурація/команда | Сторінка налаштування |
| ------------------------- | ------------------------------------------------------ | -------------------------------------- |
| Нативний app-server Codex | `/codex ...`, `agentRuntime.id: "codex"` | [обв'язка Codex](/uk/plugins/codex-harness) |
| Явний адаптер Codex ACP | `/acp spawn codex`, `runtime: "acp", agentId: "codex"` | Ця сторінка |
Віддавайте перевагу нативному маршруту, якщо вам явно не потрібна поведінка ACP/acpx.
Надавайте перевагу нативному маршруту, якщо вам явно не потрібна поведінка ACP/acpx.
## Підтримка acpx harness (поточна)
## Підтримка обв'язки acpx (поточна)
Поточні вбудовані alias harness в acpx:
Поточні вбудовані псевдоніми обв'язок acpx:
- `claude`
- `codex`
- `copilot`
- `cursor` (Cursor CLI: `cursor-agent acp`)
- `cursor` (CLI Cursor: `cursor-agent acp`)
- `droid`
- `gemini`
- `iflow`
@ -48,14 +48,14 @@ Codex має два маршрути OpenClaw:
- `pi`
- `qwen`
Коли OpenClaw використовує backend acpx, віддавайте перевагу цим значенням для `agentId`, якщо ваша конфігурація acpx не визначає власні alias агентів.
Якщо ваша локальна інсталяція Cursor досі надає ACP як `agent acp`, перевизначте команду агента `cursor` у вашій конфігурації acpx замість зміни вбудованого значення за замовчуванням.
Коли OpenClaw використовує бекенд acpx, надавайте перевагу цим значенням для `agentId`, якщо ваша конфігурація acpx не визначає власні псевдоніми агентів.
Якщо ваша локальна інсталяція Cursor досі надає ACP як `agent acp`, перевизначте команду агента `cursor` у конфігурації acpx замість зміни вбудованого типового значення.
Пряме використання acpx CLI також може спрямовуватися на довільні адаптери через `--agent <command>`, але цей необроблений аварійний механізм є функцією acpx CLI (а не звичайним шляхом OpenClaw `agentId`).
Пряме використання CLI acpx також може націлюватися на довільні адаптери через `--agent <command>`, але цей сирий аварійний механізм є функцією CLI acpx (а не звичайним шляхом OpenClaw `agentId`).
Керування моделлю залежить від можливостей адаптера. Посилання на моделі Codex ACP нормалізуються OpenClaw перед запуском. Іншим harness потрібні ACP `models` плюс підтримка `session/set_model`; якщо harness не надає ані цієї можливості ACP, ані власного прапорця моделі під час запуску, OpenClaw/acpx не може примусово вибрати модель.
Керування моделлю залежить від можливостей адаптера. Посилання на моделі Codex ACP нормалізуються OpenClaw перед запуском. Іншим обв'язкам потрібні ACP `models` плюс підтримка `session/set_model`; якщо обв'язка не надає ні цієї можливості ACP, ні власного прапорця моделі запуску, OpenClaw/acpx не може примусово вибрати модель.
## Обовязкова конфігурація
## Обов'язкова конфігурація
Базова конфігурація Core ACP:
@ -95,7 +95,7 @@ Codex має два маршрути OpenClaw:
}
```
Конфігурація прив’язки потоків залежить від channel-adapter. Приклад для Discord:
Конфігурація прив'язки потоків залежить від адаптера каналу. Приклад для Discord:
```json5
{
@ -117,17 +117,25 @@ Codex має два маршрути OpenClaw:
}
```
Якщо thread-bound створення ACP не працює, спершу перевірте прапорець функції адаптера:
Якщо створення ACP із прив'язкою до потоку не працює, спочатку перевірте прапорець функції адаптера:
- Discord: `channels.discord.threadBindings.spawnSessions=true`
Привязки поточної розмови не потребують створення дочірнього потоку. Вони потребують активного контексту розмови та channel adapter, який надає прив’язки розмов ACP.
Прив'язки поточної розмови не потребують створення дочірнього потоку. Вони потребують активного контексту розмови й адаптера каналу, який надає прив'язки розмов ACP.
Див. [Довідник конфігурації](/uk/gateway/configuration-reference).
Див. [довідник з конфігурації](/uk/gateway/configuration-reference).
## Налаштування Plugin для backend acpx
## Налаштування Plugin для бекенду acpx
Свіжі інсталяції постачаються з увімкненим за замовчуванням вбудованим runtime Plugin `acpx`, тому ACP зазвичай працює без ручного кроку встановлення Plugin.
Пакетні інсталяції використовують офіційний runtime-Plugin `@openclaw/acpx` для ACP.
Установіть і ввімкніть його перед використанням сесій обв'язки ACP:
```bash
openclaw plugins install @openclaw/acpx
openclaw config set plugins.entries.acpx.enabled true
```
Вихідні checkout-и також можуть використовувати локальний workspace-Plugin після `pnpm install`.
Почніть із:
@ -135,28 +143,28 @@ Codex має два маршрути OpenClaw:
/acp doctor
```
Якщо ви вимкнули `acpx`, заборонили його через `plugins.allow` / `plugins.deny` або хочете перемкнутися на локальний checkout для розробки, використайте явний шлях Plugin:
Якщо ви вимкнули `acpx`, заборонили його через `plugins.allow` / `plugins.deny` або хочете повернутися до пакетного Plugin, використовуйте явний шлях пакета:
```bash
openclaw plugins install acpx
openclaw plugins install @openclaw/acpx
openclaw config set plugins.entries.acpx.enabled true
```
Встановлення з локального workspace під час розробки:
Локальна workspace-інсталяція під час розробки:
```bash
openclaw plugins install ./path/to/local/acpx-plugin
```
Потім перевірте стан backend:
Потім перевірте справність бекенду:
```text
/acp doctor
```
### Конфігурація команди та версії acpx
### Конфігурація команди й версії acpx
За замовчуванням вбудований Plugin `acpx` реєструє вбудований backend ACP без запуску агента ACP під час запуску Gateway. Запустіть `/acp doctor` для явної live-перевірки. Установлюйте `OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE=1` лише тоді, коли потрібно, щоб Gateway перевіряв налаштованого агента під час запуску.
За замовчуванням Plugin `acpx` реєструє вбудований бекенд ACP без створення агента ACP під час запуску Gateway. Виконайте `/acp doctor` для явної live-перевірки. Установлюйте `OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE=1` лише тоді, коли вам потрібно, щоб Gateway перевіряв налаштованого агента під час запуску.
Перевизначте команду або версію в конфігурації Plugin:
@ -176,21 +184,21 @@ openclaw plugins install ./path/to/local/acpx-plugin
}
```
- `command` приймає абсолютний шлях, відносний шлях (розв’язується від workspace OpenClaw) або назву команди.
- `expectedVersion: "any"` вимикає сувору перевірку відповідності версії.
- Власні шляхи `command` вимикають plugin-local автоматичне встановлення.
- `command` приймає абсолютний шлях, відносний шлях (який обчислюється від workspace OpenClaw) або назву команди.
- `expectedVersion: "any"` вимикає суворе зіставлення версій.
- Власні шляхи `command` вимикають автоматичне встановлення, локальне для Plugin.
Див. [Plugins](/uk/tools/plugin).
### Автоматичне встановлення залежностей
Коли ви встановлюєте OpenClaw глобально за допомогою `npm install -g openclaw`, runtime-залежності acpx (platform-specific binaries) встановлюються автоматично через postinstall hook. Якщо автоматичне встановлення не вдається, Gateway усе одно запускається нормально та повідомляє про відсутню залежність через `openclaw acp doctor`.
Коли ви встановлюєте OpenClaw глобально через `npm install -g openclaw`, runtime-залежності acpx (бінарні файли, специфічні для платформи) встановлюються автоматично через postinstall hook. Якщо автоматичне встановлення завершується помилкою, gateway усе одно запускається нормально й повідомляє про відсутню залежність через `openclaw acp doctor`.
### MCP-міст інструментів Plugin
### Міст MCP для інструментів Plugin
За замовчуванням сеанси ACPX **не** надають інструменти, зареєстровані Plugin OpenClaw, для ACP harness.
За замовчуванням сесії ACPX **не** надають зареєстровані Plugin інструменти OpenClaw обв'язці ACP.
Якщо ви хочете, щоб ACP-агенти, такі як Codex або Claude Code, викликали встановлені інструменти Plugin OpenClaw, як-от memory recall/store, увімкніть спеціальний міст:
Якщо ви хочете, щоб агенти ACP, як-от Codex або Claude Code, викликали встановлені інструменти Plugin OpenClaw, як-от memory recall/store, увімкніть спеціальний міст:
```bash
openclaw config set plugins.entries.acpx.config.pluginToolsMcpBridge true
@ -198,22 +206,22 @@ openclaw config set plugins.entries.acpx.config.pluginToolsMcpBridge true
Що це робить:
- Вставляє вбудований MCP-сервер із назвою `openclaw-plugin-tools` у bootstrap сеансу ACPX.
- Надає інструменти Plugin, уже зареєстровані встановленими й увімкненими OpenClaw plugins.
- Залишає функцію явною та вимкненою за замовчуванням.
- Вставляє вбудований сервер MCP з назвою `openclaw-plugin-tools` у bootstrap сесії ACPX.
- Надає інструменти Plugin, уже зареєстровані встановленими та ввімкненими Plugins OpenClaw.
- Залишає функцію явною й вимкненою за замовчуванням.
Нотатки щодо безпеки та довіри:
Примітки щодо безпеки й довіри:
- Це розширює поверхню інструментів ACP harness.
- ACP-агенти отримують доступ лише до інструментів Plugin, які вже активні в Gateway.
- Розглядайте це як ту саму межу довіри, що й дозвіл цим plugins виконуватися в самому OpenClaw.
- Перегляньте встановлені plugins перед увімкненням.
- Це розширює поверхню інструментів обв'язки ACP.
- Агенти ACP отримують доступ лише до інструментів Plugin, які вже активні в gateway.
- Розглядайте це як ту саму межу довіри, що й дозвіл цим Plugins виконуватися в самому OpenClaw.
- Перегляньте встановлені Plugins перед увімкненням.
Власні `mcpServers` і надалі працюють як раніше. Вбудований міст plugin-tools є додатковою opt-in зручністю, а не заміною для загальної конфігурації MCP-сервера.
Власні `mcpServers` і надалі працюють як раніше. Вбудований міст plugin-tools є додатковою зручною опцією за згодою, а не заміною загальної конфігурації сервера MCP.
### MCP-міст інструментів OpenClaw
### Міст MCP для інструментів OpenClaw
За замовчуванням сеанси ACPX також **не** надають вбудовані інструменти OpenClaw через MCP. Увімкніть окремий міст core-tools, коли ACP-агенту потрібні вибрані вбудовані інструменти, такі як `cron`:
За замовчуванням сесії ACPX також **не** надають вбудовані інструменти OpenClaw через MCP. Увімкніть окремий міст core-tools, коли агенту ACP потрібні вибрані вбудовані інструменти, як-от `cron`:
```bash
openclaw config set plugins.entries.acpx.config.openClawToolsMcpBridge true
@ -221,74 +229,74 @@ openclaw config set plugins.entries.acpx.config.openClawToolsMcpBridge true
Що це робить:
- Вставляє вбудований MCP-сервер із назвою `openclaw-tools` у bootstrap сеансу ACPX.
- Вставляє вбудований сервер MCP з назвою `openclaw-tools` у bootstrap сесії ACPX.
- Надає вибрані вбудовані інструменти OpenClaw. Початковий сервер надає `cron`.
- Залишає доступ до core-tool явним і вимкненим за замовчуванням.
- Залишає надання core-інструментів явним і вимкненим за замовчуванням.
### Конфігурація тайм-ауту runtime
### Конфігурація runtime-тайм-ауту
Вбудований Plugin `acpx` за замовчуванням встановлює для embedded runtime turns тайм-аут 120 секунд. Це дає повільнішим harness, таким як Gemini CLI, достатньо часу для завершення запуску та ініціалізації ACP. Перевизначте це, якщо вашому host потрібен інший ліміт runtime:
Plugin `acpx` за замовчуванням установлює для вбудованих runtime-ходів тайм-аут 120 секунд. Це дає повільнішим обв'язкам, як-от Gemini CLI, достатньо часу для завершення запуску й ініціалізації ACP. Перевизначте його, якщо вашому хосту потрібне інше runtime-обмеження:
```bash
openclaw config set plugins.entries.acpx.config.timeoutSeconds 180
```
Перезапустіть Gateway після зміни цього значення.
Перезапустіть gateway після зміни цього значення.
### Конфігурація агента health probe
### Конфігурація агента перевірки справності
Коли `/acp doctor` або opt-in перевірка під час запуску перевіряє backend, вбудований Plugin `acpx` перевіряє одного агента harness. Якщо встановлено `acp.allowedAgents`, за замовчуванням використовується перший дозволений агент; інакше за замовчуванням використовується `codex`. Якщо вашому deployment потрібен інший агент ACP для health checks, явно задайте агента перевірки:
Коли `/acp doctor` або опційна перевірка під час запуску перевіряє бекенд, вбудований Plugin `acpx` перевіряє одного агента обв'язки. Якщо задано `acp.allowedAgents`, типовим стає перший дозволений агент; інакше типовим є `codex`. Якщо вашому розгортанню потрібен інший агент ACP для перевірок справності, задайте агента перевірки явно:
```bash
openclaw config set plugins.entries.acpx.config.probeAgent claude
```
Перезапустіть Gateway після зміни цього значення.
Перезапустіть gateway після зміни цього значення.
## Конфігурація дозволів
Сеанси ACP працюють неінтерактивно — немає TTY, щоб схвалювати або відхиляти запити дозволів на file-write і shell-exec. Plugin acpx надає два ключі конфігурації, які керують обробкою дозволів:
Сесії ACP виконуються неінтерактивно — немає TTY для схвалення або відхилення запитів дозволу на запис файлів і виконання shell-команд. Plugin acpx надає два конфігураційні ключі, які керують обробкою дозволів:
Ці дозволи ACPX harness відокремлені від OpenClaw exec approvals і відокремлені від CLI-backend vendor bypass flags, таких як Claude CLI `--permission-mode bypassPermissions`. ACPX `approve-all` є harness-level break-glass перемикачем для сеансів ACP.
Ці дозволи обв'язки ACPX відокремлені від схвалень exec OpenClaw і від прапорців обходу постачальників CLI-бекенду, як-от Claude CLI `--permission-mode bypassPermissions`. ACPX `approve-all` — це аварійний перемикач рівня обв'язки для сесій ACP.
### `permissionMode`
Керує тим, які операції агент harness може виконувати без запиту.
Керує тим, які операції агент обв'язки може виконувати без запиту.
| Значення | Поведінка |
| -------------- | -------------------------------------------------------- |
| `approve-all` | Автоматично схвалювати всі записи файлів і shell-команди. |
| `approve-reads` | Автоматично схвалювати лише читання; записи та exec потребують запитів. |
| `approve-reads` | Автоматично схвалювати лише читання; записи й exec потребують запитів. |
| `deny-all` | Відхиляти всі запити дозволів. |
### `nonInteractivePermissions`
Керує тим, що відбувається, коли мав би відобразитися запит дозволу, але інтерактивний TTY недоступний (що завжди є випадком для сеансів ACP).
Керує тим, що відбувається, коли мав би бути показаний запит дозволу, але інтерактивний TTY недоступний (що завжди так для сесій ACP).
| Значення | Поведінка |
| -------- | ---------------------------------------------------------------- |
| `fail` | Перервати сеанс із `AcpRuntimeError`. **(за замовчуванням)** |
| `deny` | Тихо відхилити дозвіл і продовжити (плавна деградація). |
| Значення | Поведінка |
| -------- | ------------------------------------------------------------------ |
| `fail` | Перервати сесію з `AcpRuntimeError`. **(типово)** |
| `deny` | Тихо відхилити дозвіл і продовжити (поступова деградація). |
### Конфігурація
Установіть через конфігурацію Plugin:
Задайте через конфігурацію Plugin:
```bash
openclaw config set plugins.entries.acpx.config.permissionMode approve-all
openclaw config set plugins.entries.acpx.config.nonInteractivePermissions fail
```
Перезапустіть Gateway після зміни цих значень.
Перезапустіть gateway після зміни цих значень.
<Warning>
OpenClaw за замовчуванням використовує `permissionMode=approve-reads` і `nonInteractivePermissions=fail`. У неінтерактивних сеансах ACP будь-який запис або exec, що спричиняє запит дозволу, може завершитися помилкою `AcpRuntimeError: Permission prompt unavailable in non-interactive mode`.
OpenClaw за замовчуванням використовує `permissionMode=approve-reads` і `nonInteractivePermissions=fail`. У неінтерактивних сесіях ACP будь-який запис або exec, що викликає запит дозволу, може завершитися помилкою `AcpRuntimeError: Permission prompt unavailable in non-interactive mode`.
Якщо вам потрібно обмежити дозволи, установіть `nonInteractivePermissions` у `deny`, щоб сеанси плавно деградували замість аварійного завершення.
Якщо вам потрібно обмежити дозволи, установіть `nonInteractivePermissions` у `deny`, щоб сесії деградували поступово замість аварійного завершення.
</Warning>
## Повязане
## Пов'язане
- [ACP agents](/uk/tools/acp-agents) — огляд, операторський runbook, концепції
- [Субагенти](/uk/tools/subagents)
- [Маршрутизація між кількома агентами](/uk/concepts/multi-agent)
- [агенти ACP](/uk/tools/acp-agents) — огляд, операторський runbook, концепції
- [субагенти](/uk/tools/subagents)
- [маршрутизація кількох агентів](/uk/concepts/multi-agent)

File diff suppressed because it is too large Load Diff