diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md index 3af3038c6..44e13fe31 100644 --- a/docs/uk/gateway/configuration-reference.md +++ b/docs/uk/gateway/configuration-reference.md @@ -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..enabled: false` вимикає skill, навіть якщо він комплектний/встановлений. -- `entries..apiKey`: зручність для skills, які оголошують основну env-змінну (рядок відкритим текстом або об’єкт SecretRef). +- `entries..enabled: false` вимикає skill, навіть якщо він bundled/installed. +- `entries..apiKey`: зручний спосіб для skills, що оголошують основну env var (рядок plaintext або об’єкт SecretRef). --- @@ -190,41 +190,41 @@ x-i18n: } ``` -- Завантажуються з `~/.openclaw/extensions`, `/.openclaw/extensions`, а також `plugins.load.paths`. -- Виявлення приймає нативні plugins OpenClaw, а також сумісні пакети Codex і пакети Claude, включно з пакетами Claude стандартної структури без маніфеста. +- Завантажуються з `~/.openclaw/extensions`, `/.openclaw/extensions`, плюс `plugins.load.paths`. +- Виявлення приймає нативні OpenClaw plugins, а також сумісні Codex bundles і Claude bundles, включно з manifestless Claude default-layout bundles. - **Зміни конфігурації потребують перезапуску gateway.** -- `allow`: необов’язковий список дозволених (завантажуються лише перелічені plugins). `deny` має перевагу. -- `plugins.entries..apiKey`: зручне поле API-ключа на рівні plugin (коли підтримується plugin). -- `plugins.entries..env`: мапа env-змінних, обмежена plugin. -- `plugins.entries..hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, із застарілого `before_agent_start`, водночас зберігаючи застарілі `modelOverride` і `providerOverride`. Застосовується до нативних хуків plugin і підтримуваних директорій хуків, наданих пакетами. -- `plugins.entries..hooks.allowConversationAccess`: коли `true`, довірені некомплектні plugins можуть читати необроблений вміст розмови з типізованих хуків, таких як `llm_input`, `llm_output`, `before_agent_finalize` і `agent_end`. -- `plugins.entries..subagent.allowModelOverride`: явно довіряє цьому plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових subagent-запусків. -- `plugins.entries..subagent.allowedModels`: необов’язковий список дозволених канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише коли навмисно хочете дозволити будь-яку модель. -- `plugins.entries..config`: об’єкт конфігурації, визначений plugin (валідується схемою нативного OpenClaw plugin, коли доступна). -- Налаштування облікового запису/runtime каналового plugin містяться в `channels.` і мають описуватися метаданими `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..apiKey`: зручне поле API-ключа рівня plugin (коли підтримується plugin). +- `plugins.entries..env`: мапа env vars з областю видимості plugin. +- `plugins.entries..hooks.allowPromptInjection`: коли `false`, core блокує `before_prompt_build` та ігнорує поля, що змінюють prompt, зі старого `before_agent_start`, зберігаючи старі `modelOverride` і `providerOverride`. Застосовується до нативних hook’ів plugin і підтримуваних bundle-provided каталогів hook’ів. +- `plugins.entries..hooks.allowConversationAccess`: коли `true`, довірені non-bundled plugins можуть читати необроблений вміст розмови з typed hooks, як-от `llm_input`, `llm_output`, `before_agent_finalize` і `agent_end`. +- `plugins.entries..subagent.allowModelOverride`: явно довіряє цьому plugin запитувати per-run перевизначення `provider` і `model` для фонових запусків subagent. +- `plugins.entries..subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли навмисно хочете дозволити будь-яку модель. +- `plugins.entries..config`: об’єкт конфігурації, визначений plugin (перевіряється нативною схемою OpenClaw plugin, коли вона доступна). +- Налаштування облікового запису/runtime для channel plugin розміщені в `channels.` і мають описуватися метаданими `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..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: } ``` - + -- `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..healthMonitor.enabled`: opt-out для окремого каналу від перезапусків health-monitor зі збереженням глобального монітора ввімкненим. -- `channels..accounts..healthMonitor.enabled`: перевизначення для окремого облікового запису в багатооблікових каналах. Коли задано, воно має пріоритет над перевизначенням на рівні каналу. -- Локальні шляхи виклику Gateway можуть використовувати `gateway.remote.*` як резервний варіант лише коли `gateway.auth.*` не задано. -- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв’язано, розв’язання fail-closed (без маскування віддаленим резервним варіантом). -- `trustedProxies`: IP reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Вказуйте лише проксі, які контролюєте. Записи 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..healthMonitor.enabled`: opt-out для окремого каналу від перезапусків health-monitor, зберігаючи глобальний монітор увімкненим. +- `channels..accounts..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. -### Кінцеві точки, сумісні з 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 ` (використовує `~/.openclaw-`). -Див. [Кілька 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 ` або `x-openclaw-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/` → визначається через `hooks.mappings` - - Значення `sessionKey` зіставлення, відрендерені з шаблону, вважаються наданими ззовні й також потребують `hooks.allowRequestSessionKey=true`. + - Значення `sessionKey` зіставлення, відрендерені з шаблону, вважаються наданими зовні й також потребують `hooks.allowRequestSessionKey=true`. - + -- `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 для цього запуску хука (має бути дозволено, якщо задано каталог моделей). ### Інтеграція 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://:/__openclaw__/canvas/` - `http://:/__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 - Профілі для кожного агента зберігаються в `/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..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` може прибрати невідомі ключі). - + ```json { @@ -1112,11 +1117,11 @@ openclaw gateway --port 19001 } ``` -- `sessionRetention`: як довго зберігати завершені ізольовані сесії запусків cron перед обрізанням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів cron. Типово: `24h`; задайте `false`, щоб вимкнути. -- `runLog.maxBytes`: максимальний розмір одного файла журналу запуску (`cron/runs/.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/.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]`; 1–10 записів). -- `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; такі записи завершуються закритою помилкою замість вирівнювання конфігурації. - Помилки: зрозумілі повідомлення для відсутніх файлів, помилок розбору та циклічних включень. --- diff --git a/docs/uk/gateway/opentelemetry.md b/docs/uk/gateway/opentelemetry.md index 6e9cefdfb..ef9635f0b 100644 --- a/docs/uk/gateway/opentelemetry.md +++ b/docs/uk/gateway/opentelemetry.md @@ -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 ``` -`protocol` наразі підтримує лише `http/protobuf`. `grpc` ігнорується. +`protocol` зараз підтримує лише `http/protobuf`. `grpc` ігнорується. ## Експортовані сигнали -| Сигнал | Що до нього входить | +| Сигнал | Що до нього потрапляє | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| **Метрики** | Лічильники й гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черг, стану сеансу, 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.*` diff --git a/docs/uk/help/testing-live.md b/docs/uk/help/testing-live.md index d58a130cf..b08ee18a0 100644 --- a/docs/uk/help/testing-live.md +++ b/docs/uk/help/testing-live.md @@ -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 `. + - Підняти 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 `. - Посилання на реалізацію: `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: "" }]` - Gateway розбирає вкладення в `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) - - Вбудований агент пересилає мультимодальне повідомлення користувача до моделі - - Твердження: відповідь містить `cat` + код (толерантність OCR: незначні помилки дозволені) + - Embedded-агент пересилає мультимодальне повідомлення користувача до моделі + - Перевірка: відповідь містить `cat` + код (OCR-допуск: незначні помилки дозволені) -Щоб побачити, що можна тестувати на вашій машині (і точні ідентифікатори `provider/model`), запустіть: +Щоб побачити, що можна протестувати на вашій машині (і точні ідентифікатори `provider/model`), запустіть: ```bash openclaw models list @@ -144,27 +144,27 @@ openclaw models list --json -## 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 --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 тощо) Не хардкодьте "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//agent/auth-profiles.json` (саме це означає “profile keys” у live-тестах) +- Профілі автентифікації для окремих агентів: `~/.openclaw/agents//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.` не налаштовано - - Корисно після зміни надсилання 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 генерації зображень: + - Запускає кожного налаштованого провайдера через спільне середовище виконання генерації зображень: - `:generate` - - `:edit`, коли провайдер заявляє підтримку редагування + - `: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 лишається узгодженою diff --git a/docs/uk/install/docker.md b/docs/uk/install/docker.md index 01c632beb..8f649cb79 100644 --- a/docs/uk/install/docker.md +++ b/docs/uk/install/docker.md @@ -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 - З кореня репозиторію запустіть сценарій налаштування: + З кореня repo запустіть setup script: ```bash ./scripts/docker/setup.sh ``` - Це локально збирає образ Gateway. Щоб натомість використати попередньо зібраний образ: + Це збирає образ Gateway локально. Щоб натомість використати попередньо зібраний образ: ```bash export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest" @@ -53,24 +53,24 @@ Docker є **необов’язковим**. Використовуйте йог - - Сценарій налаштування автоматично запускає початкове налаштування. Він: + + 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 уже існує. Відкрийте `http://127.0.0.1:18789/` у браузері та вставте налаштований - спільний секрет у Settings. Сценарій налаштування за замовчуванням записує токен у `.env`; - якщо ви перемкнете конфігурацію контейнера на автентифікацію паролем, використовуйте - натомість цей пароль. + спільний секрет у Settings. Setup script типово записує токен у `.env`; + якщо ви перемкнете конфігурацію контейнера на password auth, натомість використайте цей + пароль. Потрібна URL-адреса ще раз? @@ -81,7 +81,7 @@ Docker є **необов’язковим**. Використовуйте йог - Використовуйте контейнер 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 ``` -Запускайте `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`. -Оскільки `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`. ### Змінні середовища -Сценарій налаштування приймає ці необов’язкові змінні середовища: +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://: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 напряму. -Використовуйте значення режиму 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`. ### Локальні провайдери хоста -Коли 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//agent/auth-profiles.json` для збереженої OAuth/API-key-автентифікації провайдера -- `.env` для runtime-секретів на основі env, таких як `OPENCLAW_GATEWAY_TOKEN` +- `openclaw.json` для behavior config +- `agents//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). - + ```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`. @@ -333,15 +329,11 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc - `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`. - Образ запускається як `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 - Упорядкуйте 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 - Стандартний образ орієнтований передусім на безпеку й запускається як непривілейований `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`. - Якщо ви виберете OpenAI Codex OAuth у майстрі, він відкриє URL браузера. У - Docker або headless-середовищах скопіюйте повну URL-адресу перенаправлення, на якій опинитеся, і вставте - її назад у майстер, щоб завершити автентифікацію. + Якщо ви виберете OpenAI Codex OAuth у майстрі, він відкриє URL у браузері. У Docker або headless-середовищах скопіюйте повний URL перенаправлення, на який ви потрапите, і вставте його назад у майстер, щоб завершити автентифікацію. - Основний 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). ### Запускаєте на 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`. ## Усунення несправностей - - Зберіть sandbox-образ за допомогою + + Зберіть образ пісочниці за допомогою [`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 на вимогу. - - Задайте `docker.user` як UID:GID, що відповідає власнику вашого змонтованого workspace, - або змініть власника теки workspace через chown. + + Задайте `docker.user` як UID:GID, що відповідає власнику змонтованого workspace, + або змініть власника папки workspace за допомогою chown. - - OpenClaw запускає команди через `sh -lc` (login shell), який завантажує - `/etc/profile` і може скидати PATH. Задайте `docker.env.PATH`, щоб додати на початок ваші - користувацькі шляхи до інструментів, або додайте скрипт у `/etc/profile.d/` у вашому Dockerfile. + + OpenClaw запускає команди через `sh -lc` (login shell), що завантажує `/etc/profile` і може скинути PATH. Задайте `docker.env.PATH`, щоб додати на початок ваші шляхи до користувацьких інструментів, або додайте скрипт у `/etc/profile.d/` у вашому Dockerfile. - VM потрібно щонайменше 2 ГБ RAM. Використайте більший клас машини й повторіть спробу. + VM потрібно щонайменше 2 GB RAM. Використайте більший клас машини й повторіть спробу. - Отримайте свіже посилання на dashboard і схваліть браузерний пристрій: + Отримайте свіже посилання на dashboard і схваліть пристрій браузера: ```bash docker compose run --rm openclaw-cli dashboard --no-open @@ -493,8 +465,8 @@ scripts/sandbox-setup.sh - - Скиньте режим Gateway і bind: + + Скиньте режим і 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 -## Пов’язане +## Пов'язане - [Огляд встановлення](/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 після встановлення diff --git a/docs/uk/plugins/voice-call.md b/docs/uk/plugins/voice-call.md index e2fb6743b..e3b9165b5 100644 --- a/docs/uk/plugins/voice-call.md +++ b/docs/uk/plugins/voice-call.md @@ -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` (розробка/без мережі). Plugin Voice Call працює **всередині процесу Gateway**. Якщо ви використовуєте -віддалений Gateway, установіть і налаштуйте Plugin на машині, де працює -Gateway, а потім перезапустіть Gateway, щоб його завантажити. +віддалений Gateway, установіть і налаштуйте plugin на машині, де працює +Gateway, а потім перезапустіть Gateway, щоб завантажити його. ## Швидкий старт @@ -49,16 +49,16 @@ Gateway, а потім перезапустіть Gateway, щоб його за Якщо npm повідомляє, що пакет, яким володіє OpenClaw, застарілий, ця версія - пакета походить зі старішої зовнішньої лінійки пакетів; використовуйте поточну - пакетовану збірку OpenClaw або шлях до локальної папки, доки не буде - опубліковано новіший пакет npm. + пакета походить зі старішої зовнішньої гілки пакування; використовуйте + поточну пакетовану збірку OpenClaw або шлях до локальної папки, доки не буде + опубліковано новіший npm-пакет. - Після цього перезапустіть Gateway, щоб Plugin завантажився. + Після цього перезапустіть Gateway, щоб plugin завантажився. - Задайте конфігурацію в `plugins.entries.voice-call.config` (див. - [Конфігурація](#configuration) нижче для повної структури). Мінімально потрібні: + Задайте конфігурацію в `plugins.entries.voice-call.config` (повну форму див. + у розділі [Конфігурація](#configuration) нижче). Мінімально потрібні: `provider`, облікові дані провайдера, `fromNumber` і публічно доступний URL Webhook. @@ -67,9 +67,9 @@ Gateway, а потім перезапустіть Gateway, щоб його за openclaw voicecall setup ``` - Типовий вивід зручно читати в журналах чату й терміналах. Він перевіряє - увімкнення Plugin, облікові дані провайдера, доступність Webhook і те, що - активний лише один аудіорежим (`streaming` або `realtime`). Використовуйте + Типовий вивід зручно читати в журналах чату й терміналах. Він перевіряє, + чи plugin увімкнений, облікові дані провайдера, доступність Webhook і те, + що активний лише один аудіорежим (`streaming` або `realtime`). Використовуйте `--json` для скриптів. @@ -79,7 +79,7 @@ Gateway, а потім перезапустіть Gateway, щоб його за openclaw voicecall smoke --to "+15555550123" ``` - Обидві команди за замовчуванням виконуються в режимі dry run. Додайте `--yes`, + Обидві команди за замовчуванням виконують пробний запуск. Додайте `--yes`, щоб фактично здійснити короткий вихідний виклик-сповіщення: ```bash @@ -90,21 +90,23 @@ Gateway, а потім перезапустіть Gateway, щоб його за -Для Twilio, Telnyx і Plivo налаштування має розв’язуватися в **публічний URL Webhook**. -Якщо `publicUrl`, URL тунелю, URL Tailscale або резервний варіант serve -розв’язується в loopback чи простір приватної мережі, налаштування завершується -помилкою замість запуску провайдера, який не зможе отримувати Webhook від оператора. +Для Twilio, Telnyx і Plivo налаштування має визначати **публічний URL Webhook**. +Якщо `publicUrl`, URL тунелю, URL Tailscale або резервний serve-варіант +визначається як loopback чи приватний мережевий простір, налаштування +завершується помилкою замість запуску провайдера, який не зможе отримувати +Webhook від операторів. ## Конфігурація -Якщо `enabled: true`, але вибраному провайдеру бракує облікових даних, -під час запуску Gateway записує попередження про неповне налаштування з відсутніми -ключами та пропускає запуск runtime. Команди, RPC-виклики й інструменти агента -все одно повертають точну відсутню конфігурацію провайдера під час використання. +Якщо `enabled: true`, але для вибраного провайдера бракує облікових даних, +під час запуску Gateway записує попередження про неповне налаштування з +відсутніми ключами та пропускає запуск runtime. Команди, RPC-виклики й +інструменти агента все одно повертають точну відсутню конфігурацію провайдера +під час використання. -Облікові дані 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). ```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, щоб його за - 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. - - `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). Старіші конфігурації, які використовують `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, щоб його за +## Область сесії + +За замовчуванням Voice Call використовує `sessionScope: "per-phone"`, тож +повторні виклики від того самого абонента зберігають пам’ять розмови. Задайте +`sessionScope: "per-call"`, коли кожен операторський виклик має починатися зі +свіжим контекстом, наприклад для рецепції, бронювання, IVR або потоків мосту +Google Meet, де той самий номер телефону може представляти різні зустрічі. + ## Голосові розмови в реальному часі -`realtime` вибирає повнодуплексного провайдера голосу в реальному часі для аудіо -живого виклику. Він окремий від `streaming`, який лише пересилає аудіо до -провайдерів транскрибування в реальному часі. +`realtime` вибирає повнодуплексного голосового провайдера реального часу для +живого аудіо виклику. Це окремо від `streaming`, який лише передає аудіо +провайдерам транскрипції в реальному часі. `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.`. -- 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 +### Приклади провайдерів реального часу - За замовчуванням: 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, щоб його за -Див. [провайдера 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.`. -- Після того як 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.`. +- Після того як Twilio надсилає прийняте повідомлення `start` для потоку, Voice Call негайно реєструє потік, ставить вхідні медіадані в чергу через провайдера транскрибування, доки провайдер підключається, і запускає початкове привітання лише після готовності транскрибування в реальному часі. +- Якщо `streaming.provider` вказує на незареєстрованого провайдера або жоден провайдер не зареєстрований, Voice Call записує попередження в журнал і пропускає потокове передавання медіа замість того, щоб спричинити збій усього plugin. -### Приклади постачальників потокового передавання +### Приклади провайдерів потокового передавання - Стандартні значення: 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 для конкретного провайдера. - Стандартні значення: 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 ``` -**Microsoft speech ігнорується для голосових викликів.** Телефонному аудіо потрібен PCM; -поточний транспорт Microsoft не надає вихід телефонного PCM. +**Microsoft speech ігнорується для голосових викликів.** Телефонне аудіо потребує PCM; +поточний транспорт Microsoft не надає телефонний PCM-вивід. Нотатки щодо поведінки: -- Застарілі ключі `tts.` у конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються через `openclaw doctor --fix`; зафіксована конфігурація має використовувати `tts.providers.`. -- Основний TTS використовується, коли потокове передавання медіа Twilio увімкнено; інакше виклики повертаються до власних голосів постачальника. -- Якщо медіапотік Twilio вже активний, Voice Call не повертається до TwiML ``. Якщо телефонний TTS недоступний у цьому стані, запит на відтворення завершується помилкою замість змішування двох шляхів відтворення. -- Коли телефонний TTS повертається до вторинного постачальника, Voice Call записує попередження з ланцюжком постачальників (`from`, `to`, `attempts`) для налагодження. -- Коли barge-in Twilio або завершення потоку очищає чергу очікування TTS, запити відтворення в черзі завершуються, а не залишають абонентів у підвішеному стані в очікуванні завершення відтворення. +- Застарілі ключі `tts.` у конфігурації plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються командою `openclaw doctor --fix`; закомічена конфігурація має використовувати `tts.providers.`. +- Основний TTS використовується, коли ввімкнено потокове передавання медіа Twilio; інакше виклики повертаються до нативних голосів провайдера. +- Якщо медіапотік Twilio уже активний, Voice Call не повертається до TwiML ``. Якщо телефонний 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 ``` -`inboundPolicy: "allowlist"` — це перевірка ідентифікатора абонента з низьким рівнем гарантії. -Плагін нормалізує надане постачальником значення `From` і порівнює його з -`allowFrom`. Перевірка Webhook автентифікує доставку постачальника та -цілісність payload, але вона **не** доводить право власності на номер -абонента PSTN/VoIP. Розглядайте `allowFrom` як фільтрацію за ідентифікатором абонента, а не як надійну -ідентичність абонента. +`inboundPolicy: "allowlist"` — це перевірка caller-ID з низьким рівнем гарантії. +Plugin нормалізує надане провайдером значення `From` і порівнює його з +`allowFrom`. Перевірка Webhook автентифікує доставку провайдером і +цілісність payload, але вона **не** доводить володіння номером абонента +PSTN/VoIP. Сприймайте `allowFrom` як фільтрацію caller-ID, а не як надійну +ідентифікацію абонента. -Автовідповіді використовують систему агентів. Налаштовуйте за допомогою `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 `` для цього початкового повідомлення, тому вихідні сесії `` залишаються підключеними. +- Якщо початкове відтворення завершується з помилкою, виклик повертається до `listening`, а початкове повідомлення залишається в черзі для повторної спроби. +- Початкове відтворення для потокового передавання Twilio починається під час підключення потоку без додаткової затримки. +- Barge-in перериває активне відтворення й очищає записи Twilio TTS, які стоять у черзі, але ще не відтворюються. Очищені записи завершуються як пропущені, тож логіка подальшої відповіді може продовжуватися без очікування аудіо, яке ніколи не буде відтворене. +- Голосові розмови в реальному часі використовують власний початковий хід потоку в реальному часі. Voice Call **не** надсилає застаріле оновлення TwiML `` для цього початкового повідомлення, тому вихідні сесії `` залишаються приєднаними. ### Пільговий період відключення потоку Twilio -Коли медіапотік Twilio відключається, Voice Call чекає **2000 мс** перед +Коли медіапотік Twilio відключається, Voice Call очікує **2000 ms** перед автоматичним завершенням виклику: -- Якщо потік повторно підключається протягом цього вікна, автоматичне завершення скасовується. -- Якщо після пільгового періоду потік не реєструється повторно, виклик завершується, щоб запобігти завислим активним викликам. +- Якщо потік повторно підключається впродовж цього вікна, автоматичне завершення скасовується. +- Якщо після пільгового періоду жоден потік не реєструється повторно, виклик завершується, щоб запобігти завислим активним викликам. ## Очищення застарілих викликів -Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують кінцевий -Webhook (наприклад, виклики в режимі сповіщення, які ніколи не завершуються). Стандартне значення +Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують фінальний +webhook (наприклад, виклики в режимі сповіщення, які ніколи не завершуються). Типове значення — `0` (вимкнено). Рекомендовані діапазони: -- **Production:** `120`–`300` секунд для потоків у стилі сповіщень. +- **Продакшн:** `120`–`300` секунд для потоків у стилі сповіщень. - Тримайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли завершитися. Добра початкова точка — `maxDurationSeconds + 30–60` секунд. ```json5 @@ -562,26 +575,26 @@ Webhook (наприклад, виклики в режимі сповіщення ## Безпека Webhook -Коли проксі або тунель розташований перед Gateway, плагін -відновлює публічний URL для перевірки підпису. Ці параметри -керують тим, яким пересланим заголовкам довіряти: +Коли proxy або tunnel розташований перед Gateway, plugin +відтворює публічну URL-адресу для перевірки підпису. Ці параметри +контролюють, яким forwarded headers довіряти: - Список дозволених хостів із заголовків пересилання. + Список дозволених хостів із forwarding headers. - Довіряти пересланим заголовкам без списку дозволених. + Довіряти forwarded headers без списку дозволених. - Довіряти пересланим заголовкам лише тоді, коли віддалена IP-адреса запиту збігається зі списком. + Довіряти forwarded headers лише тоді, коли remote IP запиту відповідає списку. -Додаткові засоби захисту: +Додаткові захисти: -- **Захист від повторного відтворення** Webhook увімкнено для Twilio і Plivo. Повторно відтворені дійсні запити Webhook підтверджуються, але пропускаються для побічних ефектів. -- Ходи розмови Twilio містять токен для кожного ходу в callback ``, тому застарілі/повторно відтворені callback мовлення не можуть задовольнити новіший очікуваний хід transcript. -- Неавтентифіковані запити Webhook відхиляються до читання body, якщо відсутні обов’язкові заголовки підпису постачальника. -- Webhook voice-call використовує спільний профіль body до автентифікації (64 КБ / 5 секунд) плюс обмеження одночасних запитів для кожної IP-адреси перед перевіркою підпису. +- **Захист від повторного відтворення** Webhook увімкнено для Twilio і Plivo. Повторно відтворені дійсні webhook-запити підтверджуються, але пропускаються для побічних ефектів. +- Ходи розмови Twilio містять токен на кожен хід у callbacks ``, тому застарілі або повторно відтворені 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 `, щоб указати інший журнал, і `--last `, щоб обмежити -аналіз останніми N записами (стандартно 200). Вивід містить p50/p90/p99 -для затримки ходу та часу очікування прослуховування. +Використовуйте `--file `, щоб вказати інший журнал, і `--last `, щоб обмежити +аналіз останніми 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 в режимі сповіщення надсилають початковий `` TwiML безпосередньо в запиті створення виклику, тому перше промовлене повідомлення не залежить від того, чи Twilio отримає Webhook TwiML. Публічний Webhook усе ще потрібен для зворотних викликів статусу, розмовних викликів, DTMF перед підключенням, потоків реального часу та керування викликом після підключення. +Вихідні дзвінки Twilio у режимі сповіщень надсилають початковий `` 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 @@ -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 реального часу обслуговується, міст реального часу запущено, а початкове привітання поставлено в чергу. ## Пов’язане diff --git a/docs/uk/tools/acp-agents-setup.md b/docs/uk/tools/acp-agents-setup.md index f21e45a85..88ef66c96 100644 --- a/docs/uk/tools/acp-agents-setup.md +++ b/docs/uk/tools/acp-agents-setup.md @@ -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 `, але цей необроблений аварійний механізм є функцією acpx CLI (а не звичайним шляхом OpenClaw `agentId`). +Пряме використання CLI acpx також може націлюватися на довільні адаптери через `--agent `, але цей сирий аварійний механізм є функцією 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 після зміни цих значень. -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`, щоб сесії деградували поступово замість аварійного завершення. -## Пов’язане +## Пов'язане -- [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) diff --git a/docs/uk/tools/acp-agents.md b/docs/uk/tools/acp-agents.md index 7d5beafce..de2d87bbc 100644 --- a/docs/uk/tools/acp-agents.md +++ b/docs/uk/tools/acp-agents.md @@ -1,135 +1,140 @@ --- read_when: - Запуск середовищ кодування через ACP - - Налаштування прив’язаних до розмови сеансів ACP у каналах обміну повідомленнями - - Прив’язування розмови в каналі повідомлень до постійної сесії ACP - - Усунення несправностей бекенду ACP, підключення Plugin або доставки завершень - - Виконання команд /acp із чату + - Налаштування ACP-сеансів, прив’язаних до розмов, у каналах обміну повідомленнями + - Прив’язування розмови в каналі повідомлень до постійного сеансу ACP + - Усунення проблем із бекендом ACP, підключенням Plugin або доставленням завершень + - Виконання команд /acp з чату sidebarTitle: ACP agents summary: Запускайте зовнішні середовища кодування (Claude Code, Cursor, Gemini CLI, явний Codex ACP, OpenClaw ACP, OpenCode) через бекенд ACP title: Агенти ACP x-i18n: - generated_at: "2026-05-02T06:12:25Z" + generated_at: "2026-05-02T07:52:59Z" model: gpt-5.5 provider: openai - source_hash: 36a1c58b22d0f615e20e84fcdb15c39800825ee0bad64c966d6f14d44d3c1458 + source_hash: ec2404924cbb4c4cd0d94485bc7d8ea586c0ef5f4380e72d5212c8bd9d868c20 source_path: tools/acp-agents.md workflow: 16 --- -[сесії Протоколу клієнта агента (ACP)](https://agentclientprotocol.com/) -дають OpenClaw змогу запускати зовнішні кодингові середовища (наприклад Pi, Claude Code, +[сеанси Agent Client Protocol (ACP)](https://agentclientprotocol.com/) +дають OpenClaw змогу запускати зовнішні середовища кодування (наприклад Pi, Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI та інші підтримувані середовища ACPX) через backend-plugin ACP. -Кожен запуск сесії ACP відстежується як [фонове завдання](/uk/automation/tasks). +Кожне створення ACP-сеансу відстежується як [фонове завдання](/uk/automation/tasks). -**ACP — це шлях зовнішніх середовищ, а не типовий шлях Codex.** Власний +**ACP — це шлях зовнішнього середовища, а не типовий шлях Codex.** Власний plugin сервера застосунку Codex відповідає за елементи керування `/codex ...` і -вбудований runtime `agentRuntime.id: "codex"`; ACP відповідає за -елементи керування `/acp ...` і сесії `sessions_spawn({ runtime: "acp" })`. +вбудоване середовище виконання `agentRuntime.id: "codex"`; ACP відповідає за +елементи керування `/acp ...` і сеанси `sessions_spawn({ runtime: "acp" })`. -Якщо ви хочете, щоб Codex або Claude Code підключалися як зовнішній клієнт MCP -безпосередньо до наявних розмов каналів OpenClaw, використовуйте +Якщо ви хочете, щоб Codex або Claude Code підключався як зовнішній MCP-клієнт +безпосередньо до наявних розмов у каналах OpenClaw, використовуйте [`openclaw mcp serve`](/uk/cli/mcp) замість ACP. ## Яка сторінка мені потрібна? -| Ви хочете… | Використовуйте | Примітки | -| ----------------------------------------------------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Прив’язати Codex або керувати ним у поточній розмові | `/codex bind`, `/codex threads` | Власний шлях сервера застосунку Codex, коли plugin `codex` увімкнено; включає відповіді прив’язаного чату, пересилання зображень, модель/швидкий режим/дозволи, зупинку та керування напрямом. ACP — явний запасний варіант | -| Запустити Claude Code, Gemini CLI, явний Codex ACP або інше зовнішнє середовище _через_ OpenClaw | Ця сторінка | Прив’язані до чату сесії, `/acp spawn`, `sessions_spawn({ runtime: "acp" })`, фонові завдання, елементи керування runtime | -| Надати сесію OpenClaw Gateway _як_ сервер ACP для редактора або клієнта | [`openclaw acp`](/uk/cli/acp) | Режим мосту. IDE/клієнт спілкується з OpenClaw через ACP поверх stdio/WebSocket | -| Повторно використати локальний AI CLI як текстову резервну модель | [Backend-и CLI](/uk/gateway/cli-backends) | Не ACP. Без інструментів OpenClaw, без елементів керування ACP, без runtime середовища | +| Ви хочете… | Використовуйте | Примітки | +| --------------------------------------------------------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Прив’язати Codex у поточній розмові або керувати ним | `/codex bind`, `/codex threads` | Власний шлях сервера застосунку Codex, коли plugin `codex` увімкнено; включає прив’язані відповіді в чаті, пересилання зображень, модель/швидкий режим/дозволи, зупинку та керування напрямом. ACP — явний запасний варіант | +| Запустити Claude Code, Gemini CLI, явний Codex ACP або інше зовнішнє середовище _через_ OpenClaw | Ця сторінка | Сеанси, прив’язані до чату, `/acp spawn`, `sessions_spawn({ runtime: "acp" })`, фонові завдання, керування середовищем виконання | +| Надати сеанс OpenClaw Gateway _як_ ACP-сервер для редактора або клієнта | [`openclaw acp`](/uk/cli/acp) | Режим моста. IDE/клієнт спілкується з OpenClaw через ACP поверх stdio/WebSocket | +| Повторно використати локальний AI CLI як текстову запасну модель | [CLI-бекенди](/uk/gateway/cli-backends) | Не ACP. Без інструментів OpenClaw, без елементів керування ACP, без середовища виконання середовища | ## Чи працює це одразу? -Зазвичай так. Нові встановлення постачаються з увімкненим за замовчуванням -вбудованим runtime-plugin `acpx` із закріпленим локально для plugin бінарним -файлом `acpx`, який OpenClaw перевіряє та самостійно відновлює одразу після -запуску HTTP-слухача Gateway. Запустіть `/acp doctor` для перевірки готовності. +Так, після встановлення офіційного plugin середовища виконання ACP: -OpenClaw навчає агентів запуску ACP лише тоді, коли ACP **справді -придатний до використання**: ACP має бути увімкнений, dispatch не має бути -вимкнений, поточна сесія не має бути заблокована sandbox, а runtime-backend має -бути завантажений. Якщо ці умови не виконані, Skills plugin ACP і -підказки ACP для `sessions_spawn` залишаються прихованими, щоб агент не -пропонував недоступний backend. +```bash +openclaw plugins install @openclaw/acpx +openclaw config set plugins.entries.acpx.enabled true +``` + +Вихідні checkout-копії можуть використовувати локальний workspace-plugin `extensions/acpx` після +`pnpm install`. Запустіть `/acp doctor` для перевірки готовності. + +OpenClaw повідомляє агентам про створення ACP лише тоді, коли ACP **справді +придатний до використання**: ACP має бути ввімкнений, dispatch не має бути вимкнений, поточний +сеанс не має бути заблокований пісочницею, а backend середовища виконання має бути +завантажений. Якщо ці умови не виконано, Skills ACP-plugin і +підказки ACP для `sessions_spawn` залишаються прихованими, щоб агент не пропонував +недоступний backend. - - - Якщо встановлено `plugins.allow`, це обмежувальний інвентар plugin, і він **має** містити `acpx`; інакше вбудований типовий варіант навмисно блокується, а `/acp doctor` повідомляє про відсутній запис allowlist. - - Вбудований адаптер Codex ACP постачається з plugin `acpx` і за можливості запускається локально. - - Інші адаптери цільових середовищ можуть усе ще завантажуватися на вимогу через `npx` під час першого використання. - - Авторизація постачальника все одно має існувати на хості для цього середовища. - - Якщо на хості немає npm або доступу до мережі, перші завантаження адаптерів не вдаватимуться, доки кеші не буде попередньо прогріто або адаптер не буде встановлено іншим способом. + + - Якщо задано `plugins.allow`, це обмежувальний інвентар plugin і він **має** включати `acpx`; інакше встановлений backend ACP навмисно блокується, а `/acp doctor` повідомляє про відсутній запис у allowlist. + - Адаптер Codex ACP постачається з plugin `acpx` і за можливості запускається локально. + - Інші цільові адаптери середовищ усе ще можуть завантажуватися на вимогу через `npx` під час першого використання. + - Авторизація постачальника для цього середовища все одно має існувати на хості. + - Якщо хост не має npm або доступу до мережі, перші завантаження адаптерів завершаться помилкою, доки кеші не буде попередньо прогріто або адаптер не буде встановлено іншим способом. - - ACP запускає справжній процес зовнішнього середовища. OpenClaw відповідає за маршрутизацію, - стан фонових завдань, доставку, прив’язки та політику; середовище - відповідає за вхід до постачальника, каталог моделей, поведінку файлової системи та + + ACP запускає реальний процес зовнішнього середовища. OpenClaw відповідає за маршрутизацію, + стан фонових завдань, доставлення, прив’язки та політику; середовище + відповідає за вхід до свого постачальника, каталог моделей, поведінку файлової системи та власні інструменти. Перш ніж звинувачувати OpenClaw, перевірте: - - `/acp doctor` повідомляє про увімкнений і справний backend. - - Цільовий id дозволений `acp.allowedAgents`, коли цей allowlist задано. - - Команда середовища може запуститися на хості Gateway. - - Авторизація постачальника присутня для цього середовища (`claude`, `codex`, `gemini`, `opencode`, `droid` тощо). + - `/acp doctor` повідомляє про ввімкнений і справний backend. + - Цільовий id дозволений у `acp.allowedAgents`, якщо цей allowlist задано. + - Команда середовища може запускатися на хості Gateway. + - Авторизація постачальника наявна для цього середовища (`claude`, `codex`, `gemini`, `opencode`, `droid` тощо). - Вибрана модель існує для цього середовища — id моделей не переносяться між середовищами. - - Запитаний `cwd` існує й доступний, або опустіть `cwd` і дайте backend використати його типовий варіант. - - Режим дозволів відповідає роботі. Неінтерактивні сесії не можуть натискати власні запити дозволів, тому кодингові запуски з інтенсивним записом/виконанням зазвичай потребують профілю дозволів ACPX, який може працювати без участі користувача. + - Запитаний `cwd` існує і доступний, або пропустіть `cwd` і дозвольте backend використати типове значення. + - Режим дозволів відповідає роботі. Неінтерактивні сеанси не можуть натискати власні запити дозволів, тому запуски кодування з активним записом/виконанням зазвичай потребують профілю дозволів ACPX, який може працювати без нагляду. Інструменти plugin OpenClaw і вбудовані інструменти OpenClaw **не** надаються -середовищам ACP за замовчуванням. Увімкніть явні мости MCP в +ACP-середовищам за замовчуванням. Увімкніть явні MCP-мости в [Агенти ACP — налаштування](/uk/tools/acp-agents-setup) лише тоді, коли середовище -має викликати ці інструменти напряму. +має викликати ці інструменти безпосередньо. ## Підтримувані цільові середовища -З вбудованим backend `acpx` використовуйте ці id середовищ як цілі `/acp spawn ` +З backend `acpx` використовуйте ці id середовищ як цілі `/acp spawn ` або `sessions_spawn({ runtime: "acp", agentId: "" })`: -| Id середовища | Типовий backend | Примітки | -| ------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------- | -| `claude` | Адаптер Claude Code ACP | Потребує авторизації Claude Code на хості. | -| `codex` | Адаптер Codex ACP | Лише явний запасний варіант ACP, коли власний `/codex` недоступний або запитано ACP. | -| `copilot` | Адаптер GitHub Copilot ACP | Потребує авторизації Copilot CLI/runtime. | -| `cursor` | Cursor CLI ACP (`cursor-agent acp`) | Перевизначте команду acpx, якщо локальне встановлення надає іншу точку входу ACP. | -| `droid` | Factory Droid CLI | Потребує авторизації Factory/Droid або `FACTORY_API_KEY` в оточенні середовища. | -| `gemini` | Адаптер Gemini CLI ACP | Потребує авторизації Gemini CLI або налаштування API key. | -| `iflow` | iFlow CLI | Доступність адаптера й керування моделлю залежать від установленого CLI. | -| `kilocode` | Kilo Code CLI | Доступність адаптера й керування моделлю залежать від установленого CLI. | -| `kimi` | Kimi/Moonshot CLI | Потребує авторизації Kimi/Moonshot на хості. | -| `kiro` | Kiro CLI | Доступність адаптера й керування моделлю залежать від установленого CLI. | -| `opencode` | Адаптер OpenCode ACP | Потребує авторизації OpenCode CLI/постачальника. | -| `openclaw` | Міст OpenClaw Gateway через `openclaw acp` | Дає середовищу з підтримкою ACP змогу спілкуватися назад із сесією OpenClaw Gateway. | -| `pi` | Pi/вбудований runtime OpenClaw | Використовується для експериментів із власними середовищами OpenClaw. | -| `qwen` | Qwen Code / Qwen CLI | Потребує Qwen-сумісної авторизації на хості. | +| id середовища | Типовий backend | Примітки | +| ------------- | ---------------------------------------------- | -------------------------------------------------------------------------------------- | +| `claude` | Адаптер Claude Code ACP | Потребує авторизації Claude Code на хості. | +| `codex` | Адаптер Codex ACP | Лише явний запасний варіант ACP, коли власний `/codex` недоступний або запитано ACP. | +| `copilot` | Адаптер GitHub Copilot ACP | Потребує авторизації Copilot CLI/середовища виконання. | +| `cursor` | Cursor CLI ACP (`cursor-agent acp`) | Перевизначте команду acpx, якщо локальне встановлення надає іншу точку входу ACP. | +| `droid` | Factory Droid CLI | Потребує авторизації Factory/Droid або `FACTORY_API_KEY` у середовищі середовища. | +| `gemini` | Адаптер Gemini CLI ACP | Потребує авторизації Gemini CLI або налаштування API-ключа. | +| `iflow` | iFlow CLI | Доступність адаптера й керування моделлю залежать від установленого CLI. | +| `kilocode` | Kilo Code CLI | Доступність адаптера й керування моделлю залежать від установленого CLI. | +| `kimi` | Kimi/Moonshot CLI | Потребує авторизації Kimi/Moonshot на хості. | +| `kiro` | Kiro CLI | Доступність адаптера й керування моделлю залежать від установленого CLI. | +| `opencode` | Адаптер OpenCode ACP | Потребує авторизації OpenCode CLI/постачальника. | +| `openclaw` | Міст OpenClaw Gateway через `openclaw acp` | Дає ACP-сумісному середовищу змогу звертатися назад до сеансу OpenClaw Gateway. | +| `pi` | Pi/вбудоване середовище виконання OpenClaw | Використовується для експериментів із середовищами, власними для OpenClaw. | +| `qwen` | Qwen Code / Qwen CLI | Потребує Qwen-сумісної авторизації на хості. | -Власні псевдоніми агентів acpx можна налаштувати в самому acpx, але політика -OpenClaw усе одно перевіряє `acp.allowedAgents` і будь-яке -зіставлення `agents.list[].runtime.acp.agent` перед dispatch. +Власні псевдоніми агентів acpx можна налаштувати в самому acpx, але політика OpenClaw +усе одно перевіряє `acp.allowedAgents` і будь-яке зіставлення +`agents.list[].runtime.acp.agent` перед dispatch. -## Runbook оператора +## Інструкція оператора Швидкий потік `/acp` із чату: - + `/acp spawn claude --bind here`, - `/acp spawn gemini --mode persistent --thread auto` або явно + `/acp spawn gemini --mode persistent --thread auto` або явний `/acp spawn codex --bind here`. - Продовжуйте у прив’язаній розмові або гілці (або вкажіть ключ - сесії явно). + Продовжуйте у прив’язаній розмові або гілці (або явно вкажіть ключ + сеансу). `/acp status` @@ -143,55 +148,55 @@ OpenClaw усе одно перевіряє `acp.allowedAgents` і будь-як Без заміни контексту: `/acp steer tighten logging and continue`. - `/acp cancel` (поточний хід) або `/acp close` (сесія + прив’язки). + `/acp cancel` (поточний хід) або `/acp close` (сеанс + прив’язки). - - Запуск створює або відновлює runtime-сесію ACP, записує метадані ACP у сховище сесій OpenClaw і може створити фонове завдання, коли запуск належить батьківському об’єкту. - - Сесії ACP, що належать батьківському об’єкту, розглядаються як фонова робота навіть тоді, коли runtime-сесія є постійною; завершення й доставка між поверхнями проходять через сповіщувач батьківського завдання, а не поводяться як звичайна користувацька чат-сесія. - - Обслуговування завдань закриває завершені або осиротілі одноразові сесії ACP, що належать батьківському об’єкту. Постійні сесії ACP зберігаються, доки лишається активна прив’язка розмови; застарілі постійні сесії без активної прив’язки закриваються, щоб їх не можна було непомітно відновити після завершення завдання-власника або зникнення його запису. - - Прив’язані подальші повідомлення надсилаються безпосередньо до сесії ACP, доки прив’язку не закрито, не знято фокус, не скинуто або доки вона не сплила. - - Команди Gateway залишаються локальними. `/acp ...`, `/status` і `/unfocus` ніколи не надсилаються як звичайний текст prompt до прив’язаного середовища ACP. - - `cancel` перериває активний хід, коли backend підтримує скасування; це не видаляє прив’язку або метадані сесії. - - `close` завершує сесію ACP з погляду OpenClaw і видаляє прив’язку. Середовище все одно може зберігати власну upstream-історію, якщо підтримує відновлення. - - Неактивні runtime-працівники можуть бути очищені після `acp.runtime.ttlMinutes`; збережені метадані сесії залишаються доступними для `/acp sessions`. + - Створення запускає або відновлює сеанс середовища виконання ACP, записує метадані ACP у сховище сеансів OpenClaw і може створити фонове завдання, коли запуск належить батьківському процесу. + - ACP-сеанси, що належать батьківському процесу, обробляються як фонова робота, навіть коли сеанс середовища виконання є persistent; завершення та доставка між поверхнями проходять через сповіщувач батьківського завдання, а не поводяться як звичайний видимий користувачу чат-сеанс. + - Обслуговування завдань закриває кінцеві або осиротілі одноразові ACP-сеанси, що належать батьківському процесу. Persistent ACP-сеанси зберігаються, доки лишається активна прив’язка розмови; застарілі persistent-сеанси без активної прив’язки закриваються, щоб їх не можна було непомітно відновити після завершення завдання-власника або зникнення його запису. + - Прив’язані подальші повідомлення надходять безпосередньо до ACP-сеансу, доки прив’язку не закрито, не розфокусовано, не скинуто або доки не завершився її строк дії. + - Команди Gateway залишаються локальними. `/acp ...`, `/status` і `/unfocus` ніколи не надсилаються як звичайний текст запиту до прив’язаного ACP-середовища. + - `cancel` перериває активний хід, коли backend підтримує скасування; це не видаляє прив’язку або метадані сеансу. + - `close` завершує ACP-сеанс з погляду OpenClaw і видаляє прив’язку. Середовище все ще може зберігати власну upstream-історію, якщо воно підтримує відновлення. + - Неактивні runtime workers можуть бути очищені після `acp.runtime.ttlMinutes`; збережені метадані сеансу залишаються доступними для `/acp sessions`. - + Тригери природною мовою, які мають маршрутизуватися до **власного plugin Codex**, коли його ввімкнено: - "Прив’яжи цей канал Discord до Codex." - - "Приєднай цей чат до гілки Codex ``." - - "Покажи гілки Codex, потім прив’яжи цю." + - "Під’єднай цей чат до гілки Codex ``." + - "Покажи гілки Codex, а потім прив’яжи цю." Власна прив’язка розмов Codex є типовим шляхом керування чатом. - Динамічні інструменти OpenClaw усе ще виконуються через OpenClaw, тоді як + Динамічні інструменти OpenClaw і далі виконуються через OpenClaw, тоді як власні інструменти Codex, як-от shell/apply-patch, виконуються всередині Codex. - Для подій власних інструментів Codex OpenClaw вставляє власний relay hook - на кожен хід, щоб hooks plugin могли блокувати `before_tool_call`, спостерігати + Для подій власних інструментів Codex OpenClaw вставляє власний + relay hook для кожного ходу, щоб plugin hooks могли блокувати `before_tool_call`, спостерігати `after_tool_call` і маршрутизувати події Codex `PermissionRequest` - через затвердження OpenClaw. Hooks Codex `Stop` передаються до + через схвалення OpenClaw. Codex `Stop` hooks передаються до OpenClaw `before_agent_finalize`, де plugins можуть запросити ще один - прохід моделі перед тим, як Codex фіналізує свою відповідь. Relay залишається + прохід моделі до того, як Codex фіналізує відповідь. Relay залишається навмисно консервативним: він не змінює аргументи власних інструментів Codex і не переписує записи гілок Codex. Використовуйте явний ACP лише тоді, - коли вам потрібна модель ACP runtime/сесії. Межу підтримки вбудованого Codex - задокументовано в + коли вам потрібна модель середовища виконання/сеансу ACP. Межу вбудованої + підтримки Codex задокументовано в [контракті підтримки середовища Codex v1](/uk/plugins/codex-harness#v1-support-contract). - `openai-codex/*` — маршрут PI Codex OAuth/підписки. - - `openai/*` plus `agentRuntime.id: "codex"` — вбудоване середовище виконання нативного Codex app-server. - - `/codex ...` — керування нативною розмовою Codex. - - `/acp ...` or `runtime: "acp"` — явне керування ACP/acpx. + - `openai/*` плюс `agentRuntime.id: "codex"` — вбудоване нативне середовище виконання Codex app-server. + - `/codex ...` — нативне керування розмовою Codex. + - `/acp ...` або `runtime: "acp"` — явне керування ACP/acpx. - Тригери, які мають маршрутизувати до середовища виконання ACP: + Тригери, які мають маршрутизуватися до середовища виконання ACP: - "Запусти це як одноразову сесію Claude Code ACP і підсумуй результат." - "Використай Gemini CLI для цього завдання в гілці, а потім зберігай подальші відповіді в тій самій гілці." @@ -200,37 +205,37 @@ OpenClaw усе одно перевіряє `acp.allowedAgents` і будь-як OpenClaw вибирає `runtime: "acp"`, визначає harness `agentId`, прив'язується до поточної розмови або гілки, коли це підтримується, і маршрутизує подальші повідомлення до цієї сесії до закриття/завершення строку дії. Codex - використовує цей шлях лише тоді, коли ACP/acpx указано явно або нативний - plugin Codex недоступний для запитаної операції. + йде цим шляхом лише коли ACP/acpx вказано явно або нативний Codex + plugin недоступний для запитаної операції. Для `sessions_spawn`, `runtime: "acp"` оголошується лише коли ACP - увімкнено, запитувач не ізольований у пісочниці, а бекенд середовища виконання ACP - завантажено. `acp.dispatch.enabled=false` призупиняє автоматичну - диспетчеризацію ACP-гілок, але не приховує і не блокує явні - виклики `sessions_spawn({ runtime: "acp" })`. Він націлюється на ідентифікатори ACP harness, як-от `codex`, + увімкнено, запитувач не перебуває в sandbox, а бекенд середовища виконання + ACP завантажено. `acp.dispatch.enabled=false` призупиняє автоматичну + диспетчеризацію гілок ACP, але не приховує і не блокує явні + виклики `sessions_spawn({ runtime: "acp" })`. Він націлюється на id ACP harness, як-от `codex`, `claude`, `droid`, `gemini` або `opencode`. Не передавайте звичайний - ідентифікатор агента конфігурації OpenClaw з `agents_list`, якщо цей запис не + id агента конфігурації OpenClaw з `agents_list`, якщо цей запис не налаштовано явно з `agents.list[].runtime.type="acp"`; - інакше використовуйте середовище виконання субагента за замовчуванням. Коли агент OpenClaw + інакше використовуйте типове середовище виконання субагента. Коли агент OpenClaw налаштований з `runtime.type="acp"`, OpenClaw використовує - `runtime.acp.agent` як базовий ідентифікатор harness. + `runtime.acp.agent` як базовий id harness. -## ACP порівняно із субагентами +## ACP проти субагентів -Використовуйте ACP, коли вам потрібне зовнішнє середовище виконання harness. Використовуйте **нативний Codex +Використовуйте ACP, коли потрібне зовнішнє середовище виконання harness. Використовуйте **нативний Codex app-server** для прив'язування/керування розмовою Codex, коли plugin `codex` -увімкнено. Використовуйте **субагентів**, коли вам потрібні нативні для OpenClaw -делеговані запуски. +увімкнено. Використовуйте **субагентів**, коли потрібні делеговані запуски, +нативні для OpenClaw. -| Область | Сесія ACP | Запуск субагента | +| Область | Сесія ACP | Запуск субагента | | ------------- | ------------------------------------- | ---------------------------------- | -| Середовище виконання | Бекенд Plugin ACP (наприклад acpx) | Нативне середовище виконання субагента OpenClaw | +| Середовище виконання | Бекенд plugin ACP (наприклад acpx) | Нативне середовище виконання субагента OpenClaw | | Ключ сесії | `agent::acp:` | `agent::subagent:` | | Основні команди | `/acp ...` | `/subagents ...` | -| Інструмент запуску | `sessions_spawn` з `runtime:"acp"` | `sessions_spawn` (середовище виконання за замовчуванням) | +| Інструмент запуску | `sessions_spawn` з `runtime:"acp"` | `sessions_spawn` (типове середовище виконання) | Див. також [Субагенти](/uk/tools/subagents). @@ -238,36 +243,36 @@ app-server** для прив'язування/керування розмово Для Claude Code через ACP стек такий: -1. Площина керування сесіями ACP OpenClaw. -2. Вбудований Plugin середовища виконання `acpx`. +1. Площина керування сесіями OpenClaw ACP. +2. Офіційний runtime plugin `@openclaw/acpx`. 3. Адаптер Claude ACP. -4. Механізми середовища виконання/сесій на стороні Claude. +4. Механізми середовища виконання/сесії на боці Claude. ACP Claude — це **сесія harness** з елементами керування ACP, відновленням сесії, відстеженням фонових завдань і необов'язковим прив'язуванням розмови/гілки. -Бекенди CLI — це окремі текстові локальні резервні середовища виконання; див. +Бекенди CLI — це окремі локальні резервні середовища виконання лише для тексту — див. [Бекенди CLI](/uk/gateway/cli-backends). Для операторів практичне правило таке: -- **Потрібні `/acp spawn`, прив'язувані сесії, елементи керування середовищем виконання або тривала робота harness?** Використовуйте ACP. -- **Потрібен простий локальний текстовий резерв через сирий CLI?** Використовуйте бекенди CLI. +- **Потрібні `/acp spawn`, прив'язувані сесії, елементи керування середовищем виконання або постійна робота harness?** Використовуйте ACP. +- **Потрібен простий локальний текстовий fallback через сирий CLI?** Використовуйте бекенди CLI. ## Прив'язані сесії ### Ментальна модель -- **Поверхня чату** — місце, де люди продовжують спілкуватися (канал Discord, тема Telegram, чат iMessage). -- **Сесія ACP** — тривалий стан середовища виконання Codex/Claude/Gemini, до якого OpenClaw маршрутизує повідомлення. -- **Дочірня гілка/тема** — необов'язкова додаткова поверхня обміну повідомленнями, створена лише через `--thread ...`. -- **Робоча область середовища виконання** — місце у файловій системі (`cwd`, клон репозиторію, робоча область бекенда), де працює harness. Не залежить від поверхні чату. +- **Поверхня чату** — де люди продовжують спілкуватися (канал Discord, тема Telegram, чат iMessage). +- **Сесія ACP** — довговічний стан середовища виконання Codex/Claude/Gemini, до якого OpenClaw виконує маршрутизацію. +- **Дочірня гілка/тема** — необов'язкова додаткова поверхня повідомлень, що створюється лише через `--thread ...`. +- **Робочий простір середовища виконання** — розташування файлової системи (`cwd`, checkout репозиторію, робочий простір бекенда), де запускається harness. Не залежить від поверхні чату. ### Прив'язки поточної розмови `/acp spawn --bind here` закріплює поточну розмову за -створеною сесією ACP — без дочірньої гілки, та сама поверхня чату. OpenClaw і далі -керує транспортом, автентифікацією, безпекою та доставкою. Подальші повідомлення в цій +створеною сесією ACP — без дочірньої гілки, та сама поверхня чату. OpenClaw продовжує +керувати транспортом, автентифікацією, безпекою і доставленням. Подальші повідомлення в цій розмові маршрутизуються до тієї самої сесії; `/new` і `/reset` скидають сесію на місці; `/acp close` видаляє прив'язку. @@ -283,12 +288,12 @@ ACP Claude — це **сесія harness** з елементами керува ``` - + - `--bind here` і `--thread ...` є взаємовиключними. - - `--bind here` працює лише на каналах, які оголошують прив'язування поточної розмови; інакше OpenClaw повертає зрозуміле повідомлення про непідтримуваність. Прив'язки зберігаються після перезапусків Gateway. - - У Discord `spawnSessions` контролює створення дочірньої гілки для `--thread auto|here`, а не `--bind here`. - - Якщо ви створюєте сесію для іншого ACP-агента без `--cwd`, OpenClaw за замовчуванням успадковує робочу область **цільового агента**. Відсутні успадковані шляхи (`ENOENT`/`ENOTDIR`) відступають до значення за замовчуванням бекенда; інші помилки доступу (наприклад, `EACCES`) відображаються як помилки створення сесії. - - Команди керування Gateway залишаються локальними у прив'язаних розмовах — команди `/acp ...` обробляються OpenClaw навіть тоді, коли звичайний текст подальших повідомлень маршрутизується до прив'язаної сесії ACP; `/status` і `/unfocus` також залишаються локальними щоразу, коли обробку команд увімкнено для цієї поверхні. + - `--bind here` працює лише на каналах, які оголошують прив'язування поточної розмови; інакше OpenClaw повертає чітке повідомлення про непідтримуваність. Прив'язки зберігаються після перезапусків gateway. + - У Discord, `spawnSessions` контролює створення дочірніх гілок для `--thread auto|here` — не для `--bind here`. + - Якщо ви створюєте сесію для іншого агента ACP без `--cwd`, OpenClaw типово успадковує робочий простір **цільового агента**. Відсутні успадковані шляхи (`ENOENT`/`ENOTDIR`) повертаються до типового значення бекенда; інші помилки доступу (наприклад, `EACCES`) відображаються як помилки створення. + - Команди керування Gateway залишаються локальними у прив'язаних розмовах — команди `/acp ...` обробляються OpenClaw навіть коли звичайний текст подальших повідомлень маршрутизується до прив'язаної сесії ACP; `/status` і `/unfocus` також залишаються локальними щоразу, коли обробку команд увімкнено для цієї поверхні. @@ -296,43 +301,43 @@ ACP Claude — це **сесія harness** з елементами керува - OpenClaw прив'язує гілку до цільової сесії ACP. - Подальші повідомлення в цій гілці маршрутизуються до прив'язаної сесії ACP. - - Вивід ACP доставляється назад у ту саму гілку. - - Скасування фокусу/закриття/архівування/тайм-аут простою або завершення максимального строку дії видаляє прив'язку. - - `/acp close`, `/acp cancel`, `/acp status`, `/status` і `/unfocus` — це команди Gateway, а не підказки для ACP harness. + - Вивід ACP доставляється назад до тієї самої гілки. + - Зняття фокуса/закриття/архівування/таймаут бездіяльності або завершення максимального строку дії видаляє прив'язку. + - `/acp close`, `/acp cancel`, `/acp status`, `/status` і `/unfocus` — це команди Gateway, а не промпти до ACP harness. Обов'язкові прапорці функцій для ACP, прив'язаного до гілки: - `acp.enabled=true` - - `acp.dispatch.enabled` увімкнено за замовчуванням (установіть `false`, щоб призупинити автоматичну диспетчеризацію ACP-гілок; явні виклики `sessions_spawn({ runtime: "acp" })` усе одно працюють). - - Увімкнено створення сесій гілок адаптера каналу (за замовчуванням: `true`): + - `acp.dispatch.enabled` увімкнено за замовчуванням (установіть `false`, щоб призупинити автоматичну диспетчеризацію гілок ACP; явні виклики `sessions_spawn({ runtime: "acp" })` все одно працюють). + - Створення сесій гілок адаптера каналу увімкнено (типово: `true`): - Discord: `channels.discord.threadBindings.spawnSessions=true` - Telegram: `channels.telegram.threadBindings.spawnSessions=true` Підтримка прив'язування гілок залежить від адаптера. Якщо активний адаптер каналу - не підтримує прив'язки гілок, OpenClaw повертає зрозуміле + не підтримує прив'язки гілок, OpenClaw повертає чітке повідомлення про непідтримуваність/недоступність. - - Будь-який адаптер каналу, який надає можливість прив'язування сесій/гілок. + - Будь-який адаптер каналу, який надає можливість прив'язування сесії/гілки. - Поточна вбудована підтримка: гілки/канали **Discord**, теми **Telegram** (теми форуму в групах/супергрупах і теми DM). - - Канали Plugin можуть додати підтримку через той самий інтерфейс прив'язування. + - Канали plugin можуть додавати підтримку через той самий інтерфейс прив'язування. ## Постійні прив'язки каналів -Для неефемерних робочих процесів налаштуйте постійні прив'язки ACP у +Для нетимчасових робочих процесів налаштовуйте постійні прив'язки ACP у записах верхнього рівня `bindings[]`. -### Модель прив'язки +### Модель прив'язування Позначає постійну прив'язку розмови ACP. - Визначає цільову розмову. Форми для кожного каналу: + Ідентифікує цільову розмову. Форми для кожного каналу: - **Канал/гілка Discord:** `match.channel="discord"` + `match.peer.id=""` - **Тема форуму Telegram:** `match.channel="telegram"` + `match.peer.id=":topic:"` @@ -341,7 +346,7 @@ ACP Claude — це **сесія harness** з елементами керува - Ідентифікатор агента-власника OpenClaw. + Id агента-власника OpenClaw. Необов'язкове перевизначення ACP. @@ -356,21 +361,21 @@ ACP Claude — це **сесія harness** з елементами керува Необов'язкове перевизначення бекенда. -### Значення середовища виконання за замовчуванням для кожного агента +### Типові значення середовища виконання для кожного агента Використовуйте `agents.list[].runtime`, щоб один раз визначити типові значення ACP для кожного агента: - `agents.list[].runtime.type="acp"` -- `agents.list[].runtime.acp.agent` (ідентифікатор harness, наприклад `codex` або `claude`) +- `agents.list[].runtime.acp.agent` (id harness, наприклад `codex` або `claude`) - `agents.list[].runtime.acp.backend` - `agents.list[].runtime.acp.mode` - `agents.list[].runtime.acp.cwd` -**Пріоритет перевизначення для прив'язаних сесій ACP:** +**Пріоритет перевизначень для прив'язаних сесій ACP:** 1. `bindings[].acp.*` 2. `agents.list[].runtime.acp.*` -3. Глобальні значення ACP за замовчуванням (наприклад, `acp.backend`) +3. Глобальні типові значення ACP (наприклад, `acp.backend`) ### Приклад @@ -457,16 +462,16 @@ ACP Claude — це **сесія harness** з елементами керува - OpenClaw гарантує, що налаштована сесія ACP існує перед використанням. - Повідомлення в цьому каналі або темі маршрутизуються до налаштованої сесії ACP. - У прив'язаних розмовах `/new` і `/reset` скидають той самий ключ сесії ACP на місці. -- Тимчасові прив'язки середовища виконання (наприклад, створені потоками фокусування гілки) усе одно застосовуються там, де вони є. -- Для створень ACP між агентами без явного `cwd` OpenClaw успадковує робочу область цільового агента з конфігурації агента. -- Відсутні успадковані шляхи робочої області відступають до типового cwd бекенда; помилки доступу до наявних шляхів відображаються як помилки створення сесії. +- Тимчасові прив'язки середовища виконання (наприклад, створені потоками фокусування гілки) все одно застосовуються там, де вони є. +- Для міжагентних створень ACP без явного `cwd`, OpenClaw успадковує робочий простір цільового агента з конфігурації агента. +- Відсутні успадковані шляхи робочого простору повертаються до типового cwd бекенда; помилки доступу до наявних шляхів відображаються як помилки створення. ## Запуск сесій ACP Два способи запустити сесію ACP: - + Використовуйте `runtime: "acp"`, щоб запустити сесію ACP з ходу агента або виклику інструмента. @@ -481,15 +486,15 @@ ACP Claude — це **сесія harness** з елементами керува ``` - `runtime` за замовчуванням має значення `subagent`, тому явно задайте `runtime: "acp"` + `runtime` за замовчуванням має значення `subagent`, тому явно задавайте `runtime: "acp"` для сеансів ACP. Якщо `agentId` пропущено, OpenClaw використовує `acp.defaultAgent`, коли його налаштовано. `mode: "session"` вимагає - `thread: true`, щоб зберегти постійну прив’язану розмову. + `thread: true`, щоб зберігати сталу прив’язану розмову. - Використовуйте `/acp spawn` для явного операторського керування з чату. + Використовуйте `/acp spawn` для явного керування оператором із чату. ```text /acp spawn codex --mode persistent --thread auto @@ -506,7 +511,7 @@ ACP Claude — це **сесія harness** з елементами керува - `--cwd ` - `--label ` - Див. [Slash commands](/uk/tools/slash-commands). + Див. [команди Slash](/uk/tools/slash-commands). @@ -520,54 +525,54 @@ ACP Claude — це **сесія harness** з елементами керува Має бути `"acp"` для сеансів ACP. - Ідентифікатор цільового середовища ACP. Якщо задано, використовується резервне значення `acp.defaultAgent`. + Ідентифікатор цільового harness ACP. Повертається до `acp.defaultAgent`, якщо його задано. - Запитати потік прив’язування thread, де це підтримується. + Запитати потік прив’язування thread там, де це підтримується. - `"run"` є одноразовим; `"session"` є постійним. Якщо задано `thread: true`, а - `mode` пропущено, OpenClaw може за замовчуванням використовувати постійну поведінку відповідно до - runtime-шляху. `mode: "session"` вимагає `thread: true`. + `"run"` — одноразовий режим; `"session"` — сталий. Якщо `thread: true`, а + `mode` пропущено, OpenClaw може за замовчуванням використовувати сталу поведінку відповідно до + шляху runtime. `mode: "session"` вимагає `thread: true`. Запитаний робочий каталог runtime (перевіряється політикою backend/runtime). - Якщо пропущено, створення ACP успадковує робочу область цільового агента, - коли її налаштовано; відсутні успадковані шляхи повертаються до - стандартних значень backend, тоді як реальні помилки доступу повертаються. + Якщо пропущено, запуск ACP успадковує робочу область цільового агента, + коли її налаштовано; відсутні успадковані шляхи повертаються до стандартних значень backend, + тоді як реальні помилки доступу повертаються. - Видима оператору мітка, яку використовують у тексті сеансу/banner. + Мітка для оператора, що використовується в тексті сеансу/banner. Відновити наявний сеанс ACP замість створення нового. Агент - відтворює історію розмови через `session/load`. Вимагає + відтворює історію розмови через `session/load`. Потрібно `runtime: "acp"`. - `"parent"` транслює початкові підсумки перебігу виконання ACP назад до - сеансу-запитувача як системні події. Прийняті відповіді містять - `streamLogPath`, що вказує на обмежений сеансом JSONL-журнал - (`.acp-stream.jsonl`), який можна відстежувати для повної історії ретрансляції. + `"parent"` транслює початкові підсумки перебігу запуску ACP назад до + сеансу запитувача як системні події. Прийняті відповіді містять + `streamLogPath`, що вказує на JSONL-журнал у межах сеансу + (`.acp-stream.jsonl`), який можна відстежувати для повної історії relay. Перериває дочірній хід ACP через N секунд. `0` залишає хід на шляху Gateway без тайм-ауту. Те саме значення застосовується до запуску Gateway - і runtime ACP, щоб завислі середовища або середовища з вичерпаною квотою не - займали lane батьківського агента безкінечно. + і runtime ACP, щоб завислі або вичерпані за квотою harness не + займали lane батьківського агента безстроково. - Явне перевизначення моделі для дочірнього сеансу ACP. Створення Codex ACP - нормалізує OpenClaw Codex-посилання, як-от `openai-codex/gpt-5.4`, до стартової конфігурації Codex - ACP перед `session/new`; slash-форми, як-от + Явне перевизначення моделі для дочірнього сеансу ACP. Запуски Codex ACP + нормалізують посилання OpenClaw Codex, як-от `openai-codex/gpt-5.4`, до стартової + конфігурації Codex ACP перед `session/new`; slash-форми, як-от `openai-codex/gpt-5.4/high`, також задають reasoning effort Codex ACP. - Інші середовища мають оголошувати ACP `models` і підтримувати - `session/set_model`; інакше OpenClaw/acpx завершується з чіткою помилкою, а не - мовчки повертається до стандартного агента цілі. + Інші harness мають оголошувати ACP `models` і підтримувати + `session/set_model`; інакше OpenClaw/acpx явно завершується з помилкою замість + тихого повернення до стандартного агента цільового агента. - Явне зусилля мислення/reasoning. Для Codex ACP `minimal` відповідає - низькому зусиллю, `low`/`medium`/`high`/`xhigh` відповідають безпосередньо, а `off` + Явне зусилля thinking/reasoning. Для Codex ACP `minimal` відповідає + низькому зусиллю, `low`/`medium`/`high`/`xhigh` відображаються напряму, а `off` пропускає стартове перевизначення reasoning-effort. @@ -575,30 +580,30 @@ ACP Claude — це **сесія harness** з елементами керува - | Режим | Поведінка | + | Режим | Поведінка | | ------ | ---------------------------------------------------------------------- | - | `here` | Прив’язати поточну активну розмову на місці; завершитися помилкою, якщо активної немає. | + | `here` | Прив’язати поточну активну розмову на місці; завершитися з помилкою, якщо активної немає. | | `off` | Не створювати прив’язування поточної розмови. | Примітки: - - `--bind here` — найпростіший операторський шлях для "зробити цей канал або чат підтриманим Codex." + - `--bind here` — найпростіший шлях оператора для "зробити цей канал або чат підтримуваним Codex." - `--bind here` не створює дочірній thread. - `--bind here` доступний лише в каналах, які надають підтримку прив’язування поточної розмови. - `--bind` і `--thread` не можна поєднувати в одному виклику `/acp spawn`. - | Режим | Поведінка | + | Режим | Поведінка | | ------ | --------------------------------------------------------------------------------------------------- | - | `auto` | В активному thread: прив’язати цей thread. Поза thread: створити/прив’язати дочірній thread, якщо підтримується. | - | `here` | Вимагати поточний активний thread; завершитися помилкою, якщо ви не в ньому. | - | `off` | Без прив’язування. Сеанс запускається неприв’язаним. | + | `auto` | В активному thread: прив’язати цей thread. Поза thread: створити/прив’язати дочірній thread, коли підтримується. | + | `here` | Вимагати поточний активний thread; завершитися з помилкою, якщо його немає. | + | `off` | Без прив’язування. Сеанс запускається неприв’язаним. | Примітки: - - На поверхнях без прив’язування thread стандартна поведінка фактично є `off`. - - Створення з прив’язуванням до thread вимагає підтримки політики каналу: + - На поверхнях без прив’язування thread стандартна поведінка фактично дорівнює `off`. + - Запуск із прив’язкою до thread вимагає підтримки політики каналу: - Discord: `channels.discord.threadBindings.spawnSessions=true` - Telegram: `channels.telegram.threadBindings.spawnSessions=true` - Використовуйте `--bind here`, коли потрібно закріпити поточну розмову без створення дочірнього thread. @@ -606,10 +611,10 @@ ACP Claude — це **сесія harness** з елементами керува -## Модель доставлення +## Модель доставки Сеанси ACP можуть бути або інтерактивними робочими областями, або фоновою -роботою, що належить батьківському процесу. Шлях доставлення залежить від цієї форми. +роботою, що належить батьківському процесу. Шлях доставки залежить від цієї форми. @@ -617,56 +622,56 @@ ACP Claude — це **сесія harness** з елементами керува поверхні чату: - `/acp spawn ... --bind here` прив’язує поточну розмову до сеансу ACP. - - `/acp spawn ... --thread ...` прив’язує thread/topic каналу до сеансу ACP. - - Постійно налаштовані `bindings[].type="acp"` спрямовують відповідні розмови до того самого сеансу ACP. + - `/acp spawn ... --thread ...` прив’язує thread/тему каналу до сеансу ACP. + - Сталі налаштовані `bindings[].type="acp"` маршрутизують відповідні розмови до того самого сеансу ACP. - Подальші повідомлення у прив’язаній розмові спрямовуються безпосередньо до - сеансу ACP, а вивід ACP доставляється назад до того самого - каналу/thread/topic. + Подальші повідомлення в прив’язаній розмові маршрутизуються безпосередньо до + сеансу ACP, а вихід ACP доставляється назад у той самий + канал/thread/тему. - Що OpenClaw надсилає до середовища: + Що OpenClaw надсилає до harness: - - Звичайні прив’язані подальші повідомлення надсилаються як текст prompt, плюс вкладення лише тоді, коли середовище/backend їх підтримує. - - Команди керування `/acp` і локальні команди Gateway перехоплюються до відправлення в ACP. - - Події завершення, згенеровані runtime, матеріалізуються для кожної цілі. Агенти OpenClaw отримують внутрішній runtime-context-конверт OpenClaw; зовнішні середовища ACP отримують звичайний prompt із дочірнім результатом та інструкцією. Сирий конверт `<<>>` ніколи не має надсилатися до зовнішніх середовищ або зберігатися як текст ACP-транскрипту користувача. - - Записи ACP-транскрипту використовують видимий користувачу текст тригера або звичайний prompt завершення. Внутрішні метадані подій залишаються структурованими в OpenClaw, де це можливо, і не трактуються як створений користувачем вміст чату. + - Звичайні прив’язані подальші повідомлення надсилаються як текст prompt, плюс вкладення лише тоді, коли harness/backend їх підтримує. + - Команди керування `/acp` і локальні команди Gateway перехоплюються перед відправленням ACP. + - Події завершення, згенеровані runtime, матеріалізуються для кожної цілі. Агенти OpenClaw отримують внутрішній envelope runtime-context OpenClaw; зовнішні harness ACP отримують звичайний prompt із дочірнім результатом та інструкцією. Сирий envelope `<<>>` ніколи не має надсилатися зовнішнім harness або зберігатися як текст користувацької транскрипції ACP. + - Записи транскрипції ACP використовують видимий користувачеві текст тригера або звичайний prompt завершення. Внутрішні метадані подій залишаються структурованими в OpenClaw, де це можливо, і не розглядаються як авторський вміст чату від користувача. - Одноразові сеанси ACP, створені іншим запуском агента, є фоновими - дочірніми процесами, подібними до sub-agents: + Одноразові сеанси ACP, запущені іншим агентським запуском, є фоновими + дочірніми процесами, подібними до sub-agent: - Батьківський процес запитує роботу через `sessions_spawn({ runtime: "acp", mode: "run" })`. - - Дочірній процес виконується у власному сеансі середовища ACP. - - Дочірні ходи виконуються на тій самій фоновій lane, яку використовують нативні створення sub-agent, тому повільне середовище ACP не блокує непов’язану роботу основного сеансу. - - Завершення повідомляється назад через шлях оголошення завершення завдання. OpenClaw перетворює внутрішні метадані завершення на звичайний ACP prompt перед надсиланням їх до зовнішнього середовища, тому середовища не бачать маркерів runtime-контексту, призначених лише для OpenClaw. - - Батьківський процес переписує дочірній результат звичайним голосом асистента, коли корисна відповідь для користувача. + - Дочірній процес виконується у власному сеансі harness ACP. + - Дочірні ходи виконуються на тій самій фоновій lane, що й нативні запуски sub-agent, тому повільний harness ACP не блокує непов’язану роботу основного сеансу. + - Звіт про завершення повертається через шлях оголошення завершення завдання. OpenClaw перетворює внутрішні метадані завершення на звичайний prompt ACP перед надсиланням до зовнішнього harness, тому harness не бачать маркерів runtime context, призначених лише для OpenClaw. + - Батьківський процес переписує дочірній результат звичайним голосом assistant, коли корисна відповідь для користувача. - **Не** розглядайте цей шлях як peer-to-peer чат між батьківським - і дочірнім процесами. Дочірній процес уже має канал завершення назад до - батьківського. + **Не** розглядайте цей шлях як одноранговий чат між батьківським + і дочірнім процесом. Дочірній процес уже має канал завершення назад до + батьківського процесу. `sessions_send` може націлюватися на інший сеанс після spawn. Для звичайних - peer-сеансів OpenClaw використовує agent-to-agent (A2A) шлях подальших повідомлень - після ін’єкції повідомлення: + peer-сеансів OpenClaw використовує шлях подальшого обміну agent-to-agent (A2A) + після вставлення повідомлення: - Дочекатися відповіді цільового сеансу. - За потреби дозволити запитувачу й цілі обмінятися обмеженою кількістю подальших ходів. - - Попросити ціль створити повідомлення-оголошення. - - Доставити це оголошення до видимого каналу або thread. + - Попросити ціль створити повідомлення оголошення. + - Доставити це оголошення у видимий канал або thread. - Цей шлях A2A є резервним для peer-надсилань, де відправнику потрібне + Цей шлях A2A є fallback для peer-надсилань, коли відправнику потрібне видиме подальше повідомлення. Він залишається ввімкненим, коли непов’язаний сеанс може - бачити ціль ACP і надсилати їй повідомлення, наприклад за широких + бачити й надсилати повідомлення цілі ACP, наприклад за широких налаштувань `tools.sessions.visibility`. - OpenClaw пропускає подальше повідомлення A2A лише тоді, коли запитувач є + OpenClaw пропускає подальший обмін A2A лише тоді, коли запитувач є батьківським процесом власного одноразового дочірнього ACP, що належить батьківському процесу. У такому разі запуск A2A поверх завершення завдання може розбудити батьківський процес із - результатом дочірнього, переслати відповідь батьківського процесу назад у дочірній і - створити луну між батьківським і дочірнім процесами. Результат `sessions_send` повідомляє + результатом дочірнього процесу, переслати відповідь батьківського процесу назад у дочірній процес і + створити echo loop між батьківським і дочірнім процесом. Результат `sessions_send` повідомляє `delivery.status="skipped"` для цього випадку власного дочірнього процесу, оскільки шлях завершення вже відповідає за результат. @@ -685,74 +690,74 @@ ACP Claude — це **сесія harness** з елементами керува } ``` - Типові випадки використання: + Поширені випадки використання: - - Передати сеанс Codex з ноутбука на телефон — скажіть агенту продовжити з місця, де ви зупинилися. - - Продовжити сесію кодування, яку ви почали інтерактивно в CLI, тепер безголово через свого агента. - - Продовжити роботу, яку перервав перезапуск gateway або тайм-аут простою. + - Передайте сеанс Codex із ноутбука на телефон — скажіть своєму агенту продовжити з місця, де ви зупинилися. + - Продовжте сеанс програмування, який ви інтерактивно почали в CLI, тепер безголово через свого агента. + - Продовжте роботу, яку перервали перезапуск gateway або idle timeout. Примітки: - `resumeSessionId` застосовується лише коли `runtime: "acp"`; стандартний runtime sub-agent ігнорує це поле, призначене лише для ACP. - `streamTo` застосовується лише коли `runtime: "acp"`; стандартний runtime sub-agent ігнорує це поле, призначене лише для ACP. - - `resumeSessionId` — це локальний для host ідентифікатор відновлення ACP/середовища, а не ключ сеансу каналу OpenClaw; OpenClaw усе ще перевіряє політику створення ACP і політику цільового агента перед відправленням, тоді як ACP backend або середовище відповідає за авторизацію завантаження цього upstream-ідентифікатора. - - `resumeSessionId` відновлює upstream-історію розмови ACP; `thread` і `mode` все одно застосовуються як зазвичай до нового сеансу OpenClaw, який ви створюєте, тому `mode: "session"` все одно вимагає `thread: true`. + - `resumeSessionId` — це локальний для хоста ідентифікатор відновлення ACP/harness, а не ключ сеансу каналу OpenClaw; OpenClaw усе ще перевіряє політику запуску ACP і політику цільового агента перед відправленням, тоді як backend ACP або harness відповідає за авторизацію завантаження цього upstream id. + - `resumeSessionId` відновлює історію розмови upstream ACP; `thread` і `mode` усе ще нормально застосовуються до нового сеансу OpenClaw, який ви створюєте, тому `mode: "session"` усе ще вимагає `thread: true`. - Цільовий агент має підтримувати `session/load` (Codex і Claude Code підтримують). - - Якщо ідентифікатор сеансу не знайдено, spawn завершується з чіткою помилкою — без мовчазного fallback до нового сеансу. + - Якщо id сеансу не знайдено, spawn завершується з чіткою помилкою — без тихого fallback до нового сеансу. - Після розгортання gateway виконайте live наскрізну перевірку, а не - покладайтеся на модульні тести: + Після розгортання gateway виконайте живу наскрізну перевірку замість того, + щоб довіряти unit tests: - 1. Перевірте розгорнуту версію gateway і commit на цільовому host. - 2. Відкрийте тимчасовий сеанс мосту ACPX до live агента. + 1. Перевірте версію та commit розгорнутого gateway на цільовому хості. + 2. Відкрийте тимчасовий сеанс bridge ACPX до живого агента. 3. Попросіть цього агента викликати `sessions_spawn` з `runtime: "acp"`, `agentId: "codex"`, `mode: "run"` і завданням `Reply with exactly LIVE-ACP-SPAWN-OK`. - 4. Перевірте `accepted=yes`, реальний `childSessionKey` і відсутність помилки валідатора. - 5. Очистіть тимчасовий сеанс мосту. + 4. Перевірте `accepted=yes`, справжній `childSessionKey` і відсутність помилки validator. + 5. Очистьте тимчасовий сеанс bridge. Тримайте gate на `mode: "run"` і пропустіть `streamTo: "parent"` — - прив’язаний до thread `mode: "session"` і шляхи stream-relay є окремими - багатшими інтеграційними проходами. + `mode: "session"` із прив’язкою до thread і шляхи stream-relay є окремими + ширшими інтеграційними проходами. ## Сумісність із sandbox -Сеанси ACP наразі виконуються в runtime host, **не** всередині +Сеанси ACP наразі виконуються в runtime хоста, **а не** всередині sandbox OpenClaw. **Межа безпеки:** -- Зовнішня обв’язка може читати/писати відповідно до власних дозволів CLI і вибраного `cwd`. -- Політика пісочниці OpenClaw **не** обгортає виконання ACP-обв’язки. -- OpenClaw і далі застосовує функціональні обмеження ACP, дозволених агентів, володіння сесією, прив’язки каналів і політику доставки Gateway. -- Використовуйте `runtime: "subagent"` для нативної роботи OpenClaw із примусовою пісочницею. +- Зовнішня обв'язка може читати/записувати відповідно до власних дозволів CLI і вибраного `cwd`. +- Політика пісочниці OpenClaw **не** обгортає виконання обв'язки ACP. +- OpenClaw і далі застосовує функціональні обмеження ACP, дозволених агентів, власність сеансу, прив'язки каналів і політику доставки Gateway. +- Використовуйте `runtime: "subagent"` для нативної роботи OpenClaw із примусовим застосуванням пісочниці. Поточні обмеження: -- Якщо сесія запитувача працює в пісочниці, запуск ACP заблоковано як для `sessions_spawn({ runtime: "acp" })`, так і для `/acp spawn`. +- Якщо сеанс запитувача працює в пісочниці, породження ACP блокуються як для `sessions_spawn({ runtime: "acp" })`, так і для `/acp spawn`. - `sessions_spawn` з `runtime: "acp"` не підтримує `sandbox: "require"`. -## Визначення цільової сесії +## Визначення цільового сеансу -Більшість дій `/acp` приймають необов’язкову цільову сесію (`session-key`, +Більшість дій `/acp` приймають необов'язкову ціль сеансу (`session-key`, `session-id` або `session-label`). **Порядок визначення:** -1. Явний цільовий аргумент (або `--session` для `/acp steer`) - - спочатку пробує ключ - - потім UUID-подібний ідентифікатор сесії +1. Явний аргумент цілі (або `--session` для `/acp steer`) + - пробує ключ + - потім ідентифікатор сеансу у форматі UUID - потім мітку -2. Поточна прив’язка потоку (якщо ця розмова/потік прив’язана до ACP-сесії). -3. Резервний варіант поточної сесії запитувача. +2. Прив'язка поточного потоку (якщо цю розмову/потік прив'язано до сеансу ACP). +3. Резервний варіант поточного сеансу запитувача. -Прив’язки поточної розмови й прив’язки потоку обидві беруть участь у +Прив'язки поточної розмови й прив'язки потоків обидві беруть участь у кроці 2. Якщо ціль не визначено, OpenClaw повертає зрозумілу помилку @@ -760,86 +765,86 @@ sandbox OpenClaw. ## Елементи керування ACP -| Команда | Що робить | Приклад | -| -------------------- | -------------------------------------------------------- | ------------------------------------------------------------ | -| `/acp spawn` | Створює ACP-сесію; необов’язкова поточна прив’язка або прив’язка потоку. | `/acp spawn codex --bind here --cwd /repo` | -| `/acp cancel` | Скасовує поточний хід для цільової сесії. | `/acp cancel agent:codex:acp:` | -| `/acp steer` | Надсилає керівну інструкцію до запущеної сесії. | `/acp steer --session support inbox prioritize failing tests` | -| `/acp close` | Закриває сесію та відв’язує цільові потоки. | `/acp close` | -| `/acp status` | Показує бекенд, режим, стан, параметри runtime, можливості. | `/acp status` | -| `/acp set-mode` | Задає режим runtime для цільової сесії. | `/acp set-mode plan` | -| `/acp set` | Записує загальний параметр конфігурації runtime. | `/acp set model openai/gpt-5.4` | -| `/acp cwd` | Задає перевизначення робочого каталогу runtime. | `/acp cwd /Users/user/Projects/repo` | -| `/acp permissions` | Задає профіль політики схвалення. | `/acp permissions strict` | -| `/acp timeout` | Задає таймаут runtime (секунди). | `/acp timeout 120` | -| `/acp model` | Задає перевизначення моделі runtime. | `/acp model anthropic/claude-opus-4-6` | -| `/acp reset-options` | Видаляє перевизначення параметрів runtime для сесії. | `/acp reset-options` | -| `/acp sessions` | Показує список останніх ACP-сесій зі сховища. | `/acp sessions` | -| `/acp doctor` | Стан бекенда, можливості, практичні виправлення. | `/acp doctor` | -| `/acp install` | Друкує детерміновані кроки встановлення та ввімкнення. | `/acp install` | +| Команда | Що вона робить | Приклад | +| -------------------- | -------------------------------------------------------- | ------------------------------------------------------------- | +| `/acp spawn` | Створює сеанс ACP; необов'язкова поточна прив'язка або прив'язка потоку. | `/acp spawn codex --bind here --cwd /repo` | +| `/acp cancel` | Скасовує поточний хід для цільового сеансу. | `/acp cancel agent:codex:acp:` | +| `/acp steer` | Надсилає керівну інструкцію до запущеного сеансу. | `/acp steer --session support inbox prioritize failing tests` | +| `/acp close` | Закриває сеанс і відв'язує цілі потоку. | `/acp close` | +| `/acp status` | Показує бекенд, режим, стан, параметри виконання, можливості. | `/acp status` | +| `/acp set-mode` | Установлює режим виконання для цільового сеансу. | `/acp set-mode plan` | +| `/acp set` | Записує загальний параметр конфігурації виконання. | `/acp set model openai/gpt-5.4` | +| `/acp cwd` | Установлює перевизначення робочого каталогу виконання. | `/acp cwd /Users/user/Projects/repo` | +| `/acp permissions` | Установлює профіль політики схвалення. | `/acp permissions strict` | +| `/acp timeout` | Установлює час очікування виконання (у секундах). | `/acp timeout 120` | +| `/acp model` | Установлює перевизначення моделі виконання. | `/acp model anthropic/claude-opus-4-6` | +| `/acp reset-options` | Видаляє перевизначення параметрів виконання сеансу. | `/acp reset-options` | +| `/acp sessions` | Перелічує нещодавні сеанси ACP зі сховища. | `/acp sessions` | +| `/acp doctor` | Здоров'я бекенду, можливості, дієві виправлення. | `/acp doctor` | +| `/acp install` | Друкує детерміновані кроки встановлення й увімкнення. | `/acp install` | -`/acp status` показує ефективні параметри runtime, а також ідентифікатори сесії -на рівні runtime і бекенда. Помилки непідтримуваних елементів керування -відображаються зрозуміло, коли бекенд не має можливості. `/acp sessions` читає -сховище для поточної прив’язаної сесії або сесії запитувача; цільові токени +`/acp status` показує ефективні параметри виконання, а також ідентифікатори сеансу рівня виконання та +рівня бекенду. Помилки непідтримуваних елементів керування відображаються +зрозуміло, коли бекенд не має відповідної можливості. `/acp sessions` читає +сховище для поточного прив'язаного сеансу або сеансу запитувача; цільові токени (`session-key`, `session-id` або `session-label`) визначаються через -виявлення сесій gateway, включно з користувацькими коренями `session.store` +виявлення сеансів gateway, включно з користувацькими коренями `session.store` для окремих агентів. -### Зіставлення параметрів runtime +### Зіставлення параметрів виконання -`/acp` має зручні команди й загальний setter. Еквівалентні +`/acp` має зручні команди й загальний сеттер. Еквівалентні операції: -| Команда | Зіставляється з | Примітки | -| ---------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `/acp model ` | ключ конфігурації runtime `model` | Для Codex ACP OpenClaw нормалізує `openai-codex/` до ідентифікатора моделі адаптера та зіставляє суфікси міркування зі slash, як-от `openai-codex/gpt-5.4/high`, з `reasoning_effort`. | -| `/acp set thinking ` | ключ конфігурації runtime `thinking` | Для Codex ACP OpenClaw надсилає відповідний `reasoning_effort`, якщо адаптер його підтримує. | -| `/acp permissions ` | ключ конфігурації runtime `approval_policy` | — | -| `/acp timeout ` | ключ конфігурації runtime `timeout` | — | -| `/acp cwd ` | перевизначення cwd runtime | Пряме оновлення. | -| `/acp set ` | загальне | `key=cwd` використовує шлях перевизначення cwd. | -| `/acp reset-options` | очищає всі перевизначення runtime | — | +| Команда | Зіставляється з | Примітки | +| ---------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `/acp model ` | ключ конфігурації виконання `model` | Для Codex ACP OpenClaw нормалізує `openai-codex/` до ідентифікатора моделі адаптера та зіставляє суфікси міркування зі скісною рискою, як-от `openai-codex/gpt-5.4/high`, із `reasoning_effort`. | +| `/acp set thinking ` | ключ конфігурації виконання `thinking` | Для Codex ACP OpenClaw надсилає відповідний `reasoning_effort`, якщо адаптер його підтримує. | +| `/acp permissions ` | ключ конфігурації виконання `approval_policy` | — | +| `/acp timeout ` | ключ конфігурації виконання `timeout` | — | +| `/acp cwd ` | перевизначення cwd виконання | Пряме оновлення. | +| `/acp set ` | загальне | `key=cwd` використовує шлях перевизначення cwd. | +| `/acp reset-options` | очищає всі перевизначення виконання | — | -## acpx-обв’язка, налаштування Plugin і дозволи +## Обв'язка acpx, налаштування Plugin і дозволи -Щодо конфігурації acpx-обв’язки (псевдоніми Claude Code / Codex / Gemini CLI), -MCP-мостів plugin-tools і OpenClaw-tools, а також режимів дозволів ACP, див. -[ACP-агенти — налаштування](/uk/tools/acp-agents-setup). +Про конфігурацію обв'язки acpx (псевдоніми Claude Code / Codex / Gemini CLI), +MCP-мости plugin-tools і OpenClaw-tools, а також режими дозволів ACP див. +[Агенти ACP — налаштування](/uk/tools/acp-agents-setup). ## Усунення несправностей -| Симптом | Імовірна причина | Виправлення | +| Симптом | Ймовірна причина | Виправлення | | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `ACP runtime backend is not configured` | Бекенд-Plugin відсутній, вимкнений або заблокований `plugins.allow`. | Установіть і ввімкніть бекенд-Plugin, додайте `acpx` до `plugins.allow`, коли цей список дозволів задано, а потім запустіть `/acp doctor`. | -| `ACP is disabled by policy (acp.enabled=false)` | ACP глобально вимкнено. | Задайте `acp.enabled=true`. | -| `ACP dispatch is disabled by policy (acp.dispatch.enabled=false)` | Автоматичну диспетчеризацію зі звичайних повідомлень гілки вимкнено. | Задайте `acp.dispatch.enabled=true`, щоб відновити автоматичну маршрутизацію гілок; явні виклики `sessions_spawn({ runtime: "acp" })` досі працюють. | -| `ACP agent "" is not allowed by policy` | Агента немає у списку дозволених. | Використайте дозволений `agentId` або оновіть `acp.allowedAgents`. | -| `/acp doctor` reports backend not ready right after startup | Бекенд-Plugin відсутній, вимкнений, заблокований політикою дозволу/заборони або його налаштований виконуваний файл недоступний. | Установіть/увімкніть бекенд-Plugin, повторно запустіть `/acp doctor` і перевірте помилку встановлення бекенда або політики, якщо він залишається несправним. | -| Команду середовища тестування не знайдено | Adapter CLI не встановлено, зовнішній Plugin відсутній або перше завантаження `npx` не вдалося для адаптера не Codex. | Запустіть `/acp doctor`, установіть/попередньо прогрійте адаптер на хості Gateway або явно налаштуйте команду агента acpx. | -| Модель не знайдено в середовищі тестування | Ідентифікатор моделі дійсний для іншого провайдера/середовища тестування, але не для цієї цілі ACP. | Використайте модель зі списку цього середовища тестування, налаштуйте модель у середовищі тестування або опустіть перевизначення. | -| Помилка автентифікації постачальника із середовища тестування | OpenClaw справний, але цільовий CLI/провайдер не авторизований. | Увійдіть або надайте потрібний ключ провайдера в середовищі хоста Gateway. | -| `Unable to resolve session target: ...` | Неправильний ключ/ідентифікатор/токен мітки. | Запустіть `/acp sessions`, скопіюйте точний ключ/мітку й повторіть спробу. | -| `--bind here requires running /acp spawn inside an active ... conversation` | `--bind here` використано без активної розмови, яку можна прив’язати. | Перейдіть до цільового чату/каналу й повторіть спробу або запустіть створення без прив’язки. | -| `Conversation bindings are unavailable for .` | Адаптер не має можливості ACP-прив’язки до поточної розмови. | Використайте `/acp spawn ... --thread ...`, де це підтримується, налаштуйте верхньорівневі `bindings[]` або перейдіть до підтримуваного каналу. | -| `--thread here requires running /acp spawn inside an active ... thread` | `--thread here` використано поза контекстом гілки. | Перейдіть до цільової гілки або використайте `--thread auto`/`off`. | -| `Only can rebind this channel/conversation/thread.` | Інший користувач володіє активною ціллю прив’язки. | Переприв’яжіть як власник або використайте іншу розмову чи гілку. | -| `Thread bindings are unavailable for .` | Адаптер не має можливості прив’язки гілок. | Використайте `--thread off` або перейдіть до підтримуваного адаптера/каналу. | -| `Sandboxed sessions cannot spawn ACP sessions ...` | Runtime ACP працює на стороні хоста; сеанс-запитувач ізольовано в пісочниці. | Використайте `runtime="subagent"` з ізольованих сеансів або запустіть ACP spawn із неізольованого сеансу. | -| `sessions_spawn sandbox="require" is unsupported for runtime="acp" ...` | Для runtime ACP запитано `sandbox="require"`. | Використайте `runtime="subagent"` для обов’язкової пісочниці або використайте ACP із `sandbox="inherit"` з неізольованого сеансу. | -| `Cannot apply --model ... did not advertise model support` | Цільове середовище тестування не надає загального перемикання моделей ACP. | Використайте середовище тестування, яке оголошує ACP `models`/`session/set_model`, використайте посилання на моделі Codex ACP або налаштуйте модель безпосередньо в середовищі тестування, якщо воно має власний прапорець запуску. | -| Відсутні метадані ACP для прив’язаного сеансу | Застарілі/видалені метадані сеансу ACP. | Створіть заново через `/acp spawn`, а потім переприв’яжіть/сфокусуйте гілку. | -| `AcpRuntimeError: Permission prompt unavailable in non-interactive mode` | `permissionMode` блокує записи/виконання в неінтерактивному сеансі ACP. | Задайте `plugins.entries.acpx.config.permissionMode` як `approve-all` і перезапустіть gateway. Див. [Налаштування дозволів](/uk/tools/acp-agents-setup#permission-configuration). | -| Сеанс ACP завершується з помилкою на початку з мінімальним виводом | Запити дозволів заблоковано `permissionMode`/`nonInteractivePermissions`. | Перевірте журнали gateway на `AcpRuntimeError`. Для повних дозволів задайте `permissionMode=approve-all`; для коректної деградації задайте `nonInteractivePermissions=deny`. | -| Сеанс ACP зависає на невизначений час після завершення роботи | Процес середовища тестування завершився, але сеанс ACP не повідомив про завершення. | Відстежуйте через `ps aux \| grep acpx`; застарілі процеси завершуйте вручну. | -| Середовище тестування бачить `<<>>` | Внутрішній конверт події просочився через межу ACP. | Оновіть OpenClaw і повторно запустіть потік завершення; зовнішні середовища тестування мають отримувати лише звичайні запити завершення. | +| `ACP runtime backend is not configured` | Backend Plugin відсутній, вимкнений або заблокований `plugins.allow`. | Установіть і ввімкніть backend Plugin, додайте `acpx` до `plugins.allow`, коли цей список дозволів задано, а потім запустіть `/acp doctor`. | +| `ACP is disabled by policy (acp.enabled=false)` | ACP вимкнено глобально. | Установіть `acp.enabled=true`. | +| `ACP dispatch is disabled by policy (acp.dispatch.enabled=false)` | Автоматичну диспетчеризацію зі звичайних повідомлень потоку вимкнено. | Установіть `acp.dispatch.enabled=true`, щоб відновити автоматичну маршрутизацію потоків; явні виклики `sessions_spawn({ runtime: "acp" })` і далі працюють. | +| `ACP agent "" is not allowed by policy` | Агента немає у списку дозволів. | Використайте дозволений `agentId` або оновіть `acp.allowedAgents`. | +| `/acp doctor` reports backend not ready right after startup | Backend Plugin відсутній, вимкнений, заблокований політикою дозволів/заборон або його налаштований виконуваний файл недоступний. | Установіть/увімкніть backend Plugin, повторно запустіть `/acp doctor` і перевірте помилку встановлення backend або політики, якщо він лишається несправним. | +| Harness command not found | Adapter CLI не встановлено, зовнішній Plugin відсутній або початкове завантаження `npx` не вдалося для адаптера, відмінного від Codex. | Запустіть `/acp doctor`, установіть/попередньо прогрійте адаптер на хості Gateway або явно налаштуйте команду агента acpx. | +| Model-not-found from the harness | ID моделі чинний для іншого провайдера/harness, але не для цієї цілі ACP. | Використайте модель, перелічену цим harness, налаштуйте модель у harness або опустіть перевизначення. | +| Vendor auth error from the harness | OpenClaw справний, але в цільовий CLI/провайдер не виконано вхід. | Увійдіть або надайте потрібний ключ провайдера в середовищі хоста Gateway. | +| `Unable to resolve session target: ...` | Неправильний ключ/ID/токен мітки. | Запустіть `/acp sessions`, скопіюйте точний ключ/мітку й повторіть спробу. | +| `--bind here requires running /acp spawn inside an active ... conversation` | `--bind here` використано без активної прив’язуваної розмови. | Перейдіть до цільового чату/каналу й повторіть спробу або використайте spawn без прив’язки. | +| `Conversation bindings are unavailable for .` | Адаптер не має можливості ACP-прив’язки поточної розмови. | Використайте `/acp spawn ... --thread ...`, де це підтримується, налаштуйте `bindings[]` верхнього рівня або перейдіть до підтримуваного каналу. | +| `--thread here requires running /acp spawn inside an active ... thread` | `--thread here` використано поза контекстом потоку. | Перейдіть до цільового потоку або використайте `--thread auto`/`off`. | +| `Only can rebind this channel/conversation/thread.` | Інший користувач володіє активною ціллю прив’язки. | Переприв’яжіть як власник або використайте іншу розмову чи потік. | +| `Thread bindings are unavailable for .` | Адаптер не має можливості прив’язки потоків. | Використайте `--thread off` або перейдіть до підтримуваного адаптера/каналу. | +| `Sandboxed sessions cannot spawn ACP sessions ...` | Середовище виконання ACP працює на боці хоста; сеанс-запитувач ізольований. | Використайте `runtime="subagent"` з ізольованих сеансів або запустіть ACP spawn із неізольованого сеансу. | +| `sessions_spawn sandbox="require" is unsupported for runtime="acp" ...` | Для середовища виконання ACP запитано `sandbox="require"`. | Використайте `runtime="subagent"` для обов’язкової ізоляції або ACP із `sandbox="inherit"` з неізольованого сеансу. | +| `Cannot apply --model ... did not advertise model support` | Цільовий harness не надає загального перемикання моделей ACP. | Використайте harness, який оголошує ACP `models`/`session/set_model`, використайте посилання на моделі Codex ACP або налаштуйте модель безпосередньо в harness, якщо він має власний прапорець запуску. | +| Missing ACP metadata for bound session | Застарілі/видалені метадані сеансу ACP. | Створіть заново за допомогою `/acp spawn`, а потім переприв’яжіть/сфокусуйте потік. | +| `AcpRuntimeError: Permission prompt unavailable in non-interactive mode` | `permissionMode` блокує записи/виконання в неінтерактивному сеансі ACP. | Установіть `plugins.entries.acpx.config.permissionMode` у `approve-all` і перезапустіть gateway. Див. [Налаштування дозволів](/uk/tools/acp-agents-setup#permission-configuration). | +| ACP session fails early with little output | Запити дозволів заблоковано через `permissionMode`/`nonInteractivePermissions`. | Перевірте журнали gateway на `AcpRuntimeError`. Для повних дозволів установіть `permissionMode=approve-all`; для коректної деградації встановіть `nonInteractivePermissions=deny`. | +| ACP session stalls indefinitely after completing work | Процес harness завершився, але сеанс ACP не повідомив про завершення. | Відстежуйте за допомогою `ps aux \| grep acpx`; вручну завершіть застарілі процеси. | +| Harness sees `<<>>` | Внутрішній конверт подій просочився через межу ACP. | Оновіть OpenClaw і повторно запустіть потік завершення; зовнішні harness мають отримувати лише звичайні промпти завершення. | ## Пов’язане -- [ACP-агенти — налаштування](/uk/tools/acp-agents-setup) +- [Агенти ACP — налаштування](/uk/tools/acp-agents-setup) - [Надсилання агенту](/uk/tools/agent-send) - [Бекенди CLI](/uk/gateway/cli-backends) -- [Середовище тестування Codex](/uk/plugins/codex-harness) -- [Інструменти пісочниці для кількох агентів](/uk/tools/multi-agent-sandbox-tools) +- [Harness Codex](/uk/plugins/codex-harness) +- [Інструменти ізоляції для кількох агентів](/uk/tools/multi-agent-sandbox-tools) - [`openclaw acp` (режим мосту)](/uk/cli/acp) - [Субагенти](/uk/tools/subagents)